Factor out create_hexadecimal_hash_of_host()
authorFabian Keil <fk@fabiankeil.de>
Wed, 26 Jun 2024 14:23:46 +0000 (16:23 +0200)
committerFabian Keil <fk@fabiankeil.de>
Thu, 11 Jul 2024 08:07:08 +0000 (10:07 +0200)
openssl.c
ssl.c
ssl_common.c
ssl_common.h
wolfssl.c

index d647543..f392037 100644 (file)
--- a/openssl.c
+++ b/openssl.c
@@ -718,24 +718,11 @@ exit:
  *********************************************************************/
 static int host_to_hash(struct client_state *csp)
 {
-   int ret = 0;
-   size_t i;
-
    SHA256((unsigned char *)csp->http->host, strlen(csp->http->host),
       csp->http->hash_of_host);
 
-   /* Converting hash into string with hex */
-   for (i = 0; i < HASH_OF_HOST_BUF_SIZE; i++)
-   {
-      if ((ret = sprintf((char *)csp->http->hash_of_host_hex + 2 * i, "%02x",
-         csp->http->hash_of_host[i])) < 0)
-      {
-         log_error(LOG_LEVEL_ERROR, "Sprintf return value: %d", ret);
-         return -1;
-      }
-   }
+   return create_hexadecimal_hash_of_host(csp);
 
-   return 0;
 }
 
 
diff --git a/ssl.c b/ssl.c
index 0496354..e8007cd 100644 (file)
--- a/ssl.c
+++ b/ssl.c
@@ -1799,24 +1799,10 @@ static int ssl_verify_callback(void *csp_void, mbedtls_x509_crt *crt,
  *********************************************************************/
 static int host_to_hash(struct client_state *csp)
 {
-   int ret;
-   size_t i;
-
    mbedtls_sha256((unsigned char *)csp->http->host,
       strlen(csp->http->host), csp->http->hash_of_host, 0);
 
-   /* Converting hash into string with hex */
-   for (i = 0; i < HASH_OF_HOST_BUF_SIZE; i++)
-   {
-      if ((ret = sprintf((char *)csp->http->hash_of_host_hex + 2 * i, "%02x",
-         csp->http->hash_of_host[i])) < 0)
-      {
-         log_error(LOG_LEVEL_ERROR, "Sprintf return value: %d", ret);
-         return -1;
-      }
-   }
-
-   return 0;
+   return create_hexadecimal_hash_of_host(csp);
 
 }
 
index 45f1e76..1bf866a 100644 (file)
@@ -736,3 +736,38 @@ extern int enforce_sane_certificate_state(const char *certificate, const char *k
    return 0;
 
 }
+
+
+/*********************************************************************
+ *
+ * Function    :  create_hexadecimal_hash_of_host
+ *
+ * Description :  Converts the binary hash of a host into a
+ *                hexadecimal string.
+ *
+ * Parameters  :
+ *          1  :  csp = Current client state (buffers, headers, etc...)
+ *
+ * Returns     : -1 => Error while creating hash
+ *                0 => Hash created successfully
+ *
+ *********************************************************************/
+int create_hexadecimal_hash_of_host(struct client_state *csp)
+{
+   int i;
+   int ret;
+
+   for (i = 0; i < HASH_OF_HOST_BUF_SIZE; i++)
+   {
+      ret = sprintf((char *)csp->http->hash_of_host_hex + 2 * i, "%02x",
+         csp->http->hash_of_host[i]);
+      if (ret < 0)
+      {
+         log_error(LOG_LEVEL_ERROR, "sprintf() return value: %d", ret);
+         return -1;
+      }
+   }
+
+   return 0;
+
+}
index 66fb537..3458b23 100644 (file)
@@ -73,5 +73,6 @@ extern unsigned long get_certificate_serial(struct client_state *csp);
 extern int get_certificate_valid_from_date(char *buffer, size_t buffer_size, const char *fmt);
 extern int get_certificate_valid_to_date(char *buffer, size_t buffer_size, const char *fmt);
 extern int enforce_sane_certificate_state(const char *certificate, const char *key);
+extern int create_hexadecimal_hash_of_host(struct client_state *csp);
 
 #endif /* ndef SSL_COMMON_H_INCLUDED */
index 717be05..78880be 100644 (file)
--- a/wolfssl.c
+++ b/wolfssl.c
@@ -737,7 +737,6 @@ exit:
 static int host_to_hash(struct client_state *csp)
 {
    int ret;
-   size_t i;
 
    ret = wc_Sha256Hash((const byte *)csp->http->host,
       (word32)strlen(csp->http->host), (byte *)csp->http->hash_of_host);
@@ -746,20 +745,7 @@ static int host_to_hash(struct client_state *csp)
         return -1;
    }
 
-   /* Converting hash into string with hex */
-   for (i = 0; i < HASH_OF_HOST_BUF_SIZE; i++)
-   {
-      ret = snprintf((char *)csp->http->hash_of_host_hex + 2 * i,
-         sizeof(csp->http->hash_of_host_hex) - 2 * i,
-         "%02x", csp->http->hash_of_host[i]);
-      if (ret < 0)
-      {
-         log_error(LOG_LEVEL_ERROR, "sprintf() failed. Return value: %d", ret);
-         return -1;
-      }
-   }
-
-   return 0;
+   return create_hexadecimal_hash_of_host(csp);
 
 }