Skip to content

Commit 26a7213

Browse files
committed
[crypto] Log PSA crypto error codes in more places
Log PSA crypto error codes in more places to make it easier to catch and analyze crypto misconfiguration, such as too low number of available key slots. Signed-off-by: Damian Krolik <damian.krolik@nordicsemi.no>
1 parent 0d67568 commit 26a7213

4 files changed

+29
-21
lines changed

src/crypto/CHIPCryptoPALPSA.cpp

+18-15
Original file line numberDiff line numberDiff line change
@@ -48,14 +48,6 @@ namespace Crypto {
4848

4949
namespace {
5050

51-
void logPsaError(psa_status_t status)
52-
{
53-
if (status != 0)
54-
{
55-
ChipLogError(Crypto, "PSA error: %d", static_cast<int>(status));
56-
}
57-
}
58-
5951
bool isBufferNonEmpty(const uint8_t * data, size_t data_length)
6052
{
6153
return data != nullptr && data_length > 0;
@@ -281,6 +273,7 @@ CHIP_ERROR PsaKdf::Init(const ByteSpan & secret, const ByteSpan & salt, const By
281273
psa_set_key_usage_flags(&attrs, PSA_KEY_USAGE_DERIVE);
282274

283275
status = psa_import_key(&attrs, secret.data(), secret.size(), &mSecretKeyId);
276+
LogPsaError(status);
284277
psa_reset_key_attributes(&attrs);
285278
VerifyOrReturnError(status == PSA_SUCCESS, CHIP_ERROR_INTERNAL);
286279

@@ -312,6 +305,14 @@ CHIP_ERROR PsaKdf::InitOperation(psa_key_id_t hkdfKey, const ByteSpan & salt, co
312305
return CHIP_NO_ERROR;
313306
}
314307

308+
void LogPsaError(psa_status_t status)
309+
{
310+
if (status != 0)
311+
{
312+
ChipLogError(Crypto, "PSA error: %d", static_cast<int>(status));
313+
}
314+
}
315+
315316
CHIP_ERROR PsaKdf::DeriveBytes(const MutableByteSpan & output)
316317
{
317318
psa_status_t status = psa_key_derivation_output_bytes(&mOperation, output.data(), output.size());
@@ -367,6 +368,7 @@ CHIP_ERROR HMAC_sha::HMAC_SHA256(const uint8_t * key, size_t key_length, const u
367368
VerifyOrExit(status == PSA_SUCCESS, error = CHIP_ERROR_INTERNAL);
368369

369370
exit:
371+
LogPsaError(status);
370372
psa_destroy_key(keyId);
371373
psa_reset_key_attributes(&attrs);
372374

@@ -476,6 +478,7 @@ CHIP_ERROR PBKDF2_sha256::pbkdf2_sha256(const uint8_t * pass, size_t pass_length
476478
}
477479

478480
exit:
481+
LogPsaError(status);
479482
psa_destroy_key(keyId);
480483
psa_reset_key_attributes(&attrs);
481484

@@ -519,7 +522,7 @@ CHIP_ERROR P256Keypair::ECDSA_sign_msg(const uint8_t * msg, const size_t msg_len
519522
error = out_signature.SetLength(outputLen);
520523

521524
exit:
522-
logPsaError(status);
525+
LogPsaError(status);
523526
return error;
524527
}
525528

@@ -544,7 +547,7 @@ CHIP_ERROR P256PublicKey::ECDSA_validate_msg_signature(const uint8_t * msg, cons
544547
VerifyOrExit(status == PSA_SUCCESS, error = CHIP_ERROR_INVALID_SIGNATURE);
545548

546549
exit:
547-
logPsaError(status);
550+
LogPsaError(status);
548551
psa_destroy_key(keyId);
549552
psa_reset_key_attributes(&attributes);
550553

@@ -573,7 +576,7 @@ CHIP_ERROR P256PublicKey::ECDSA_validate_hash_signature(const uint8_t * hash, co
573576
VerifyOrExit(status == PSA_SUCCESS, error = CHIP_ERROR_INVALID_SIGNATURE);
574577

575578
exit:
576-
logPsaError(status);
579+
LogPsaError(status);
577580
psa_destroy_key(keyId);
578581
psa_reset_key_attributes(&attributes);
579582

@@ -596,7 +599,7 @@ CHIP_ERROR P256Keypair::ECDH_derive_secret(const P256PublicKey & remote_public_k
596599
SuccessOrExit(error = out_secret.SetLength(outputLength));
597600

598601
exit:
599-
logPsaError(status);
602+
LogPsaError(status);
600603

601604
return error;
602605
}
@@ -671,7 +674,7 @@ CHIP_ERROR P256Keypair::Initialize(ECPKeyTarget key_target)
671674
mInitialized = true;
672675

673676
exit:
674-
logPsaError(status);
677+
LogPsaError(status);
675678
psa_reset_key_attributes(&attributes);
676679

677680
return error;
@@ -697,7 +700,7 @@ CHIP_ERROR P256Keypair::Serialize(P256SerializedKeypair & output) const
697700
error = output.SetLength(bbuf.Needed());
698701

699702
exit:
700-
logPsaError(status);
703+
LogPsaError(status);
701704

702705
return error;
703706
}
@@ -728,7 +731,7 @@ CHIP_ERROR P256Keypair::Deserialize(P256SerializedKeypair & input)
728731
mInitialized = true;
729732

730733
exit:
731-
logPsaError(status);
734+
LogPsaError(status);
732735

733736
return error;
734737
}

src/crypto/CHIPCryptoPALPSA.h

+5
Original file line numberDiff line numberDiff line change
@@ -150,5 +150,10 @@ class PsaKdf
150150
psa_key_derivation_operation_t mOperation = PSA_KEY_DERIVATION_OPERATION_INIT;
151151
};
152152

153+
/**
154+
* @brief Log PSA status code if it indicates an error.
155+
*/
156+
void LogPsaError(psa_status_t status);
157+
153158
} // namespace Crypto
154159
} // namespace chip

src/crypto/PSAOperationalKeystore.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,7 @@ CHIP_ERROR PSAOperationalKeystore::PersistentP256Keypair::Deserialize(P256Serial
160160
memcpy(mPublicKey.Bytes(), input.ConstBytes(), mPublicKey.Length());
161161

162162
exit:
163+
LogPsaError(status);
163164
psa_reset_key_attributes(&attributes);
164165

165166
return error;

src/crypto/PSASessionKeystore.cpp

+5-6
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,8 @@ CHIP_ERROR PSASessionKeystore::CreateKey(const Symmetric128BitsKeyByteArray & ke
9090
psa_destroy_key(key.As<psa_key_id_t>());
9191

9292
AesKeyAttributes attrs;
93-
psa_status_t status =
94-
psa_import_key(&attrs.Get(), keyMaterial, sizeof(Symmetric128BitsKeyByteArray), &key.AsMutable<psa_key_id_t>());
93+
psa_status_t status = psa_import_key(&attrs.Get(), keyMaterial, sizeof(keyMaterial), &key.AsMutable<psa_key_id_t>());
94+
LogPsaError(status);
9595
VerifyOrReturnError(status == PSA_SUCCESS, CHIP_ERROR_INTERNAL);
9696

9797
return CHIP_NO_ERROR;
@@ -103,9 +103,8 @@ CHIP_ERROR PSASessionKeystore::CreateKey(const Symmetric128BitsKeyByteArray & ke
103103
psa_destroy_key(key.As<psa_key_id_t>());
104104

105105
HmacKeyAttributes attrs;
106-
psa_status_t status =
107-
psa_import_key(&attrs.Get(), keyMaterial, sizeof(Symmetric128BitsKeyByteArray), &key.AsMutable<psa_key_id_t>());
108-
106+
psa_status_t status = psa_import_key(&attrs.Get(), keyMaterial, sizeof(keyMaterial), &key.AsMutable<psa_key_id_t>());
107+
LogPsaError(status);
109108
VerifyOrReturnError(status == PSA_SUCCESS, CHIP_ERROR_INTERNAL);
110109

111110
return CHIP_NO_ERROR;
@@ -118,7 +117,7 @@ CHIP_ERROR PSASessionKeystore::CreateKey(const ByteSpan & keyMaterial, HkdfKeyHa
118117

119118
HkdfKeyAttributes attrs;
120119
psa_status_t status = psa_import_key(&attrs.Get(), keyMaterial.data(), keyMaterial.size(), &key.AsMutable<psa_key_id_t>());
121-
120+
LogPsaError(status);
122121
VerifyOrReturnError(status == PSA_SUCCESS, CHIP_ERROR_INTERNAL);
123122

124123
return CHIP_NO_ERROR;

0 commit comments

Comments
 (0)