From: ARJANEN Loïc Jean David Date: Mon, 7 Apr 2025 15:04:27 +0000 (+0200) Subject: Fixes Windows compile issue (#2538) X-Git-Tag: v3.8.0~48 X-Git-Url: http://git.ipfire.org/gitweb/gitweb.cgi?a=commitdiff_plain;h=4c0b3618a4fdf3a96287f83b50ef7b644b1e4952;p=thirdparty%2Flibarchive.git Fixes Windows compile issue (#2538) Solves a Windows compile issue when OpenSSH/mbedTLS/Nettle is activated and on the build system's paths by making the Windows API backend higher priority on Windows (meaning that only RIPEMD160 will use OpenSSH/mbedTLS/Nettle anymore). Fixes #2536 and starts on #2320. --- diff --git a/libarchive/archive_digest.c b/libarchive/archive_digest.c index 335187408..9815ea3e9 100644 --- a/libarchive/archive_digest.c +++ b/libarchive/archive_digest.c @@ -229,6 +229,31 @@ __archive_md5final(archive_md5_ctx *ctx, void *md) #pragma clang diagnostic pop #endif +#elif defined(ARCHIVE_CRYPTO_MD5_WIN) + +static int +__archive_md5init(archive_md5_ctx *ctx) +{ +#if defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA + return (win_crypto_init(ctx, BCRYPT_MD5_ALGORITHM)); +#else + return (win_crypto_init(ctx, PROV_RSA_FULL, CALG_MD5)); +#endif +} + +static int +__archive_md5update(archive_md5_ctx *ctx, const void *indata, + size_t insize) +{ + return (win_crypto_Update(ctx, indata, insize)); +} + +static int +__archive_md5final(archive_md5_ctx *ctx, void *md) +{ + return (win_crypto_Final(md, 16, ctx)); +} + #elif defined(ARCHIVE_CRYPTO_MD5_MBEDTLS) static int @@ -322,31 +347,6 @@ __archive_md5final(archive_md5_ctx *ctx, void *md) return (ARCHIVE_OK); } -#elif defined(ARCHIVE_CRYPTO_MD5_WIN) - -static int -__archive_md5init(archive_md5_ctx *ctx) -{ -#if defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA - return (win_crypto_init(ctx, BCRYPT_MD5_ALGORITHM)); -#else - return (win_crypto_init(ctx, PROV_RSA_FULL, CALG_MD5)); -#endif -} - -static int -__archive_md5update(archive_md5_ctx *ctx, const void *indata, - size_t insize) -{ - return (win_crypto_Update(ctx, indata, insize)); -} - -static int -__archive_md5final(archive_md5_ctx *ctx, void *md) -{ - return (win_crypto_Final(md, 16, ctx)); -} - #else static int @@ -616,6 +616,31 @@ __archive_sha1final(archive_sha1_ctx *ctx, void *md) return (ARCHIVE_OK); } +#elif defined(ARCHIVE_CRYPTO_SHA1_WIN) + +static int +__archive_sha1init(archive_sha1_ctx *ctx) +{ +#if defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA + return (win_crypto_init(ctx, BCRYPT_SHA1_ALGORITHM)); +#else + return (win_crypto_init(ctx, PROV_RSA_FULL, CALG_SHA1)); +#endif +} + +static int +__archive_sha1update(archive_sha1_ctx *ctx, const void *indata, + size_t insize) +{ + return (win_crypto_Update(ctx, indata, insize)); +} + +static int +__archive_sha1final(archive_sha1_ctx *ctx, void *md) +{ + return (win_crypto_Final(md, 20, ctx)); +} + #elif defined(ARCHIVE_CRYPTO_SHA1_MBEDTLS) static int @@ -709,31 +734,6 @@ __archive_sha1final(archive_sha1_ctx *ctx, void *md) return (ARCHIVE_OK); } -#elif defined(ARCHIVE_CRYPTO_SHA1_WIN) - -static int -__archive_sha1init(archive_sha1_ctx *ctx) -{ -#if defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA - return (win_crypto_init(ctx, BCRYPT_SHA1_ALGORITHM)); -#else - return (win_crypto_init(ctx, PROV_RSA_FULL, CALG_SHA1)); -#endif -} - -static int -__archive_sha1update(archive_sha1_ctx *ctx, const void *indata, - size_t insize) -{ - return (win_crypto_Update(ctx, indata, insize)); -} - -static int -__archive_sha1final(archive_sha1_ctx *ctx, void *md) -{ - return (win_crypto_Final(md, 20, ctx)); -} - #else static int @@ -884,6 +884,31 @@ __archive_sha256final(archive_sha256_ctx *ctx, void *md) return (ARCHIVE_OK); } +#elif defined(ARCHIVE_CRYPTO_SHA256_WIN) + +static int +__archive_sha256init(archive_sha256_ctx *ctx) +{ +#if defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA + return (win_crypto_init(ctx, BCRYPT_SHA256_ALGORITHM)); +#else + return (win_crypto_init(ctx, PROV_RSA_AES, CALG_SHA_256)); +#endif +} + +static int +__archive_sha256update(archive_sha256_ctx *ctx, const void *indata, + size_t insize) +{ + return (win_crypto_Update(ctx, indata, insize)); +} + +static int +__archive_sha256final(archive_sha256_ctx *ctx, void *md) +{ + return (win_crypto_Final(md, 32, ctx)); +} + #elif defined(ARCHIVE_CRYPTO_SHA256_MBEDTLS) static int @@ -973,31 +998,6 @@ __archive_sha256final(archive_sha256_ctx *ctx, void *md) return (ARCHIVE_OK); } -#elif defined(ARCHIVE_CRYPTO_SHA256_WIN) - -static int -__archive_sha256init(archive_sha256_ctx *ctx) -{ -#if defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA - return (win_crypto_init(ctx, BCRYPT_SHA256_ALGORITHM)); -#else - return (win_crypto_init(ctx, PROV_RSA_AES, CALG_SHA_256)); -#endif -} - -static int -__archive_sha256update(archive_sha256_ctx *ctx, const void *indata, - size_t insize) -{ - return (win_crypto_Update(ctx, indata, insize)); -} - -static int -__archive_sha256final(archive_sha256_ctx *ctx, void *md) -{ - return (win_crypto_Final(md, 32, ctx)); -} - #else static int @@ -1124,6 +1124,31 @@ __archive_sha384final(archive_sha384_ctx *ctx, void *md) return (ARCHIVE_OK); } +#elif defined(ARCHIVE_CRYPTO_SHA384_WIN) + +static int +__archive_sha384init(archive_sha384_ctx *ctx) +{ +#if defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA + return (win_crypto_init(ctx, BCRYPT_SHA384_ALGORITHM)); +#else + return (win_crypto_init(ctx, PROV_RSA_AES, CALG_SHA_384)); +#endif +} + +static int +__archive_sha384update(archive_sha384_ctx *ctx, const void *indata, + size_t insize) +{ + return (win_crypto_Update(ctx, indata, insize)); +} + +static int +__archive_sha384final(archive_sha384_ctx *ctx, void *md) +{ + return (win_crypto_Final(md, 48, ctx)); +} + #elif defined(ARCHIVE_CRYPTO_SHA384_MBEDTLS) static int @@ -1213,31 +1238,6 @@ __archive_sha384final(archive_sha384_ctx *ctx, void *md) return (ARCHIVE_OK); } -#elif defined(ARCHIVE_CRYPTO_SHA384_WIN) - -static int -__archive_sha384init(archive_sha384_ctx *ctx) -{ -#if defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA - return (win_crypto_init(ctx, BCRYPT_SHA384_ALGORITHM)); -#else - return (win_crypto_init(ctx, PROV_RSA_AES, CALG_SHA_384)); -#endif -} - -static int -__archive_sha384update(archive_sha384_ctx *ctx, const void *indata, - size_t insize) -{ - return (win_crypto_Update(ctx, indata, insize)); -} - -static int -__archive_sha384final(archive_sha384_ctx *ctx, void *md) -{ - return (win_crypto_Final(md, 48, ctx)); -} - #else static int @@ -1388,6 +1388,31 @@ __archive_sha512final(archive_sha512_ctx *ctx, void *md) return (ARCHIVE_OK); } +#elif defined(ARCHIVE_CRYPTO_SHA512_WIN) + +static int +__archive_sha512init(archive_sha512_ctx *ctx) +{ +#if defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA + return (win_crypto_init(ctx, BCRYPT_SHA512_ALGORITHM)); +#else + return (win_crypto_init(ctx, PROV_RSA_AES, CALG_SHA_512)); +#endif +} + +static int +__archive_sha512update(archive_sha512_ctx *ctx, const void *indata, + size_t insize) +{ + return (win_crypto_Update(ctx, indata, insize)); +} + +static int +__archive_sha512final(archive_sha512_ctx *ctx, void *md) +{ + return (win_crypto_Final(md, 64, ctx)); +} + #elif defined(ARCHIVE_CRYPTO_SHA512_MBEDTLS) static int @@ -1477,31 +1502,6 @@ __archive_sha512final(archive_sha512_ctx *ctx, void *md) return (ARCHIVE_OK); } -#elif defined(ARCHIVE_CRYPTO_SHA512_WIN) - -static int -__archive_sha512init(archive_sha512_ctx *ctx) -{ -#if defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA - return (win_crypto_init(ctx, BCRYPT_SHA512_ALGORITHM)); -#else - return (win_crypto_init(ctx, PROV_RSA_AES, CALG_SHA_512)); -#endif -} - -static int -__archive_sha512update(archive_sha512_ctx *ctx, const void *indata, - size_t insize) -{ - return (win_crypto_Update(ctx, indata, insize)); -} - -static int -__archive_sha512final(archive_sha512_ctx *ctx, void *md) -{ - return (win_crypto_Final(md, 64, ctx)); -} - #else static int @@ -1536,11 +1536,12 @@ __archive_sha512final(archive_sha512_ctx *ctx, void *md) * 1. libc * 2. libc2 * 3. libc3 - * 4. libSystem - * 5. Nettle - * 6. OpenSSL - * 7. libmd - * 8. Windows API + * 4. libmd + * 5. libSystem + * 6. Windows API + * 7. mbedTLS + * 8. Nettle + * 9. OpenSSL */ const struct archive_digest __archive_digest = { diff --git a/libarchive/archive_digest_private.h b/libarchive/archive_digest_private.h index c61b183f9..deb134e4f 100644 --- a/libarchive/archive_digest_private.h +++ b/libarchive/archive_digest_private.h @@ -193,6 +193,8 @@ typedef MD5_CTX archive_md5_ctx; typedef MD5_CTX archive_md5_ctx; #elif defined(ARCHIVE_CRYPTO_MD5_LIBSYSTEM) typedef CC_MD5_CTX archive_md5_ctx; +#elif defined(ARCHIVE_CRYPTO_MD5_WIN) +typedef Digest_CTX archive_md5_ctx; #elif defined(ARCHIVE_CRYPTO_MD5_MBEDTLS) #define ARCHIVE_CRYPTO_MBED 1 typedef mbedtls_md5_context archive_md5_ctx; @@ -201,8 +203,6 @@ typedef mbedtls_md5_context archive_md5_ctx; typedef struct md5_ctx archive_md5_ctx; #elif defined(ARCHIVE_CRYPTO_MD5_OPENSSL) typedef EVP_MD_CTX *archive_md5_ctx; -#elif defined(ARCHIVE_CRYPTO_MD5_WIN) -typedef Digest_CTX archive_md5_ctx; #else typedef unsigned char archive_md5_ctx; #endif @@ -229,6 +229,8 @@ typedef SHA1_CTX archive_sha1_ctx; typedef SHA1_CTX archive_sha1_ctx; #elif defined(ARCHIVE_CRYPTO_SHA1_LIBSYSTEM) typedef CC_SHA1_CTX archive_sha1_ctx; +#elif defined(ARCHIVE_CRYPTO_SHA1_WIN) +typedef Digest_CTX archive_sha1_ctx; #elif defined(ARCHIVE_CRYPTO_SHA1_MBEDTLS) #define ARCHIVE_CRYPTO_MBED 1 typedef mbedtls_sha1_context archive_sha1_ctx; @@ -237,8 +239,6 @@ typedef mbedtls_sha1_context archive_sha1_ctx; typedef struct sha1_ctx archive_sha1_ctx; #elif defined(ARCHIVE_CRYPTO_SHA1_OPENSSL) typedef EVP_MD_CTX *archive_sha1_ctx; -#elif defined(ARCHIVE_CRYPTO_SHA1_WIN) -typedef Digest_CTX archive_sha1_ctx; #else typedef unsigned char archive_sha1_ctx; #endif @@ -253,6 +253,8 @@ typedef SHA2_CTX archive_sha256_ctx; typedef SHA256_CTX archive_sha256_ctx; #elif defined(ARCHIVE_CRYPTO_SHA256_LIBSYSTEM) typedef CC_SHA256_CTX archive_sha256_ctx; +#elif defined(ARCHIVE_CRYPTO_SHA256_WIN) +typedef Digest_CTX archive_sha256_ctx; #elif defined(ARCHIVE_CRYPTO_SHA256_MBEDTLS) #define ARCHIVE_CRYPTO_MBED 1 typedef mbedtls_sha256_context archive_sha256_ctx; @@ -261,8 +263,6 @@ typedef mbedtls_sha256_context archive_sha256_ctx; typedef struct sha256_ctx archive_sha256_ctx; #elif defined(ARCHIVE_CRYPTO_SHA256_OPENSSL) typedef EVP_MD_CTX *archive_sha256_ctx; -#elif defined(ARCHIVE_CRYPTO_SHA256_WIN) -typedef Digest_CTX archive_sha256_ctx; #else typedef unsigned char archive_sha256_ctx; #endif @@ -275,6 +275,8 @@ typedef SHA384_CTX archive_sha384_ctx; typedef SHA2_CTX archive_sha384_ctx; #elif defined(ARCHIVE_CRYPTO_SHA384_LIBSYSTEM) typedef CC_SHA512_CTX archive_sha384_ctx; +#elif defined(ARCHIVE_CRYPTO_SHA384_WIN) +typedef Digest_CTX archive_sha384_ctx; #elif defined(ARCHIVE_CRYPTO_SHA384_MBEDTLS) #define ARCHIVE_CRYPTO_MBED 1 typedef mbedtls_sha512_context archive_sha384_ctx; @@ -283,8 +285,6 @@ typedef mbedtls_sha512_context archive_sha384_ctx; typedef struct sha384_ctx archive_sha384_ctx; #elif defined(ARCHIVE_CRYPTO_SHA384_OPENSSL) typedef EVP_MD_CTX *archive_sha384_ctx; -#elif defined(ARCHIVE_CRYPTO_SHA384_WIN) -typedef Digest_CTX archive_sha384_ctx; #else typedef unsigned char archive_sha384_ctx; #endif @@ -299,6 +299,8 @@ typedef SHA2_CTX archive_sha512_ctx; typedef SHA512_CTX archive_sha512_ctx; #elif defined(ARCHIVE_CRYPTO_SHA512_LIBSYSTEM) typedef CC_SHA512_CTX archive_sha512_ctx; +#elif defined(ARCHIVE_CRYPTO_SHA512_WIN) +typedef Digest_CTX archive_sha512_ctx; #elif defined(ARCHIVE_CRYPTO_SHA512_MBEDTLS) #define ARCHIVE_CRYPTO_MBED 1 typedef mbedtls_sha512_context archive_sha512_ctx; @@ -307,8 +309,6 @@ typedef mbedtls_sha512_context archive_sha512_ctx; typedef struct sha512_ctx archive_sha512_ctx; #elif defined(ARCHIVE_CRYPTO_SHA512_OPENSSL) typedef EVP_MD_CTX *archive_sha512_ctx; -#elif defined(ARCHIVE_CRYPTO_SHA512_WIN) -typedef Digest_CTX archive_sha512_ctx; #else typedef unsigned char archive_sha512_ctx; #endif