26
26
27
27
#include < lib/support/logging/CHIPLogging.h>
28
28
29
+ #ifdef CONFIG_CHIP_CRYPTO_PSA_DAC_PRIV_KEY_KMU
30
+ #include < cracen_psa_kmu.h>
31
+ #endif
32
+
29
33
#ifdef CONFIG_CHIP_CRYPTO_PSA
30
34
#include < lib/support/ScopedBuffer.h>
31
35
#include < psa/crypto.h>
@@ -129,6 +133,17 @@ CHIP_ERROR FactoryDataProvider<FlashFactoryData>::MoveDACPrivateKeyToSecureStora
129
133
uint8_t clearedDACPrivKey[kDACPrivateKeyLength ];
130
134
memset (clearedDACPrivKey, 0x00 , sizeof (clearedDACPrivKey));
131
135
136
+ // If key should be migrated to KMU save the KMU key slot to keyId.
137
+ #ifdef CONFIG_CHIP_CRYPTO_PSA_DAC_PRIV_KEY_KMU
138
+ mDACPrivKeyId = static_cast <psa_key_id_t >(PSA_KEY_HANDLE_FROM_CRACEN_KMU_SLOT (
139
+ #ifdef CONFIG_CHIP_CRYPTO_PSA_DAC_PRIV_KEY_KMU_ENCRYPTED
140
+ CRACEN_KMU_KEY_USAGE_SCHEME_ENCRYPTED,
141
+ #else
142
+ CRACEN_KMU_KEY_USAGE_SCHEME_RAW,
143
+ #endif // CONFIG_CHIP_CRYPTO_PSA_DAC_PRIV_KEY_KMU_ENCRYPTED
144
+ CONFIG_CHIP_CRYPTO_PSA_DAC_PRIV_KEY_KMU_SLOT_ID));
145
+ #endif // CONFIG_CHIP_CRYPTO_PSA_DAC_PRIV_KEY_KMU
146
+
132
147
// Check if factory data contains DAC private key
133
148
if (memcmp (mFactoryData .dac_priv_key .data , clearedDACPrivKey, kDACPrivateKeyLength ) != 0 )
134
149
{
@@ -145,19 +160,24 @@ CHIP_ERROR FactoryDataProvider<FlashFactoryData>::MoveDACPrivateKeyToSecureStora
145
160
psa_reset_key_attributes (&attributes);
146
161
psa_set_key_type (&attributes, PSA_KEY_TYPE_ECC_KEY_PAIR (PSA_ECC_FAMILY_SECP_R1));
147
162
psa_set_key_bits (&attributes, kDACPrivateKeyLength * 8 );
148
- psa_set_key_algorithm (&attributes, PSA_ALG_ECDSA (PSA_ALG_SHA_256));
163
+ psa_set_key_algorithm (&attributes, PSA_ALG_ECDSA (PSA_ALG_ANY_HASH));
164
+ psa_set_key_usage_flags (&attributes, PSA_KEY_USAGE_SIGN_MESSAGE);
165
+ psa_set_key_id (&attributes, mDACPrivKeyId );
149
166
#ifdef CONFIG_CHIP_CRYPTO_PSA_MIGRATE_DAC_PRIV_KEY
167
+ #if defined(CONFIG_CHIP_CRYPTO_PSA_DAC_PRIV_KEY_ITS)
150
168
psa_set_key_lifetime (&attributes, PSA_KEY_LIFETIME_PERSISTENT);
151
- psa_set_key_id (&attributes, mDACPrivKeyId );
169
+ #elif defined(CONFIG_CHIP_CRYPTO_PSA_DAC_PRIV_KEY_KMU)
170
+ psa_set_key_lifetime (
171
+ &attributes,
172
+ PSA_KEY_LIFETIME_FROM_PERSISTENCE_AND_LOCATION (PSA_KEY_PERSISTENCE_DEFAULT, PSA_KEY_LOCATION_CRACEN_KMU));
173
+ #endif // CONFIG_CHIP_CRYPTO_PSA_DAC_PRIV_KEY_ITS || CONFIG_CHIP_CRYPTO_PSA_DAC_PRIV_KEY_KMU
152
174
#else
153
175
psa_set_key_lifetime (&attributes, PSA_KEY_LIFETIME_VOLATILE);
154
- #endif
155
- psa_set_key_usage_flags (&attributes, PSA_KEY_USAGE_SIGN_MESSAGE);
156
-
157
- VerifyOrReturnError (psa_import_key (&attributes, reinterpret_cast <uint8_t *>(mFactoryData .dac_priv_key .data ),
158
- kDACPrivateKeyLength , &mDACPrivKeyId ) == PSA_SUCCESS,
159
- CHIP_ERROR_INTERNAL);
176
+ #endif // CONFIG_CHIP_CRYPTO_PSA_MIGRATE_DAC_PRIV_KEY
160
177
}
178
+ VerifyOrReturnError (psa_import_key (&attributes, reinterpret_cast <uint8_t *>(mFactoryData .dac_priv_key .data ),
179
+ mFactoryData .dac_priv_key .len , &mDACPrivKeyId ) == PSA_SUCCESS,
180
+ CHIP_ERROR_INTERNAL);
161
181
162
182
#ifdef CONFIG_CHIP_CRYPTO_PSA_MIGRATE_DAC_PRIV_KEY
163
183
#ifdef CONFIG_CHIP_FACTORY_RESET_ERASE_SETTINGS
@@ -203,12 +223,12 @@ CHIP_ERROR FactoryDataProvider<FlashFactoryData>::MoveDACPrivateKeyToSecureStora
203
223
// Verify if the factory data does not contain the DAC private key anymore.
204
224
VerifyOrReturnError (memcmp (mFactoryData .dac_priv_key .data , clearedDACPrivKey, kDACPrivateKeyLength ) == 0 ,
205
225
CHIP_ERROR_INTERNAL);
206
- #endif
226
+ #endif // CONFIG_CHIP_CRYPTO_PSA_MIGRATE_DAC_PRIV_KEY
207
227
}
208
228
209
229
return CHIP_NO_ERROR;
210
230
}
211
- #endif
231
+ #endif // CONFIG_CHIP_CRYPTO_PSA
212
232
213
233
template <class FlashFactoryData >
214
234
CHIP_ERROR FactoryDataProvider<FlashFactoryData>::GetCertificationDeclaration(MutableByteSpan & outBuffer)
@@ -293,7 +313,7 @@ CHIP_ERROR FactoryDataProvider<FlashFactoryData>::SignWithDeviceAttestationKey(c
293
313
LoadKeypairFromRaw (ByteSpan (reinterpret_cast <uint8_t *>(mFactoryData .dac_priv_key .data ), mFactoryData .dac_priv_key .len ),
294
314
ByteSpan (dacPublicKey.Bytes (), dacPublicKey.Length ()), keypair));
295
315
ReturnErrorOnFailure (keypair.ECDSA_sign_msg (messageToSign.data (), messageToSign.size (), signature));
296
- #endif
316
+ #endif // CONFIG_CHIP_CRYPTO_PSA
297
317
298
318
return CopySpanToMutableSpan (ByteSpan{ signature.ConstBytes (), signature.Length () }, outSignBuffer);
299
319
}
0 commit comments