1231200Smm/*- 2231200Smm* Copyright (c) 2003-2007 Tim Kientzle 3231200Smm* Copyright (c) 2011 Andres Mejia 4231200Smm* All rights reserved. 5231200Smm* 6231200Smm* Redistribution and use in source and binary forms, with or without 7231200Smm* modification, are permitted provided that the following conditions 8231200Smm* are met: 9231200Smm* 1. Redistributions of source code must retain the above copyright 10231200Smm* notice, this list of conditions and the following disclaimer. 11231200Smm* 2. Redistributions in binary form must reproduce the above copyright 12231200Smm* notice, this list of conditions and the following disclaimer in the 13231200Smm* documentation and/or other materials provided with the distribution. 14231200Smm* 15231200Smm* THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR 16231200Smm* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 17231200Smm* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 18231200Smm* IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, 19231200Smm* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 20231200Smm* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 21231200Smm* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 22231200Smm* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23231200Smm* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 24231200Smm* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25231200Smm*/ 26231200Smm 27231200Smm#ifndef __LIBARCHIVE_BUILD 28231200Smm#error This header is only to be used internally to libarchive. 29231200Smm#endif 30231200Smm 31231200Smm#ifndef ARCHIVE_CRYPTO_PRIVATE_H_INCLUDED 32231200Smm#define ARCHIVE_CRYPTO_PRIVATE_H_INCLUDED 33231200Smm 34231200Smm/* 35231200Smm * Crypto support in various Operating Systems: 36231200Smm * 37231200Smm * NetBSD: 38231200Smm * - MD5 and SHA1 in libc: without _ after algorithm name 39231200Smm * - SHA2 in libc: with _ after algorithm name 40231200Smm * 41231200Smm * OpenBSD: 42231200Smm * - MD5, SHA1 and SHA2 in libc: without _ after algorithm name 43231200Smm * - OpenBSD 4.4 and earlier have SHA2 in libc with _ after algorithm name 44231200Smm * 45231200Smm * DragonFly and FreeBSD: 46231200Smm * - MD5 libmd: without _ after algorithm name 47231200Smm * - SHA1, SHA256 and SHA512 in libmd: with _ after algorithm name 48231200Smm * 49231200Smm * Mac OS X (10.4 and later): 50231200Smm * - MD5, SHA1 and SHA2 in libSystem: with CC_ prefix and _ after algorithm name 51231200Smm * 52231200Smm * OpenSSL: 53231200Smm * - MD5, SHA1 and SHA2 in libcrypto: with _ after algorithm name 54231200Smm * 55231200Smm * Windows: 56231200Smm * - MD5, SHA1 and SHA2 in archive_crypto.c using Windows crypto API 57231200Smm */ 58231200Smm 59231200Smm/* libc crypto headers */ 60231200Smm#if defined(ARCHIVE_CRYPTO_MD5_LIBC) 61231200Smm#include <md5.h> 62231200Smm#endif 63231200Smm#if defined(ARCHIVE_CRYPTO_RMD160_LIBC) 64231200Smm#include <rmd160.h> 65231200Smm#endif 66231200Smm#if defined(ARCHIVE_CRYPTO_SHA1_LIBC) 67231200Smm#include <sha1.h> 68231200Smm#endif 69231200Smm#if defined(ARCHIVE_CRYPTO_SHA256_LIBC) ||\ 70231200Smm defined(ARCHIVE_CRYPTO_SHA256_LIBC2) ||\ 71231200Smm defined(ARCHIVE_CRYPTO_SHA256_LIBC3) ||\ 72231200Smm defined(ARCHIVE_CRYPTO_SHA384_LIBC) ||\ 73231200Smm defined(ARCHIVE_CRYPTO_SHA384_LIBC2) ||\ 74231200Smm defined(ARCHIVE_CRYPTO_SHA384_LIBC3) ||\ 75231200Smm defined(ARCHIVE_CRYPTO_SHA512_LIBC) ||\ 76231200Smm defined(ARCHIVE_CRYPTO_SHA512_LIBC2) ||\ 77231200Smm defined(ARCHIVE_CRYPTO_SHA512_LIBC3) 78231200Smm#include <sha2.h> 79231200Smm#endif 80231200Smm 81231200Smm/* libmd crypto headers */ 82231200Smm#if defined(ARCHIVE_CRYPTO_MD5_LIBMD) ||\ 83231200Smm defined(ARCHIVE_CRYPTO_RMD160_LIBMD) ||\ 84231200Smm defined(ARCHIVE_CRYPTO_SHA1_LIBMD) ||\ 85231200Smm defined(ARCHIVE_CRYPTO_SHA256_LIBMD) ||\ 86231200Smm defined(ARCHIVE_CRYPTO_SHA512_LIBMD) 87231200Smm#define ARCHIVE_CRYPTO_LIBMD 1 88231200Smm#endif 89231200Smm 90231200Smm#if defined(ARCHIVE_CRYPTO_MD5_LIBMD) 91231200Smm#include <md5.h> 92231200Smm#endif 93231200Smm#if defined(ARCHIVE_CRYPTO_RMD160_LIBMD) 94231200Smm#include <ripemd.h> 95231200Smm#endif 96231200Smm#if defined(ARCHIVE_CRYPTO_SHA1_LIBMD) 97231200Smm#include <sha.h> 98231200Smm#endif 99231200Smm#if defined(ARCHIVE_CRYPTO_SHA256_LIBMD) 100231200Smm#include <sha256.h> 101231200Smm#endif 102231200Smm#if defined(ARCHIVE_CRYPTO_SHA512_LIBMD) 103231200Smm#include <sha512.h> 104231200Smm#endif 105231200Smm 106231200Smm/* libSystem crypto headers */ 107231200Smm#if defined(ARCHIVE_CRYPTO_MD5_LIBSYSTEM) ||\ 108231200Smm defined(ARCHIVE_CRYPTO_SHA1_LIBSYSTEM) ||\ 109231200Smm defined(ARCHIVE_CRYPTO_SHA256_LIBSYSTEM) ||\ 110231200Smm defined(ARCHIVE_CRYPTO_SHA384_LIBSYSTEM) ||\ 111231200Smm defined(ARCHIVE_CRYPTO_SHA512_LIBSYSTEM) 112231200Smm#include <CommonCrypto/CommonDigest.h> 113231200Smm#endif 114231200Smm 115231200Smm/* Nettle crypto headers */ 116231200Smm#if defined(ARCHIVE_CRYPTO_MD5_NETTLE) 117231200Smm#include <nettle/md5.h> 118231200Smm#endif 119231200Smm#if defined(ARCHIVE_CRYPTO_RMD160_NETTLE) 120231200Smm#include <nettle/ripemd160.h> 121231200Smm#endif 122231200Smm#if defined(ARCHIVE_CRYPTO_SHA1_NETTLE) ||\ 123231200Smm defined(ARCHIVE_CRYPTO_SHA256_NETTLE) ||\ 124231200Smm defined(ARCHIVE_CRYPTO_SHA384_NETTLE) ||\ 125231200Smm defined(ARCHIVE_CRYPTO_SHA512_NETTLE) 126231200Smm#include <nettle/sha.h> 127231200Smm#endif 128231200Smm 129231200Smm/* OpenSSL crypto headers */ 130231200Smm#if defined(ARCHIVE_CRYPTO_MD5_OPENSSL) ||\ 131231200Smm defined(ARCHIVE_CRYPTO_RMD160_OPENSSL) ||\ 132231200Smm defined(ARCHIVE_CRYPTO_SHA1_OPENSSL) ||\ 133231200Smm defined(ARCHIVE_CRYPTO_SHA256_OPENSSL) ||\ 134231200Smm defined(ARCHIVE_CRYPTO_SHA384_OPENSSL) ||\ 135231200Smm defined(ARCHIVE_CRYPTO_SHA512_OPENSSL) 136231200Smm#define ARCHIVE_CRYPTO_OPENSSL 1 137231200Smm#include <openssl/evp.h> 138231200Smm#endif 139231200Smm 140231200Smm/* Windows crypto headers */ 141231200Smm#if defined(ARCHIVE_CRYPTO_MD5_WIN) ||\ 142231200Smm defined(ARCHIVE_CRYPTO_SHA1_WIN) ||\ 143231200Smm defined(ARCHIVE_CRYPTO_SHA256_WIN) ||\ 144231200Smm defined(ARCHIVE_CRYPTO_SHA384_WIN) ||\ 145231200Smm defined(ARCHIVE_CRYPTO_SHA512_WIN) 146231200Smm#include <wincrypt.h> 147231200Smmtypedef struct { 148231200Smm int valid; 149231200Smm HCRYPTPROV cryptProv; 150231200Smm HCRYPTHASH hash; 151231200Smm} Digest_CTX; 152231200Smm#endif 153231200Smm 154231200Smm/* typedefs */ 155231200Smm#if defined(ARCHIVE_CRYPTO_MD5_LIBC) 156231200Smmtypedef MD5_CTX archive_md5_ctx; 157231200Smm#elif defined(ARCHIVE_CRYPTO_MD5_LIBMD) 158231200Smmtypedef MD5_CTX archive_md5_ctx; 159231200Smm#elif defined(ARCHIVE_CRYPTO_MD5_LIBSYSTEM) 160231200Smmtypedef CC_MD5_CTX archive_md5_ctx; 161231200Smm#elif defined(ARCHIVE_CRYPTO_MD5_NETTLE) 162231200Smmtypedef struct md5_ctx archive_md5_ctx; 163231200Smm#elif defined(ARCHIVE_CRYPTO_MD5_OPENSSL) 164231200Smmtypedef EVP_MD_CTX archive_md5_ctx; 165231200Smm#elif defined(ARCHIVE_CRYPTO_MD5_WIN) 166231200Smmtypedef Digest_CTX archive_md5_ctx; 167231200Smm#else 168231200Smmtypedef unsigned char archive_md5_ctx; 169231200Smm#endif 170231200Smm 171231200Smm#if defined(ARCHIVE_CRYPTO_RMD160_LIBC) 172231200Smmtypedef RMD160_CTX archive_rmd160_ctx; 173231200Smm#elif defined(ARCHIVE_CRYPTO_RMD160_LIBMD) 174231200Smmtypedef RIPEMD160_CTX archive_rmd160_ctx; 175231200Smm#elif defined(ARCHIVE_CRYPTO_RMD160_NETTLE) 176231200Smmtypedef struct ripemd160_ctx archive_rmd160_ctx; 177231200Smm#elif defined(ARCHIVE_CRYPTO_RMD160_OPENSSL) 178231200Smmtypedef EVP_MD_CTX archive_rmd160_ctx; 179231200Smm#else 180231200Smmtypedef unsigned char archive_rmd160_ctx; 181231200Smm#endif 182231200Smm 183231200Smm#if defined(ARCHIVE_CRYPTO_SHA1_LIBC) 184231200Smmtypedef SHA1_CTX archive_sha1_ctx; 185231200Smm#elif defined(ARCHIVE_CRYPTO_SHA1_LIBMD) 186231200Smmtypedef SHA1_CTX archive_sha1_ctx; 187231200Smm#elif defined(ARCHIVE_CRYPTO_SHA1_LIBSYSTEM) 188231200Smmtypedef CC_SHA1_CTX archive_sha1_ctx; 189231200Smm#elif defined(ARCHIVE_CRYPTO_SHA1_NETTLE) 190231200Smmtypedef struct sha1_ctx archive_sha1_ctx; 191231200Smm#elif defined(ARCHIVE_CRYPTO_SHA1_OPENSSL) 192231200Smmtypedef EVP_MD_CTX archive_sha1_ctx; 193231200Smm#elif defined(ARCHIVE_CRYPTO_SHA1_WIN) 194231200Smmtypedef Digest_CTX archive_sha1_ctx; 195231200Smm#else 196231200Smmtypedef unsigned char archive_sha1_ctx; 197231200Smm#endif 198231200Smm 199231200Smm#if defined(ARCHIVE_CRYPTO_SHA256_LIBC) 200231200Smmtypedef SHA256_CTX archive_sha256_ctx; 201231200Smm#elif defined(ARCHIVE_CRYPTO_SHA256_LIBC2) 202231200Smmtypedef SHA256_CTX archive_sha256_ctx; 203231200Smm#elif defined(ARCHIVE_CRYPTO_SHA256_LIBC3) 204231200Smmtypedef SHA2_CTX archive_sha256_ctx; 205231200Smm#elif defined(ARCHIVE_CRYPTO_SHA256_LIBMD) 206231200Smmtypedef SHA256_CTX archive_sha256_ctx; 207231200Smm#elif defined(ARCHIVE_CRYPTO_SHA256_LIBSYSTEM) 208231200Smmtypedef CC_SHA256_CTX archive_sha256_ctx; 209231200Smm#elif defined(ARCHIVE_CRYPTO_SHA256_NETTLE) 210231200Smmtypedef struct sha256_ctx archive_sha256_ctx; 211231200Smm#elif defined(ARCHIVE_CRYPTO_SHA256_OPENSSL) 212231200Smmtypedef EVP_MD_CTX archive_sha256_ctx; 213231200Smm#elif defined(ARCHIVE_CRYPTO_SHA256_WIN) 214231200Smmtypedef Digest_CTX archive_sha256_ctx; 215231200Smm#else 216231200Smmtypedef unsigned char archive_sha256_ctx; 217231200Smm#endif 218231200Smm 219231200Smm#if defined(ARCHIVE_CRYPTO_SHA384_LIBC) 220231200Smmtypedef SHA384_CTX archive_sha384_ctx; 221231200Smm#elif defined(ARCHIVE_CRYPTO_SHA384_LIBC2) 222231200Smmtypedef SHA384_CTX archive_sha384_ctx; 223231200Smm#elif defined(ARCHIVE_CRYPTO_SHA384_LIBC3) 224231200Smmtypedef SHA2_CTX archive_sha384_ctx; 225231200Smm#elif defined(ARCHIVE_CRYPTO_SHA384_LIBSYSTEM) 226231200Smmtypedef CC_SHA512_CTX archive_sha384_ctx; 227231200Smm#elif defined(ARCHIVE_CRYPTO_SHA384_NETTLE) 228231200Smmtypedef struct sha384_ctx archive_sha384_ctx; 229231200Smm#elif defined(ARCHIVE_CRYPTO_SHA384_OPENSSL) 230231200Smmtypedef EVP_MD_CTX archive_sha384_ctx; 231231200Smm#elif defined(ARCHIVE_CRYPTO_SHA384_WIN) 232231200Smmtypedef Digest_CTX archive_sha384_ctx; 233231200Smm#else 234231200Smmtypedef unsigned char archive_sha384_ctx; 235231200Smm#endif 236231200Smm 237231200Smm#if defined(ARCHIVE_CRYPTO_SHA512_LIBC) 238231200Smmtypedef SHA512_CTX archive_sha512_ctx; 239231200Smm#elif defined(ARCHIVE_CRYPTO_SHA512_LIBC2) 240231200Smmtypedef SHA512_CTX archive_sha512_ctx; 241231200Smm#elif defined(ARCHIVE_CRYPTO_SHA512_LIBC3) 242231200Smmtypedef SHA2_CTX archive_sha512_ctx; 243231200Smm#elif defined(ARCHIVE_CRYPTO_SHA512_LIBMD) 244231200Smmtypedef SHA512_CTX archive_sha512_ctx; 245231200Smm#elif defined(ARCHIVE_CRYPTO_SHA512_LIBSYSTEM) 246231200Smmtypedef CC_SHA512_CTX archive_sha512_ctx; 247231200Smm#elif defined(ARCHIVE_CRYPTO_SHA512_NETTLE) 248231200Smmtypedef struct sha512_ctx archive_sha512_ctx; 249231200Smm#elif defined(ARCHIVE_CRYPTO_SHA512_OPENSSL) 250231200Smmtypedef EVP_MD_CTX archive_sha512_ctx; 251231200Smm#elif defined(ARCHIVE_CRYPTO_SHA512_WIN) 252231200Smmtypedef Digest_CTX archive_sha512_ctx; 253231200Smm#else 254231200Smmtypedef unsigned char archive_sha512_ctx; 255231200Smm#endif 256231200Smm 257231200Smm/* defines */ 258231200Smm#if defined(ARCHIVE_CRYPTO_MD5_LIBC) ||\ 259231200Smm defined(ARCHIVE_CRYPTO_MD5_LIBMD) || \ 260231200Smm defined(ARCHIVE_CRYPTO_MD5_LIBSYSTEM) ||\ 261231200Smm defined(ARCHIVE_CRYPTO_MD5_NETTLE) ||\ 262231200Smm defined(ARCHIVE_CRYPTO_MD5_OPENSSL) ||\ 263231200Smm defined(ARCHIVE_CRYPTO_MD5_WIN) 264231200Smm#define ARCHIVE_HAS_MD5 265231200Smm#endif 266231200Smm#define archive_md5_init(ctx)\ 267231200Smm __archive_crypto.md5init(ctx) 268231200Smm#define archive_md5_final(ctx, md)\ 269231200Smm __archive_crypto.md5final(ctx, md) 270231200Smm#define archive_md5_update(ctx, buf, n)\ 271231200Smm __archive_crypto.md5update(ctx, buf, n) 272231200Smm 273231200Smm#if defined(ARCHIVE_CRYPTO_RMD160_LIBC) ||\ 274231200Smm defined(ARCHIVE_CRYPTO_RMD160_NETTLE) ||\ 275231200Smm defined(ARCHIVE_CRYPTO_RMD160_OPENSSL) 276231200Smm#define ARCHIVE_HAS_RMD160 277231200Smm#endif 278231200Smm#define archive_rmd160_init(ctx)\ 279231200Smm __archive_crypto.rmd160init(ctx) 280231200Smm#define archive_rmd160_final(ctx, md)\ 281231200Smm __archive_crypto.rmd160final(ctx, md) 282231200Smm#define archive_rmd160_update(ctx, buf, n)\ 283231200Smm __archive_crypto.rmd160update(ctx, buf, n) 284231200Smm 285231200Smm#if defined(ARCHIVE_CRYPTO_SHA1_LIBC) ||\ 286231200Smm defined(ARCHIVE_CRYPTO_SHA1_LIBMD) || \ 287231200Smm defined(ARCHIVE_CRYPTO_SHA1_LIBSYSTEM) ||\ 288231200Smm defined(ARCHIVE_CRYPTO_SHA1_NETTLE) ||\ 289231200Smm defined(ARCHIVE_CRYPTO_SHA1_OPENSSL) ||\ 290231200Smm defined(ARCHIVE_CRYPTO_SHA1_WIN) 291231200Smm#define ARCHIVE_HAS_SHA1 292231200Smm#endif 293231200Smm#define archive_sha1_init(ctx)\ 294231200Smm __archive_crypto.sha1init(ctx) 295231200Smm#define archive_sha1_final(ctx, md)\ 296231200Smm __archive_crypto.sha1final(ctx, md) 297231200Smm#define archive_sha1_update(ctx, buf, n)\ 298231200Smm __archive_crypto.sha1update(ctx, buf, n) 299231200Smm 300231200Smm#if defined(ARCHIVE_CRYPTO_SHA256_LIBC) ||\ 301231200Smm defined(ARCHIVE_CRYPTO_SHA256_LIBC2) ||\ 302231200Smm defined(ARCHIVE_CRYPTO_SHA256_LIBC3) ||\ 303231200Smm defined(ARCHIVE_CRYPTO_SHA256_LIBMD) ||\ 304231200Smm defined(ARCHIVE_CRYPTO_SHA256_LIBSYSTEM) ||\ 305231200Smm defined(ARCHIVE_CRYPTO_SHA256_NETTLE) ||\ 306231200Smm defined(ARCHIVE_CRYPTO_SHA256_OPENSSL) ||\ 307231200Smm defined(ARCHIVE_CRYPTO_SHA256_WIN) 308231200Smm#define ARCHIVE_HAS_SHA256 309231200Smm#endif 310231200Smm#define archive_sha256_init(ctx)\ 311231200Smm __archive_crypto.sha256init(ctx) 312231200Smm#define archive_sha256_final(ctx, md)\ 313231200Smm __archive_crypto.sha256final(ctx, md) 314231200Smm#define archive_sha256_update(ctx, buf, n)\ 315231200Smm __archive_crypto.sha256update(ctx, buf, n) 316231200Smm 317231200Smm#if defined(ARCHIVE_CRYPTO_SHA384_LIBC) ||\ 318231200Smm defined(ARCHIVE_CRYPTO_SHA384_LIBC2) ||\ 319231200Smm defined(ARCHIVE_CRYPTO_SHA384_LIBC3) ||\ 320231200Smm defined(ARCHIVE_CRYPTO_SHA384_LIBSYSTEM) ||\ 321231200Smm defined(ARCHIVE_CRYPTO_SHA384_NETTLE) ||\ 322231200Smm defined(ARCHIVE_CRYPTO_SHA384_OPENSSL) ||\ 323231200Smm defined(ARCHIVE_CRYPTO_SHA384_WIN) 324231200Smm#define ARCHIVE_HAS_SHA384 325231200Smm#endif 326231200Smm#define archive_sha384_init(ctx)\ 327231200Smm __archive_crypto.sha384init(ctx) 328231200Smm#define archive_sha384_final(ctx, md)\ 329231200Smm __archive_crypto.sha384final(ctx, md) 330231200Smm#define archive_sha384_update(ctx, buf, n)\ 331231200Smm __archive_crypto.sha384update(ctx, buf, n) 332231200Smm 333231200Smm#if defined(ARCHIVE_CRYPTO_SHA512_LIBC) ||\ 334231200Smm defined(ARCHIVE_CRYPTO_SHA512_LIBC2) ||\ 335231200Smm defined(ARCHIVE_CRYPTO_SHA512_LIBC3) ||\ 336231200Smm defined(ARCHIVE_CRYPTO_SHA512_LIBMD) ||\ 337231200Smm defined(ARCHIVE_CRYPTO_SHA512_LIBSYSTEM) ||\ 338231200Smm defined(ARCHIVE_CRYPTO_SHA512_NETTLE) ||\ 339231200Smm defined(ARCHIVE_CRYPTO_SHA512_OPENSSL) ||\ 340231200Smm defined(ARCHIVE_CRYPTO_SHA512_WIN) 341231200Smm#define ARCHIVE_HAS_SHA512 342231200Smm#endif 343231200Smm#define archive_sha512_init(ctx)\ 344231200Smm __archive_crypto.sha512init(ctx) 345231200Smm#define archive_sha512_final(ctx, md)\ 346231200Smm __archive_crypto.sha512final(ctx, md) 347231200Smm#define archive_sha512_update(ctx, buf, n)\ 348231200Smm __archive_crypto.sha512update(ctx, buf, n) 349231200Smm 350231200Smm/* Minimal interface to crypto functionality for internal use in libarchive */ 351231200Smmstruct archive_crypto 352231200Smm{ 353231200Smm /* Message Digest */ 354231200Smm int (*md5init)(archive_md5_ctx *ctx); 355231200Smm int (*md5update)(archive_md5_ctx *, const void *, size_t); 356231200Smm int (*md5final)(archive_md5_ctx *, void *); 357231200Smm int (*rmd160init)(archive_rmd160_ctx *); 358231200Smm int (*rmd160update)(archive_rmd160_ctx *, const void *, size_t); 359231200Smm int (*rmd160final)(archive_rmd160_ctx *, void *); 360231200Smm int (*sha1init)(archive_sha1_ctx *); 361231200Smm int (*sha1update)(archive_sha1_ctx *, const void *, size_t); 362231200Smm int (*sha1final)(archive_sha1_ctx *, void *); 363231200Smm int (*sha256init)(archive_sha256_ctx *); 364231200Smm int (*sha256update)(archive_sha256_ctx *, const void *, size_t); 365231200Smm int (*sha256final)(archive_sha256_ctx *, void *); 366231200Smm int (*sha384init)(archive_sha384_ctx *); 367231200Smm int (*sha384update)(archive_sha384_ctx *, const void *, size_t); 368231200Smm int (*sha384final)(archive_sha384_ctx *, void *); 369231200Smm int (*sha512init)(archive_sha512_ctx *); 370231200Smm int (*sha512update)(archive_sha512_ctx *, const void *, size_t); 371231200Smm int (*sha512final)(archive_sha512_ctx *, void *); 372231200Smm}; 373231200Smm 374231200Smmextern const struct archive_crypto __archive_crypto; 375231200Smm 376231200Smm#endif 377