Skip to content

Commit 43c14cb

Browse files
committed
Bluetooth: Mesh: use dedicated psa ID range
Commit adds usage of the dedicated PSA ID range for mesh instead of PSA user ID range usage. Dedicated Mesh PSA ID range: 0xC000/0x20000000. Signed-off-by: Aleksandr Khromykh <[email protected]>
1 parent 1d8ef88 commit 43c14cb

File tree

3 files changed

+19
-37
lines changed

3 files changed

+19
-37
lines changed

subsys/bluetooth/mesh/Kconfig

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1533,22 +1533,6 @@ config BT_MESH_USES_TFM_PSA
15331533

15341534
endchoice
15351535

1536-
if BT_MESH_USES_MBEDTLS_PSA || BT_MESH_USES_TFM_PSA
1537-
1538-
config BT_MESH_PSA_KEY_ID_USER_MIN_OFFSET
1539-
int "Offset of BLE Mesh key id range regarding PSA_KEY_ID_USER_MIN"
1540-
default 0
1541-
help
1542-
The PSA specification mandates to set key identifiers for keys
1543-
with persistent lifetime. The users of the PSA API is responsible
1544-
(BLE Mesh is user of PSA API) to provide correct and unique identifiers.
1545-
The BLE Mesh identifier range should be between PSA_KEY_ID_USER_MIN and
1546-
PSA_KEY_ID_USER_MAX. BLE Mesh requires two ids for each subnetwork, two ids
1547-
for each application key, and two ids for the device key and device key candidate.
1548-
It should consider the Mesh Configuration Database instances if database enabled.
1549-
1550-
endif # BT_MESH_USES_MBEDTLS_PSA || BT_MESH_USES_TFM_PSA
1551-
15521536
menu "Beacons"
15531537

15541538
config BT_MESH_BEACON_ENABLED

subsys/bluetooth/mesh/crypto_psa.c

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,9 @@ LOG_MODULE_REGISTER(bt_mesh_crypto_psa);
2828
#endif
2929
#define BT_MESH_KEY_ID_RANGE_SIZE (2 * CONFIG_BT_MESH_SUBNET_COUNT + \
3030
2 * CONFIG_BT_MESH_APP_KEY_COUNT + 2 + BT_MESH_CDB_KEY_ID_RANGE_SIZE)
31-
#define BT_MESH_PSA_KEY_ID_USER_MIN (PSA_KEY_ID_USER_MIN + \
32-
CONFIG_BT_MESH_PSA_KEY_ID_USER_MIN_OFFSET)
31+
#define BT_MESH_PSA_KEY_ID_MIN (0x1FFF4000ul)
3332

34-
BUILD_ASSERT(BT_MESH_PSA_KEY_ID_USER_MIN + BT_MESH_KEY_ID_RANGE_SIZE <= PSA_KEY_ID_USER_MAX,
33+
BUILD_ASSERT(BT_MESH_KEY_ID_RANGE_SIZE < 0xC000,
3534
"BLE Mesh PSA key id range overlaps maximum allowed boundary.");
3635

3736
BUILD_ASSERT(PSA_MAC_LENGTH(PSA_KEY_TYPE_AES, 128, PSA_ALG_CMAC) == 16,
@@ -357,7 +356,7 @@ __weak psa_key_id_t bt_mesh_user_keyid_alloc(void)
357356
for (int i = 0; i < BT_MESH_KEY_ID_RANGE_SIZE; i++) {
358357
if (!atomic_test_bit(pst_keys, i)) {
359358
atomic_set_bit(pst_keys, i);
360-
return BT_MESH_PSA_KEY_ID_USER_MIN + i;
359+
return BT_MESH_PSA_KEY_ID_MIN + i;
361360
}
362361
}
363362

@@ -366,9 +365,9 @@ __weak psa_key_id_t bt_mesh_user_keyid_alloc(void)
366365

367366
__weak int bt_mesh_user_keyid_free(psa_key_id_t key_id)
368367
{
369-
if (IN_RANGE(key_id, BT_MESH_PSA_KEY_ID_USER_MIN,
370-
BT_MESH_PSA_KEY_ID_USER_MIN + BT_MESH_KEY_ID_RANGE_SIZE - 1)) {
371-
atomic_clear_bit(pst_keys, key_id - BT_MESH_PSA_KEY_ID_USER_MIN);
368+
if (IN_RANGE(key_id, BT_MESH_PSA_KEY_ID_MIN,
369+
BT_MESH_PSA_KEY_ID_MIN + BT_MESH_KEY_ID_RANGE_SIZE - 1)) {
370+
atomic_clear_bit(pst_keys, key_id - BT_MESH_PSA_KEY_ID_MIN);
372371
return 0;
373372
}
374373

@@ -377,9 +376,9 @@ __weak int bt_mesh_user_keyid_free(psa_key_id_t key_id)
377376

378377
__weak void bt_mesh_user_keyid_assign(psa_key_id_t key_id)
379378
{
380-
if (IN_RANGE(key_id, BT_MESH_PSA_KEY_ID_USER_MIN,
381-
BT_MESH_PSA_KEY_ID_USER_MIN + BT_MESH_KEY_ID_RANGE_SIZE - 1)) {
382-
atomic_set_bit(pst_keys, key_id - BT_MESH_PSA_KEY_ID_USER_MIN);
379+
if (IN_RANGE(key_id, BT_MESH_PSA_KEY_ID_MIN,
380+
BT_MESH_PSA_KEY_ID_MIN + BT_MESH_KEY_ID_RANGE_SIZE - 1)) {
381+
atomic_set_bit(pst_keys, key_id - BT_MESH_PSA_KEY_ID_MIN);
383382
}
384383
}
385384

tests/bsim/bluetooth/mesh/src/distribute_keyid.c

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,8 @@ LOG_MODULE_REGISTER(LOG_MODULE_NAME);
2424
#endif
2525
#define BT_MESH_KEY_ID_RANGE_SIZE (2 * CONFIG_BT_MESH_SUBNET_COUNT + \
2626
2 * CONFIG_BT_MESH_APP_KEY_COUNT + 1 + BT_MESH_CDB_KEY_ID_RANGE_SIZE)
27-
#define BT_MESH_PSA_KEY_ID_USER_MIN (PSA_KEY_ID_USER_MIN + \
28-
CONFIG_BT_MESH_PSA_KEY_ID_USER_MIN_OFFSET)
29-
#define BT_MESH_TEST_PSA_KEY_ID_USER_MIN (BT_MESH_PSA_KEY_ID_USER_MIN + \
27+
#define BT_MESH_PSA_KEY_ID_MIN (0x1FFF4000ul)
28+
#define BT_MESH_TEST_PSA_KEY_ID_MIN (BT_MESH_PSA_KEY_ID_MIN + \
3029
BT_MESH_KEY_ID_RANGE_SIZE * get_device_nbr())
3130

3231
static ATOMIC_DEFINE(pst_keys, BT_MESH_KEY_ID_RANGE_SIZE);
@@ -37,9 +36,9 @@ psa_key_id_t bt_mesh_user_keyid_alloc(void)
3736
if (!atomic_test_bit(pst_keys, i)) {
3837
atomic_set_bit(pst_keys, i);
3938

40-
LOG_INF("key id %d is allocated", BT_MESH_TEST_PSA_KEY_ID_USER_MIN + i);
39+
LOG_INF("key id %d is allocated", BT_MESH_TEST_PSA_KEY_ID_MIN + i);
4140

42-
return BT_MESH_TEST_PSA_KEY_ID_USER_MIN + i;
41+
return BT_MESH_TEST_PSA_KEY_ID_MIN + i;
4342
}
4443
}
4544

@@ -48,9 +47,9 @@ psa_key_id_t bt_mesh_user_keyid_alloc(void)
4847

4948
int bt_mesh_user_keyid_free(psa_key_id_t key_id)
5049
{
51-
if (IN_RANGE(key_id, BT_MESH_TEST_PSA_KEY_ID_USER_MIN,
52-
BT_MESH_TEST_PSA_KEY_ID_USER_MIN + BT_MESH_KEY_ID_RANGE_SIZE - 1)) {
53-
atomic_clear_bit(pst_keys, key_id - BT_MESH_TEST_PSA_KEY_ID_USER_MIN);
50+
if (IN_RANGE(key_id, BT_MESH_TEST_PSA_KEY_ID_MIN,
51+
BT_MESH_TEST_PSA_KEY_ID_MIN + BT_MESH_KEY_ID_RANGE_SIZE - 1)) {
52+
atomic_clear_bit(pst_keys, key_id - BT_MESH_TEST_PSA_KEY_ID_MIN);
5453

5554
LOG_INF("key id %d is freed", key_id);
5655

@@ -62,9 +61,9 @@ int bt_mesh_user_keyid_free(psa_key_id_t key_id)
6261

6362
void bt_mesh_user_keyid_assign(psa_key_id_t key_id)
6463
{
65-
if (IN_RANGE(key_id, BT_MESH_TEST_PSA_KEY_ID_USER_MIN,
66-
BT_MESH_TEST_PSA_KEY_ID_USER_MIN + BT_MESH_KEY_ID_RANGE_SIZE - 1)) {
67-
atomic_set_bit(pst_keys, key_id - BT_MESH_TEST_PSA_KEY_ID_USER_MIN);
64+
if (IN_RANGE(key_id, BT_MESH_TEST_PSA_KEY_ID_MIN,
65+
BT_MESH_TEST_PSA_KEY_ID_MIN + BT_MESH_KEY_ID_RANGE_SIZE - 1)) {
66+
atomic_set_bit(pst_keys, key_id - BT_MESH_TEST_PSA_KEY_ID_MIN);
6867
LOG_INF("key id %d is assigned", key_id);
6968
} else {
7069
LOG_WRN("key id %d is out of the reserved id range", key_id);

0 commit comments

Comments
 (0)