Skip to content

Commit 5401efc

Browse files
Vge0rgenordicjm
authored andcommitted
Revert "nrf_security: Refactor Cracen IKG keys"
This reverts commit 45a897f. This causes issues with the platform keys and needs to be reworked. Signed-off-by: Georgios Vasilakis <[email protected]>
1 parent 58bf51f commit 5401efc

File tree

4 files changed

+44
-26
lines changed

4 files changed

+44
-26
lines changed

subsys/nrf_security/src/drivers/cracen/cracenpsa/include/cracen_psa_key_ids.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@
1313

1414
#define CRACEN_PROTECTED_RAM_AES_KEY0_ID ((uint32_t)0x7fffc004)
1515

16+
#define CRACEN_IDENTITY_KEY_SLOT_NUMBER 0
17+
#define CRACEN_MKEK_SLOT_NUMBER 1
18+
#define CRACEN_MEXT_SLOT_NUMBER 2
19+
1620
#define PSA_KEY_LOCATION_CRACEN ((psa_key_location_t)(0x800000 | ('N' << 8)))
1721

1822
/*

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

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -782,15 +782,18 @@ psa_status_t cracen_load_keyref(const psa_key_attributes_t *attributes, const ui
782782
default:
783783
if (key_buffer_size == 0) {
784784
return PSA_ERROR_CORRUPTION_DETECTED;
785-
} else if (key_buffer_size == sizeof(ikg_opaque_key)) {
786-
return PSA_ERROR_INVALID_ARGUMENT;
787785
}
788786

789-
/* Normal transparent key. */
790-
k->prepare_key = NULL;
791-
k->clean_key = NULL;
792-
k->key = key_buffer;
793-
k->sz = key_buffer_size;
787+
if (key_buffer_size == sizeof(ikg_opaque_key)) {
788+
k->cfg = ((ikg_opaque_key *)key_buffer)->slot_number;
789+
k->owner_id = ((ikg_opaque_key *)key_buffer)->owner_id;
790+
} else {
791+
/* Normal transparent key. */
792+
k->prepare_key = NULL;
793+
k->clean_key = NULL;
794+
k->key = key_buffer;
795+
k->sz = key_buffer_size;
796+
}
794797
}
795798
} else {
796799
k->key = key_buffer;

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

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
#include <stddef.h>
2727
#include <string.h>
2828
#include <sxsymcrypt/trng.h>
29-
#include <sxsymcrypt/keyref.h>
3029
#include <zephyr/sys/__assert.h>
3130
#include <zephyr/sys/byteorder.h>
3231

@@ -1214,7 +1213,7 @@ psa_status_t cracen_get_builtin_key(psa_drv_slot_number_t slot_number,
12141213
* attributes, and update the `lifetime` field to be more specific.
12151214
*/
12161215
switch (slot_number) {
1217-
case CRACEN_BUILTIN_IDENTITY_KEY_ID:
1216+
case CRACEN_IDENTITY_KEY_SLOT_NUMBER:
12181217
psa_set_key_lifetime(attributes, PSA_KEY_LIFETIME_FROM_PERSISTENCE_AND_LOCATION(
12191218
PSA_KEY_PERSISTENCE_READ_ONLY,
12201219
PSA_KEY_LOCATION_CRACEN));
@@ -1232,18 +1231,18 @@ psa_status_t cracen_get_builtin_key(psa_drv_slot_number_t slot_number,
12321231
*/
12331232
if (key_buffer_size >= cracen_get_opaque_size(attributes)) {
12341233
*key_buffer_length = cracen_get_opaque_size(attributes);
1235-
*((ikg_opaque_key *)key_buffer) = (ikg_opaque_key){
1236-
/* The slot number is not used for the identity key */
1237-
.owner_id = MBEDTLS_SVC_KEY_ID_GET_OWNER_ID(
1238-
psa_get_key_id(attributes))};
1234+
*((ikg_opaque_key *)key_buffer) =
1235+
(ikg_opaque_key){.slot_number = slot_number,
1236+
.owner_id = MBEDTLS_SVC_KEY_ID_GET_OWNER_ID(
1237+
psa_get_key_id(attributes))};
12391238
return PSA_SUCCESS;
12401239
} else {
12411240
return PSA_ERROR_BUFFER_TOO_SMALL;
12421241
}
12431242
break;
12441243

1245-
case CRACEN_BUILTIN_MKEK_ID:
1246-
case CRACEN_BUILTIN_MEXT_ID:
1244+
case CRACEN_MKEK_SLOT_NUMBER:
1245+
case CRACEN_MEXT_SLOT_NUMBER:
12471246
psa_set_key_lifetime(attributes, PSA_KEY_LIFETIME_FROM_PERSISTENCE_AND_LOCATION(
12481247
PSA_KEY_PERSISTENCE_READ_ONLY,
12491248
PSA_KEY_LOCATION_CRACEN));
@@ -1258,11 +1257,8 @@ psa_status_t cracen_get_builtin_key(psa_drv_slot_number_t slot_number,
12581257
*/
12591258
if (key_buffer_size >= cracen_get_opaque_size(attributes)) {
12601259
*key_buffer_length = cracen_get_opaque_size(attributes);
1261-
uint8_t cracen_internal_ikg_index = (slot_number == CRACEN_BUILTIN_MKEK_ID)
1262-
? CRACEN_INTERNAL_HW_KEY1_ID
1263-
: CRACEN_INTERNAL_HW_KEY2_ID;
12641260
*((ikg_opaque_key *)key_buffer) =
1265-
(ikg_opaque_key){.slot_number = cracen_internal_ikg_index,
1261+
(ikg_opaque_key){.slot_number = slot_number,
12661262
.owner_id = MBEDTLS_SVC_KEY_ID_GET_OWNER_ID(
12671263
psa_get_key_id(attributes))};
12681264
return PSA_SUCCESS;
@@ -1289,13 +1285,13 @@ psa_status_t mbedtls_psa_platform_get_builtin_key(mbedtls_svc_key_id_t key_id,
12891285
{
12901286
switch (MBEDTLS_SVC_KEY_ID_GET_KEY_ID(key_id)) {
12911287
case CRACEN_BUILTIN_IDENTITY_KEY_ID:
1292-
*slot_number = CRACEN_BUILTIN_IDENTITY_KEY_ID;
1288+
*slot_number = CRACEN_IDENTITY_KEY_SLOT_NUMBER;
12931289
break;
12941290
case CRACEN_BUILTIN_MKEK_ID:
1295-
*slot_number = CRACEN_BUILTIN_MKEK_ID;
1291+
*slot_number = CRACEN_MKEK_SLOT_NUMBER;
12961292
break;
12971293
case CRACEN_BUILTIN_MEXT_ID:
1298-
*slot_number = CRACEN_BUILTIN_MEXT_ID;
1294+
*slot_number = CRACEN_MEXT_SLOT_NUMBER;
12991295
break;
13001296
default:
13011297
#if CONFIG_PSA_NEED_CRACEN_KMU_DRIVER

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

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -126,10 +126,16 @@ typedef struct derived_key {
126126
char label[DERIVED_KEY_MAX_LABEL_SIZE];
127127
} derived_key;
128128

129+
typedef struct ikg_key {
130+
uint32_t slot_number;
131+
uint32_t domain;
132+
} ikg_key;
133+
129134
typedef union {
130135
sicr_key sicr;
131136
embedded_key embedded;
132137
derived_key derived;
138+
ikg_key ikg;
133139
} platform_key;
134140

135141
typedef enum {
@@ -247,9 +253,18 @@ static key_type find_key(uint32_t id, platform_key *key)
247253
}
248254

249255
if (usage == USAGE_IAK || usage == USAGE_MKEK || usage == USAGE_MEXT) {
250-
/* IKG keys are populated in cracen_load_keyref and cracen_get_builtin_key
251-
* so we don't need to populate them here.
252-
*/
256+
key->ikg.domain = domain;
257+
switch (usage) {
258+
case USAGE_IAK:
259+
key->ikg.slot_number = CRACEN_IDENTITY_KEY_SLOT_NUMBER;
260+
break;
261+
case USAGE_MKEK:
262+
key->ikg.slot_number = CRACEN_MKEK_SLOT_NUMBER;
263+
break;
264+
case USAGE_MEXT:
265+
key->ikg.slot_number = CRACEN_MEXT_SLOT_NUMBER;
266+
break;
267+
}
253268
return IKG;
254269
}
255270

@@ -547,7 +562,7 @@ psa_status_t cracen_platform_get_key_slot(mbedtls_svc_key_id_t key_id, psa_key_l
547562
}
548563

549564
if (type == IKG) {
550-
*slot_number = MBEDTLS_SVC_KEY_ID_GET_KEY_ID(key_id);
565+
*slot_number = key.ikg.slot_number;
551566
*lifetime = PSA_KEY_LIFETIME_FROM_PERSISTENCE_AND_LOCATION(
552567
PSA_KEY_PERSISTENCE_READ_ONLY, PSA_KEY_LOCATION_CRACEN);
553568

0 commit comments

Comments
 (0)