Blame SOURCES/0012-openssl-Use-EVP_MAC_update-instead-HMAC_Update-on-Op.patch

28a59a
From d67cbd4e6dc7ac83fd0c06a382a89d12f921628a Mon Sep 17 00:00:00 2001
28a59a
From: Petr Gotthard <petr.gotthard@centrum.cz>
28a59a
Date: Sun, 15 Aug 2021 11:54:00 +0200
28a59a
Subject: [PATCH 11/17] openssl: Use EVP_MAC_update instead HMAC_Update on
28a59a
 OpenSSL >= 3.0.0
28a59a
28a59a
The HMAC_Update is deprecated in OpenSSL 3.0, but the replacement
28a59a
EVP_MAC_update was added in OpenSSL 3.0, so version specific code is
28a59a
needed.
28a59a
28a59a
Signed-off-by: Petr Gotthard <petr.gotthard@centrum.cz>
28a59a
---
28a59a
 lib/tpm2_kdfa.c | 35 +++++++++++++++++++++++++++++++++++
28a59a
 1 file changed, 35 insertions(+)
28a59a
28a59a
diff --git a/lib/tpm2_kdfa.c b/lib/tpm2_kdfa.c
28a59a
index c8d0a2e1..5eb8d558 100644
28a59a
--- a/lib/tpm2_kdfa.c
28a59a
+++ b/lib/tpm2_kdfa.c
28a59a
@@ -2,6 +2,13 @@
28a59a
 
28a59a
 #include <string.h>
28a59a
 
28a59a
+#include <openssl/evp.h>
28a59a
+#if OPENSSL_VERSION_NUMBER < 0x30000000L
28a59a
+#include <openssl/hmac.h>
28a59a
+#else
28a59a
+#include <openssl/core_names.h>
28a59a
+#endif
28a59a
+
28a59a
 #include "log.h"
28a59a
 #include "tpm2_kdfa.h"
28a59a
 #include "tpm2_openssl.h"
28a59a
@@ -40,13 +47,27 @@ TSS2_RC tpm2_kdfa(TPMI_ALG_HASH hash_alg, TPM2B *key, char *label,
28a59a
         return TPM2_RC_HASH;
28a59a
     }
28a59a
 
28a59a
+#if OPENSSL_VERSION_NUMBER < 0x30000000L
28a59a
     HMAC_CTX *ctx = HMAC_CTX_new();
28a59a
+#else
28a59a
+    EVP_MAC *hmac = EVP_MAC_fetch(NULL, "HMAC", NULL);
28a59a
+    EVP_MAC_CTX *ctx = EVP_MAC_CTX_new(hmac);
28a59a
+#endif
28a59a
     if (!ctx) {
28a59a
         LOG_ERR("HMAC context allocation failed");
28a59a
         return TPM2_RC_MEMORY;
28a59a
     }
28a59a
 
28a59a
+#if OPENSSL_VERSION_NUMBER < 0x30000000L
28a59a
     int rc = HMAC_Init_ex(ctx, key->buffer, key->size, md, NULL);
28a59a
+#else
28a59a
+    OSSL_PARAM params[2];
28a59a
+
28a59a
+    params[0] = OSSL_PARAM_construct_utf8_string(OSSL_ALG_PARAM_DIGEST,
28a59a
+                                                 (char *)EVP_MD_get0_name(md), 0);
28a59a
+    params[1] = OSSL_PARAM_construct_end();
28a59a
+    int rc = EVP_MAC_init(ctx, key->buffer, key->size, params);
28a59a
+#endif
28a59a
     if (!rc) {
28a59a
         LOG_ERR("HMAC Init failed: %s", ERR_error_string(rc, NULL));
28a59a
         rval = TPM2_RC_MEMORY;
28a59a
@@ -71,7 +92,11 @@ TSS2_RC tpm2_kdfa(TPMI_ALG_HASH hash_alg, TPM2B *key, char *label,
28a59a
         int c;
28a59a
         for (c = 0; c < j; c++) {
28a59a
             TPM2B_DIGEST *digest = buffer_list[c];
28a59a
+#if OPENSSL_VERSION_NUMBER < 0x30000000L
28a59a
             int rc = HMAC_Update(ctx, digest->buffer, digest->size);
28a59a
+#else
28a59a
+            int rc = EVP_MAC_update(ctx, digest->buffer, digest->size);
28a59a
+#endif
28a59a
             if (!rc) {
28a59a
                 LOG_ERR("HMAC Update failed: %s", ERR_error_string(rc, NULL));
28a59a
                 rval = TPM2_RC_MEMORY;
28a59a
@@ -79,8 +104,13 @@ TSS2_RC tpm2_kdfa(TPMI_ALG_HASH hash_alg, TPM2B *key, char *label,
28a59a
             }
28a59a
         }
28a59a
 
28a59a
+#if OPENSSL_VERSION_NUMBER < 0x30000000L
28a59a
         unsigned size = sizeof(tmpResult.buffer);
28a59a
         int rc = HMAC_Final(ctx, tmpResult.buffer, &size);
28a59a
+#else
28a59a
+        size_t size;
28a59a
+        int rc = EVP_MAC_final(ctx, tmpResult.buffer, &size, sizeof(tmpResult.buffer));
28a59a
+#endif
28a59a
         if (!rc) {
28a59a
             LOG_ERR("HMAC Final failed: %s", ERR_error_string(rc, NULL));
28a59a
             rval = TPM2_RC_MEMORY;
28a59a
@@ -100,7 +130,12 @@ TSS2_RC tpm2_kdfa(TPMI_ALG_HASH hash_alg, TPM2B *key, char *label,
28a59a
     result_key->size = bytes;
28a59a
 
28a59a
 err:
28a59a
+#if OPENSSL_VERSION_NUMBER < 0x30000000L
28a59a
     HMAC_CTX_free(ctx);
28a59a
+#else
28a59a
+    EVP_MAC_CTX_free(ctx);
28a59a
+    EVP_MAC_free(hmac);
28a59a
+#endif
28a59a
 
28a59a
     return rval;
28a59a
 }
28a59a
-- 
28a59a
2.31.1
28a59a