From 2ff216f1b01e2b345e1b011ca5f72ef3a2ece954 Mon Sep 17 00:00:00 2001 From: Steve Holme Date: Sun, 14 Apr 2019 03:27:21 +0100 Subject: md4: Move the mbed TLS MD4 implementation out of the NTLM code --- lib/curl_md4.h | 10 ++++------ lib/curl_ntlm_core.c | 9 +-------- lib/md4.c | 53 +++++++++++++++++++++++++++++++++++++++++++++------- 3 files changed, 51 insertions(+), 21 deletions(-) (limited to 'lib') diff --git a/lib/curl_md4.h b/lib/curl_md4.h index 828b21af4..60087803d 100644 --- a/lib/curl_md4.h +++ b/lib/curl_md4.h @@ -27,17 +27,15 @@ #if defined(USE_GNUTLS_NETTLE) || defined(USE_GNUTLS) || \ defined(USE_OPENSSL) || defined(USE_SECTRANSP) || \ defined(USE_WIN32_CRYPTO) || defined(USE_NSS) || \ - defined(USE_OS400CRYPTO) || \ - (defined(USE_MBEDTLS) && !defined(MBEDTLS_MD4_C)) + defined(USE_OS400CRYPTO) || defined(USE_MBEDTLS) #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_GNUTLS) || - defined(USE_OPENSSL) || defined(USE_SECTRANSP) || \ - defined(USE_WIN32_CRYPTO) || defined(USE_NSS) || \ - defined(USE_OS400CRYPTO) || \ - (defined(USE_MBEDTLS) && !defined(MBEDTLS_MD4_C)) */ + defined(USE_OPENSSL) || defined(USE_SECTRANSP) || + defined(USE_WIN32_CRYPTO) || defined(USE_NSS) || + defined(USE_OS400CRYPTO) || defined(USE_MBEDTLS) */ #endif /* HEADER_CURL_MD4_H */ diff --git a/lib/curl_ntlm_core.c b/lib/curl_ntlm_core.c index abf4ac0b5..c81dce5d3 100644 --- a/lib/curl_ntlm_core.c +++ b/lib/curl_ntlm_core.c @@ -94,10 +94,7 @@ #elif defined(USE_MBEDTLS) # include -# include -# if !defined(MBEDTLS_MD4_C) -# include "curl_md4.h" -# endif +# include "curl_md4.h" #elif defined(USE_SECTRANSP) @@ -575,11 +572,7 @@ CURLcode Curl_ntlm_core_mk_nt_hash(struct Curl_easy *data, #elif defined(USE_NSS) Curl_md4it(ntbuffer, pw, 2 * len); #elif defined(USE_MBEDTLS) -#if defined(MBEDTLS_MD4_C) - mbedtls_md4(pw, 2 * len, ntbuffer); -#else Curl_md4it(ntbuffer, pw, 2 * len); -#endif #elif defined(USE_SECTRANSP) Curl_md4it(ntbuffer, pw, 2 * len); #elif defined(USE_OS400CRYPTO) diff --git a/lib/md4.c b/lib/md4.c index 45a17b8b0..0729c3954 100644 --- a/lib/md4.c +++ b/lib/md4.c @@ -180,6 +180,48 @@ static void MD4_Final(unsigned char *result, MD4_CTX *ctx) CryptReleaseContext(ctx->hCryptProv, 0); } +#elif(defined(USE_MBEDTLS) && defined(MBEDTLS_MD4_C)) + +#include + +#include "curl_md4.h" +#include "warnless.h" +#include "curl_memory.h" +/* The last #include file should be: */ +#include "memdebug.h" + +typedef struct { + void *data; + unsigned long size; +} MD4_CTX; + +static void MD4_Init(MD4_CTX *ctx) +{ + ctx->data = NULL; + ctx->size = 0; +} + +static void MD4_Update(MD4_CTX *ctx, const void *data, unsigned long size) +{ + if(ctx->data == NULL) { + ctx->data = malloc(size); + if(ctx->data != NULL) { + memcpy(ctx->data, data, size); + ctx->size = size; + } + } +} + +static void MD4_Final(unsigned char *result, MD4_CTX *ctx) +{ + if(ctx->data != NULL) { + mbedtls_md4(ctx->data, ctx->size, result); + + Curl_safefree(ctx->data); + ctx->size = 0; + } +} + #elif defined(USE_NSS) || defined(USE_OS400CRYPTO) || \ (defined(USE_OPENSSL) && defined(OPENSSL_NO_MD4)) || \ (defined(USE_MBEDTLS) && !defined(MBEDTLS_MD4_C)) @@ -479,9 +521,7 @@ static void MD4_Final(unsigned char *result, MD4_CTX *ctx) #if defined(USE_GNUTLS_NETTLE) || defined(USE_GNUTLS) || \ defined(USE_OPENSSL) || defined(USE_SECTRANSP) || \ defined(USE_WIN32_CRYPTO) || defined(USE_NSS) || \ - defined(USE_OS400CRYPTO) || \ - (defined(USE_OPENSSL) && defined(OPENSSL_NO_MD4)) || \ - (defined(USE_MBEDTLS) && !defined(MBEDTLS_MD4_C)) + defined(USE_OS400CRYPTO) || defined(USE_MBEDTLS) void Curl_md4it(unsigned char *output, const unsigned char *input, size_t len) { @@ -492,7 +532,6 @@ void Curl_md4it(unsigned char *output, const unsigned char *input, size_t len) } #endif /* defined(USE_GNUTLS_NETTLE) || defined(USE_GNUTLS) || - defined(USE_OPENSSL) || defined(USE_SECTRANSP) || \ - defined(USE_WIN32_CRYPTO) || defined(USE_NSS) || \ - defined(USE_OS400CRYPTO) || \ - (defined(USE_MBEDTLS) && !defined(MBEDTLS_MD4_C)) */ + defined(USE_OPENSSL) || defined(USE_SECTRANSP) || + defined(USE_WIN32_CRYPTO) || defined(USE_NSS) || + defined(USE_OS400CRYPTO) || defined(USE_MBEDTLS) */ -- cgit v1.2.3