From 2f92b8cf1bbdb39023029e5a80b4bca7cc765df4 Mon Sep 17 00:00:00 2001 From: Aleksandr Khromykh Date: Wed, 12 Feb 2025 15:16:58 +0100 Subject: [PATCH 1/2] tests: Bluetooth: Mesh: remove key id distribution Commit removes centralized PSA key ID distribution in mesh bsim tests since secure storage is instantiated on every simulated device. Signed-off-by: Aleksandr Khromykh --- tests/bsim/bluetooth/mesh/CMakeLists.txt | 6 -- .../bluetooth/mesh/src/distribute_keyid.c | 72 ------------------- 2 files changed, 78 deletions(-) delete mode 100644 tests/bsim/bluetooth/mesh/src/distribute_keyid.c diff --git a/tests/bsim/bluetooth/mesh/CMakeLists.txt b/tests/bsim/bluetooth/mesh/CMakeLists.txt index 7271af88810f6..76a8a04179579 100644 --- a/tests/bsim/bluetooth/mesh/CMakeLists.txt +++ b/tests/bsim/bluetooth/mesh/CMakeLists.txt @@ -26,12 +26,6 @@ if(CONFIG_SETTINGS) src/test_brg.c ) -if(CONFIG_BT_MESH_USES_MBEDTLS_PSA) - target_sources(app PRIVATE - src/distribute_keyid.c - ) -endif() - if(CONFIG_BT_MESH_GATT_PROXY AND CONFIG_BT_MESH_PROXY_SOLICITATION) target_sources(app PRIVATE src/test_proxy_sol.c diff --git a/tests/bsim/bluetooth/mesh/src/distribute_keyid.c b/tests/bsim/bluetooth/mesh/src/distribute_keyid.c deleted file mode 100644 index 54a9a8feae291..0000000000000 --- a/tests/bsim/bluetooth/mesh/src/distribute_keyid.c +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright (c) 2023 Nordic Semiconductor ASA - * - * SPDX-License-Identifier: Apache-2.0 - */ - -#include -#include -#include -#include "argparse.h" -#include "mesh/crypto.h" - -#define LOG_MODULE_NAME distribute_keys -#include -LOG_MODULE_REGISTER(LOG_MODULE_NAME); - -/* Mesh requires to keep in persistent memory network keys (2 keys per subnetwork), - * application keys (2 real keys per 1 configured) and device key + device key candidate. - */ -#if defined CONFIG_BT_MESH_CDB -#define BT_MESH_CDB_KEY_ID_RANGE_SIZE (2 * SUBNET_COUNT + \ - 2 * APP_KEY_COUNT + NODE_COUNT) -#else -#define BT_MESH_CDB_KEY_ID_RANGE_SIZE 0 -#endif - -#define BT_MESH_PSA_KEY_ID_RANGE_SIZE (2 * CONFIG_BT_MESH_SUBNET_COUNT + \ - 2 * CONFIG_BT_MESH_APP_KEY_COUNT + 2 + BT_MESH_CDB_KEY_ID_RANGE_SIZE) -#define BT_MESH_TEST_PSA_KEY_ID_MIN (ZEPHYR_PSA_BT_MESH_KEY_ID_RANGE_BEGIN + \ - BT_MESH_PSA_KEY_ID_RANGE_SIZE * get_device_nbr()) - -static ATOMIC_DEFINE(pst_keys, BT_MESH_PSA_KEY_ID_RANGE_SIZE); - -psa_key_id_t bt_mesh_user_keyid_alloc(void) -{ - for (int i = 0; i < BT_MESH_PSA_KEY_ID_RANGE_SIZE; i++) { - if (!atomic_test_bit(pst_keys, i)) { - atomic_set_bit(pst_keys, i); - - LOG_INF("key id %d is allocated", BT_MESH_TEST_PSA_KEY_ID_MIN + i); - - return BT_MESH_TEST_PSA_KEY_ID_MIN + i; - } - } - - return PSA_KEY_ID_NULL; -} - -int bt_mesh_user_keyid_free(psa_key_id_t key_id) -{ - if (IN_RANGE(key_id, BT_MESH_TEST_PSA_KEY_ID_MIN, - BT_MESH_TEST_PSA_KEY_ID_MIN + BT_MESH_PSA_KEY_ID_RANGE_SIZE - 1)) { - atomic_clear_bit(pst_keys, key_id - BT_MESH_TEST_PSA_KEY_ID_MIN); - - LOG_INF("key id %d is freed", key_id); - - return 0; - } - - return -EIO; -} - -void bt_mesh_user_keyid_assign(psa_key_id_t key_id) -{ - if (IN_RANGE(key_id, BT_MESH_TEST_PSA_KEY_ID_MIN, - BT_MESH_TEST_PSA_KEY_ID_MIN + BT_MESH_PSA_KEY_ID_RANGE_SIZE - 1)) { - atomic_set_bit(pst_keys, key_id - BT_MESH_TEST_PSA_KEY_ID_MIN); - LOG_INF("key id %d is assigned", key_id); - } else { - LOG_WRN("key id %d is out of the reserved id range", key_id); - } -} From c4667972b05ae9681ce74e1c02262330b03632e6 Mon Sep 17 00:00:00 2001 From: Aleksandr Khromykh Date: Wed, 12 Feb 2025 15:28:26 +0100 Subject: [PATCH 2/2] Bluetooth: Mesh: remove weak attribute and rename functions Commit removes weak attribute and renames some functions in crypto_psa.c since there is no centralized distribution of the PSA key ID in bsim tests and no necessity to reimplement native mesh approach. Signed-off-by: Aleksandr Khromykh --- subsys/bluetooth/mesh/crypto_psa.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/subsys/bluetooth/mesh/crypto_psa.c b/subsys/bluetooth/mesh/crypto_psa.c index cc43293a3df23..f2010afbd7d93 100644 --- a/subsys/bluetooth/mesh/crypto_psa.c +++ b/subsys/bluetooth/mesh/crypto_psa.c @@ -353,7 +353,7 @@ int bt_mesh_dhkey_gen(const uint8_t *pub_key, const uint8_t *priv_key, uint8_t * return err; } -__weak psa_key_id_t bt_mesh_user_keyid_alloc(void) +static psa_key_id_t bt_mesh_psa_keyid_alloc(void) { for (int i = 0; i < BT_MESH_PSA_KEY_ID_RANGE_SIZE; i++) { if (!atomic_test_bit(pst_keys, i)) { @@ -365,7 +365,7 @@ __weak psa_key_id_t bt_mesh_user_keyid_alloc(void) return PSA_KEY_ID_NULL; } -__weak int bt_mesh_user_keyid_free(psa_key_id_t key_id) +static int bt_mesh_psa_keyid_free(psa_key_id_t key_id) { if (IN_RANGE(key_id, BT_MESH_PSA_KEY_ID_MIN, BT_MESH_PSA_KEY_ID_MIN + BT_MESH_PSA_KEY_ID_RANGE_SIZE - 1)) { @@ -376,7 +376,7 @@ __weak int bt_mesh_user_keyid_free(psa_key_id_t key_id) return -EIO; } -__weak void bt_mesh_user_keyid_assign(psa_key_id_t key_id) +static void bt_mesh_psa_keyid_assign(psa_key_id_t key_id) { if (IN_RANGE(key_id, BT_MESH_PSA_KEY_ID_MIN, BT_MESH_PSA_KEY_ID_MIN + BT_MESH_PSA_KEY_ID_RANGE_SIZE - 1)) { @@ -412,7 +412,7 @@ int bt_mesh_key_import(enum bt_mesh_key_type type, const uint8_t in[16], struct break; case BT_MESH_KEY_TYPE_NET: if (IS_ENABLED(CONFIG_BT_SETTINGS)) { - key_id = bt_mesh_user_keyid_alloc(); + key_id = bt_mesh_psa_keyid_alloc(); if (key_id == PSA_KEY_ID_NULL) { return -ENOMEM; @@ -428,7 +428,7 @@ int bt_mesh_key_import(enum bt_mesh_key_type type, const uint8_t in[16], struct case BT_MESH_KEY_TYPE_APP: case BT_MESH_KEY_TYPE_DEV: if (IS_ENABLED(CONFIG_BT_SETTINGS)) { - key_id = bt_mesh_user_keyid_alloc(); + key_id = bt_mesh_psa_keyid_alloc(); if (key_id == PSA_KEY_ID_NULL) { return -ENOMEM; @@ -456,7 +456,7 @@ int bt_mesh_key_import(enum bt_mesh_key_type type, const uint8_t in[16], struct status == PSA_ERROR_ALREADY_EXISTS ? -EALREADY : -EIO; if (err && key_id != PSA_KEY_ID_NULL) { - bt_mesh_user_keyid_free(key_id); + bt_mesh_psa_keyid_free(key_id); } psa_reset_key_attributes(&key_attributes); @@ -483,7 +483,7 @@ void bt_mesh_key_assign(struct bt_mesh_key *dst, const struct bt_mesh_key *src) { memcpy(dst, src, sizeof(struct bt_mesh_key)); if (IS_ENABLED(CONFIG_BT_SETTINGS)) { - bt_mesh_user_keyid_assign(dst->key); + bt_mesh_psa_keyid_assign(dst->key); } } @@ -494,7 +494,7 @@ int bt_mesh_key_destroy(const struct bt_mesh_key *key) } if (IS_ENABLED(CONFIG_BT_SETTINGS)) { - return bt_mesh_user_keyid_free(key->key); + return bt_mesh_psa_keyid_free(key->key); } return 0;