]> granicus.if.org Git - curl/commitdiff
vtls: move md5sum into the Curl_ssl struct
authorJohannes Schindelin <johannes.schindelin@gmx.de>
Thu, 22 Jun 2017 23:04:56 +0000 (01:04 +0200)
committerDaniel Stenberg <daniel@haxx.se>
Mon, 28 Aug 2017 12:56:56 +0000 (14:56 +0200)
The MD5 summing is also an SSL backend-specific function. So let's
include it, offering the previous fall-back code as a separate function
now: Curl_none_md5sum(). To allow for that, the signature had to be
changed so that an error could be returned from the implementation
(Curl_none_md5sum() can run out of memory).

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
16 files changed:
lib/vtls/axtls.c
lib/vtls/cyassl.c
lib/vtls/darwinssl.c
lib/vtls/darwinssl.h
lib/vtls/gskit.c
lib/vtls/gtls.c
lib/vtls/gtls.h
lib/vtls/mbedtls.c
lib/vtls/nss.c
lib/vtls/nssg.h
lib/vtls/openssl.c
lib/vtls/openssl.h
lib/vtls/polarssl.c
lib/vtls/schannel.c
lib/vtls/vtls.c
lib/vtls/vtls.h

index 8004e4ad7985a50676e88e523aed779052d29f34..138a80ade80e40f3615bf0fd41deb40d871ed221 100644 (file)
@@ -721,7 +721,8 @@ const struct Curl_ssl Curl_ssl_axtls = {
   Curl_none_set_engine,           /* set_engine */
   Curl_none_set_engine_default,   /* set_engine_default */
   Curl_none_engines_list,         /* engines_list */
-  Curl_none_false_start           /* false_start */
+  Curl_none_false_start,          /* false_start */
+  Curl_none_md5sum                /* md5sum */
 };
 
 const struct Curl_ssl *Curl_ssl = &Curl_ssl_axtls;
index 58c5d48b54c0724c10aae38188e1d15d51ee2b2e..74052318fd2ac6b1386cb62e4b5eaca2e4a4df8e 100644 (file)
@@ -970,7 +970,8 @@ const struct Curl_ssl Curl_ssl_cyassl = {
   Curl_none_set_engine,            /* set_engine */
   Curl_none_set_engine_default,    /* set_engine_default */
   Curl_none_engines_list,          /* engines_list */
-  Curl_none_false_start            /* false_start */
+  Curl_none_false_start,           /* false_start */
+  Curl_none_md5sum                 /* md5sum */
 };
 
 const struct Curl_ssl *Curl_ssl = &Curl_ssl_cyassl;
index cedd0e00e2e5404b44d17320d92b7ae540036afe..71e5a9790ff4d23fe5fa43365b4720eadd40c142 100644 (file)
@@ -2723,13 +2723,14 @@ CURLcode Curl_darwinssl_random(struct Curl_easy *data UNUSED_PARAM,
   return CURLE_OK;
 }
 
-void Curl_darwinssl_md5sum(unsigned char *tmp, /* input */
-                           size_t tmplen,
-                           unsigned char *md5sum, /* output */
-                           size_t md5len)
+static CURLcode Curl_darwinssl_md5sum(unsigned char *tmp, /* input */
+                                      size_t tmplen,
+                                      unsigned char *md5sum, /* output */
+                                      size_t md5len)
 {
   (void)md5len;
   (void)CC_MD5(tmp, (CC_LONG)tmplen, md5sum);
+  return CURLE_OK;
 }
 
 void Curl_darwinssl_sha256sum(const unsigned char *tmp, /* input */
@@ -2875,7 +2876,8 @@ const struct Curl_ssl Curl_ssl_darwinssl = {
   Curl_none_set_engine,               /* set_engine */
   Curl_none_set_engine_default,       /* set_engine_default */
   Curl_none_engines_list,             /* engines_list */
-  Curl_darwinssl_false_start          /* false_start */
+  Curl_darwinssl_false_start,         /* false_start */
+  Curl_darwinssl_md5sum               /* md5sum */
 };
 
 const struct Curl_ssl *Curl_ssl = &Curl_ssl_darwinssl;
index 967ba511f26a11043461e30c9e683773529a6ca1..4815cec1e87a75e727e7af15beadb96b5c947b08 100644 (file)
@@ -44,10 +44,6 @@ bool Curl_darwinssl_data_pending(const struct connectdata *conn,
 
 CURLcode Curl_darwinssl_random(struct Curl_easy *data, unsigned char *entropy,
                                size_t length);
-void Curl_darwinssl_md5sum(unsigned char *tmp, /* input */
-                           size_t tmplen,
-                           unsigned char *md5sum, /* output */
-                           size_t md5len);
 void Curl_darwinssl_sha256sum(const unsigned char *tmp, /* input */
                               size_t tmplen,
                               unsigned char *sha256sum, /* output */
@@ -78,7 +74,6 @@ extern const struct Curl_ssl Curl_ssl_darwinssl;
 #define have_curlssl_pinnedpubkey 1
 #endif /* DARWIN_SSL_PINNEDPUBKEY */
 
-#define curlssl_md5sum(a,b,c,d) Curl_darwinssl_md5sum(a,b,c,d)
 #define curlssl_sha256sum(a,b,c,d) Curl_darwinssl_sha256sum(a, b, c, d)
 
 #endif /* USE_DARWINSSL */
index ee09f4d8856ef1bc8a694714d4f78dda9a4fa884..ed1e39dbc114976e3c91e983747fe3caeb180195 100644 (file)
@@ -1354,7 +1354,8 @@ const struct Curl_ssl Curl_ssl_gskit = {
   Curl_none_set_engine,           /* set_engine */
   Curl_none_set_engine_default,   /* set_engine_default */
   Curl_none_engines_list,         /* engines_list */
-  Curl_none_false_start           /* false_start */
+  Curl_none_false_start,          /* false_start */
+  Curl_none_md5sum                /* md5sum */
 };
 
 const struct Curl_ssl *Curl_ssl = &Curl_ssl_gskit;
index 303afafba51a2f753aacbbb89c629aacf06e0696..ac5fe33217d0608aaa5eb62ca273e6bea92082a6 100644 (file)
@@ -1738,10 +1738,10 @@ CURLcode Curl_gtls_random(struct Curl_easy *data,
   return CURLE_OK;
 }
 
-void Curl_gtls_md5sum(unsigned char *tmp, /* input */
-                      size_t tmplen,
-                      unsigned char *md5sum, /* output */
-                      size_t md5len)
+static CURLcode Curl_gtls_md5sum(unsigned char *tmp, /* input */
+                                 size_t tmplen,
+                                 unsigned char *md5sum, /* output */
+                                 size_t md5len)
 {
 #if defined(USE_GNUTLS_NETTLE)
   struct md5_ctx MD5pw;
@@ -1755,6 +1755,7 @@ void Curl_gtls_md5sum(unsigned char *tmp, /* input */
   memcpy(md5sum, gcry_md_read(MD5pw, 0), md5len);
   gcry_md_close(MD5pw);
 #endif
+  return CURLE_OK;
 }
 
 void Curl_gtls_sha256sum(const unsigned char *tmp, /* input */
@@ -1804,7 +1805,8 @@ const struct Curl_ssl Curl_ssl_gnutls = {
   Curl_none_set_engine,          /* set_engine */
   Curl_none_set_engine_default,  /* set_engine_default */
   Curl_none_engines_list,        /* engines_list */
-  Curl_none_false_start          /* false_start */
+  Curl_none_false_start,         /* false_start */
+  Curl_gtls_md5sum               /* md5sum */
 };
 
 const struct Curl_ssl *Curl_ssl = &Curl_ssl_gnutls;
index 555759c60ac08f1e29610bca11fc4d9c4597075b..626dbd33fbaeefb92acf4cdbc282927db599a015 100644 (file)
@@ -46,10 +46,6 @@ int Curl_gtls_shutdown(struct connectdata *conn, int sockindex);
 CURLcode Curl_gtls_random(struct Curl_easy *data,
                           unsigned char *entropy,
                           size_t length);
-void Curl_gtls_md5sum(unsigned char *tmp, /* input */
-                      size_t tmplen,
-                      unsigned char *md5sum, /* output */
-                      size_t md5len);
 void Curl_gtls_sha256sum(const unsigned char *tmp, /* input */
                       size_t tmplen,
                       unsigned char *sha256sum, /* output */
@@ -74,7 +70,6 @@ extern const struct Curl_ssl Curl_ssl_gnutls;
 /* this backend supports CURLOPT_PINNEDPUBLICKEY */
 #define have_curlssl_pinnedpubkey 1
 
-#define curlssl_md5sum(a,b,c,d) Curl_gtls_md5sum(a,b,c,d)
 #define curlssl_sha256sum(a,b,c,d) Curl_gtls_sha256sum(a,b,c,d)
 
 #endif /* USE_GNUTLS */
index 907077a6cb46c4ca681f8ce4826034ec58a63b6d..68ad9a499b565a7878f69ae2c5948c635a113894 100644 (file)
@@ -1026,7 +1026,8 @@ const struct Curl_ssl Curl_ssl_mbedtls = {
   Curl_none_set_engine,             /* set_engine */
   Curl_none_set_engine_default,     /* set_engine_default */
   Curl_none_engines_list,           /* engines_list */
-  Curl_none_false_start             /* false_start */
+  Curl_none_false_start,            /* false_start */
+  Curl_none_md5sum                  /* md5sum */
 };
 
 const struct Curl_ssl *Curl_ssl = &Curl_ssl_mbedtls;
index 17109b48d0435bf93605220c941d2f05cdd70f9f..9490549a961668260142eb1edf1b3dcfe0562ef8 100644 (file)
@@ -2278,10 +2278,10 @@ CURLcode Curl_nss_random(struct Curl_easy *data,
   return CURLE_OK;
 }
 
-void Curl_nss_md5sum(unsigned char *tmp, /* input */
-                     size_t tmplen,
-                     unsigned char *md5sum, /* output */
-                     size_t md5len)
+static CURLcode Curl_nss_md5sum(unsigned char *tmp, /* input */
+                                size_t tmplen,
+                                unsigned char *md5sum, /* output */
+                                size_t md5len)
 {
   PK11Context *MD5pw = PK11_CreateDigestContext(SEC_OID_MD5);
   unsigned int MD5out;
@@ -2289,6 +2289,8 @@ void Curl_nss_md5sum(unsigned char *tmp, /* input */
   PK11_DigestOp(MD5pw, tmp, curlx_uztoui(tmplen));
   PK11_DigestFinal(MD5pw, md5sum, &MD5out, curlx_uztoui(md5len));
   PK11_DestroyContext(MD5pw, PR_TRUE);
+
+  return CURLE_OK;
 }
 
 void Curl_nss_sha256sum(const unsigned char *tmp, /* input */
@@ -2343,7 +2345,8 @@ const struct Curl_ssl Curl_ssl_nss = {
   Curl_none_set_engine,         /* set_engine */
   Curl_none_set_engine_default, /* set_engine_default */
   Curl_none_engines_list,       /* engines_list */
-  Curl_nss_false_start          /* false_start */
+  Curl_nss_false_start,         /* false_start */
+  Curl_nss_md5sum               /* md5sum */
 };
 
 const struct Curl_ssl *Curl_ssl = &Curl_ssl_nss;
index c5b3353cf256e16f9735042c5737e4ad3ce892e0..d5473bfb9cd2fda6e551d435c09105d6f1dbe414 100644 (file)
@@ -51,11 +51,6 @@ CURLcode Curl_nss_random(struct Curl_easy *data,
                          unsigned char *entropy,
                          size_t length);
 
-void Curl_nss_md5sum(unsigned char *tmp, /* input */
-                     size_t tmplen,
-                     unsigned char *md5sum, /* output */
-                     size_t md5len);
-
 void Curl_nss_sha256sum(const unsigned char *tmp, /* input */
                      size_t tmplen,
                      unsigned char *sha256sum, /* output */
@@ -82,7 +77,6 @@ extern const struct Curl_ssl Curl_ssl_nss;
 /* this backends supports CURLOPT_PINNEDPUBLICKEY */
 #define have_curlssl_pinnedpubkey 1
 
-#define curlssl_md5sum(a,b,c,d) Curl_nss_md5sum(a,b,c,d)
 #define curlssl_sha256sum(a,b,c,d) Curl_nss_sha256sum(a,b,c,d)
 
 #endif /* USE_NSS */
index 1484b9b1cd5c545b57906eb84459c392a62ce095..e24c79515e42fe3a52f16d7ba971f5e2404f8349 100644 (file)
@@ -3350,16 +3350,17 @@ CURLcode Curl_ossl_random(struct Curl_easy *data, unsigned char *entropy,
   return (rc == 1 ? CURLE_OK : CURLE_FAILED_INIT);
 }
 
-void Curl_ossl_md5sum(unsigned char *tmp, /* input */
-                      size_t tmplen,
-                      unsigned char *md5sum /* output */,
-                      size_t unused)
+static CURLcode Curl_ossl_md5sum(unsigned char *tmp, /* input */
+                                 size_t tmplen,
+                                 unsigned char *md5sum /* output */,
+                                 size_t unused)
 {
   MD5_CTX MD5pw;
   (void)unused;
   MD5_Init(&MD5pw);
   MD5_Update(&MD5pw, tmp, tmplen);
   MD5_Final(md5sum, &MD5pw);
+  return CURLE_OK;
 }
 
 #if (OPENSSL_VERSION_NUMBER >= 0x0090800fL) && !defined(OPENSSL_NO_SHA256)
@@ -3405,7 +3406,8 @@ const struct Curl_ssl Curl_ssl_openssl = {
   Curl_ossl_set_engine,          /* set_engine */
   Curl_ossl_set_engine_default,  /* set_engine_default */
   Curl_ossl_engines_list,        /* engines_list */
-  Curl_none_false_start          /* false_start */
+  Curl_none_false_start,         /* false_start */
+  Curl_ossl_md5sum               /* md5sum */
 };
 
 const struct Curl_ssl *Curl_ssl = &Curl_ssl_openssl;
index a62a2e7ff266e45f15ec3caf117d62d68508c122..4abc6d4c45273d0df6a9e2798e6b7bb422acff5a 100644 (file)
@@ -68,10 +68,6 @@ bool Curl_ossl_data_pending(const struct connectdata *conn,
 /* return 0 if a find random is filled in */
 CURLcode Curl_ossl_random(struct Curl_easy *data, unsigned char *entropy,
                           size_t length);
-void Curl_ossl_md5sum(unsigned char *tmp, /* input */
-                      size_t tmplen,
-                      unsigned char *md5sum /* output */,
-                      size_t unused);
 void Curl_ossl_sha256sum(const unsigned char *tmp, /* input */
                       size_t tmplen,
                       unsigned char *sha256sum /* output */,
@@ -99,7 +95,6 @@ extern const struct Curl_ssl Curl_ssl_openssl;
 /* this backend supports CURLOPT_PINNEDPUBLICKEY */
 #define have_curlssl_pinnedpubkey 1
 
-#define curlssl_md5sum(a,b,c,d) Curl_ossl_md5sum(a,b,c,d)
 #if (OPENSSL_VERSION_NUMBER >= 0x0090800fL) && !defined(OPENSSL_NO_SHA256)
 #define curlssl_sha256sum(a,b,c,d) Curl_ossl_sha256sum(a,b,c,d)
 #endif
index 8feaa95afc6e6295797881966c1d53f502bf41c3..f2a7c93b8c51e3b35f36e2e761d4d05486b5776c 100644 (file)
@@ -892,7 +892,8 @@ const struct Curl_ssl Curl_ssl_polarssl = {
   Curl_none_set_engine,              /* set_engine */
   Curl_none_set_engine_default,      /* set_engine_default */
   Curl_none_engines_list,            /* engines_list */
-  Curl_none_false_start              /* false_start */
+  Curl_none_false_start,             /* false_start */
+  Curl_none_md5sum                   /* md5sum */
 };
 
 const struct Curl_ssl *Curl_ssl = &Curl_ssl_polarssl;
index b8c11d5f84242cc79fdc55fc6f2fec83c97086ed..ea3c221f337cad3ec6df7e24f69bddd90ed96057 100644 (file)
@@ -1745,7 +1745,8 @@ const struct Curl_ssl Curl_ssl_schannel = {
   Curl_none_set_engine,              /* set_engine */
   Curl_none_set_engine_default,      /* set_engine_default */
   Curl_none_engines_list,            /* engines_list */
-  Curl_none_false_start              /* false_start */
+  Curl_none_false_start,             /* false_start */
+  Curl_none_md5sum                   /* md5sum */
 };
 
 const struct Curl_ssl *Curl_ssl = &Curl_ssl_schannel;
index 44faf1c33665033d904daa1bea6c35923835e7f9..88ee1a7596b11e29027f724a100093767a66ef53 100644 (file)
@@ -938,20 +938,7 @@ CURLcode Curl_ssl_md5sum(unsigned char *tmp, /* input */
                          unsigned char *md5sum, /* output */
                          size_t md5len)
 {
-#ifdef curlssl_md5sum
-  curlssl_md5sum(tmp, tmplen, md5sum, md5len);
-#else
-  MD5_context *MD5pw;
-
-  (void) md5len;
-
-  MD5pw = Curl_MD5_init(Curl_DIGEST_MD5);
-  if(!MD5pw)
-    return CURLE_OUT_OF_MEMORY;
-  Curl_MD5_update(MD5pw, tmp, curlx_uztoui(tmplen));
-  Curl_MD5_final(MD5pw, md5sum);
-#endif
-  return CURLE_OK;
+  return Curl_ssl->md5sum(tmp, tmplen, md5sum, md5len);
 }
 #endif
 
@@ -1055,4 +1042,19 @@ bool Curl_none_false_start(void)
   return FALSE;
 }
 
+CURLcode Curl_none_md5sum(unsigned char *input, size_t inputlen,
+                          unsigned char *md5sum, size_t md5len UNUSED_PARAM)
+{
+  MD5_context *MD5pw;
+
+  (void)md5len;
+
+  MD5pw = Curl_MD5_init(Curl_DIGEST_MD5);
+  if(!MD5pw)
+    return CURLE_OUT_OF_MEMORY;
+  Curl_MD5_update(MD5pw, input, curlx_uztoui(inputlen));
+  Curl_MD5_final(MD5pw, md5sum);
+  return CURLE_OK;
+}
+
 #endif /* USE_SSL */
index a568999e8114b3a433cfc752318295a9770ac4bb..f95b9236edb2829eb63daba1d8159e48bbc70620 100644 (file)
@@ -54,6 +54,9 @@ struct Curl_ssl {
   struct curl_slist *(*engines_list)(struct Curl_easy *data);
 
   bool (*false_start)(void);
+
+  CURLcode (*md5sum)(unsigned char *input, size_t inputlen,
+                     unsigned char *md5sum, size_t md5sumlen);
 };
 
 #ifdef USE_SSL
@@ -74,6 +77,8 @@ CURLcode Curl_none_set_engine(struct Curl_easy *data, const char *engine);
 CURLcode Curl_none_set_engine_default(struct Curl_easy *data);
 struct curl_slist *Curl_none_engines_list(struct Curl_easy *data);
 bool Curl_none_false_start(void);
+CURLcode Curl_none_md5sum(unsigned char *input, size_t inputlen,
+                          unsigned char *md5sum, size_t md5len);
 
 #include "openssl.h"        /* OpenSSL versions */
 #include "gtls.h"           /* GnuTLS versions */