Skip to content

Commit f62d635

Browse files
ArekBalysNordicrlubos
authored andcommitted
nrf_security: cracen: Add HMAC SHA256 to KMU key types.
Added HMAC SHA256 as a new KMU key type. Signed-off-by: Arkadiusz Balys <[email protected]>
1 parent affcec2 commit f62d635

File tree

3 files changed

+19
-2
lines changed

3 files changed

+19
-2
lines changed

subsys/nrf_security/src/drivers/cracen/cracenpsa/src/common.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -839,6 +839,8 @@ size_t cracen_get_opaque_size(const psa_key_attributes_t *attributes)
839839
psa_get_key_type(attributes), psa_get_key_bits(attributes));
840840
}
841841
return PSA_BITS_TO_BYTES(psa_get_key_bits(attributes));
842+
} else if (psa_get_key_type(attributes) == PSA_KEY_TYPE_HMAC) {
843+
return PSA_BITS_TO_BYTES(psa_get_key_bits(attributes));
842844
} else {
843845
return sizeof(kmu_opaque_key_buffer);
844846
}

subsys/nrf_security/src/drivers/cracen/cracenpsa/src/key_management.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1124,7 +1124,7 @@ psa_status_t generate_key_for_kmu(const psa_key_attributes_t *attributes, uint8_
11241124
if (status != PSA_SUCCESS) {
11251125
return status;
11261126
}
1127-
} else if (key_type == PSA_KEY_TYPE_AES) {
1127+
} else if (key_type == PSA_KEY_TYPE_AES || key_type == PSA_KEY_TYPE_HMAC) {
11281128
status = psa_generate_random(key, PSA_BITS_TO_BYTES(psa_get_key_bits(attributes)));
11291129
if (status != PSA_SUCCESS) {
11301130
return status;

subsys/nrf_security/src/drivers/cracen/cracenpsa/src/kmu.c

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ enum kmu_metadata_algorithm {
6262
METADATA_ALG_ED25519 = 10,
6363
METADATA_ALG_ECDSA = 11,
6464
METADATA_ALG_ED25519PH = 12,
65-
METADATA_ALG_RESERVED3 = 13,
65+
METADATA_ALG_HMAC = 13,
6666
METADATA_ALG_RESERVED4 = 14,
6767
METADATA_ALG_RESERVED5 = 15,
6868
};
@@ -479,6 +479,10 @@ static psa_status_t convert_to_psa_attributes(kmu_metadata *metadata,
479479
: PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_FAMILY_SECP_R1));
480480
psa_set_key_algorithm(key_attr, PSA_ALG_ECDSA(PSA_ALG_ANY_HASH));
481481
break;
482+
case METADATA_ALG_HMAC:
483+
psa_set_key_type(key_attr, PSA_KEY_TYPE_HMAC);
484+
psa_set_key_algorithm(key_attr, PSA_ALG_HMAC(PSA_ALG_SHA_256));
485+
break;
482486
default:
483487
return PSA_ERROR_HARDWARE_FAILURE;
484488
}
@@ -649,6 +653,12 @@ psa_status_t convert_from_psa_attributes(const psa_key_attributes_t *key_attr,
649653
}
650654
metadata->algorithm = METADATA_ALG_ECDSA;
651655
break;
656+
case PSA_ALG_HMAC(PSA_ALG_SHA_256):
657+
if (!can_sign(key_attr) && PSA_ALG_IS_HMAC(psa_get_key_type(key_attr))) {
658+
return PSA_ERROR_NOT_SUPPORTED;
659+
}
660+
metadata->algorithm = METADATA_ALG_HMAC;
661+
break;
652662
default:
653663
return PSA_ERROR_NOT_SUPPORTED;
654664
}
@@ -957,5 +967,10 @@ psa_status_t cracen_kmu_get_builtin_key(psa_drv_slot_number_t slot_number,
957967
return push_kmu_key_to_ram(key_buffer, key_buffer_size);
958968
}
959969

970+
/* HMAC keys are getting loading into the key buffer like volatile keys */
971+
if (psa_get_key_type(attributes) == PSA_KEY_TYPE_HMAC) {
972+
return push_kmu_key_to_ram(key_buffer, key_buffer_size);
973+
}
974+
960975
return PSA_SUCCESS;
961976
}

0 commit comments

Comments
 (0)