- if (digest != NULL)
- rv = HMAC_Init_ex(macctx->ctx, NULL, 0, digest,
- ossl_prov_digest_engine(&macctx->digest));
- ossl_prov_digest_reset(&macctx->digest);
- return rv;
+ if (key != NULL || (macctx->tls_data_size == 0 && digest != NULL))
+ return HMAC_Init_ex(macctx->ctx, key, keylen, digest,
+ ossl_prov_digest_engine(&macctx->digest));
+ return 1;
+}
+
+static int hmac_init(void *vmacctx, const unsigned char *key,
+ size_t keylen, const OSSL_PARAM params[])
+{
+ struct hmac_data_st *macctx = vmacctx;
+
+ if (!ossl_prov_is_running() || !hmac_set_ctx_params(macctx, params))
+ return 0;
+
+ if (key != NULL)
+ return hmac_setkey(macctx, key, keylen);
+
+ /* Just reinit the HMAC context */
+ return HMAC_Init_ex(macctx->ctx, NULL, 0, NULL, NULL);