From c89365929bb5d4eda4d234b3d82e89192b74ca47 Mon Sep 17 00:00:00 2001 From: Steve Holme Date: Sun, 14 Apr 2019 02:09:52 +0100 Subject: md4: Move the GNU TLS gcrypt MD4 implementation out of the NTLM code --- lib/curl_md4.h | 6 ++++-- lib/curl_ntlm_core.c | 8 ++------ lib/md4.c | 36 +++++++++++++++++++++++++++++++++--- 3 files changed, 39 insertions(+), 11 deletions(-) (limited to 'lib') diff --git a/lib/curl_md4.h b/lib/curl_md4.h index b70ed0d88..f41e3921d 100644 --- a/lib/curl_md4.h +++ b/lib/curl_md4.h @@ -29,10 +29,12 @@ (defined(USE_OPENSSL) && defined(OPENSSL_NO_MD4)) || \ (defined(USE_MBEDTLS) && !defined(MBEDTLS_MD4_C)) +#define MD4_DIGEST_LENGTH 16 + void Curl_md4it(unsigned char *output, const unsigned char *input, size_t len); -#endif /* defined(USE_GNUTLS_NETTLE) || defined(USE_NSS) || - defined(USE_OS400CRYPTO) || +#endif /* defined(USE_GNUTLS_NETTLE) || defined(USE_GNUTLS) || + defined(USE_NSS) || defined(USE_OS400CRYPTO) || (defined(USE_OPENSSL) && defined(OPENSSL_NO_MD4)) || (defined(USE_MBEDTLS) && !defined(MBEDTLS_MD4_C)) */ diff --git a/lib/curl_ntlm_core.c b/lib/curl_ntlm_core.c index d840aed47..d1b508cb7 100644 --- a/lib/curl_ntlm_core.c +++ b/lib/curl_ntlm_core.c @@ -83,9 +83,9 @@ #elif defined(USE_GNUTLS) +# include "curl_md4.h" # include # define MD5_DIGEST_LENGTH 16 -# define MD4_DIGEST_LENGTH 16 #elif defined(USE_NSS) @@ -580,11 +580,7 @@ CURLcode Curl_ntlm_core_mk_nt_hash(struct Curl_easy *data, #elif defined(USE_GNUTLS_NETTLE) Curl_md4it(ntbuffer, pw, 2 * len); #elif defined(USE_GNUTLS) - gcry_md_hd_t MD4pw; - gcry_md_open(&MD4pw, GCRY_MD_MD4, 0); - gcry_md_write(MD4pw, pw, 2 * len); - memcpy(ntbuffer, gcry_md_read(MD4pw, 0), MD4_DIGEST_LENGTH); - gcry_md_close(MD4pw); + Curl_md4it(ntbuffer, pw, 2 * len); #elif defined(USE_NSS) Curl_md4it(ntbuffer, pw, 2 * len); #elif defined(USE_MBEDTLS) diff --git a/lib/md4.c b/lib/md4.c index 6e82990b5..6bc2c6f65 100644 --- a/lib/md4.c +++ b/lib/md4.c @@ -57,6 +57,34 @@ static void MD4_Final(unsigned char *result, MD4_CTX *ctx) md4_digest(ctx, MD4_DIGEST_SIZE, result); } +#elif defined(USE_GNUTLS) + +#include + +#include "curl_md4.h" +#include "warnless.h" +#include "curl_memory.h" +/* The last #include file should be: */ +#include "memdebug.h" + +typedef struct gcry_md_hd_t MD4_CTX; + +static void MD4_Init(MD4_CTX *ctx) +{ + gcry_md_open(ctx, GCRY_MD_MD4, 0); +} + +static void MD4_Update(MD4_CTX *ctx, const void *data, unsigned long size) +{ + gcry_md_write(*ctx, data, size); +} + +static void MD4_Final(unsigned char *result, MD4_CTX *ctx) +{ + memcpy(result, gcry_md_read(ctx, 0), MD4_DIGEST_LENGTH); + gcry_md_close(ctx); +} + #elif defined(USE_NSS) || defined(USE_OS400CRYPTO) || \ (defined(USE_OPENSSL) && defined(OPENSSL_NO_MD4)) || \ (defined(USE_MBEDTLS) && !defined(MBEDTLS_MD4_C)) @@ -357,8 +385,9 @@ static void MD4_Final(unsigned char *result, MD4_CTX *ctx) #endif /* CRYPTO LIBS */ -#if defined(USE_GNUTLS_NETTLE) || defined(USE_NSS) || \ - defined(USE_OS400CRYPTO) || \ +#if defined(USE_GNUTLS_NETTLE) || defined(USE_GNUTLS) || \ + defined(USE_NSS) || defined(USE_OS400CRYPTO) || \ + (defined(USE_OPENSSL) && defined(OPENSSL_NO_MD4)) || \ (defined(USE_OPENSSL) && defined(OPENSSL_NO_MD4)) || \ (defined(USE_MBEDTLS) && !defined(MBEDTLS_MD4_C)) @@ -370,7 +399,8 @@ void Curl_md4it(unsigned char *output, const unsigned char *input, size_t len) MD4_Final(output, &ctx); } -#endif /* defined(USE_NSS) || defined(USE_OS400CRYPTO) || +#endif /* defined(USE_GNUTLS_NETTLE) || defined(USE_GNUTLS) || + defined(USE_NSS) || defined(USE_OS400CRYPTO) || defined(USE_OS400CRYPTO) || (defined(USE_OPENSSL) && defined(OPENSSL_NO_MD4)) || (defined(USE_MBEDTLS) && !defined(MBEDTLS_MD4_C)) */ -- cgit v1.2.3