Skip to content

Commit ced3b1c

Browse files
authored
Merge pull request ARMmbed#13003 from dgreen-arm/add-feature-experimental
Mark PSA as an experimental API
2 parents c7759fe + e5f8dd8 commit ced3b1c

File tree

243 files changed

+504
-526
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

243 files changed

+504
-526
lines changed

.astyleignore

+7-6
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
^BUILD
22
^cmsis
3-
^components/TARGET_PSA/services/attestation/attestation.h
4-
^components/TARGET_PSA/services/attestation/COMPONENT_PSA_SRV_IMPL/tfm_impl
5-
^components/TARGET_PSA/services/attestation/qcbor
6-
^components/TARGET_PSA/services/crypto/COMPONENT_PSA_SRV_IPC/crypto_struct_ipc.h
7-
^components/TARGET_PSA/TARGET_TFM
8-
^components/TARGET_PSA/TESTS
93
^features/cryptocell
104
^features/FEATURE_BLE
5+
^features/FEATURE_EXPERIMENTAL_API/TARGET_MBED_PSA_SRV
6+
^features/FEATURE_EXPERIMENTAL_API/TARGET_PSA/TARGET_MBED_PSA_SRV/services/attestation/attestation.h
7+
^features/FEATURE_EXPERIMENTAL_API/TARGET_PSA/TARGET_MBED_PSA_SRV/services/attestation/COMPONENT_PSA_SRV_IMPL/tfm_impl
8+
^features/FEATURE_EXPERIMENTAL_API/TARGET_PSA/TARGET_MBED_PSA_SRV/services/attestation/qcbor
9+
^features/FEATURE_EXPERIMENTAL_API/TARGET_PSA/TARGET_MBED_PSA_SRV/services/crypto/COMPONENT_PSA_SRV_IPC/crypto_struct_ipc.h
10+
^features/FEATURE_EXPERIMENTAL_API/TARGET_PSA/TARGET_MBED_PSA_SRV/TARGET_TFM
11+
^features/FEATURE_EXPERIMENTAL_API/TARGET_PSA/TARGET_MBED_PSA_SRV/TESTS
1112
^features/frameworks
1213
^features/lwipstack/lwip
1314
^features/lwipstack/lwip-sys

LICENSE.md

+1-1

TESTS/mbedtls/sanity/main.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,12 @@
1515
* limitations under the License.
1616
*/
1717

18-
#include "psa/crypto.h"
19-
2018
#if ((!defined(TARGET_PSA)) || (!defined(MBEDTLS_PSA_CRYPTO_C)))
2119
#error [NOT_SUPPORTED] Mbed Crypto is OFF - skipping.
2220
#else
2321

22+
#include "psa/crypto.h"
23+
2424
#include <stdio.h>
2525
#include "mbed.h"
2626
#include "greentea-client/test_env.h"

features/mbedtls/platform/TARGET_PSA/COMPONENT_NSPE/src/psa_hrng.c renamed to features/FEATURE_EXPERIMENTAL_API/TARGET_PSA/COMPONENT_NSPE/src/psa_hrng.c

+3-3
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,13 @@ MBED_WEAK void trng_free(trng_t *obj)
3434

3535
MBED_WEAK int trng_get_bytes(trng_t *obj, uint8_t *output, size_t length, size_t *output_length)
3636
{
37-
((void)(obj));
38-
if (output == NULL || output_length == NULL){
37+
((void)(obj));
38+
if (output == NULL || output_length == NULL) {
3939
return -1;
4040
}
4141

4242
psa_status_t status = psa_crypto_init();
43-
if(status != PSA_SUCCESS) {
43+
if (status != PSA_SUCCESS) {
4444
return -1;
4545
}
4646

features/mbedtls/platform/TARGET_PSA/COMPONENT_PSA_SRV_IMPL/src/default_random_seed.cpp renamed to features/FEATURE_EXPERIMENTAL_API/TARGET_PSA/COMPONENT_PSA_SRV_IMPL/src/default_random_seed.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@ int mbed_default_seed_read(unsigned char *buf, size_t buf_len)
77
{
88
size_t actual_size;
99
psa_status_t rc = psa_its_get(PSA_CRYPTO_ITS_RANDOM_SEED_UID, 0, buf_len, buf, &actual_size);
10-
return ( rc );
10+
return (rc);
1111
}
1212

1313
int mbed_default_seed_write(unsigned char *buf, size_t buf_len)
1414
{
1515
psa_status_t rc = psa_its_set(PSA_CRYPTO_ITS_RANDOM_SEED_UID, buf_len, buf, 0);
16-
return ( rc );
16+
return (rc);
1717
}
1818

features/frameworks/TARGET_PSA/pal/pal_attestation_intf.c renamed to features/FEATURE_EXPERIMENTAL_API/TARGET_PSA/pal/pal_attestation_intf.c

+7-8
Original file line numberDiff line numberDiff line change
@@ -29,22 +29,21 @@ int32_t pal_attestation_function(int type, va_list valist)
2929
uint8_t *challenge, *token;
3030
uint32_t challenge_size, *token_size, verify_token_size;
3131

32-
switch (type)
33-
{
32+
switch (type) {
3433
case PAL_INITIAL_ATTEST_GET_TOKEN:
35-
challenge = va_arg(valist, uint8_t*);
34+
challenge = va_arg(valist, uint8_t *);
3635
challenge_size = va_arg(valist, uint32_t);
37-
token = va_arg(valist, uint8_t*);
38-
token_size = va_arg(valist, uint32_t*);
36+
token = va_arg(valist, uint8_t *);
37+
token_size = va_arg(valist, uint32_t *);
3938
return psa_initial_attest_get_token(challenge, challenge_size, token, token_size);
4039
case PAL_INITIAL_ATTEST_GET_TOKEN_SIZE:
4140
challenge_size = va_arg(valist, uint32_t);
42-
token_size = va_arg(valist, uint32_t*);
41+
token_size = va_arg(valist, uint32_t *);
4342
return psa_initial_attest_get_token_size(challenge_size, token_size);
4443
case PAL_INITIAL_ATTEST_VERIFY_TOKEN:
45-
challenge = va_arg(valist, uint8_t*);
44+
challenge = va_arg(valist, uint8_t *);
4645
challenge_size = va_arg(valist, uint32_t);
47-
token = va_arg(valist, uint8_t*);
46+
token = va_arg(valist, uint8_t *);
4847
verify_token_size = va_arg(valist, uint32_t);
4948
return pal_initial_attest_verify_token(challenge, challenge_size,
5049
token, verify_token_size);

features/frameworks/TARGET_PSA/pal/pal_client_api_empty_intf.c renamed to features/FEATURE_EXPERIMENTAL_API/TARGET_PSA/pal/pal_client_api_empty_intf.c

+4-4
Original file line numberDiff line numberDiff line change
@@ -73,10 +73,10 @@ psa_handle_t pal_ipc_connect(uint32_t sid, uint32_t minor_version)
7373
*/
7474

7575
psa_status_t pal_ipc_call(psa_handle_t handle,
76-
const psa_invec *in_vec,
77-
size_t in_len,
78-
psa_outvec *out_vec,
79-
size_t out_len)
76+
const psa_invec *in_vec,
77+
size_t in_len,
78+
psa_outvec *out_vec,
79+
size_t out_len)
8080
{
8181
return (PSA_SUCCESS - 1);
8282
}

features/frameworks/TARGET_PSA/pal/pal_client_api_intf.c renamed to features/FEATURE_EXPERIMENTAL_API/TARGET_PSA/pal/pal_client_api_intf.c

+4-4
Original file line numberDiff line numberDiff line change
@@ -76,10 +76,10 @@ psa_handle_t pal_ipc_connect(uint32_t sid, uint32_t minor_version)
7676
*/
7777

7878
psa_status_t pal_ipc_call(psa_handle_t handle,
79-
const psa_invec *in_vec,
80-
size_t in_len,
81-
psa_outvec *out_vec,
82-
size_t out_len)
79+
const psa_invec *in_vec,
80+
size_t in_len,
81+
psa_outvec *out_vec,
82+
size_t out_len)
8383
{
8484
return (psa_call(handle, in_vec, in_len, out_vec, out_len));
8585
}

features/frameworks/TARGET_PSA/pal/pal_client_api_intf.h renamed to features/FEATURE_EXPERIMENTAL_API/TARGET_PSA/pal/pal_client_api_intf.h

+4-4
Original file line numberDiff line numberDiff line change
@@ -65,9 +65,9 @@ uint32_t pal_ipc_framework_version(void);
6565
uint32_t pal_ipc_version(uint32_t sid);
6666
psa_handle_t pal_ipc_connect(uint32_t sid, uint32_t minor_version);
6767
psa_status_t pal_ipc_call(psa_handle_t handle,
68-
const psa_invec *in_vec,
69-
size_t in_len,
70-
psa_outvec *out_vec,
71-
size_t out_len);
68+
const psa_invec *in_vec,
69+
size_t in_len,
70+
psa_outvec *out_vec,
71+
size_t out_len);
7272
void pal_ipc_close(psa_handle_t handle);
7373
#endif /* _PAL_CLIENT_API_H_ */

features/frameworks/TARGET_PSA/pal/pal_common.h renamed to features/FEATURE_EXPERIMENTAL_API/TARGET_PSA/pal/pal_common.h

+1-2
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,7 @@ typedef uint32_t cfg_id_t;
4141

4242
#define PAL_STATUS_UNSUPPORTED_FUNC 0xFF
4343

44-
typedef enum
45-
{
44+
typedef enum {
4645
PAL_STATUS_SUCCESS = 0x0,
4746
PAL_STATUS_ERROR = 0x80
4847
} pal_status_t;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
/** @file
2+
* Copyright (c) 2018, Arm Limited or its affiliates. All rights reserved.
3+
* SPDX-License-Identifier : Apache-2.0
4+
*
5+
* Licensed under the Apache License, Version 2.0 (the "License");
6+
* you may not use this file except in compliance with the License.
7+
* You may obtain a copy of the License at
8+
*
9+
* http://www.apache.org/licenses/LICENSE-2.0
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS,
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
**/
17+
18+
19+
#include "pal_internal_trusted_storage_intf.h"
20+
21+
/**
22+
@brief - This API will call the requested internal trusted storage function
23+
@param - type : function code
24+
valist : variable argument list
25+
@return - error status
26+
**/
27+
uint32_t pal_its_function(int type, va_list valist)
28+
{
29+
#if PSA_INTERNAL_TRUSTED_STORAGE_IMPLEMENTED
30+
uint32_t uid, data_length, offset;
31+
const void *p_write_data;
32+
void *p_read_data;
33+
psa_storage_create_flags_t its_create_flags;
34+
//psa_ps_create_flags_t ps_create_flags;
35+
struct psa_its_info_t *its_p_info;
36+
//struct psa_eps_info_t *ps_p_info;
37+
/* TODO: Actual size argument is currently not supported by the testing framework.
38+
* Changes need to be implemented in the actual tests.
39+
* Should be fixed by the next import of the tests.
40+
*/
41+
size_t actual_size;
42+
43+
switch (type) {
44+
case PAL_ITS_SET:
45+
uid = va_arg(valist, psa_storage_uid_t);
46+
data_length = va_arg(valist, uint32_t);
47+
p_write_data = va_arg(valist, const void *);
48+
its_create_flags = va_arg(valist, psa_storage_create_flags_t);
49+
return psa_its_set(uid, data_length, p_write_data, its_create_flags);
50+
case PAL_ITS_GET:
51+
uid = va_arg(valist, psa_storage_uid_t);
52+
offset = va_arg(valist, uint32_t);
53+
data_length = va_arg(valist, uint32_t);
54+
p_read_data = va_arg(valist, void *);
55+
/* TODO: Actual size argument is currently not supported by the testing framework.
56+
* Changes need to be implemented in the actual tests.
57+
* Should be fixed by the next import of the tests.
58+
*/
59+
return psa_its_get(uid, offset, data_length, p_read_data, &actual_size);
60+
case PAL_ITS_GET_INFO:
61+
uid = va_arg(valist, psa_storage_uid_t);
62+
its_p_info = va_arg(valist, struct psa_its_info_t *);
63+
return psa_its_get_info(uid, (struct psa_storage_info_t *)its_p_info);
64+
case PAL_ITS_REMOVE:
65+
uid = va_arg(valist, psa_storage_uid_t);
66+
return psa_its_remove(uid);
67+
/* case PAL_PS_SET: */
68+
/* uid = va_arg(valist, uint32_t); */
69+
/* data_length = va_arg(valist, uint32_t); */
70+
/* p_write_data = va_arg(valist, const void*); */
71+
/* ps_create_flags = va_arg(valist, psa_ps_create_flags_t); */
72+
/* return psa_ps_set(uid, data_length, p_write_data, ps_create_flags); */
73+
/* case PAL_PS_GET: */
74+
/* uid = va_arg(valist, uint32_t); */
75+
/* offset = va_arg(valist, uint32_t); */
76+
/* data_length = va_arg(valist, uint32_t); */
77+
/* p_read_data = va_arg(valist, void*); */
78+
/* return psa_ps_get(uid, offset, data_length, p_read_data); */
79+
/* case PAL_PS_GET_INFO: */
80+
/* uid = va_arg(valist, uint32_t); */
81+
/* ps_p_info = va_arg(valist, struct psa_eps_info_t*); */
82+
/* return psa_ps_get_info(uid, ps_p_info); */
83+
/* case PAL_PS_REMOVE: */
84+
/* uid = va_arg(valist, uint32_t); */
85+
/* return psa_ps_remove(uid); */
86+
default:
87+
return PAL_STATUS_UNSUPPORTED_FUNC;
88+
}
89+
#else
90+
return PAL_STATUS_ERROR;
91+
#endif
92+
}

features/frameworks/TARGET_PSA/pal/pal_mbed_os_intf.cpp renamed to features/FEATURE_EXPERIMENTAL_API/TARGET_PSA/pal/pal_mbed_os_intf.cpp

+17-22
Original file line numberDiff line numberDiff line change
@@ -27,25 +27,25 @@ test_entry_f test_g = NULL;
2727
compliance_test_type type_g = COMPLIANCE_TEST_UNDEFINED;
2828

2929
// randomly generated attestation key used for testing the attestation feature.
30-
// The specific key chosen shouldn't matter to the attestation test
30+
// The specific key chosen shouldn't matter to the attestation test
3131
// the test just needs a key to be injected before it is run.
3232
static const uint8_t private_key_data[] = {
33-
0x49, 0xc9, 0xa8, 0xc1, 0x8c, 0x4b, 0x88, 0x56,
34-
0x38, 0xc4, 0x31, 0xcf, 0x1d, 0xf1, 0xc9, 0x94,
35-
0x13, 0x16, 0x09, 0xb5, 0x80, 0xd4, 0xfd, 0x43,
36-
0xa0, 0xca, 0xb1, 0x7d, 0xb2, 0xf1, 0x3e, 0xee
33+
0x49, 0xc9, 0xa8, 0xc1, 0x8c, 0x4b, 0x88, 0x56,
34+
0x38, 0xc4, 0x31, 0xcf, 0x1d, 0xf1, 0xc9, 0x94,
35+
0x13, 0x16, 0x09, 0xb5, 0x80, 0xd4, 0xfd, 0x43,
36+
0xa0, 0xca, 0xb1, 0x7d, 0xb2, 0xf1, 0x3e, 0xee
3737
};
3838

3939
static const uint8_t public_key_data[] = {
40-
0x04, 0x77, 0x72, 0x65, 0x6f, 0x81, 0x4b, 0x39,
41-
0x92, 0x79, 0xd5, 0xe1, 0xf1, 0x78, 0x1f, 0xac,
42-
0x6f, 0x09, 0x9a, 0x3c, 0x5c, 0xa1, 0xb0, 0xe3,
43-
0x53, 0x51, 0x83, 0x4b, 0x08, 0xb6, 0x5e, 0x0b,
44-
0x57, 0x25, 0x90, 0xcd, 0xaf, 0x8f, 0x76, 0x93,
45-
0x61, 0xbc, 0xf3, 0x4a, 0xcf, 0xc1, 0x1e, 0x5e,
46-
0x07, 0x4e, 0x84, 0x26, 0xbd, 0xde, 0x04, 0xbe,
47-
0x6e, 0x65, 0x39, 0x45, 0x44, 0x96, 0x17, 0xde,
48-
0x45
40+
0x04, 0x77, 0x72, 0x65, 0x6f, 0x81, 0x4b, 0x39,
41+
0x92, 0x79, 0xd5, 0xe1, 0xf1, 0x78, 0x1f, 0xac,
42+
0x6f, 0x09, 0x9a, 0x3c, 0x5c, 0xa1, 0xb0, 0xe3,
43+
0x53, 0x51, 0x83, 0x4b, 0x08, 0xb6, 0x5e, 0x0b,
44+
0x57, 0x25, 0x90, 0xcd, 0xaf, 0x8f, 0x76, 0x93,
45+
0x61, 0xbc, 0xf3, 0x4a, 0xcf, 0xc1, 0x1e, 0x5e,
46+
0x07, 0x4e, 0x84, 0x26, 0xbd, 0xde, 0x04, 0xbe,
47+
0x6e, 0x65, 0x39, 0x45, 0x44, 0x96, 0x17, 0xde,
48+
0x45
4949
};
5050

5151
static void psa_attestation_destroy_key_for_test()
@@ -108,16 +108,11 @@ void main_wrapper(void)
108108

109109
void pal_mbed_os_compliance_test_initialize(void)
110110
{
111-
if (COMPLIANCE_TEST_CRYPTO == type_g)
112-
{
111+
if (COMPLIANCE_TEST_CRYPTO == type_g) {
113112
inject_entropy();
114-
}
115-
else if (COMPLIANCE_TEST_STORAGE == type_g)
116-
{
113+
} else if (COMPLIANCE_TEST_STORAGE == type_g) {
117114
reset_storage_for_compliance_test();
118-
}
119-
else if (COMPLIANCE_TEST_ATTESTATION == type_g)
120-
{
115+
} else if (COMPLIANCE_TEST_ATTESTATION == type_g) {
121116
reset_storage_for_compliance_test();
122117
inject_entropy();
123118
psa_crypto_init();

features/frameworks/TARGET_PSA/pal/pal_mbed_os_intf.h renamed to features/FEATURE_EXPERIMENTAL_API/TARGET_PSA/pal/pal_mbed_os_intf.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,14 @@
77
extern "C" {
88
#endif
99

10-
typedef enum _compliance_test_type{
10+
typedef enum _compliance_test_type {
1111
COMPLIANCE_TEST_UNDEFINED,
1212
COMPLIANCE_TEST_START = COMPLIANCE_TEST_UNDEFINED,
1313
COMPLIANCE_TEST_CRYPTO,
1414
COMPLIANCE_TEST_ATTESTATION,
1515
COMPLIANCE_TEST_STORAGE,
1616
COMPLIANCE_TEST_END
17-
}compliance_test_type;
17+
} compliance_test_type;
1818

1919
typedef void (*test_entry_f)(val_api_t *val_api, psa_api_t *psa_api);
2020
int test_start(test_entry_f test_f, compliance_test_type type);

features/frameworks/TARGET_PSA/pal/pal_protected_storage_intf.c renamed to features/FEATURE_EXPERIMENTAL_API/TARGET_PSA/pal/pal_protected_storage_intf.c

+22-23
Original file line numberDiff line numberDiff line change
@@ -34,29 +34,28 @@ uint32_t pal_ps_function(int type, va_list valist)
3434
psa_storage_create_flags_t ps_create_flags;
3535
struct psa_ps_info_t *ps_p_info;
3636

37-
switch (type)
38-
{
39-
case PAL_PS_SET:
40-
uid = va_arg(valist, psa_storage_uid_t);
41-
data_length = va_arg(valist, uint32_t);
42-
p_write_data = va_arg(valist, const void*);
43-
ps_create_flags = va_arg(valist, psa_storage_create_flags_t);
44-
return psa_ps_set(uid, data_length, p_write_data, ps_create_flags);
45-
case PAL_PS_GET:
46-
uid = va_arg(valist, psa_storage_uid_t);
47-
offset = va_arg(valist, uint32_t);
48-
data_length = va_arg(valist, uint32_t);
49-
p_read_data = va_arg(valist, void*);
50-
return psa_ps_get(uid, offset, data_length, p_read_data, &actual_length);
51-
case PAL_PS_GET_INFO:
52-
uid = va_arg(valist, psa_storage_uid_t);
53-
ps_p_info = va_arg(valist, struct psa_ps_info_t*);
54-
return psa_ps_get_info(uid, ps_p_info);
55-
case PAL_PS_REMOVE:
56-
uid = va_arg(valist, psa_storage_uid_t);
57-
return psa_ps_remove(uid);
58-
default:
59-
return PAL_STATUS_UNSUPPORTED_FUNC;
37+
switch (type) {
38+
case PAL_PS_SET:
39+
uid = va_arg(valist, psa_storage_uid_t);
40+
data_length = va_arg(valist, uint32_t);
41+
p_write_data = va_arg(valist, const void *);
42+
ps_create_flags = va_arg(valist, psa_storage_create_flags_t);
43+
return psa_ps_set(uid, data_length, p_write_data, ps_create_flags);
44+
case PAL_PS_GET:
45+
uid = va_arg(valist, psa_storage_uid_t);
46+
offset = va_arg(valist, uint32_t);
47+
data_length = va_arg(valist, uint32_t);
48+
p_read_data = va_arg(valist, void *);
49+
return psa_ps_get(uid, offset, data_length, p_read_data, &actual_length);
50+
case PAL_PS_GET_INFO:
51+
uid = va_arg(valist, psa_storage_uid_t);
52+
ps_p_info = va_arg(valist, struct psa_ps_info_t *);
53+
return psa_ps_get_info(uid, ps_p_info);
54+
case PAL_PS_REMOVE:
55+
uid = va_arg(valist, psa_storage_uid_t);
56+
return psa_ps_remove(uid);
57+
default:
58+
return PAL_STATUS_UNSUPPORTED_FUNC;
6059
}
6160
#else
6261
return PAL_STATUS_ERROR;

0 commit comments

Comments
 (0)