|
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>
|
@@ -139,26 +143,43 @@ CHIP_ERROR FactoryDataProvider<FlashFactoryData>::MoveDACPrivateKeyToSecureStora
|
139 | 143 | {
|
140 | 144 | ChipLogProgress(DeviceLayer, "Found DAC Private Key in factory data set. Copying to secure storage...");
|
141 | 145 |
|
| 146 | +#if defined(CONFIG_CHIP_CRYPTO_PSA_DAC_PRIV_KEY_ITS) |
142 | 147 | // Remove the key if any exists and can be corrupted.
|
143 | 148 | psa_destroy_key(mDACPrivKeyId);
|
| 149 | +#endif |
144 | 150 |
|
145 | 151 | psa_reset_key_attributes(&attributes);
|
146 | 152 | psa_set_key_type(&attributes, PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_FAMILY_SECP_R1));
|
147 | 153 | psa_set_key_bits(&attributes, kDACPrivateKeyLength * 8);
|
148 |
| - psa_set_key_algorithm(&attributes, PSA_ALG_ECDSA(PSA_ALG_SHA_256)); |
| 154 | + psa_set_key_algorithm(&attributes, PSA_ALG_ECDSA(PSA_ALG_ANY_HASH)); |
| 155 | + psa_set_key_usage_flags(&attributes, PSA_KEY_USAGE_SIGN_MESSAGE); |
149 | 156 | #ifdef CONFIG_CHIP_CRYPTO_PSA_MIGRATE_DAC_PRIV_KEY
|
| 157 | +#if defined(CONFIG_CHIP_CRYPTO_PSA_DAC_PRIV_KEY_ITS) |
150 | 158 | psa_set_key_lifetime(&attributes, PSA_KEY_LIFETIME_PERSISTENT);
|
151 | 159 | psa_set_key_id(&attributes, mDACPrivKeyId);
|
| 160 | +#elif defined(CONFIG_CHIP_CRYPTO_PSA_DAC_PRIV_KEY_KMU) |
| 161 | + psa_set_key_lifetime( |
| 162 | + &attributes, |
| 163 | + PSA_KEY_LIFETIME_FROM_PERSISTENCE_AND_LOCATION(PSA_KEY_PERSISTENCE_DEFAULT, PSA_KEY_LOCATION_CRACEN_KMU)); |
| 164 | + psa_set_key_id(&attributes, |
| 165 | + PSA_KEY_HANDLE_FROM_CRACEN_KMU_SLOT( |
| 166 | +#ifdef CONFIG_CHIP_CRYPTO_PSA_DAC_PRIV_KEY_KMU_ENCRYPTED |
| 167 | + CRACEN_KMU_KEY_USAGE_SCHEME_ENCRYPTED, |
| 168 | +#else |
| 169 | + CRACEN_KMU_KEY_USAGE_SCHEME_RAW, |
| 170 | +#endif // CONFIG_CHIP_CRYPTO_PSA_DAC_PRIV_KEY_KMU_ENCRYPTED |
| 171 | + CONFIG_CHIP_CRYPTO_PSA_DAC_PRIV_KEY_KMU_SLOT_ID)); |
| 172 | +#endif // CONFIG_CHIP_CRYPTO_PSA_DAC_PRIV_KEY_ITS || CONFIG_CHIP_CRYPTO_PSA_DAC_PRIV_KEY_KMU |
152 | 173 | #else
|
153 | 174 | 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); |
| 175 | +#endif // CONFIG_CHIP_CRYPTO_PSA_MIGRATE_DAC_PRIV_KEY |
160 | 176 | }
|
161 | 177 |
|
| 178 | + psa_status_t status = psa_import_key(&attributes, reinterpret_cast<uint8_t *>(mFactoryData.dac_priv_key.data), |
| 179 | + mFactoryData.dac_priv_key.len, &mDACPrivKeyId); |
| 180 | + ChipLogProgress(DeviceLayer, "xD3.5 %d", status); |
| 181 | + VerifyOrReturnError(status == PSA_SUCCESS, CHIP_ERROR_INTERNAL); |
| 182 | + |
162 | 183 | #ifdef CONFIG_CHIP_CRYPTO_PSA_MIGRATE_DAC_PRIV_KEY
|
163 | 184 | #ifdef CONFIG_CHIP_FACTORY_RESET_ERASE_SETTINGS
|
164 | 185 | #error "Do not use both CONFIG_CHIP_FACTORY_RESET_ERASE_SETTINGS and CONFIG_CHIP_CRYPTO_PSA_MIGRATE_DAC_PRIV_KEY kconfig options " \
|
@@ -275,8 +296,19 @@ CHIP_ERROR FactoryDataProvider<FlashFactoryData>::SignWithDeviceAttestationKey(c
|
275 | 296 |
|
276 | 297 | #ifdef CONFIG_CHIP_CRYPTO_PSA
|
277 | 298 | size_t outputLen = 0;
|
| 299 | +#if defined(CONFIG_CHIP_CRYPTO_PSA_DAC_PRIV_KEY_ITS) |
| 300 | + psa_key_id_t keyId = mDACPrivKeyId; |
| 301 | +#elif defined(CONFIG_CHIP_CRYPTO_PSA_DAC_PRIV_KEY_KMU) |
| 302 | + psa_key_id_t keyId = static_cast<psa_key_id_t>(PSA_KEY_HANDLE_FROM_CRACEN_KMU_SLOT( |
| 303 | +#ifdef CONFIG_CHIP_CRYPTO_PSA_DAC_PRIV_KEY_KMU_ENCRYPTED |
| 304 | + CRACEN_KMU_KEY_USAGE_SCHEME_ENCRYPTED, |
| 305 | +#else |
| 306 | + CRACEN_KMU_KEY_USAGE_SCHEME_RAW, |
| 307 | +#endif // CONFIG_CHIP_CRYPTO_PSA_DAC_PRIV_KEY_KMU_ENCRYPTED |
| 308 | + CONFIG_CHIP_CRYPTO_PSA_DAC_PRIV_KEY_KMU_SLOT_ID)); |
| 309 | +#endif // CONFIG_CHIP_CRYPTO_PSA_DAC_PRIV_KEY_ITS || CONFIG_CHIP_CRYPTO_PSA_DAC_PRIV_KEY_KMU |
278 | 310 |
|
279 |
| - psa_status_t err = psa_sign_message(mDACPrivKeyId, PSA_ALG_ECDSA(PSA_ALG_SHA_256), messageToSign.data(), messageToSign.size(), |
| 311 | + psa_status_t err = psa_sign_message(keyId, PSA_ALG_ECDSA(PSA_ALG_SHA_256), messageToSign.data(), messageToSign.size(), |
280 | 312 | signature.Bytes(), signature.Capacity(), &outputLen);
|
281 | 313 |
|
282 | 314 | VerifyOrReturnError(!err, CHIP_ERROR_INTERNAL);
|
|
0 commit comments