1299425Smm/*- 2299425Smm* Copyright (c) 2003-2007 Tim Kientzle 3299425Smm* Copyright (c) 2011 Andres Mejia 4299425Smm* All rights reserved. 5299425Smm* 6299425Smm* Redistribution and use in source and binary forms, with or without 7299425Smm* modification, are permitted provided that the following conditions 8299425Smm* are met: 9299425Smm* 1. Redistributions of source code must retain the above copyright 10299425Smm* notice, this list of conditions and the following disclaimer. 11299425Smm* 2. Redistributions in binary form must reproduce the above copyright 12299425Smm* notice, this list of conditions and the following disclaimer in the 13299425Smm* documentation and/or other materials provided with the distribution. 14299425Smm* 15299425Smm* THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR 16299425Smm* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 17299425Smm* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 18299425Smm* IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, 19299425Smm* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 20299425Smm* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 21299425Smm* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 22299425Smm* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23299425Smm* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 24299425Smm* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25299425Smm*/ 26299425Smm 27358090Smm#ifndef ARCHIVE_DIGEST_PRIVATE_H_INCLUDED 28358090Smm#define ARCHIVE_DIGEST_PRIVATE_H_INCLUDED 29358090Smm 30299425Smm#ifndef __LIBARCHIVE_BUILD 31299425Smm#error This header is only to be used internally to libarchive. 32299425Smm#endif 33368708Smm#ifndef __LIBARCHIVE_CONFIG_H_INCLUDED 34368708Smm#error "Should have include config.h first!" 35368708Smm#endif 36368708Smm 37299425Smm/* 38299425Smm * Crypto support in various Operating Systems: 39299425Smm * 40299425Smm * NetBSD: 41299425Smm * - MD5 and SHA1 in libc: without _ after algorithm name 42299425Smm * - SHA2 in libc: with _ after algorithm name 43299425Smm * 44299425Smm * OpenBSD: 45299425Smm * - MD5, SHA1 and SHA2 in libc: without _ after algorithm name 46299425Smm * - OpenBSD 4.4 and earlier have SHA2 in libc with _ after algorithm name 47299425Smm * 48299425Smm * DragonFly and FreeBSD: 49299425Smm * - MD5 libmd: without _ after algorithm name 50299425Smm * - SHA1, SHA256 and SHA512 in libmd: with _ after algorithm name 51299425Smm * 52299425Smm * Mac OS X (10.4 and later): 53299425Smm * - MD5, SHA1 and SHA2 in libSystem: with CC_ prefix and _ after algorithm name 54299425Smm * 55299425Smm * OpenSSL: 56299425Smm * - MD5, SHA1 and SHA2 in libcrypto: with _ after algorithm name 57299425Smm * 58299425Smm * Windows: 59299425Smm * - MD5, SHA1 and SHA2 in archive_crypto.c using Windows crypto API 60299425Smm */ 61299425Smm 62299425Smm/* libc crypto headers */ 63299425Smm#if defined(ARCHIVE_CRYPTO_MD5_LIBC) 64299425Smm#include <md5.h> 65299425Smm#endif 66299425Smm#if defined(ARCHIVE_CRYPTO_RMD160_LIBC) 67299425Smm#include <rmd160.h> 68299425Smm#endif 69299425Smm#if defined(ARCHIVE_CRYPTO_SHA1_LIBC) 70299425Smm#include <sha1.h> 71299425Smm#endif 72299425Smm#if defined(ARCHIVE_CRYPTO_SHA256_LIBC) ||\ 73299425Smm defined(ARCHIVE_CRYPTO_SHA256_LIBC2) ||\ 74299425Smm defined(ARCHIVE_CRYPTO_SHA256_LIBC3) ||\ 75299425Smm defined(ARCHIVE_CRYPTO_SHA384_LIBC) ||\ 76299425Smm defined(ARCHIVE_CRYPTO_SHA384_LIBC2) ||\ 77299425Smm defined(ARCHIVE_CRYPTO_SHA384_LIBC3) ||\ 78299425Smm defined(ARCHIVE_CRYPTO_SHA512_LIBC) ||\ 79299425Smm defined(ARCHIVE_CRYPTO_SHA512_LIBC2) ||\ 80299425Smm defined(ARCHIVE_CRYPTO_SHA512_LIBC3) 81299425Smm#include <sha2.h> 82299425Smm#endif 83299425Smm 84299425Smm/* libmd crypto headers */ 85299425Smm#if defined(ARCHIVE_CRYPTO_MD5_LIBMD) ||\ 86299425Smm defined(ARCHIVE_CRYPTO_RMD160_LIBMD) ||\ 87299425Smm defined(ARCHIVE_CRYPTO_SHA1_LIBMD) ||\ 88299425Smm defined(ARCHIVE_CRYPTO_SHA256_LIBMD) ||\ 89299425Smm defined(ARCHIVE_CRYPTO_SHA512_LIBMD) 90299425Smm#define ARCHIVE_CRYPTO_LIBMD 1 91299425Smm#endif 92299425Smm 93299425Smm#if defined(ARCHIVE_CRYPTO_MD5_LIBMD) 94299425Smm#include <md5.h> 95299425Smm#endif 96299425Smm#if defined(ARCHIVE_CRYPTO_RMD160_LIBMD) 97299425Smm#include <ripemd.h> 98299425Smm#endif 99299425Smm#if defined(ARCHIVE_CRYPTO_SHA1_LIBMD) 100299425Smm#include <sha.h> 101299425Smm#endif 102299425Smm#if defined(ARCHIVE_CRYPTO_SHA256_LIBMD) 103299425Smm#include <sha256.h> 104299425Smm#endif 105299425Smm#if defined(ARCHIVE_CRYPTO_SHA512_LIBMD) 106299425Smm#include <sha512.h> 107299425Smm#endif 108299425Smm 109299425Smm/* libSystem crypto headers */ 110299425Smm#if defined(ARCHIVE_CRYPTO_MD5_LIBSYSTEM) ||\ 111299425Smm defined(ARCHIVE_CRYPTO_SHA1_LIBSYSTEM) ||\ 112299425Smm defined(ARCHIVE_CRYPTO_SHA256_LIBSYSTEM) ||\ 113299425Smm defined(ARCHIVE_CRYPTO_SHA384_LIBSYSTEM) ||\ 114299425Smm defined(ARCHIVE_CRYPTO_SHA512_LIBSYSTEM) 115299425Smm#include <CommonCrypto/CommonDigest.h> 116299425Smm#endif 117299425Smm 118358090Smm/* mbed TLS crypto headers */ 119358090Smm#if defined(ARCHIVE_CRYPTO_MD5_MBEDTLS) 120358090Smm#include <mbedtls/md5.h> 121358090Smm#endif 122358090Smm#if defined(ARCHIVE_CRYPTO_RMD160_MBEDTLS) 123358090Smm#include <mbedtls/ripemd160.h> 124358090Smm#endif 125358090Smm#if defined(ARCHIVE_CRYPTO_SHA1_MBEDTLS) 126358090Smm#include <mbedtls/sha1.h> 127358090Smm#endif 128358090Smm#if defined(ARCHIVE_CRYPTO_SHA256_MBEDTLS) 129358090Smm#include <mbedtls/sha256.h> 130358090Smm#endif 131358090Smm#if defined(ARCHIVE_CRYPTO_SHA384_MBEDTLS) ||\ 132358090Smm defined(ARCHIVE_CRYPTO_SHA512_MBEDTLS) 133358090Smm#include <mbedtls/sha512.h> 134358090Smm#endif 135358090Smm 136299425Smm/* Nettle crypto headers */ 137299425Smm#if defined(ARCHIVE_CRYPTO_MD5_NETTLE) 138299425Smm#include <nettle/md5.h> 139299425Smm#endif 140299425Smm#if defined(ARCHIVE_CRYPTO_RMD160_NETTLE) 141299425Smm#include <nettle/ripemd160.h> 142299425Smm#endif 143299425Smm#if defined(ARCHIVE_CRYPTO_SHA1_NETTLE) ||\ 144299425Smm defined(ARCHIVE_CRYPTO_SHA256_NETTLE) ||\ 145299425Smm defined(ARCHIVE_CRYPTO_SHA384_NETTLE) ||\ 146299425Smm defined(ARCHIVE_CRYPTO_SHA512_NETTLE) 147299425Smm#include <nettle/sha.h> 148299425Smm#endif 149299425Smm 150299425Smm/* OpenSSL crypto headers */ 151299425Smm#if defined(ARCHIVE_CRYPTO_MD5_OPENSSL) ||\ 152299425Smm defined(ARCHIVE_CRYPTO_RMD160_OPENSSL) ||\ 153299425Smm defined(ARCHIVE_CRYPTO_SHA1_OPENSSL) ||\ 154299425Smm defined(ARCHIVE_CRYPTO_SHA256_OPENSSL) ||\ 155299425Smm defined(ARCHIVE_CRYPTO_SHA384_OPENSSL) ||\ 156299425Smm defined(ARCHIVE_CRYPTO_SHA512_OPENSSL) 157299425Smm#define ARCHIVE_CRYPTO_OPENSSL 1 158311042Smm#include "archive_openssl_evp_private.h" 159299425Smm#endif 160299425Smm 161299425Smm/* Windows crypto headers */ 162299425Smm#if defined(ARCHIVE_CRYPTO_MD5_WIN) ||\ 163299425Smm defined(ARCHIVE_CRYPTO_SHA1_WIN) ||\ 164299425Smm defined(ARCHIVE_CRYPTO_SHA256_WIN) ||\ 165299425Smm defined(ARCHIVE_CRYPTO_SHA384_WIN) ||\ 166299425Smm defined(ARCHIVE_CRYPTO_SHA512_WIN) 167315433Smm#include <windows.h> 168299425Smm#include <wincrypt.h> 169299425Smmtypedef struct { 170299425Smm int valid; 171299425Smm HCRYPTPROV cryptProv; 172299425Smm HCRYPTHASH hash; 173299425Smm} Digest_CTX; 174299425Smm#endif 175299425Smm 176299425Smm/* typedefs */ 177299425Smm#if defined(ARCHIVE_CRYPTO_MD5_LIBC) 178299425Smmtypedef MD5_CTX archive_md5_ctx; 179299425Smm#elif defined(ARCHIVE_CRYPTO_MD5_LIBMD) 180299425Smmtypedef MD5_CTX archive_md5_ctx; 181299425Smm#elif defined(ARCHIVE_CRYPTO_MD5_LIBSYSTEM) 182299425Smmtypedef CC_MD5_CTX archive_md5_ctx; 183358090Smm#elif defined(ARCHIVE_CRYPTO_MD5_MBEDTLS) 184358090Smmtypedef mbedtls_md5_context archive_md5_ctx; 185299425Smm#elif defined(ARCHIVE_CRYPTO_MD5_NETTLE) 186299425Smmtypedef struct md5_ctx archive_md5_ctx; 187299425Smm#elif defined(ARCHIVE_CRYPTO_MD5_OPENSSL) 188311042Smmtypedef EVP_MD_CTX *archive_md5_ctx; 189299425Smm#elif defined(ARCHIVE_CRYPTO_MD5_WIN) 190299425Smmtypedef Digest_CTX archive_md5_ctx; 191299425Smm#else 192299425Smmtypedef unsigned char archive_md5_ctx; 193299425Smm#endif 194299425Smm 195299425Smm#if defined(ARCHIVE_CRYPTO_RMD160_LIBC) 196299425Smmtypedef RMD160_CTX archive_rmd160_ctx; 197299425Smm#elif defined(ARCHIVE_CRYPTO_RMD160_LIBMD) 198299425Smmtypedef RIPEMD160_CTX archive_rmd160_ctx; 199358090Smm#elif defined(ARCHIVE_CRYPTO_RMD160_MBEDTLS) 200358090Smmtypedef mbedtls_ripemd160_context archive_rmd160_ctx; 201299425Smm#elif defined(ARCHIVE_CRYPTO_RMD160_NETTLE) 202299425Smmtypedef struct ripemd160_ctx archive_rmd160_ctx; 203299425Smm#elif defined(ARCHIVE_CRYPTO_RMD160_OPENSSL) 204311042Smmtypedef EVP_MD_CTX *archive_rmd160_ctx; 205299425Smm#else 206299425Smmtypedef unsigned char archive_rmd160_ctx; 207299425Smm#endif 208299425Smm 209299425Smm#if defined(ARCHIVE_CRYPTO_SHA1_LIBC) 210299425Smmtypedef SHA1_CTX archive_sha1_ctx; 211299425Smm#elif defined(ARCHIVE_CRYPTO_SHA1_LIBMD) 212299425Smmtypedef SHA1_CTX archive_sha1_ctx; 213299425Smm#elif defined(ARCHIVE_CRYPTO_SHA1_LIBSYSTEM) 214299425Smmtypedef CC_SHA1_CTX archive_sha1_ctx; 215358090Smm#elif defined(ARCHIVE_CRYPTO_SHA1_MBEDTLS) 216358090Smmtypedef mbedtls_sha1_context archive_sha1_ctx; 217299425Smm#elif defined(ARCHIVE_CRYPTO_SHA1_NETTLE) 218299425Smmtypedef struct sha1_ctx archive_sha1_ctx; 219299425Smm#elif defined(ARCHIVE_CRYPTO_SHA1_OPENSSL) 220311042Smmtypedef EVP_MD_CTX *archive_sha1_ctx; 221299425Smm#elif defined(ARCHIVE_CRYPTO_SHA1_WIN) 222299425Smmtypedef Digest_CTX archive_sha1_ctx; 223299425Smm#else 224299425Smmtypedef unsigned char archive_sha1_ctx; 225299425Smm#endif 226299425Smm 227299425Smm#if defined(ARCHIVE_CRYPTO_SHA256_LIBC) 228299425Smmtypedef SHA256_CTX archive_sha256_ctx; 229299425Smm#elif defined(ARCHIVE_CRYPTO_SHA256_LIBC2) 230299425Smmtypedef SHA256_CTX archive_sha256_ctx; 231299425Smm#elif defined(ARCHIVE_CRYPTO_SHA256_LIBC3) 232299425Smmtypedef SHA2_CTX archive_sha256_ctx; 233299425Smm#elif defined(ARCHIVE_CRYPTO_SHA256_LIBMD) 234299425Smmtypedef SHA256_CTX archive_sha256_ctx; 235299425Smm#elif defined(ARCHIVE_CRYPTO_SHA256_LIBSYSTEM) 236299425Smmtypedef CC_SHA256_CTX archive_sha256_ctx; 237358090Smm#elif defined(ARCHIVE_CRYPTO_SHA256_MBEDTLS) 238358090Smmtypedef mbedtls_sha256_context archive_sha256_ctx; 239299425Smm#elif defined(ARCHIVE_CRYPTO_SHA256_NETTLE) 240299425Smmtypedef struct sha256_ctx archive_sha256_ctx; 241299425Smm#elif defined(ARCHIVE_CRYPTO_SHA256_OPENSSL) 242311042Smmtypedef EVP_MD_CTX *archive_sha256_ctx; 243299425Smm#elif defined(ARCHIVE_CRYPTO_SHA256_WIN) 244299425Smmtypedef Digest_CTX archive_sha256_ctx; 245299425Smm#else 246299425Smmtypedef unsigned char archive_sha256_ctx; 247299425Smm#endif 248299425Smm 249299425Smm#if defined(ARCHIVE_CRYPTO_SHA384_LIBC) 250299425Smmtypedef SHA384_CTX archive_sha384_ctx; 251299425Smm#elif defined(ARCHIVE_CRYPTO_SHA384_LIBC2) 252299425Smmtypedef SHA384_CTX archive_sha384_ctx; 253299425Smm#elif defined(ARCHIVE_CRYPTO_SHA384_LIBC3) 254299425Smmtypedef SHA2_CTX archive_sha384_ctx; 255299425Smm#elif defined(ARCHIVE_CRYPTO_SHA384_LIBSYSTEM) 256299425Smmtypedef CC_SHA512_CTX archive_sha384_ctx; 257358090Smm#elif defined(ARCHIVE_CRYPTO_SHA384_MBEDTLS) 258358090Smmtypedef mbedtls_sha512_context archive_sha384_ctx; 259299425Smm#elif defined(ARCHIVE_CRYPTO_SHA384_NETTLE) 260299425Smmtypedef struct sha384_ctx archive_sha384_ctx; 261299425Smm#elif defined(ARCHIVE_CRYPTO_SHA384_OPENSSL) 262311042Smmtypedef EVP_MD_CTX *archive_sha384_ctx; 263299425Smm#elif defined(ARCHIVE_CRYPTO_SHA384_WIN) 264299425Smmtypedef Digest_CTX archive_sha384_ctx; 265299425Smm#else 266299425Smmtypedef unsigned char archive_sha384_ctx; 267299425Smm#endif 268299425Smm 269299425Smm#if defined(ARCHIVE_CRYPTO_SHA512_LIBC) 270299425Smmtypedef SHA512_CTX archive_sha512_ctx; 271299425Smm#elif defined(ARCHIVE_CRYPTO_SHA512_LIBC2) 272299425Smmtypedef SHA512_CTX archive_sha512_ctx; 273299425Smm#elif defined(ARCHIVE_CRYPTO_SHA512_LIBC3) 274299425Smmtypedef SHA2_CTX archive_sha512_ctx; 275299425Smm#elif defined(ARCHIVE_CRYPTO_SHA512_LIBMD) 276299425Smmtypedef SHA512_CTX archive_sha512_ctx; 277299425Smm#elif defined(ARCHIVE_CRYPTO_SHA512_LIBSYSTEM) 278299425Smmtypedef CC_SHA512_CTX archive_sha512_ctx; 279358090Smm#elif defined(ARCHIVE_CRYPTO_SHA512_MBEDTLS) 280358090Smmtypedef mbedtls_sha512_context archive_sha512_ctx; 281299425Smm#elif defined(ARCHIVE_CRYPTO_SHA512_NETTLE) 282299425Smmtypedef struct sha512_ctx archive_sha512_ctx; 283299425Smm#elif defined(ARCHIVE_CRYPTO_SHA512_OPENSSL) 284311042Smmtypedef EVP_MD_CTX *archive_sha512_ctx; 285299425Smm#elif defined(ARCHIVE_CRYPTO_SHA512_WIN) 286299425Smmtypedef Digest_CTX archive_sha512_ctx; 287299425Smm#else 288299425Smmtypedef unsigned char archive_sha512_ctx; 289299425Smm#endif 290299425Smm 291299425Smm/* defines */ 292299425Smm#if defined(ARCHIVE_CRYPTO_MD5_LIBC) ||\ 293299425Smm defined(ARCHIVE_CRYPTO_MD5_LIBMD) || \ 294299425Smm defined(ARCHIVE_CRYPTO_MD5_LIBSYSTEM) ||\ 295358090Smm defined(ARCHIVE_CRYPTO_MD5_MBEDTLS) ||\ 296299425Smm defined(ARCHIVE_CRYPTO_MD5_NETTLE) ||\ 297299425Smm defined(ARCHIVE_CRYPTO_MD5_OPENSSL) ||\ 298299425Smm defined(ARCHIVE_CRYPTO_MD5_WIN) 299299425Smm#define ARCHIVE_HAS_MD5 300299425Smm#endif 301299425Smm#define archive_md5_init(ctx)\ 302299425Smm __archive_digest.md5init(ctx) 303299425Smm#define archive_md5_final(ctx, md)\ 304299425Smm __archive_digest.md5final(ctx, md) 305299425Smm#define archive_md5_update(ctx, buf, n)\ 306299425Smm __archive_digest.md5update(ctx, buf, n) 307299425Smm 308299425Smm#if defined(ARCHIVE_CRYPTO_RMD160_LIBC) ||\ 309358090Smm defined(ARCHIVE_CRYPTO_RMD160_MBEDTLS) ||\ 310299425Smm defined(ARCHIVE_CRYPTO_RMD160_NETTLE) ||\ 311299425Smm defined(ARCHIVE_CRYPTO_RMD160_OPENSSL) 312299425Smm#define ARCHIVE_HAS_RMD160 313299425Smm#endif 314299425Smm#define archive_rmd160_init(ctx)\ 315299425Smm __archive_digest.rmd160init(ctx) 316299425Smm#define archive_rmd160_final(ctx, md)\ 317299425Smm __archive_digest.rmd160final(ctx, md) 318299425Smm#define archive_rmd160_update(ctx, buf, n)\ 319299425Smm __archive_digest.rmd160update(ctx, buf, n) 320299425Smm 321299425Smm#if defined(ARCHIVE_CRYPTO_SHA1_LIBC) ||\ 322299425Smm defined(ARCHIVE_CRYPTO_SHA1_LIBMD) || \ 323299425Smm defined(ARCHIVE_CRYPTO_SHA1_LIBSYSTEM) ||\ 324358090Smm defined(ARCHIVE_CRYPTO_SHA1_MBEDTLS) ||\ 325299425Smm defined(ARCHIVE_CRYPTO_SHA1_NETTLE) ||\ 326299425Smm defined(ARCHIVE_CRYPTO_SHA1_OPENSSL) ||\ 327299425Smm defined(ARCHIVE_CRYPTO_SHA1_WIN) 328299425Smm#define ARCHIVE_HAS_SHA1 329299425Smm#endif 330299425Smm#define archive_sha1_init(ctx)\ 331299425Smm __archive_digest.sha1init(ctx) 332299425Smm#define archive_sha1_final(ctx, md)\ 333299425Smm __archive_digest.sha1final(ctx, md) 334299425Smm#define archive_sha1_update(ctx, buf, n)\ 335299425Smm __archive_digest.sha1update(ctx, buf, n) 336299425Smm 337299425Smm#if defined(ARCHIVE_CRYPTO_SHA256_LIBC) ||\ 338299425Smm defined(ARCHIVE_CRYPTO_SHA256_LIBC2) ||\ 339299425Smm defined(ARCHIVE_CRYPTO_SHA256_LIBC3) ||\ 340299425Smm defined(ARCHIVE_CRYPTO_SHA256_LIBMD) ||\ 341299425Smm defined(ARCHIVE_CRYPTO_SHA256_LIBSYSTEM) ||\ 342358090Smm defined(ARCHIVE_CRYPTO_SHA256_MBEDTLS) ||\ 343299425Smm defined(ARCHIVE_CRYPTO_SHA256_NETTLE) ||\ 344299425Smm defined(ARCHIVE_CRYPTO_SHA256_OPENSSL) ||\ 345299425Smm defined(ARCHIVE_CRYPTO_SHA256_WIN) 346299425Smm#define ARCHIVE_HAS_SHA256 347299425Smm#endif 348299425Smm#define archive_sha256_init(ctx)\ 349299425Smm __archive_digest.sha256init(ctx) 350299425Smm#define archive_sha256_final(ctx, md)\ 351299425Smm __archive_digest.sha256final(ctx, md) 352299425Smm#define archive_sha256_update(ctx, buf, n)\ 353299425Smm __archive_digest.sha256update(ctx, buf, n) 354299425Smm 355299425Smm#if defined(ARCHIVE_CRYPTO_SHA384_LIBC) ||\ 356299425Smm defined(ARCHIVE_CRYPTO_SHA384_LIBC2) ||\ 357299425Smm defined(ARCHIVE_CRYPTO_SHA384_LIBC3) ||\ 358299425Smm defined(ARCHIVE_CRYPTO_SHA384_LIBSYSTEM) ||\ 359358090Smm defined(ARCHIVE_CRYPTO_SHA384_MBEDTLS) ||\ 360299425Smm defined(ARCHIVE_CRYPTO_SHA384_NETTLE) ||\ 361299425Smm defined(ARCHIVE_CRYPTO_SHA384_OPENSSL) ||\ 362299425Smm defined(ARCHIVE_CRYPTO_SHA384_WIN) 363299425Smm#define ARCHIVE_HAS_SHA384 364299425Smm#endif 365299425Smm#define archive_sha384_init(ctx)\ 366299425Smm __archive_digest.sha384init(ctx) 367299425Smm#define archive_sha384_final(ctx, md)\ 368299425Smm __archive_digest.sha384final(ctx, md) 369299425Smm#define archive_sha384_update(ctx, buf, n)\ 370299425Smm __archive_digest.sha384update(ctx, buf, n) 371299425Smm 372299425Smm#if defined(ARCHIVE_CRYPTO_SHA512_LIBC) ||\ 373299425Smm defined(ARCHIVE_CRYPTO_SHA512_LIBC2) ||\ 374299425Smm defined(ARCHIVE_CRYPTO_SHA512_LIBC3) ||\ 375299425Smm defined(ARCHIVE_CRYPTO_SHA512_LIBMD) ||\ 376299425Smm defined(ARCHIVE_CRYPTO_SHA512_LIBSYSTEM) ||\ 377358090Smm defined(ARCHIVE_CRYPTO_SHA512_MBEDTLS) ||\ 378299425Smm defined(ARCHIVE_CRYPTO_SHA512_NETTLE) ||\ 379299425Smm defined(ARCHIVE_CRYPTO_SHA512_OPENSSL) ||\ 380299425Smm defined(ARCHIVE_CRYPTO_SHA512_WIN) 381299425Smm#define ARCHIVE_HAS_SHA512 382299425Smm#endif 383299425Smm#define archive_sha512_init(ctx)\ 384299425Smm __archive_digest.sha512init(ctx) 385299425Smm#define archive_sha512_final(ctx, md)\ 386299425Smm __archive_digest.sha512final(ctx, md) 387299425Smm#define archive_sha512_update(ctx, buf, n)\ 388299425Smm __archive_digest.sha512update(ctx, buf, n) 389299425Smm 390299425Smm/* Minimal interface to digest functionality for internal use in libarchive */ 391299425Smmstruct archive_digest 392299425Smm{ 393299425Smm /* Message Digest */ 394299425Smm int (*md5init)(archive_md5_ctx *ctx); 395299425Smm int (*md5update)(archive_md5_ctx *, const void *, size_t); 396299425Smm int (*md5final)(archive_md5_ctx *, void *); 397299425Smm int (*rmd160init)(archive_rmd160_ctx *); 398299425Smm int (*rmd160update)(archive_rmd160_ctx *, const void *, size_t); 399299425Smm int (*rmd160final)(archive_rmd160_ctx *, void *); 400299425Smm int (*sha1init)(archive_sha1_ctx *); 401299425Smm int (*sha1update)(archive_sha1_ctx *, const void *, size_t); 402299425Smm int (*sha1final)(archive_sha1_ctx *, void *); 403299425Smm int (*sha256init)(archive_sha256_ctx *); 404299425Smm int (*sha256update)(archive_sha256_ctx *, const void *, size_t); 405299425Smm int (*sha256final)(archive_sha256_ctx *, void *); 406299425Smm int (*sha384init)(archive_sha384_ctx *); 407299425Smm int (*sha384update)(archive_sha384_ctx *, const void *, size_t); 408299425Smm int (*sha384final)(archive_sha384_ctx *, void *); 409299425Smm int (*sha512init)(archive_sha512_ctx *); 410299425Smm int (*sha512update)(archive_sha512_ctx *, const void *, size_t); 411299425Smm int (*sha512final)(archive_sha512_ctx *, void *); 412299425Smm}; 413299425Smm 414299425Smmextern const struct archive_digest __archive_digest; 415299425Smm 416299425Smm#endif 417