From: Tim Kientzle Date: Sat, 22 Oct 2011 22:19:22 +0000 (-0400) Subject: Support FreeBSD's libmd library for common message digest functions. X-Git-Tag: v3.0.4~2^2~169^2~12 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=dcaad58b2971576bd62b5b731e3346a95204939d;p=thirdparty%2Flibarchive.git Support FreeBSD's libmd library for common message digest functions. SVN-Revision: 3741 --- diff --git a/CMakeLists.txt b/CMakeLists.txt index cedef0231..04aa9a6f4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -272,6 +272,14 @@ IF(ENABLE_OPENSSL) FIND_PACKAGE(OpenSSL) ENDIF() +# FreeBSD libmd +CHECK_LIBRARY_EXISTS(md "MD5Init" "" LIBMD_FOUND) +IF(LIBMD_FOUND) + SET(CMAKE_REQUIRED_LIBRARIES "md") + FIND_LIBRARY(LIBMD_LIBRARY NAMES md) + LIST(APPEND ADDITIONAL_LIBS ${LIBMD_LIBRARY}) +ENDIF(LIBMD_FOUND) + # # How to prove that HASH functions, which have several names on various # platforms, can be mapped to archive_{hash name}_init, @@ -302,6 +310,9 @@ MACRO(CHECK_MD HASH IMPLEMENTATIONS) SET(HASH_REQUIRED_LIBS ${OPENSSL_LIBRARIES}) SET(TRY_HASH_REQUIRED_LIBS "-DLINK_LIBRARIES:STRING=${OPENSSL_LIBRARIES}") + ELSEIF("${IMPLEMENTATION}" MATCHES "^LIBMD$" AND LIBMD_FOUND) + SET(TRY_HASH_REQUIRED_LIBS + "-DLINK_LIBRARIES:STRING=${LIBMD_LIBRARY}") ENDIF ("${IMPLEMENTATION}" MATCHES "^OPENSSL$" AND OPENSSL_FOUND) SET(SOURCE "#define ${hash}_COMPILE_TEST @@ -433,12 +444,12 @@ ENDMACRO(CHECK_HASH_WIN HASH_LIST) # # Check MD5/RMD160/SHA support # -CHECK_MD(MD5 "LIBC;LIBSYSTEM;OPENSSL") +CHECK_MD(MD5 "LIBC;LIBMD;LIBSYSTEM;OPENSSL") CHECK_MD(RMD160 "LIBC;OPENSSL") -CHECK_MD(SHA1 "LIBC;LIBSYSTEM;OPENSSL") -CHECK_MD(SHA256 "LIBC;LIBC2;LIBC3;LIBSYSTEM;OPENSSL") +CHECK_MD(SHA1 "LIBC;LIBMD;LIBSYSTEM;OPENSSL") +CHECK_MD(SHA256 "LIBC;LIBC2;LIBC3;LIBMD;LIBSYSTEM;OPENSSL") CHECK_MD(SHA384 "LIBC;LIBC2;LIBC3;LIBSYSTEM;OPENSSL") -CHECK_MD(SHA512 "LIBC;LIBC2;LIBC3;LIBSYSTEM;OPENSSL") +CHECK_MD(SHA512 "LIBC;LIBC2;LIBC3;LIBMD;LIBSYSTEM;OPENSSL") CHECK_HASH_WIN("MD5;SHA1;SHA256;SHA384;SHA512") # diff --git a/libarchive/archive_hash.h b/libarchive/archive_hash.h index b180da671..da67a3026 100644 --- a/libarchive/archive_hash.h +++ b/libarchive/archive_hash.h @@ -79,6 +79,13 @@ typedef MD5_CTX archive_md5_ctx; # define archive_md5_init(ctx) MD5Init(ctx) # define archive_md5_final(ctx, buf) MD5Final(buf, ctx) # define archive_md5_update(ctx, buf, n) MD5Update(ctx, buf, n) +#elif defined(ARCHIVE_HASH_MD5_LIBMD) +# include +# define ARCHIVE_HAS_MD5 +typedef MD5_CTX archive_md5_ctx; +# define archive_md5_init(ctx) MD5Init(ctx) +# define archive_md5_final(ctx, buf) MD5Final(buf, ctx) +# define archive_md5_update(ctx, buf, n) MD5Update(ctx, buf, n) #elif defined(ARCHIVE_HASH_MD5_LIBSYSTEM) # include # define ARCHIVE_HAS_MD5 @@ -125,6 +132,13 @@ typedef SHA1_CTX archive_sha1_ctx; # define archive_sha1_init(ctx) SHA1Init(ctx) # define archive_sha1_final(ctx, buf) SHA1Final(buf, ctx) # define archive_sha1_update(ctx, buf, n) SHA1Update(ctx, buf, n) +#elif defined(ARCHIVE_HASH_SHA1_LIBMD) +# include +# define ARCHIVE_HAS_SHA1 +typedef SHA1_CTX archive_sha1_ctx; +# define archive_sha1_init(ctx) SHA1_Init(ctx) +# define archive_sha1_final(ctx, buf) SHA1_Final(buf, ctx) +# define archive_sha1_update(ctx, buf, n) SHA1_Update(ctx, buf, n) #elif defined(ARCHIVE_HASH_SHA1_LIBSYSTEM) # include # define ARCHIVE_HAS_SHA1 @@ -169,6 +183,13 @@ typedef SHA2_CTX archive_sha256_ctx; # define archive_sha256_init(ctx) SHA256Init(ctx) # define archive_sha256_final(ctx, buf) SHA256Final(buf, ctx) # define archive_sha256_update(ctx, buf, n) SHA256Update(ctx, buf, n) +#elif defined(ARCHIVE_HASH_SHA256_LIBMD) +# include +# define ARCHIVE_HAS_SHA256 +typedef SHA256_CTX archive_sha256_ctx; +# define archive_sha256_init(ctx) SHA256_Init(ctx) +# define archive_sha256_final(ctx, buf) SHA256_Final(buf, ctx) +# define archive_sha256_update(ctx, buf, n) SHA256_Update(ctx, buf, n) #elif defined(ARCHIVE_HASH_SHA256_LIBSYSTEM) # include # define ARCHIVE_HAS_SHA256 @@ -257,6 +278,13 @@ typedef SHA2_CTX archive_sha512_ctx; # define archive_sha512_init(ctx) SHA512Init(ctx) # define archive_sha512_final(ctx, buf) SHA512Final(buf, ctx) # define archive_sha512_update(ctx, buf, n) SHA512Update(ctx, buf, n) +#elif defined(ARCHIVE_HASH_SHA512_LIBMD) +# include +# define ARCHIVE_HAS_SHA512 +typedef SHA512_CTX archive_sha512_ctx; +# define archive_sha512_init(ctx) SHA512_Init(ctx) +# define archive_sha512_final(ctx, buf) SHA512_Final(buf, ctx) +# define archive_sha512_update(ctx, buf, n) SHA512_Update(ctx, buf, n) #elif defined(ARCHIVE_HASH_SHA512_LIBSYSTEM) # include # define ARCHIVE_HAS_SHA512