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

index b70ed0d881e01925865b94c6637b09b207a24480..f41e3921d40b0ab3a0a4bcf9a12ad16f30b33948 100644 (file)
     (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)) */
 
index d840aed475c95ec6098d5eb738ec1a6763acd4f5..d1b508cb75e6e5a093b589a38595b69aca59748c 100644 (file)
@@ -83,9 +83,9 @@
 
 #elif defined(USE_GNUTLS)
 
+#  include "curl_md4.h"
 #  include <gcrypt.h>
 #  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)
index 6e82990b5a8d31316ad6a6608fee56506ff12f60..6bc2c6f656dafc3912ee2ecb1865e9cc0fcdf177 100644 (file)
--- 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 <gcrypt.h>
+
+#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)) */