]> granicus.if.org Git - curl/commitdiff
md4: Move the mbed TLS MD4 implementation out of the NTLM code
authorSteve Holme <steve_holme@hotmail.com>
Sun, 14 Apr 2019 02:27:21 +0000 (03:27 +0100)
committerSteve Holme <steve_holme@hotmail.com>
Sun, 4 Aug 2019 17:01:28 +0000 (18:01 +0100)
lib/curl_md4.h
lib/curl_ntlm_core.c
lib/md4.c

index 828b21af4ceeff18ecf01d7123ebaf577127588c..60087803de6183985970ca155b91eaec8a641b16 100644 (file)
 #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 */
index abf4ac0b55e2c3949bb76528c3b5d5253992ce3a..c81dce5d3385d50f965bacde9bf8bc0d65fe26fc 100644 (file)
 #elif defined(USE_MBEDTLS)
 
 #  include <mbedtls/des.h>
-#  include <mbedtls/md4.h>
-#  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)
index 45a17b8b07cbe6017430279a1cdf1bae4b6bec37..0729c39549fb39d92b5b682c51f6432ae11e8d8d 100644 (file)
--- 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 <mbedtls/md4.h>
+
+#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) */