Skip to content

Commit 8301325

Browse files
authored
Merge pull request #8935 from kfnta/crypto_partition_fix
Fix PSA crypto partition and tests
2 parents 1c201b4 + 51a462a commit 8301325

File tree

16 files changed

+312
-205
lines changed

16 files changed

+312
-205
lines changed

TESTS/mbed-crypto/sanity/main.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030

3131
using namespace utest::v1;
3232

33-
#ifdef MBEDTLS_ENTROPY_NV_SEED
33+
#if defined(MBEDTLS_ENTROPY_NV_SEED) || defined(COMPONENT_PSA_SRV_IPC)
3434

3535
#if !defined(MAX)
3636
#define MAX(a,b) (((a)>(b))?(a):(b))
@@ -47,7 +47,7 @@ void inject_entropy()
4747
}
4848
mbedtls_psa_inject_entropy(seed, MBEDTLS_PSA_INJECT_ENTROPY_MIN_SIZE);
4949
}
50-
#endif
50+
#endif // defined(MBEDTLS_ENTROPY_NV_SEED) || defined(COMPONENT_PSA_SRV_IPC)
5151

5252
void test_crypto_random(void)
5353
{
@@ -297,12 +297,12 @@ void test_crypto_key_derivation(void)
297297
utest::v1::status_t case_setup_handler(const Case *const source, const size_t index_of_case)
298298
{
299299
psa_status_t status = psa_crypto_init();
300-
#if defined(MBEDTLS_ENTROPY_NV_SEED)
300+
#if defined(MBEDTLS_ENTROPY_NV_SEED) || defined(COMPONENT_PSA_SRV_IPC)
301301
if (status == PSA_ERROR_INSUFFICIENT_ENTROPY) {
302302
inject_entropy();
303303
status = psa_crypto_init();
304304
}
305-
#endif /* MBEDTLS_ENTROPY_NV_SEED */
305+
#endif /* defined(MBEDTLS_ENTROPY_NV_SEED) || defined(COMPONENT_PSA_SRV_IPC) */
306306
TEST_ASSERT_EQUAL(PSA_SUCCESS, status);
307307
return greentea_case_setup_handler(source, index_of_case);
308308
}

TESTS/psa/crypto_init/COMPONENT_SPE/psa_setup.c

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -27,21 +27,21 @@
2727
#include "spm_internal.h"
2828
#include "handles_manager.h"
2929
#include "cmsis.h"
30-
#include "psa_psa_f_partition.h"
30+
#include "psa_crypto_srv_partition.h"
3131
#include "psa_its_partition.h"
3232

33-
extern const uint32_t psa_f_external_sids[4];
33+
extern const uint32_t crypto_srv_external_sids[4];
3434

3535
spm_partition_t g_partitions[2] = {
3636
{
37-
.partition_id = PSA_F_ID,
37+
.partition_id = CRYPTO_SRV_ID,
3838
.thread_id = 0,
39-
.flags_rot_srv = PSA_F_WAIT_ANY_SID_MSK,
39+
.flags_rot_srv = CRYPTO_SRV_WAIT_ANY_SID_MSK,
4040
.flags_interrupts = 0,
4141
.rot_services = NULL,
42-
.rot_services_count = PSA_F_ROT_SRV_COUNT,
43-
.extern_sids = psa_f_external_sids,
44-
.extern_sids_count = PSA_F_EXT_ROT_SRV_COUNT,
42+
.rot_services_count = CRYPTO_SRV_ROT_SRV_COUNT,
43+
.extern_sids = crypto_srv_external_sids,
44+
.extern_sids_count = CRYPTO_SRV_EXT_ROT_SRV_COUNT,
4545
.irq_mapper = NULL,
4646
},
4747
{
@@ -65,7 +65,7 @@ const mem_region_t *mem_regions = NULL;
6565
const uint32_t mem_region_count = 0;
6666

6767
// forward declaration of partition initializers
68-
void psa_f_init(spm_partition_t *partition);
68+
void crypto_srv_init(spm_partition_t *partition);
6969
void its_init(spm_partition_t *partition);
7070

7171
uint32_t init_partitions(spm_partition_t **partitions)
@@ -74,7 +74,7 @@ uint32_t init_partitions(spm_partition_t **partitions)
7474
SPM_PANIC("partitions is NULL!\n");
7575
}
7676

77-
psa_f_init(&(g_partitions[0]));
77+
crypto_srv_init(&(g_partitions[0]));
7878
its_init(&(g_partitions[1]));
7979

8080
*partitions = g_partitions;

TESTS/psa/crypto_init/main.cpp

Lines changed: 25 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@
1616
* limitations under the License.
1717
*/
1818

19-
#if ((!defined(TARGET_PSA)) || (!defined(MBEDTLS_PSA_CRYPTO_C)) || (!defined(MBEDTLS_PSA_CRYPTO_SPM )))
20-
#error [NOT_SUPPORTED] Mbed SPM Crypto is OFF - skipping.
19+
#if ((!defined(TARGET_PSA)) || (!defined(MBEDTLS_PSA_CRYPTO_C)))
20+
#error [NOT_SUPPORTED] Mbed Crypto is OFF - skipping.
2121
#endif // TARGET_PSA
2222

2323
#include "greentea-client/test_env.h"
@@ -49,23 +49,24 @@ utest::v1::status_t greentea_test_setup(const size_t number_of_cases)
4949

5050
static void check_multi_crypto_init_deinit()
5151
{
52+
#if !defined(COMPONENT_PSA_SRV_IPC)
53+
TEST_SKIP();
54+
#endif
5255
uint8_t output[TEST_RANDOM_SIZE] = {0};
53-
uint8_t seed[MBEDTLS_PSA_INJECT_ENTROPY_MIN_SIZE] = {0};
54-
/* inject some a seed for test*/
55-
for (int i; i < MBEDTLS_PSA_INJECT_ENTROPY_MIN_SIZE; ++i) {
56-
seed[i] = i;
57-
}
58-
/* don't really care if this succeed this is just to make crypto init pass*/
59-
mbedtls_psa_inject_entropy(seed, MBEDTLS_PSA_INJECT_ENTROPY_MIN_SIZE);
56+
6057
psa_status_t status = psa_crypto_init();
6158
TEST_ASSERT_EQUAL(PSA_SUCCESS, status);
59+
6260
status = psa_crypto_init();
6361
TEST_ASSERT_EQUAL(PSA_SUCCESS, status);
62+
6463
status = psa_generate_random(output, sizeof(output));
6564
TEST_ASSERT_NOT_EQUAL(PSA_ERROR_BAD_STATE, status);
65+
6666
mbedtls_psa_crypto_free();
6767
status = psa_generate_random(output, sizeof(output));
6868
TEST_ASSERT_NOT_EQUAL(PSA_ERROR_BAD_STATE, status);
69+
6970
mbedtls_psa_crypto_free();
7071
status = psa_generate_random(output, sizeof(output));
7172
TEST_ASSERT_EQUAL(PSA_ERROR_BAD_STATE, status);
@@ -75,19 +76,17 @@ static void check_crypto_init_deinit()
7576
{
7677
psa_status_t status;
7778
uint8_t output[TEST_RANDOM_SIZE] = {0};
78-
uint8_t seed[MBEDTLS_PSA_INJECT_ENTROPY_MIN_SIZE] = {0};
79-
/* inject some a seed for test*/
80-
for (int i; i < MBEDTLS_PSA_INJECT_ENTROPY_MIN_SIZE; ++i) {
81-
seed[i] = i;
82-
}
83-
/* don't really care if this succeed this is just to make crypto init pass*/
84-
mbedtls_psa_inject_entropy(seed, MBEDTLS_PSA_INJECT_ENTROPY_MIN_SIZE);
79+
80+
// Should fail as init is required first
8581
status = psa_generate_random(output, sizeof(output));
8682
TEST_ASSERT_EQUAL(PSA_ERROR_BAD_STATE, status);
83+
8784
status = psa_crypto_init();
8885
TEST_ASSERT_EQUAL(PSA_SUCCESS, status);
86+
8987
status = psa_generate_random(output, sizeof(output));
9088
TEST_ASSERT_NOT_EQUAL(PSA_ERROR_BAD_STATE, status);
89+
9190
mbedtls_psa_crypto_free();
9291
status = psa_generate_random(output, sizeof(output));
9392
TEST_ASSERT_EQUAL(PSA_ERROR_BAD_STATE, status);
@@ -102,5 +101,15 @@ Specification specification(greentea_test_setup, cases, greentea_test_teardown_h
102101

103102
int main()
104103
{
104+
#if (defined(COMPONENT_PSA_SRV_IPC) || defined(MBEDTLS_ENTROPY_NV_SEED))
105+
uint8_t seed[MBEDTLS_PSA_INJECT_ENTROPY_MIN_SIZE] = {0};
106+
/* inject some a seed for test*/
107+
for (int i = 0; i < MBEDTLS_PSA_INJECT_ENTROPY_MIN_SIZE; ++i) {
108+
seed[i] = i;
109+
}
110+
111+
/* don't really care if this succeed this is just to make crypto init pass*/
112+
mbedtls_psa_inject_entropy(seed, MBEDTLS_PSA_INJECT_ENTROPY_MIN_SIZE);
113+
#endif
105114
return !Harness::run(specification);
106115
}

TESTS/psa/entropy_inject/COMPONENT_SPE/psa_setup.c

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,10 @@
2828
#include "handles_manager.h"
2929
#include "cmsis.h"
3030
#include "psa_test_its_reset_partition.h"
31-
#include "psa_psa_f_partition.h"
31+
#include "psa_crypto_srv_partition.h"
3232
#include "psa_its_partition.h"
3333

34-
extern const uint32_t psa_f_external_sids[4];
34+
extern const uint32_t crypto_srv_external_sids[4];
3535

3636
spm_partition_t g_partitions[3] = {
3737
{
@@ -46,14 +46,14 @@ spm_partition_t g_partitions[3] = {
4646
.irq_mapper = NULL,
4747
},
4848
{
49-
.partition_id = PSA_F_ID,
49+
.partition_id = CRYPTO_SRV_ID,
5050
.thread_id = 0,
51-
.flags_rot_srv = PSA_F_WAIT_ANY_SID_MSK,
51+
.flags_rot_srv = CRYPTO_SRV_WAIT_ANY_SID_MSK,
5252
.flags_interrupts = 0,
5353
.rot_services = NULL,
54-
.rot_services_count = PSA_F_ROT_SRV_COUNT,
55-
.extern_sids = psa_f_external_sids,
56-
.extern_sids_count = PSA_F_EXT_ROT_SRV_COUNT,
54+
.rot_services_count = CRYPTO_SRV_ROT_SRV_COUNT,
55+
.extern_sids = crypto_srv_external_sids,
56+
.extern_sids_count = CRYPTO_SRV_EXT_ROT_SRV_COUNT,
5757
.irq_mapper = NULL,
5858
},
5959
{
@@ -78,7 +78,7 @@ const uint32_t mem_region_count = 0;
7878

7979
// forward declaration of partition initializers
8080
void test_its_reset_init(spm_partition_t *partition);
81-
void psa_f_init(spm_partition_t *partition);
81+
void crypto_srv_init(spm_partition_t *partition);
8282
void its_init(spm_partition_t *partition);
8383

8484
uint32_t init_partitions(spm_partition_t **partitions)
@@ -88,7 +88,7 @@ uint32_t init_partitions(spm_partition_t **partitions)
8888
}
8989

9090
test_its_reset_init(&(g_partitions[0]));
91-
psa_f_init(&(g_partitions[1]));
91+
crypto_srv_init(&(g_partitions[1]));
9292
its_init(&(g_partitions[2]));
9393

9494
*partitions = g_partitions;

TESTS/psa/entropy_inject/main.cpp

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
using namespace utest::v1;
4242

4343
uint8_t seed[MBEDTLS_ENTROPY_MAX_SEED_SIZE + 2] = {0};
44+
bool skip_tests = false;
4445

4546
void validate_entropy_seed_injection(int seed_length_a,
4647
int expected_status_a,
@@ -83,31 +84,46 @@ utest::v1::status_t greentea_test_setup(const size_t number_of_cases)
8384
#ifndef NO_GREENTEA
8485
GREENTEA_SETUP(60, "default_auto");
8586
#endif
87+
88+
/* fill seed in some data */
89+
for (size_t i = 0; i < sizeof(seed); ++i) {
90+
seed[i] = i;
91+
}
92+
93+
if (mbedtls_psa_inject_entropy(seed, MBEDTLS_ENTROPY_MAX_SEED_SIZE) == PSA_ERROR_NOT_SUPPORTED) {
94+
skip_tests = true;
95+
}
96+
8697
return greentea_test_setup_handler(number_of_cases);
8798
}
8899

89100
static void injection_small_good()
90101
{
102+
TEST_SKIP_UNLESS(!skip_tests);
91103
validate_entropy_seed_injection(MBEDTLS_PSA_INJECT_ENTROPY_MIN_SIZE, PSA_SUCCESS, MBEDTLS_PSA_INJECT_ENTROPY_MIN_SIZE, PSA_ERROR_NOT_PERMITTED);
92104
}
93105

94106
static void injection_big_good()
95107
{
108+
TEST_SKIP_UNLESS(!skip_tests);
96109
validate_entropy_seed_injection(MBEDTLS_ENTROPY_MAX_SEED_SIZE, PSA_SUCCESS, MBEDTLS_ENTROPY_MAX_SEED_SIZE, PSA_ERROR_NOT_PERMITTED);
97110
}
98111

99112
static void injection_too_small()
100113
{
114+
TEST_SKIP_UNLESS(!skip_tests);
101115
validate_entropy_seed_injection((MBEDTLS_ENTROPY_MIN_PLATFORM - 1), PSA_ERROR_INVALID_ARGUMENT, MBEDTLS_PSA_INJECT_ENTROPY_MIN_SIZE, PSA_SUCCESS);
102116
}
103117

104118
static void injection_too_big()
105119
{
120+
TEST_SKIP_UNLESS(!skip_tests);
106121
validate_entropy_seed_injection((MBEDTLS_ENTROPY_MAX_SEED_SIZE + 1), PSA_ERROR_INVALID_ARGUMENT, MBEDTLS_ENTROPY_MAX_SEED_SIZE, PSA_SUCCESS);
107122
}
108123

109124
static void injection_and_init_deinit()
110125
{
126+
TEST_SKIP_UNLESS(!skip_tests);
111127
run_entropy_inject_with_crypto_init();
112128
}
113129

@@ -129,10 +145,6 @@ utest::v1::status_t case_setup_handler(const Case *const source, const size_t in
129145
psa_status_t status;
130146
status = test_psa_its_reset();
131147
TEST_ASSERT_EQUAL(PSA_ITS_SUCCESS, status);
132-
/* fill seed in some data */
133-
for (size_t i = 0; i < MBEDTLS_ENTROPY_MAX_SEED_SIZE + 2; ++i) {
134-
seed[i] = i;
135-
}
136148
return greentea_case_setup_handler(source, index_of_case);
137149
}
138150

TESTS/psa/prot_internal_storage/COMPONENT_SPE/psa_setup.c

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,10 @@
2828
#include "handles_manager.h"
2929
#include "cmsis.h"
3030
#include "psa_test_its_reset_partition.h"
31-
#include "psa_psa_f_partition.h"
31+
#include "psa_crypto_srv_partition.h"
3232
#include "psa_its_partition.h"
3333

34-
extern const uint32_t psa_f_external_sids[4];
34+
extern const uint32_t crypto_srv_external_sids[4];
3535

3636
spm_partition_t g_partitions[3] = {
3737
{
@@ -46,14 +46,14 @@ spm_partition_t g_partitions[3] = {
4646
.irq_mapper = NULL,
4747
},
4848
{
49-
.partition_id = PSA_F_ID,
49+
.partition_id = CRYPTO_SRV_ID,
5050
.thread_id = 0,
51-
.flags_rot_srv = PSA_F_WAIT_ANY_SID_MSK,
51+
.flags_rot_srv = CRYPTO_SRV_WAIT_ANY_SID_MSK,
5252
.flags_interrupts = 0,
5353
.rot_services = NULL,
54-
.rot_services_count = PSA_F_ROT_SRV_COUNT,
55-
.extern_sids = psa_f_external_sids,
56-
.extern_sids_count = PSA_F_EXT_ROT_SRV_COUNT,
54+
.rot_services_count = CRYPTO_SRV_ROT_SRV_COUNT,
55+
.extern_sids = crypto_srv_external_sids,
56+
.extern_sids_count = CRYPTO_SRV_EXT_ROT_SRV_COUNT,
5757
.irq_mapper = NULL,
5858
},
5959
{
@@ -78,7 +78,7 @@ const uint32_t mem_region_count = 0;
7878

7979
// forward declaration of partition initializers
8080
void test_its_reset_init(spm_partition_t *partition);
81-
void psa_f_init(spm_partition_t *partition);
81+
void crypto_srv_init(spm_partition_t *partition);
8282
void its_init(spm_partition_t *partition);
8383

8484
uint32_t init_partitions(spm_partition_t **partitions)
@@ -88,7 +88,7 @@ uint32_t init_partitions(spm_partition_t **partitions)
8888
}
8989

9090
test_its_reset_init(&(g_partitions[0]));
91-
psa_f_init(&(g_partitions[1]));
91+
crypto_srv_init(&(g_partitions[1]));
9292
its_init(&(g_partitions[2]));
9393

9494
*partitions = g_partitions;

TESTS/psa/spm_client/COMPONENT_SPE/psa_setup.c

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,10 @@
2828
#include "handles_manager.h"
2929
#include "cmsis.h"
3030
#include "psa_client_tests_part1_partition.h"
31-
#include "psa_psa_f_partition.h"
31+
#include "psa_crypto_srv_partition.h"
3232
#include "psa_its_partition.h"
3333

34-
extern const uint32_t psa_f_external_sids[4];
34+
extern const uint32_t crypto_srv_external_sids[4];
3535

3636
spm_partition_t g_partitions[3] = {
3737
{
@@ -46,14 +46,14 @@ spm_partition_t g_partitions[3] = {
4646
.irq_mapper = NULL,
4747
},
4848
{
49-
.partition_id = PSA_F_ID,
49+
.partition_id = CRYPTO_SRV_ID,
5050
.thread_id = 0,
51-
.flags_rot_srv = PSA_F_WAIT_ANY_SID_MSK,
51+
.flags_rot_srv = CRYPTO_SRV_WAIT_ANY_SID_MSK,
5252
.flags_interrupts = 0,
5353
.rot_services = NULL,
54-
.rot_services_count = PSA_F_ROT_SRV_COUNT,
55-
.extern_sids = psa_f_external_sids,
56-
.extern_sids_count = PSA_F_EXT_ROT_SRV_COUNT,
54+
.rot_services_count = CRYPTO_SRV_ROT_SRV_COUNT,
55+
.extern_sids = crypto_srv_external_sids,
56+
.extern_sids_count = CRYPTO_SRV_EXT_ROT_SRV_COUNT,
5757
.irq_mapper = NULL,
5858
},
5959
{
@@ -78,7 +78,7 @@ const uint32_t mem_region_count = 0;
7878

7979
// forward declaration of partition initializers
8080
void client_tests_part1_init(spm_partition_t *partition);
81-
void psa_f_init(spm_partition_t *partition);
81+
void crypto_srv_init(spm_partition_t *partition);
8282
void its_init(spm_partition_t *partition);
8383

8484
uint32_t init_partitions(spm_partition_t **partitions)
@@ -88,7 +88,7 @@ uint32_t init_partitions(spm_partition_t **partitions)
8888
}
8989

9090
client_tests_part1_init(&(g_partitions[0]));
91-
psa_f_init(&(g_partitions[1]));
91+
crypto_srv_init(&(g_partitions[1]));
9292
its_init(&(g_partitions[2]));
9393

9494
*partitions = g_partitions;

0 commit comments

Comments
 (0)