Skip to content

Commit 891f939

Browse files
rosahay-silabsjmartinez-silabs
authored andcommitted
Pull request project-chip#1728: Adds PSA crypto support for SiWx917 SoC
Merge in WMN_TOOLS/matter from feature/MATTER-2073_adds-psa-crypto-support to RC_2.3.0-1.3 Squashed commit of the following: commit 4824f1918311f770067fa487916ad4c895ed72a7 Author: Rohan Sahay <rohan.sahay@silabs.com> Date: Tue Apr 16 21:35:08 2024 +0530 Update crypto flavor variable names in SiWx917 platform code commit 9c2f2681c79203993e2a8ce26f24ea3d364fd018 Merge: c4ee4e0f48 aa13c6e Author: Rohan Sahay <rohan.sahay@silabs.com> Date: Sun Apr 14 23:14:03 2024 +0530 Merge remote-tracking branch 'origin/RC_2.3.0-1.3' into feature/MATTER-2073_adds-psa-crypto-support commit c4ee4e0f48615dcc31a098619be58bd2f1a52b26 Author: Rohan Sahay <rohan.sahay@silabs.com> Date: Sun Apr 14 23:12:28 2024 +0530 Update crypto flavor variable names in SiWx917 platform code ... and 15 more commits
1 parent 4514b67 commit 891f939

File tree

8 files changed

+415
-201
lines changed

8 files changed

+415
-201
lines changed

examples/platform/silabs/provision/AttestationKeyPSA.cpp

+14-4
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@
88
#include <stdio.h>
99
#include <string.h>
1010

11+
#ifdef SLI_SI91X_MCU_INTERFACE
12+
#include "sl_si91x_psa_wrap.h"
13+
#endif
14+
1115
namespace chip {
1216
namespace DeviceLayer {
1317
namespace Silabs {
@@ -32,7 +36,6 @@ int destroyKey(uint32_t kid)
3236
return err;
3337
}
3438

35-
3639
int generateKey(uint32_t kid)
3740
{
3841
destroyKey(kid);
@@ -45,28 +48,35 @@ int generateKey(uint32_t kid)
4548
psa_set_key_algorithm(&attr, PSA_ALG_ECDSA(PSA_ALG_SHA_256));
4649
psa_set_key_usage_flags(
4750
&attr, PSA_KEY_USAGE_SIGN_HASH | PSA_KEY_USAGE_VERIFY_HASH | PSA_KEY_USAGE_SIGN_MESSAGE | PSA_KEY_USAGE_VERIFY_MESSAGE);
51+
#ifdef SLI_SI91X_MCU_INTERFACE
52+
psa_set_key_lifetime(
53+
&attr, PSA_KEY_LIFETIME_FROM_PERSISTENCE_AND_LOCATION(PSA_KEY_LIFETIME_PERSISTENT, PSA_KEY_VOLATILE_PERSISTENT_WRAPPED));
54+
#else
4855
psa_set_key_lifetime(
4956
&attr, PSA_KEY_LIFETIME_FROM_PERSISTENCE_AND_LOCATION(PSA_KEY_LIFETIME_PERSISTENT, sl_psa_get_most_secure_key_location()));
50-
57+
#endif
5158
psa_key_id_t id = 0;
5259
psa_status_t err = psa_generate_key(&attr, &id);
5360
return err;
5461
}
5562

56-
5763
int importKey(uint32_t kid, const uint8_t * value, size_t size)
5864
{
5965
destroyKey(kid);
60-
6166
psa_key_attributes_t attr = psa_key_attributes_init();
6267
psa_set_key_id(&attr, kid);
6368
psa_set_key_type(&attr, PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_FAMILY_SECP_R1));
6469
psa_set_key_bits(&attr, 256);
6570
psa_set_key_algorithm(&attr, PSA_ALG_ECDSA(PSA_ALG_SHA_256));
6671
psa_set_key_usage_flags(
6772
&attr, PSA_KEY_USAGE_SIGN_HASH | PSA_KEY_USAGE_VERIFY_HASH | PSA_KEY_USAGE_SIGN_MESSAGE | PSA_KEY_USAGE_VERIFY_MESSAGE);
73+
#ifdef SLI_SI91X_MCU_INTERFACE
74+
psa_set_key_lifetime(
75+
&attr, PSA_KEY_LIFETIME_FROM_PERSISTENCE_AND_LOCATION(PSA_KEY_LIFETIME_PERSISTENT, PSA_KEY_VOLATILE_PERSISTENT_WRAPPED));
76+
#else
6877
psa_set_key_lifetime(
6978
&attr, PSA_KEY_LIFETIME_FROM_PERSISTENCE_AND_LOCATION(PSA_KEY_LIFETIME_PERSISTENT, sl_psa_get_most_secure_key_location()));
79+
#endif
7080

7181
psa_key_id_t id = 0;
7282
psa_status_t err = psa_import_key(&attr, value, size, &id);

examples/platform/silabs/provision/BUILD.gn

+13-13
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,11 @@
1414

1515
import("//build_overrides/chip.gni")
1616
import("//build_overrides/efr32_sdk.gni")
17+
import("${efr32_sdk_build_root}/SiWx917_sdk.gni")
1718
import("${efr32_sdk_build_root}/silabs_board.gni")
1819

1920
silabs_common_plat_dir = "${chip_root}/examples/platform/silabs"
2021

21-
2222
config("provision-config") {
2323
include_dirs = [ "${chip_root}" ]
2424

@@ -28,19 +28,18 @@ config("provision-config") {
2828
}
2929
}
3030

31-
3231
source_set("provision-common") {
3332
sources = [
3433
"${silabs_common_plat_dir}/provision/AttestationKey.h",
3534
"${silabs_common_plat_dir}/provision/ProvisionChannel.h",
36-
"${silabs_common_plat_dir}/provision/ProvisionEncoder.h",
3735
"${silabs_common_plat_dir}/provision/ProvisionEncoder.cpp",
38-
"${silabs_common_plat_dir}/provision/ProvisionManager.h",
36+
"${silabs_common_plat_dir}/provision/ProvisionEncoder.h",
3937
"${silabs_common_plat_dir}/provision/ProvisionManager.cpp",
38+
"${silabs_common_plat_dir}/provision/ProvisionManager.h",
4039
"${silabs_common_plat_dir}/provision/ProvisionProtocol.h",
4140
"${silabs_common_plat_dir}/provision/ProvisionProtocolV2.cpp",
42-
"${silabs_common_plat_dir}/provision/ProvisionStorage.h",
4341
"${silabs_common_plat_dir}/provision/ProvisionStorage.cpp",
42+
"${silabs_common_plat_dir}/provision/ProvisionStorage.h",
4443
"${silabs_common_plat_dir}/provision/ProvisionStorageCustom.cpp",
4544
]
4645

@@ -53,9 +52,7 @@ source_set("provision-common") {
5352
public_configs = [ ":provision-config" ]
5453
}
5554

56-
5755
source_set("provision-flash-only") {
58-
5956
sources = [
6057
"${silabs_common_plat_dir}/provision/AttestationKeyMbed.cpp",
6158
"${silabs_common_plat_dir}/provision/ProvisionStorageFlash.cpp",
@@ -64,9 +61,7 @@ source_set("provision-flash-only") {
6461
public_deps = [ ":provision-common" ]
6562
}
6663

67-
6864
static_library("provision-efr32") {
69-
7065
sources = [
7166
"${silabs_common_plat_dir}/provision/AttestationKeyPSA.cpp",
7267
"${silabs_common_plat_dir}/provision/ProvisionChannelEFR32BLE.cpp",
@@ -76,14 +71,19 @@ static_library("provision-efr32") {
7671
public_deps = [ ":provision-common" ]
7772
}
7873

79-
8074
static_library("provision-siwx917") {
81-
8275
sources = [
83-
"${silabs_common_plat_dir}/provision/AttestationKeyMbed.cpp",
8476
"${silabs_common_plat_dir}/provision/ProvisionChannelSi917BLE.cpp",
8577
"${silabs_common_plat_dir}/provision/ProvisionStorageDefault.cpp",
8678
]
8779

80+
if (sl_si91x_crypto_flavor == "tinycrypt") {
81+
sources += [ "${silabs_common_plat_dir}/provision/AttestationKeyMbed.cpp" ]
82+
}
83+
84+
if (sl_si91x_crypto_flavor == "psa") {
85+
sources += [ "${silabs_common_plat_dir}/provision/AttestationKeyPSA.cpp" ]
86+
}
87+
8888
public_deps = [ ":provision-common" ]
89-
}
89+
}

examples/platform/silabs/provision/ProvisionStorageDefault.cpp

+5-4
Original file line numberDiff line numberDiff line change
@@ -511,7 +511,8 @@ CHIP_ERROR Storage::GetDeviceAttestationCert(MutableByteSpan & value)
511511
return err;
512512
}
513513

514-
#ifdef SLI_SI91X_MCU_INTERFACE
514+
#if defined(SLI_SI91X_MCU_INTERFACE) && defined(SL_MBEDTLS_USE_TINYCRYPT)
515+
515516
CHIP_ERROR Storage::SetDeviceAttestationKey(const ByteSpan & value)
516517
{
517518
return SilabsConfig::WriteConfigValueBin(SilabsConfig::kConfigKey_Creds_KeyId, value.data(), value.size());
@@ -545,7 +546,7 @@ CHIP_ERROR Storage::SignWithDeviceAttestationKey(const ByteSpan & message, Mutab
545546
return Examples::GetExampleDACProvider()->SignWithDeviceAttestationKey(message, signature);
546547
#else
547548
return CHIP_ERROR_NOT_FOUND;
548-
#endif
549+
#endif // CHIP_DEVICE_CONFIG_ENABLE_EXAMPLE_CREDENTIALS
549550
}
550551
}
551552

@@ -569,7 +570,7 @@ CHIP_ERROR Storage::SignWithDeviceAttestationKey(const ByteSpan & message, Mutab
569570
{
570571
CHIP_ERROR err = CHIP_ERROR_NOT_FOUND;
571572
uint32_t kid = 0;
572-
573+
573574
if (SilabsConfig::ConfigValueExists(SilabsConfig::kConfigKey_Creds_KeyId))
574575
{
575576
ReturnErrorOnFailure(SilabsConfig::ReadConfigValue(SilabsConfig::kConfigKey_Creds_KeyId, kid));
@@ -658,4 +659,4 @@ void MigrateDacProvider(void)
658659

659660
} // namespace Silabs
660661
} // namespace DeviceLayer
661-
} // namespace chip
662+
} // namespace chip

src/platform/silabs/SiWx917/BUILD.gn

+11-1
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,14 @@ import("${chip_root}/src/platform/device.gni")
1818

1919
import("${chip_root}/build/chip/buildconfig_header.gni")
2020
import("${chip_root}/src/crypto/crypto.gni")
21+
import("${chip_root}/src/platform/silabs/wifi_args.gni")
22+
import("${chip_root}/third_party/silabs/SiWx917_sdk.gni")
2123
import("${chip_root}/third_party/silabs/silabs_board.gni")
2224

2325
silabs_platform_dir = "${chip_root}/src/platform/silabs"
2426

2527
assert(chip_device_platform == "SiWx917")
28+
2629
if (chip_crypto == "platform") {
2730
import("//build_overrides/mbedtls.gni")
2831
}
@@ -81,7 +84,14 @@ static_library("SiWx917") {
8184

8285
# Add platform crypto implementation
8386
if (chip_crypto == "platform") {
84-
sources += [ "CHIPCryptoPALTinyCrypt.cpp" ]
87+
if (sl_si91x_crypto_flavor == "tinycrypt") {
88+
sources += [ "CHIPCryptoPALTinyCrypt.cpp" ]
89+
}
90+
91+
if (sl_si91x_crypto_flavor == "psa") {
92+
sources += [ "${silabs_platform_dir}/efr32/CHIPCryptoPALPsaEfr32.cpp" ]
93+
}
94+
8595
public_deps += [
8696
"${chip_root}/src/crypto",
8797
"${mbedtls_root}:mbedtls",

0 commit comments

Comments
 (0)