From: Dmitry Eremin-Solenikov <dmitry.ereminsoleni...@linaro.org>

OpenSSL 1.1.x has changed HMAC API in an incompatible way. Let's adapt
to it by providing version-dependent wrapper around HMAC calculation.

Signed-off-by: Dmitry Eremin-Solenikov <dmitry.ereminsoleni...@linaro.org>
Reviewed-and-tested-by: Brian Brooks <brian.bro...@arm.com>
---
/** Email created from pull request 56 (lumag:hmac-1.1.x-master)
 ** https://github.com/Linaro/odp/pull/56
 ** Patch: https://github.com/Linaro/odp/pull/56.patch
 ** Base sha: 09a7800c4c4a093fb962e362952f9cf562d2fc98
 ** Merge commit sha: 8e626d0ef78bad290c04f5e0258149b5bec62319
 **/
 platform/linux-generic/odp_crypto.c | 43 +++++++++++++++++++++++++++++--------
 1 file changed, 34 insertions(+), 9 deletions(-)

diff --git a/platform/linux-generic/odp_crypto.c 
b/platform/linux-generic/odp_crypto.c
index 6fc1907d..68fc5658 100644
--- a/platform/linux-generic/odp_crypto.c
+++ b/platform/linux-generic/odp_crypto.c
@@ -128,20 +128,18 @@ null_crypto_routine(odp_crypto_op_param_t *param 
ODP_UNUSED,
 }
 
 static
-void packet_hmac(odp_crypto_op_param_t *param,
-                odp_crypto_generic_session_t *session,
-                uint8_t *hash)
+void packet_hmac_calculate(HMAC_CTX *ctx,
+                          odp_crypto_op_param_t *param,
+                          odp_crypto_generic_session_t *session,
+                          uint8_t *hash)
 {
        odp_packet_t pkt = param->out_pkt;
        uint32_t offset = param->auth_range.offset;
        uint32_t len   = param->auth_range.length;
-       HMAC_CTX ctx;
 
        ODP_ASSERT(offset + len <= odp_packet_len(pkt));
 
-       /* Hash it */
-       HMAC_CTX_init(&ctx);
-       HMAC_Init_ex(&ctx,
+       HMAC_Init_ex(ctx,
                     session->auth.key,
                     session->auth.key_length,
                     session->auth.evp_md,
@@ -152,14 +150,41 @@ void packet_hmac(odp_crypto_op_param_t *param,
                void *mapaddr = odp_packet_offset(pkt, offset, &seglen, NULL);
                uint32_t maclen = len > seglen ? seglen : len;
 
-               HMAC_Update(&ctx, mapaddr, maclen);
+               HMAC_Update(ctx, mapaddr, maclen);
                offset  += maclen;
                len     -= maclen;
        }
 
-       HMAC_Final(&ctx, hash, NULL);
+       HMAC_Final(ctx, hash, NULL);
+}
+
+#if OPENSSL_VERSION_NUMBER < 0x10100000L
+static
+void packet_hmac(odp_crypto_op_param_t *param,
+                odp_crypto_generic_session_t *session,
+                uint8_t *hash)
+{
+       HMAC_CTX ctx;
+
+       /* Hash it */
+       HMAC_CTX_init(&ctx);
+       packet_hmac_calculate(&ctx, param, session, hash);
        HMAC_CTX_cleanup(&ctx);
 }
+#else
+static
+void packet_hmac(odp_crypto_op_param_t *param,
+                odp_crypto_generic_session_t *session,
+                uint8_t *hash)
+{
+       HMAC_CTX *ctx;
+
+       /* Hash it */
+       ctx = HMAC_CTX_new();
+       packet_hmac_calculate(ctx, param, session, hash);
+       HMAC_CTX_free(ctx);
+}
+#endif
 
 static
 odp_crypto_alg_err_t auth_gen(odp_crypto_op_param_t *param,

Reply via email to