From 905fec4f4d6bb8a978476cbce0f293ffc683b5fd Mon Sep 17 00:00:00 2001 From: Tomas Mraz Date: Thu, 21 Apr 2022 17:09:14 +0200 Subject: siphash: Properly set mac size in sipcopy Also fully duplicate the context on dup Reviewed-by: Paul Dale Reviewed-by: Matt Caswell (Merged from https://github.com/openssl/openssl/pull/18142) --- providers/implementations/macs/siphash_prov.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'providers') diff --git a/providers/implementations/macs/siphash_prov.c b/providers/implementations/macs/siphash_prov.c index 2a291d7f45..35265e554e 100644 --- a/providers/implementations/macs/siphash_prov.c +++ b/providers/implementations/macs/siphash_prov.c @@ -77,11 +77,11 @@ static void *siphash_dup(void *vsrc) if (!ossl_prov_is_running()) return NULL; - sdst = siphash_new(ssrc->provctx); + sdst = OPENSSL_malloc(sizeof(*sdst)); if (sdst == NULL) return NULL; - sdst->siphash = ssrc->siphash; + *sdst = *ssrc; return sdst; } @@ -112,7 +112,8 @@ static int siphash_init(void *vmacctx, const unsigned char *key, size_t keylen, if (!ossl_prov_is_running() || !siphash_set_params(ctx, params)) return 0; - /* Without a key, there is not much to do here, + /* + * Without a key, there is not much to do here, * The actual initialization happens through controls. */ if (key == NULL) { @@ -202,7 +203,8 @@ static int siphash_set_params(void *vmacctx, const OSSL_PARAM *params) if ((p = OSSL_PARAM_locate_const(params, OSSL_MAC_PARAM_SIZE)) != NULL) { if (!OSSL_PARAM_get_size_t(p, &size) - || !SipHash_set_hash_size(&ctx->siphash, size)) + || !SipHash_set_hash_size(&ctx->siphash, size) + || !SipHash_set_hash_size(&ctx->sipcopy, size)) return 0; } if ((p = OSSL_PARAM_locate_const(params, OSSL_MAC_PARAM_C_ROUNDS)) != NULL -- cgit v1.2.3