|
26 | 26 |
|
27 | 27 | #include <lib/support/logging/CHIPLogging.h>
|
28 | 28 |
|
| 29 | +#if defined(CONFIG_CHIP_CRYPTO_PSA_DAC_PRIV_KEY_KMU) |
| 30 | +#include <cracen_psa.h> |
| 31 | +#include <cracen_psa_kmu.h> |
| 32 | +#endif |
| 33 | + |
29 | 34 | #ifdef CONFIG_CHIP_CRYPTO_PSA
|
30 | 35 | #include <lib/support/ScopedBuffer.h>
|
31 | 36 | #include <psa/crypto.h>
|
@@ -139,24 +144,46 @@ CHIP_ERROR FactoryDataProvider<FlashFactoryData>::MoveDACPrivateKeyToSecureStora
|
139 | 144 | {
|
140 | 145 | ChipLogProgress(DeviceLayer, "Found DAC Private Key in factory data set. Copying to secure storage...");
|
141 | 146 |
|
| 147 | +#if defined(CONFIG_CHIP_CRYPTO_PSA_DAC_PRIV_KEY_ITS) |
142 | 148 | // Remove the key if any exists and can be corrupted.
|
143 | 149 | psa_destroy_key(mDACPrivKeyId);
|
| 150 | +#endif |
144 | 151 |
|
145 | 152 | psa_reset_key_attributes(&attributes);
|
146 | 153 | psa_set_key_type(&attributes, PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_FAMILY_SECP_R1));
|
147 | 154 | psa_set_key_bits(&attributes, kDACPrivateKeyLength * 8);
|
148 | 155 | psa_set_key_algorithm(&attributes, PSA_ALG_ECDSA(PSA_ALG_SHA_256));
|
| 156 | + psa_set_key_usage_flags(&attributes, PSA_KEY_USAGE_SIGN_MESSAGE); |
149 | 157 | #ifdef CONFIG_CHIP_CRYPTO_PSA_MIGRATE_DAC_PRIV_KEY
|
| 158 | +#if defined(CONFIG_CHIP_CRYPTO_PSA_DAC_PRIV_KEY_ITS) |
150 | 159 | psa_set_key_lifetime(&attributes, PSA_KEY_LIFETIME_PERSISTENT);
|
151 | 160 | psa_set_key_id(&attributes, mDACPrivKeyId);
|
| 161 | + VerifyOrReturnError(psa_import_key(&attributes, reinterpret_cast<uint8_t *>(mFactoryData.dac_priv_key.data), |
| 162 | + kDACPrivateKeyLength, &mDACPrivKeyId) == PSA_SUCCESS, |
| 163 | + CHIP_ERROR_INTERNAL); |
| 164 | +#elif defined(CONFIG_CHIP_CRYPTO_PSA_DAC_PRIV_KEY_KMU) |
| 165 | + size_t key_bits; |
| 166 | + uint8_t opaque_buffer[2]; |
| 167 | + size_t outlen; |
| 168 | + |
| 169 | + psa_set_key_lifetime( |
| 170 | + &attributes, |
| 171 | + PSA_KEY_LIFETIME_FROM_PERSISTENCE_AND_LOCATION(PSA_KEY_PERSISTENCE_DEFAULT, PSA_KEY_LOCATION_CRACEN_KMU)); |
| 172 | + psa_set_key_id(&attributes, |
| 173 | + PSA_KEY_HANDLE_FROM_CRACEN_KMU_SLOT(CRACEN_KMU_KEY_USAGE_SCHEME_RAW, |
| 174 | + CONFIG_CHIP_CRYPTO_PSA_DAC_PRIV_KEY_KMU_SLOT_ID)); |
| 175 | + VerifyOrReturnError(cracen_import_key(&attributes, reinterpret_cast<uint8_t *>(mFactoryData.dac_priv_key.data), |
| 176 | + kDACPrivateKeyLength, opaque_buffer, sizeof(opaque_buffer), &outlen, |
| 177 | + &key_bits) == PSA_SUCCESS, |
| 178 | + CHIP_ERROR_INTERNAL); |
| 179 | + |
| 180 | +#endif |
152 | 181 | #else
|
153 | 182 | 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 | 183 | VerifyOrReturnError(psa_import_key(&attributes, reinterpret_cast<uint8_t *>(mFactoryData.dac_priv_key.data),
|
158 | 184 | kDACPrivateKeyLength, &mDACPrivKeyId) == PSA_SUCCESS,
|
159 | 185 | CHIP_ERROR_INTERNAL);
|
| 186 | +#endif // CONFIG_CHIP_CRYPTO_PSA_MIGRATE_DAC_PRIV_KEY |
160 | 187 | }
|
161 | 188 |
|
162 | 189 | #ifdef CONFIG_CHIP_CRYPTO_PSA_MIGRATE_DAC_PRIV_KEY
|
@@ -275,8 +302,14 @@ CHIP_ERROR FactoryDataProvider<FlashFactoryData>::SignWithDeviceAttestationKey(c
|
275 | 302 |
|
276 | 303 | #ifdef CONFIG_CHIP_CRYPTO_PSA
|
277 | 304 | size_t outputLen = 0;
|
| 305 | +#if defined(CONFIG_CHIP_CRYPTO_PSA_DAC_PRIV_KEY_ITS) |
| 306 | + psa_key_id_t keyId = mDACPrivKeyId; |
| 307 | +#elif defined(CONFIG_CHIP_CRYPTO_PSA_DAC_PRIV_KEY_KMU) |
| 308 | + psa_key_id_t keyId = static_cast<psa_key_id_t>( |
| 309 | + PSA_KEY_HANDLE_FROM_CRACEN_KMU_SLOT(CRACEN_KMU_KEY_USAGE_SCHEME_RAW, CONFIG_CHIP_CRYPTO_PSA_DAC_PRIV_KEY_KMU_SLOT_ID)); |
| 310 | +#endif |
278 | 311 |
|
279 |
| - psa_status_t err = psa_sign_message(mDACPrivKeyId, PSA_ALG_ECDSA(PSA_ALG_SHA_256), messageToSign.data(), messageToSign.size(), |
| 312 | + psa_status_t err = psa_sign_message(keyId, PSA_ALG_ECDSA(PSA_ALG_SHA_256), messageToSign.data(), messageToSign.size(), |
280 | 313 | signature.Bytes(), signature.Capacity(), &outputLen);
|
281 | 314 |
|
282 | 315 | VerifyOrReturnError(!err, CHIP_ERROR_INTERNAL);
|
|
0 commit comments