Skip to content

Commit 9d45993

Browse files
[NXP][SE05x] SE05x Crypto Host fallback updated to use PSA APIs for NXP MCUs (project-chip#72831)
* SE05x Crypto Host fallback updated to use PSA APIs for NXP MCUs * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
1 parent 8235235 commit 9d45993

16 files changed

Lines changed: 735 additions & 336 deletions

examples/platform/nxp/se05x/linux/AppMain.cpp

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,10 @@
5959
#include <ControllerShellCommands.h>
6060
#endif // CHIP_DEVICE_CONFIG_ENABLE_BOTH_COMMISSIONER_AND_COMMISSIONEE
6161

62+
#ifndef CHIP_LINUX_APP_START_COMMISSIONER_AT_BOOT
63+
#define CHIP_LINUX_APP_START_COMMISSIONER_AT_BOOT 1
64+
#endif
65+
6266
#if defined(ENABLE_CHIP_SHELL)
6367
#include <CommissioneeShellCommands.h>
6468
#include <lib/shell/Engine.h> // nogncheck
@@ -156,8 +160,6 @@
156160
#endif
157161
#include <third_party/simw-top-mini/repo/demos/se05x_host_gpio/se05x_host_gpio.h>
158162

159-
#include <access/examples/GroupAuxiliaryAccessControlDelegate.h>
160-
161163
using namespace chip;
162164
using namespace chip::ArgParser;
163165
using namespace chip::Credentials;
@@ -1050,11 +1052,13 @@ void ChipLinuxAppMainLoop(chip::ServerInitParams & initParams, AppMainLoopImplem
10501052
PrintOnboardingCodes(LinuxDeviceOptions::GetInstance().payload);
10511053

10521054
#if CHIP_DEVICE_CONFIG_ENABLE_BOTH_COMMISSIONER_AND_COMMISSIONEE
1055+
#if CHIP_LINUX_APP_START_COMMISSIONER_AT_BOOT
10531056
ChipLogProgress(AppServer, "Starting commissioner");
10541057
VerifyOrReturn(InitCommissioner(LinuxDeviceOptions::GetInstance().securedCommissionerPort,
10551058
LinuxDeviceOptions::GetInstance().unsecuredCommissionerPort,
10561059
LinuxDeviceOptions::GetInstance().commissionerFabricId) == CHIP_NO_ERROR);
10571060
ChipLogProgress(AppServer, "Started commissioner");
1061+
#endif // CHIP_LINUX_APP_START_COMMISSIONER_AT_BOOT
10581062
#if defined(ENABLE_CHIP_SHELL)
10591063
Shell::RegisterControllerCommands();
10601064
#endif // defined(ENABLE_CHIP_SHELL)
@@ -1104,12 +1108,11 @@ void ChipLinuxAppMainLoop(chip::ServerInitParams & initParams, AppMainLoopImplem
11041108
Server::GetInstance().Shutdown();
11051109

11061110
#if CHIP_DEVICE_CONFIG_ENABLE_BOTH_COMMISSIONER_AND_COMMISSIONEE
1107-
// Commissioner shutdown call shuts down entire stack, including the platform manager.
11081111
ShutdownCommissioner();
1109-
#else
1110-
DeviceLayer::PlatformMgr().Shutdown();
11111112
#endif // CHIP_DEVICE_CONFIG_ENABLE_BOTH_COMMISSIONER_AND_COMMISSIONEE
11121113

1114+
DeviceLayer::PlatformMgr().Shutdown();
1115+
11131116
#if ENABLE_TRACING
11141117
tracing_setup.StopTracing();
11151118
#endif

examples/platform/nxp/se05x/linux/BUILD.gn

Lines changed: 35 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ config("app-main-config") {
4949
"../",
5050
"../../../linux",
5151
"${chip_root}/src/platform/nxp/crypto/se05x",
52+
"${chip_root}/examples/platform/nxp/common/app_se05x/include",
5253
]
5354
}
5455

@@ -179,6 +180,35 @@ source_set("app-options") {
179180
public_configs = [ ":app-main-config" ]
180181
}
181182

183+
source_set("named-pipes") {
184+
sources = [
185+
"../../../linux/NamedPipeCommands.cpp",
186+
"../../../linux/NamedPipeCommands.h",
187+
]
188+
189+
public_deps = [
190+
"${chip_root}/src/lib",
191+
"${chip_root}/src/platform/logging:default",
192+
]
193+
194+
public_configs = [ ":app-main-config" ]
195+
}
196+
197+
source_set("commissionable-init") {
198+
sources = [
199+
"../../../linux/CommissionableInit.cpp",
200+
"../../../linux/CommissionableInit.h",
201+
]
202+
203+
public_deps = [
204+
":app-options",
205+
":linux-commissionable-data-provider",
206+
"${chip_root}/src/lib",
207+
]
208+
209+
public_configs = [ ":app-main-config" ]
210+
}
211+
182212
source_set("app-main") {
183213
defines = [
184214
"ENABLE_TRACING=${matter_enable_tracing_support}",
@@ -201,12 +231,10 @@ source_set("app-main") {
201231
"SE05X_SPAKE_VERIFIER_TP_ITER_CNT=$chip_se05x_spake_verifier_tp_iter_cnt",
202232
]
203233

234+
defines += [ "CONFIG_CHIP_SE05X=1" ]
235+
204236
sources = [
205237
"../../../linux/AppMain.h",
206-
"../../../linux/CommissionableInit.cpp",
207-
"../../../linux/CommissionableInit.h",
208-
"../../../linux/NamedPipeCommands.cpp",
209-
"../../../linux/NamedPipeCommands.h",
210238
"../DeviceAttestationSe05xCredsExample.cpp",
211239
"AppMain.cpp",
212240
]
@@ -215,6 +243,7 @@ source_set("app-main") {
215243
":app-main-loop",
216244
":app-options",
217245
":boolean-state-configuration-test-event-trigger",
246+
":commissionable-init",
218247
":commissioner-main",
219248
":commodity-metering-test-event-trigger",
220249
":commodity-price-test-event-trigger",
@@ -225,6 +254,7 @@ source_set("app-main") {
225254
":energy-reporting-test-event-trigger",
226255
":linux-commissionable-data-provider",
227256
":meter-identification-test-event-trigger",
257+
":named-pipes",
228258
":smco-test-event-trigger",
229259
":software-diagnostics-test-event-trigger",
230260
":water-heater-management-test-event-trigger",
@@ -237,6 +267,7 @@ source_set("app-main") {
237267
":ota-test-event-trigger",
238268
"${chip_root}/examples/providers:all_clusters_device_info_provider",
239269
"${chip_root}/examples/providers:device_info_provider_please_do_not_reuse_as_is",
270+
"${chip_root}/src/access",
240271
"${chip_root}/src/app/server",
241272
"${chip_root}/src/setup_payload:onboarding-codes-utils",
242273
]

src/platform/nxp/crypto/se05x/BUILD.gn

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
# limitations under the License.
1414

1515
import("//build_overrides/chip.gni")
16+
import("//build_overrides/nlassert.gni")
1617
import("//build_overrides/nxp_sdk.gni")
1718
import("${chip_root}/build/chip/buildconfig_header.gni")
1819
import("${chip_root}/src/crypto/crypto.gni")
@@ -37,10 +38,15 @@ static_library("nxp_crypto_lib") {
3738
"${chip_root}/src/platform/nxp/crypto/se05x/CHIPCryptoPALHsm_se05x_rng.cpp",
3839
"${chip_root}/src/platform/nxp/crypto/se05x/CHIPCryptoPALHsm_se05x_spake2p.cpp",
3940
"${chip_root}/src/platform/nxp/crypto/se05x/CHIPCryptoPALHsm_se05x_utils.cpp",
40-
"${chip_root}/src/platform/nxp/crypto/se05x/CHIPCryptoPAL_HostFallBack.cpp",
4141
"${chip_root}/src/platform/nxp/crypto/se05x/PersistentStorageOperationalKeystore_se05x.cpp",
4242
]
4343

44+
if (chip_device_platform != "linux") {
45+
sources += [ "${chip_root}/src/platform/nxp/crypto/se05x/CHIPCryptoPAL_HostFallBack.cpp" ]
46+
} else {
47+
sources += [ "${chip_root}/src/platform/nxp/crypto/se05x/CHIPCryptoPAL_HostFallBack_MbedTLS.cpp" ]
48+
}
49+
4450
if (chip_crypto != "psa") {
4551
if (chip_device_platform == "linux" || nxp_platform == "rt/rw61x" ||
4652
nxp_platform == "rt/rt1060") {

src/platform/nxp/crypto/se05x/CHIPCryptoPALHsm_se05x_hkdf.cpp

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,11 @@ CHIP_ERROR HKDF_sha_SE05x::HKDF_SHA256(const uint8_t * secret, const size_t secr
3232
const size_t salt_length, const uint8_t * info, const size_t info_length,
3333
uint8_t * out_buffer, size_t out_length)
3434
{
35-
CHIP_ERROR error = CHIP_ERROR_INTERNAL;
36-
uint32_t keyid = kKeyId_hkdf_sha256_hmac_keyid;
37-
sss_object_t keyObject = { 0 };
38-
smStatus_t smstatus = SM_NOT_OK;
39-
sss_status_t status = kStatus_SSS_Fail;
35+
CHIP_ERROR error = CHIP_ERROR_INTERNAL;
36+
uint32_t keyid = kKeyId_hkdf_sha256_hmac_keyid;
37+
se_sss_object_t keyObject = { 0 };
38+
smStatus_t smstatus = SM_NOT_OK;
39+
sss_status_t status = kStatus_SSS_Fail;
4040

4141
if (salt_length > 64 || info_length > 80 || secret_length > 256 || out_length > 768)
4242
{
@@ -58,17 +58,17 @@ CHIP_ERROR HKDF_sha_SE05x::HKDF_SHA256(const uint8_t * secret, const size_t secr
5858
VerifyOrReturnError(secret != nullptr, CHIP_ERROR_INVALID_ARGUMENT);
5959

6060
VerifyOrReturnError(se05x_session_open() == CHIP_NO_ERROR, CHIP_ERROR_INTERNAL);
61-
VerifyOrExit(gex_sss_chip_ctx.session.subsystem != kType_SSS_SubSystem_NONE, error = CHIP_ERROR_INTERNAL);
61+
VerifyOrExit(gex_sss_chip_ctx.session.subsystem != kType_SE_SSS_SubSystem_NONE, error = CHIP_ERROR_INTERNAL);
6262
VerifyOrExit(gex_sss_chip_ctx.ks.session != NULL, error = CHIP_ERROR_INTERNAL);
6363

64-
status = sss_key_object_init(&keyObject, &gex_sss_chip_ctx.ks);
64+
status = se_sss_key_object_init(&keyObject, &gex_sss_chip_ctx.ks);
6565
VerifyOrExit(status == kStatus_SSS_Success, error = CHIP_ERROR_INTERNAL);
6666

67-
status = sss_key_object_allocate_handle(&keyObject, keyid, kSSS_KeyPart_Default, kSSS_CipherType_HMAC, secret_length,
68-
kKeyObject_Mode_Transient);
67+
status = se_sss_key_object_allocate_handle(&keyObject, keyid, kSSS_KeyPart_Default, kSE_SSS_CipherType_HMAC, secret_length,
68+
kKeyObject_Mode_Transient);
6969
VerifyOrExit(status == kStatus_SSS_Success, error = CHIP_ERROR_INTERNAL);
7070

71-
status = sss_key_store_set_key(&gex_sss_chip_ctx.ks, &keyObject, secret, secret_length, secret_length * 8, NULL, 0);
71+
status = se_sss_key_store_set_key(&gex_sss_chip_ctx.ks, &keyObject, secret, secret_length, secret_length * 8, NULL, 0);
7272
VerifyOrExit(status == kStatus_SSS_Success, error = CHIP_ERROR_INTERNAL);
7373

7474
smstatus = Se05x_API_HKDF_Extended(&((sss_se05x_session_t *) &gex_sss_chip_ctx.session)->s_ctx, keyObject.keyId,
@@ -79,9 +79,9 @@ CHIP_ERROR HKDF_sha_SE05x::HKDF_SHA256(const uint8_t * secret, const size_t secr
7979
error = CHIP_NO_ERROR;
8080
exit:
8181

82-
if (keyObject.keyStore->session != NULL)
82+
if (keyObject.keyStore != nullptr && keyObject.keyStore->session != NULL)
8383
{
84-
sss_key_store_erase_key(&gex_sss_chip_ctx.ks, &keyObject);
84+
se_sss_key_store_erase_key(&gex_sss_chip_ctx.ks, &keyObject);
8585
}
8686
if (se05x_close_session() != CHIP_NO_ERROR)
8787
{

src/platform/nxp/crypto/se05x/CHIPCryptoPALHsm_se05x_hmac.cpp

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,11 @@ CHIP_ERROR HMAC_sha_SE05x::HMAC_SHA256(const uint8_t * key, size_t key_length, c
3434
uint8_t * out_buffer, size_t out_length)
3535

3636
{
37-
CHIP_ERROR error = CHIP_ERROR_INTERNAL;
38-
uint32_t keyid = kKeyId_hmac_sha256_keyid;
39-
sss_mac_t ctx_mac = { 0 };
40-
sss_object_t keyObject = { 0 };
41-
sss_status_t status = kStatus_SSS_Fail;
37+
CHIP_ERROR error = CHIP_ERROR_INTERNAL;
38+
uint32_t keyid = kKeyId_hmac_sha256_keyid;
39+
se_sss_mac_t ctx_mac = { 0 };
40+
se_sss_object_t keyObject = { 0 };
41+
sss_status_t status = kStatus_SSS_Fail;
4242

4343
ChipLogDetail(Crypto, "HMAC_SHA256 : Using se05x for HMAC");
4444

@@ -59,22 +59,22 @@ CHIP_ERROR HMAC_sha_SE05x::HMAC_SHA256(const uint8_t * key, size_t key_length, c
5959
VerifyOrReturnError(se05x_session_open() == CHIP_NO_ERROR, CHIP_ERROR_INTERNAL);
6060
VerifyOrExit(gex_sss_chip_ctx.ks.session != NULL, error = CHIP_ERROR_INTERNAL);
6161

62-
status = sss_key_object_init(&keyObject, &gex_sss_chip_ctx.ks);
62+
status = se_sss_key_object_init(&keyObject, &gex_sss_chip_ctx.ks);
6363
VerifyOrExit(status == kStatus_SSS_Success, error = CHIP_ERROR_INTERNAL);
6464

65-
status = sss_key_object_allocate_handle(&keyObject, keyid, kSSS_KeyPart_Default, kSSS_CipherType_HMAC, key_length,
66-
kKeyObject_Mode_Transient);
65+
status = se_sss_key_object_allocate_handle(&keyObject, keyid, kSSS_KeyPart_Default, kSE_SSS_CipherType_HMAC, key_length,
66+
kKeyObject_Mode_Transient);
6767
VerifyOrExit(status == kStatus_SSS_Success, error = CHIP_ERROR_INTERNAL);
6868

69-
status = sss_key_store_set_key(&gex_sss_chip_ctx.ks, &keyObject, key, key_length, key_length * 8, NULL, 0);
69+
status = se_sss_key_store_set_key(&gex_sss_chip_ctx.ks, &keyObject, key, key_length, key_length * 8, NULL, 0);
7070
VerifyOrExit(status == kStatus_SSS_Success, error = CHIP_ERROR_INTERNAL);
7171

72-
status = sss_mac_context_init(&ctx_mac, &gex_sss_chip_ctx.session, &keyObject, kAlgorithm_SSS_HMAC_SHA256, kMode_SSS_Mac);
72+
status = se_sss_mac_context_init(&ctx_mac, &gex_sss_chip_ctx.session, &keyObject, kAlgorithm_SSS_HMAC_SHA256, kMode_SSS_Mac);
7373
VerifyOrExit(status == kStatus_SSS_Success, error = CHIP_ERROR_INTERNAL);
7474

7575
if (message_length <= MAX_MAC_ONE_SHOT_DATA_LEN)
7676
{
77-
status = sss_mac_one_go(&ctx_mac, message, message_length, out_buffer, &out_length);
77+
status = se_sss_mac_one_go(&ctx_mac, message, message_length, out_buffer, &out_length);
7878
VerifyOrExit(status == kStatus_SSS_Success, error = CHIP_ERROR_INTERNAL);
7979
}
8080
else
@@ -83,18 +83,18 @@ CHIP_ERROR HMAC_sha_SE05x::HMAC_SHA256(const uint8_t * key, size_t key_length, c
8383
size_t datalenTemp = 0;
8484
size_t rem_len = message_length;
8585

86-
status = sss_mac_init(&ctx_mac);
86+
status = se_sss_mac_init(&ctx_mac);
8787
VerifyOrExit(status == kStatus_SSS_Success, error = CHIP_ERROR_INTERNAL);
8888

8989
while (rem_len > 0)
9090
{
9191
datalenTemp = (rem_len > MAX_MAC_ONE_SHOT_DATA_LEN) ? MAX_MAC_ONE_SHOT_DATA_LEN : rem_len;
92-
status = sss_mac_update(&ctx_mac, (message + (message_length - rem_len)), datalenTemp);
92+
status = se_sss_mac_update(&ctx_mac, (message + (message_length - rem_len)), datalenTemp);
9393
VerifyOrExit(status == kStatus_SSS_Success, error = CHIP_ERROR_INTERNAL);
9494
rem_len = rem_len - datalenTemp;
9595
}
9696

97-
status = sss_mac_finish(&ctx_mac, out_buffer, &out_length);
97+
status = se_sss_mac_finish(&ctx_mac, out_buffer, &out_length);
9898
VerifyOrExit(status == kStatus_SSS_Success, error = CHIP_ERROR_INTERNAL);
9999
}
100100

@@ -103,12 +103,12 @@ CHIP_ERROR HMAC_sha_SE05x::HMAC_SHA256(const uint8_t * key, size_t key_length, c
103103

104104
if (ctx_mac.session != NULL)
105105
{
106-
sss_mac_context_free(&ctx_mac);
106+
se_sss_mac_context_free(&ctx_mac);
107107
}
108108

109-
if (keyObject.keyStore->session != NULL)
109+
if (keyObject.keyStore != nullptr && keyObject.keyStore->session != NULL)
110110
{
111-
sss_key_store_erase_key(&gex_sss_chip_ctx.ks, &keyObject);
111+
se_sss_key_store_erase_key(&gex_sss_chip_ctx.ks, &keyObject);
112112
}
113113
if (se05x_close_session() != CHIP_NO_ERROR)
114114
{

0 commit comments

Comments
 (0)