Skip to content

Commit bc2b2e3

Browse files
valeriosetticvinayak
authored andcommitted
tests: bluetooth: replace TinyCrypt with PSA in unit tests
Replace all references to TinyCrypt with PSA Crypto API in BT unit tests. Signed-off-by: Valerio Setti <[email protected]>
1 parent d13ea6d commit bc2b2e3

26 files changed

+160
-525
lines changed

tests/bluetooth/host/crypto/CMakeLists.txt

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,10 @@ add_library(mocks STATIC
88
mocks/hci_core_expects.c
99
mocks/aes.c
1010
mocks/aes_expects.c
11-
mocks/hmac_prng.c
12-
mocks/hmac_prng_expects.c
13-
mocks/crypto_help_utils.c
11+
mocks/prng.c
12+
mocks/prng_expects.c
1413

15-
${ZEPHYR_BASE}/subsys/bluetooth/host/crypto_tc.c
14+
${ZEPHYR_BASE}/subsys/bluetooth/host/crypto_psa.c
1615
${ZEPHYR_BASE}/subsys/logging/log_minimal.c
1716
${ZEPHYR_BASE}/subsys/bluetooth/common/bt_str.c
1817
${ZEPHYR_BASE}/subsys/bluetooth/host/uuid.c
@@ -24,7 +23,7 @@ target_include_directories(mocks PUBLIC
2423
${ZEPHYR_BASE}/subsys/bluetooth/host
2524
${ZEPHYR_BASE}/tests/bluetooth/host
2625
${ZEPHYR_BASE}/tests/bluetooth/host/crypto/mocks
27-
${ZEPHYR_BASE}/../modules/crypto/tinycrypt/lib/include
26+
${ZEPHYR_MBEDTLS_MODULE_DIR}/include
2827
)
2928

3029
target_link_libraries(mocks PRIVATE test_interface)

tests/bluetooth/host/crypto/bt_encrypt_be/src/main.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ ZTEST_SUITE(bt_encrypt_be, NULL, NULL, NULL, NULL, NULL);
2828
* Test bt_encrypt_be() succeeds
2929
*
3030
* Constraints:
31-
* - tc_aes128_set_encrypt_key() succeeds and returns 'TC_CRYPTO_SUCCESS'.
32-
* - tc_aes_encrypt() succeeds and returns 'TC_CRYPTO_SUCCESS'.
31+
* - psa_import_key() succeeds and returns 'PSA_SUCCESS'.
32+
* - psa_cipher_encrypt() succeeds and returns 'PSA_SUCCESS'.
3333
*
3434
* Expected behaviour:
3535
* - bt_encrypt_be() returns 0 (success)
@@ -41,12 +41,12 @@ ZTEST(bt_encrypt_be, test_bt_encrypt_be_succeeds)
4141
const uint8_t plaintext[16] = {0};
4242
uint8_t enc_data[16] = {0};
4343

44-
tc_aes128_set_encrypt_key_fake.return_val = TC_CRYPTO_SUCCESS;
45-
tc_aes_encrypt_fake.return_val = TC_CRYPTO_SUCCESS;
44+
psa_import_key_fake.return_val = PSA_SUCCESS;
45+
psa_cipher_encrypt_fake.return_val = PSA_SUCCESS;
4646

4747
err = bt_encrypt_be(key, plaintext, enc_data);
4848

49-
expect_single_call_tc_aes_encrypt(enc_data);
49+
expect_single_call_psa_cipher_encrypt(enc_data);
5050

5151
zassert_ok(err, "Unexpected error code '%d' was returned", err);
5252
}

tests/bluetooth/host/crypto/bt_encrypt_be/src/test_suite_invalid_inputs.c

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
#include <host/crypto.h>
1414

15-
ZTEST_SUITE(bt_encrypt_le_invalid_cases, NULL, NULL, NULL, NULL, NULL);
15+
ZTEST_SUITE(bt_encrypt_be_invalid_cases, NULL, NULL, NULL, NULL, NULL);
1616

1717
/*
1818
* Test passing NULL reference for the key argument
@@ -24,7 +24,7 @@ ZTEST_SUITE(bt_encrypt_le_invalid_cases, NULL, NULL, NULL, NULL, NULL);
2424
* Expected behaviour:
2525
* - An assertion is raised and execution stops
2626
*/
27-
ZTEST(bt_encrypt_le_invalid_cases, test_null_key_reference)
27+
ZTEST(bt_encrypt_be_invalid_cases, test_null_key_reference)
2828
{
2929
const uint8_t plaintext[16] = {0};
3030
uint8_t enc_data[16] = {0};
@@ -43,7 +43,7 @@ ZTEST(bt_encrypt_le_invalid_cases, test_null_key_reference)
4343
* Expected behaviour:
4444
* - An assertion is raised and execution stops
4545
*/
46-
ZTEST(bt_encrypt_le_invalid_cases, test_null_plaintext_reference)
46+
ZTEST(bt_encrypt_be_invalid_cases, test_null_plaintext_reference)
4747
{
4848
const uint8_t key[16] = {0};
4949
uint8_t enc_data[16] = {0};
@@ -62,7 +62,7 @@ ZTEST(bt_encrypt_le_invalid_cases, test_null_plaintext_reference)
6262
* Expected behaviour:
6363
* - An assertion is raised and execution stops
6464
*/
65-
ZTEST(bt_encrypt_le_invalid_cases, test_null_enc_data_reference)
65+
ZTEST(bt_encrypt_be_invalid_cases, test_null_enc_data_reference)
6666
{
6767
const uint8_t key[16] = {0};
6868
const uint8_t plaintext[16] = {0};
@@ -75,19 +75,19 @@ ZTEST(bt_encrypt_le_invalid_cases, test_null_enc_data_reference)
7575
* Test bt_encrypt_le() fails when tc_aes128_set_encrypt_key() fails
7676
*
7777
* Constraints:
78-
* - tc_aes128_set_encrypt_key() fails and returns 'TC_CRYPTO_FAIL'.
78+
* - psa_import_key() fails and returns 'PSA_ERROR_GENERIC_ERROR'.
7979
*
8080
* Expected behaviour:
8181
* - bt_encrypt_le() returns a negative error code '-EINVAL' (failure)
8282
*/
83-
ZTEST(bt_encrypt_le_invalid_cases, test_tc_aes128_set_encrypt_key_fails)
83+
ZTEST(bt_encrypt_be_invalid_cases, test_psa_import_key_fails)
8484
{
8585
int err;
8686
const uint8_t key[16] = {0};
8787
const uint8_t plaintext[16] = {0};
8888
uint8_t enc_data[16] = {0};
8989

90-
tc_aes128_set_encrypt_key_fake.return_val = TC_CRYPTO_FAIL;
90+
psa_import_key_fake.return_val = PSA_ERROR_GENERIC_ERROR;
9191

9292
err = bt_encrypt_le(key, plaintext, enc_data);
9393

@@ -98,23 +98,23 @@ ZTEST(bt_encrypt_le_invalid_cases, test_tc_aes128_set_encrypt_key_fails)
9898
* Test bt_encrypt_le() fails when tc_aes_encrypt() fails
9999
*
100100
* Constraints:
101-
* - tc_aes128_set_encrypt_key() succeeds and returns 'TC_CRYPTO_SUCCESS'.
102-
* - tc_aes_encrypt() fails and returns 'TC_CRYPTO_FAIL'.
101+
* - psa_import_key() succeeds and returns 'PSA_SUCCESS'.
102+
* - psa_cipher_encrypt() fails and returns 'PSA_ERROR_GENERIC_ERROR'.
103103
*
104104
* Expected behaviour:
105105
* - bt_encrypt_le() returns a negative error code '-EINVAL' (failure)
106106
*/
107-
ZTEST(bt_encrypt_le_invalid_cases, test_tc_aes_encrypt_fails)
107+
ZTEST(bt_encrypt_be_invalid_cases, test_psa_cipher_encrypt_fails)
108108
{
109109
int err;
110110
const uint8_t key[16] = {0};
111111
const uint8_t plaintext[16] = {0};
112112
uint8_t enc_data[16] = {0};
113113

114-
tc_aes128_set_encrypt_key_fake.return_val = TC_CRYPTO_SUCCESS;
115-
tc_aes_encrypt_fake.return_val = TC_CRYPTO_FAIL;
114+
psa_import_key_fake.return_val = PSA_SUCCESS;
115+
psa_cipher_encrypt_fake.return_val = -EINVAL;
116116

117117
err = bt_encrypt_le(key, plaintext, enc_data);
118118

119-
zassert_true(err == -EINVAL, "Unexpected error code '%d' was returned", err);
119+
zassert_true(err == -EIO, "Unexpected error code '%d' was returned", err);
120120
}

tests/bluetooth/host/crypto/bt_encrypt_le/src/main.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,12 +41,12 @@ ZTEST(bt_encrypt_le, test_bt_encrypt_le_succeeds)
4141
const uint8_t plaintext[16] = {0};
4242
uint8_t enc_data[16] = {0};
4343

44-
tc_aes128_set_encrypt_key_fake.return_val = TC_CRYPTO_SUCCESS;
45-
tc_aes_encrypt_fake.return_val = TC_CRYPTO_SUCCESS;
44+
psa_import_key_fake.return_val = PSA_SUCCESS;
45+
psa_cipher_encrypt_fake.return_val = PSA_SUCCESS;
4646

4747
err = bt_encrypt_le(key, plaintext, enc_data);
4848

49-
expect_single_call_tc_aes_encrypt(enc_data);
49+
expect_single_call_psa_cipher_encrypt(enc_data);
5050

5151
zassert_ok(err, "Unexpected error code '%d' was returned", err);
5252
}

tests/bluetooth/host/crypto/bt_encrypt_le/src/test_suite_invalid_inputs.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ ZTEST(bt_encrypt_le_invalid_cases, test_tc_aes128_set_encrypt_key_fails)
8787
const uint8_t plaintext[16] = {0};
8888
uint8_t enc_data[16] = {0};
8989

90-
tc_aes128_set_encrypt_key_fake.return_val = TC_CRYPTO_FAIL;
90+
psa_import_key_fake.return_val = PSA_ERROR_GENERIC_ERROR;
9191

9292
err = bt_encrypt_le(key, plaintext, enc_data);
9393

@@ -98,8 +98,8 @@ ZTEST(bt_encrypt_le_invalid_cases, test_tc_aes128_set_encrypt_key_fails)
9898
* Test bt_encrypt_le() fails when tc_aes_encrypt() fails
9999
*
100100
* Constraints:
101-
* - tc_aes128_set_encrypt_key() succeeds and returns 'TC_CRYPTO_SUCCESS'.
102-
* - tc_aes_encrypt() fails and returns 'TC_CRYPTO_FAIL'.
101+
* - psa_import_key() succeeds and returns 'PSA_SUCCESS'.
102+
* - psa_cipher_encrypt() fails and returns '-EINVAL'.
103103
*
104104
* Expected behaviour:
105105
* - bt_encrypt_le() returns a negative error code '-EINVAL' (failure)
@@ -111,10 +111,10 @@ ZTEST(bt_encrypt_le_invalid_cases, test_tc_aes_encrypt_fails)
111111
const uint8_t plaintext[16] = {0};
112112
uint8_t enc_data[16] = {0};
113113

114-
tc_aes128_set_encrypt_key_fake.return_val = TC_CRYPTO_SUCCESS;
115-
tc_aes_encrypt_fake.return_val = TC_CRYPTO_FAIL;
114+
psa_import_key_fake.return_val = PSA_SUCCESS;
115+
psa_cipher_encrypt_fake.return_val = -EINVAL;
116116

117117
err = bt_encrypt_le(key, plaintext, enc_data);
118118

119-
zassert_true(err == -EINVAL, "Unexpected error code '%d' was returned", err);
119+
zassert_true(err == -EIO, "Unexpected error code '%d' was returned", err);
120120
}

tests/bluetooth/host/crypto/bt_rand/src/main.c

Lines changed: 8 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,10 @@
44
* SPDX-License-Identifier: Apache-2.0
55
*/
66

7-
#include "mocks/crypto_help_utils.h"
87
#include "mocks/hci_core.h"
98
#include "mocks/hci_core_expects.h"
10-
#include "mocks/hmac_prng.h"
11-
#include "mocks/hmac_prng_expects.h"
9+
#include "mocks/prng.h"
10+
#include "mocks/prng_expects.h"
1211

1312
#include <zephyr/bluetooth/crypto.h>
1413
#include <zephyr/fff.h>
@@ -21,7 +20,7 @@ DEFINE_FFF_GLOBALS;
2120
static void fff_reset_rule_before(const struct ztest_unit_test *test, void *fixture)
2221
{
2322
HCI_CORE_FFF_FAKES_LIST(RESET_FAKE);
24-
HMAC_PRNG_FFF_FAKES_LIST(RESET_FAKE);
23+
PRNG_FFF_FAKES_LIST(RESET_FAKE);
2524
}
2625

2726
ZTEST_RULE(fff_reset_rule, fff_reset_rule_before, NULL);
@@ -57,74 +56,29 @@ ZTEST(bt_rand, test_bt_rand_succeeds_host_crypto_prng_disabled)
5756
}
5857

5958
/*
60-
* Test bt_rand() succeeds when tc_hmac_prng_generate() succeeds on the first call while
59+
* Test bt_rand() succeeds when psa_generate_random() succeeds on the first call while
6160
* 'CONFIG_BT_HOST_CRYPTO_PRNG' is enabled.
6261
*
6362
* Constraints:
6463
* - 'CONFIG_BT_HOST_CRYPTO_PRNG' is enabled
65-
* - tc_hmac_prng_generate() succeeds and returns 'TC_CRYPTO_SUCCESS' on the first call.
64+
* - psa_generate_random() succeeds and returns 'PSA_SUCCESS' on the first call.
6665
*
6766
* Expected behaviour:
6867
* - bt_rand() returns 0 (success)
6968
*/
70-
ZTEST(bt_rand, test_tc_hmac_prng_generate_succeeds_on_first_call)
69+
ZTEST(bt_rand, test_psa_generate_random_succeeds_on_first_call)
7170
{
7271
int err;
7372
uint8_t buf[16];
7473
size_t buf_len = 16;
75-
struct tc_hmac_prng_struct *hmac_prng = bt_crypto_get_hmac_prng_instance();
7674

7775
Z_TEST_SKIP_IFNDEF(CONFIG_BT_HOST_CRYPTO_PRNG);
7876

79-
tc_hmac_prng_generate_fake.return_val = TC_CRYPTO_SUCCESS;
77+
psa_generate_random_fake.return_val = PSA_SUCCESS;
8078

8179
err = bt_rand(buf, buf_len);
8280

83-
expect_call_count_tc_hmac_prng_generate(1, buf, buf_len, hmac_prng);
84-
85-
zassert_ok(err, "Unexpected error code '%d' was returned", err);
86-
}
87-
88-
static int tc_hmac_prng_generate_custom_fake(uint8_t *out, unsigned int outlen, TCHmacPrng_t prng)
89-
{
90-
if (tc_hmac_prng_generate_fake.call_count == 1) {
91-
return TC_HMAC_PRNG_RESEED_REQ;
92-
}
93-
94-
return TC_CRYPTO_SUCCESS;
95-
}
96-
97-
/*
98-
* Test bt_rand() succeeds when tc_hmac_prng_generate() succeeds on the second call after a seeding
99-
* request by tc_hmac_prng_generate() while 'CONFIG_BT_HOST_CRYPTO_PRNG' is enabled.
100-
*
101-
* Constraints:
102-
* - 'CONFIG_BT_HOST_CRYPTO_PRNG' is enabled
103-
* - tc_hmac_prng_generate() fails and returns 'TC_HMAC_PRNG_RESEED_REQ' on the first call.
104-
* - tc_hmac_prng_generate() succeeds and returns 'TC_CRYPTO_SUCCESS' on the second call.
105-
*
106-
* Expected behaviour:
107-
* - bt_rand() returns 0 (success)
108-
*/
109-
ZTEST(bt_rand, test_tc_hmac_prng_generate_succeeds_on_second_call)
110-
{
111-
int err;
112-
uint8_t buf[16];
113-
size_t buf_len = 16;
114-
struct tc_hmac_prng_struct *hmac_prng = bt_crypto_get_hmac_prng_instance();
115-
116-
Z_TEST_SKIP_IFNDEF(CONFIG_BT_HOST_CRYPTO_PRNG);
117-
118-
tc_hmac_prng_generate_fake.custom_fake = tc_hmac_prng_generate_custom_fake;
119-
120-
/* This is to make prng_reseed() succeeds and return 0 */
121-
bt_hci_le_rand_fake.return_val = 0;
122-
tc_hmac_prng_reseed_fake.return_val = TC_CRYPTO_SUCCESS;
123-
124-
err = bt_rand(buf, buf_len);
125-
126-
expect_call_count_tc_hmac_prng_generate(2, buf, buf_len, hmac_prng);
127-
expect_single_call_tc_hmac_prng_reseed(hmac_prng, 32, sizeof(int64_t));
81+
expect_single_call_psa_generate_random(buf, buf_len);
12882

12983
zassert_ok(err, "Unexpected error code '%d' was returned", err);
13084
}

0 commit comments

Comments
 (0)