]> git.ipfire.org Git - thirdparty/openssl.git/blobdiff - providers/implementations/macs/hmac_prov.c
mac: add a getter for the MAC block size.
[thirdparty/openssl.git] / providers / implementations / macs / hmac_prov.c
index f291e574caa1da5aa8994f8db9a99e1911eab80a..3a0679ce8f80a69339d3e7ab4fbc9f0c7a9cebcb 100644 (file)
@@ -134,13 +134,20 @@ static void *hmac_dup(void *vsrc)
     return dst;
 }
 
-static size_t hmac_size(void *vmacctx)
+static size_t hmac_size(struct hmac_data_st *macctx)
 {
-    struct hmac_data_st *macctx = vmacctx;
-
     return HMAC_size(macctx->ctx);
 }
 
+static int hmac_block_size(struct hmac_data_st *macctx)
+{
+    const EVP_MD *md = ossl_prov_digest_md(&macctx->digest);
+
+    if (md == NULL)
+        return 0;
+    return EVP_MD_block_size(md);
+}
+
 static int hmac_setkey(struct hmac_data_st *macctx,
                        const unsigned char *key, size_t keylen)
 {
@@ -234,6 +241,7 @@ static int hmac_final(void *vmacctx, unsigned char *out, size_t *outl,
 
 static const OSSL_PARAM known_gettable_ctx_params[] = {
     OSSL_PARAM_size_t(OSSL_MAC_PARAM_SIZE, NULL),
+    OSSL_PARAM_size_t(OSSL_MAC_PARAM_BLOCK_SIZE, NULL),
     OSSL_PARAM_END
 };
 static const OSSL_PARAM *hmac_gettable_ctx_params(ossl_unused void *ctx,
@@ -244,10 +252,16 @@ static const OSSL_PARAM *hmac_gettable_ctx_params(ossl_unused void *ctx,
 
 static int hmac_get_ctx_params(void *vmacctx, OSSL_PARAM params[])
 {
+    struct hmac_data_st *macctx = vmacctx;
     OSSL_PARAM *p;
 
-    if ((p = OSSL_PARAM_locate(params, OSSL_MAC_PARAM_SIZE)) != NULL)
-        return OSSL_PARAM_set_size_t(p, hmac_size(vmacctx));
+    if ((p = OSSL_PARAM_locate(params, OSSL_MAC_PARAM_SIZE)) != NULL
+            && !OSSL_PARAM_set_size_t(p, hmac_size(macctx)))
+        return 0;
+
+    if ((p = OSSL_PARAM_locate(params, OSSL_MAC_PARAM_BLOCK_SIZE)) != NULL
+            && !OSSL_PARAM_set_int(p, hmac_block_size(macctx)))
+        return 0;
 
     return 1;
 }