diff --git a/library/psa_crypto.c b/library/psa_crypto.c
index 2e3d451..f8d295a 100644
--- a/library/psa_crypto.c
+++ b/library/psa_crypto.c
@@ -5611,7 +5611,7 @@
         psa_set_key_type(&attributes, PSA_KEY_TYPE_HMAC);
     } else if (kdf_alg == PSA_ALG_PBKDF2_AES_CMAC_PRF_128) {
         prf_alg = PSA_ALG_CMAC;
-        prf_output_length = PSA_AES_CMAC_PRF_128_OUTPUT_SIZE;
+        prf_output_length = PSA_MAC_LENGTH(PSA_KEY_TYPE_AES, 128U, PSA_ALG_CMAC);
         psa_set_key_type(&attributes, PSA_KEY_TYPE_AES);
     } else {
         return PSA_ERROR_INVALID_ARGUMENT;
@@ -6177,7 +6177,7 @@
     if (kdf_alg == PSA_ALG_TLS12_ECJPAKE_TO_PMS) {
         hash_size = PSA_HASH_LENGTH(PSA_ALG_SHA_256);
     } else if (kdf_alg == PSA_ALG_PBKDF2_AES_CMAC_PRF_128) {
-        hash_size = PSA_AES_CMAC_PRF_128_OUTPUT_SIZE;
+        hash_size = PSA_MAC_LENGTH(PSA_KEY_TYPE_AES, 128U, PSA_ALG_CMAC);
     } else {
         if (hash_size == 0) {
             return PSA_ERROR_NOT_SUPPORTED;
@@ -6730,23 +6730,25 @@
                                                  size_t *output_len)
 {
     psa_status_t status = PSA_SUCCESS;
-    if (input_len != PSA_AES_CMAC_PRF_128_OUTPUT_SIZE) {
+    if (input_len != PSA_MAC_LENGTH(PSA_KEY_TYPE_AES, 128U, PSA_ALG_CMAC)) {
         psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT;
         uint8_t zeros[16] = { 0 };
         psa_set_key_type(&attributes, PSA_KEY_TYPE_AES);
         psa_set_key_bits(&attributes, PSA_BYTES_TO_BITS(sizeof(zeros)));
         psa_set_key_usage_flags(&attributes, PSA_KEY_USAGE_SIGN_MESSAGE);
-        /* Passing PSA_AES_CMAC_PRF_128_OUTPUT_SIZE as mac_size as the driver
-         * function sets mac_output_length = mac_size on success. See #7801*/
+        /* Passing PSA_MAC_LENGTH(PSA_KEY_TYPE_AES, 128U, PSA_ALG_CMAC) as
+         * mac_size as the driver function sets mac_output_length = mac_size */
         status = psa_driver_wrapper_mac_compute(&attributes,
                                                 zeros, sizeof(zeros),
                                                 PSA_ALG_CMAC, input, input_len,
                                                 output,
-                                                PSA_AES_CMAC_PRF_128_OUTPUT_SIZE,
+                                                PSA_MAC_LENGTH(PSA_KEY_TYPE_AES,
+                                                               128U,
+                                                               PSA_ALG_CMAC),
                                                 output_len);
     } else {
         memcpy(output, input, input_len);
-        *output_len = PSA_AES_CMAC_PRF_128_OUTPUT_SIZE;
+        *output_len = PSA_MAC_LENGTH(PSA_KEY_TYPE_AES, 128U, PSA_ALG_CMAC);
     }
     return status;
 }
