Skip to content

Commit 1c68450

Browse files
committed
test: add new component to test core library without calloc/free
This commit also fixes issues found in test suites function/data files. Signed-off-by: Valerio Setti <valerio.setti@nordicsemi.no>
1 parent 5d25044 commit 1c68450

7 files changed

+115
-13
lines changed

tests/scripts/components-configuration-crypto.sh

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,92 @@ component_build_psa_crypto_spm () {
6464
check_renamed_symbols tests/include/spe/crypto_spe.h library/libmbedcrypto.a
6565
}
6666

67+
# The goal of this component is to build a configuration where:
68+
# - test code and libtestdriver1 can make use of calloc/free and
69+
# - core library (including PSA core) cannot use calloc/free.
70+
component_test_psa_crypto_without_heap() {
71+
# Disable PSA features that cannot be accelerated and whose builtin support
72+
# requires calloc/free.
73+
scripts/config.py -f $CRYPTO_CONFIG_H unset PSA_WANT_KEY_TYPE_ECC_KEY_PAIR_DERIVE
74+
scripts/config.py -f $CRYPTO_CONFIG_H unset-all PSA_WANT_ALG_HKDF*
75+
scripts/config.py -f $CRYPTO_CONFIG_H unset-all PSA_WANT_ALG_PBKDF2*
76+
scripts/config.py -f $CRYPTO_CONFIG_H unset-all PSA_WANT_ALG_TLS12*
77+
# RSA key support requires ASN1 parse/write support for testing, but ASN1
78+
# is disabled below.
79+
scripts/config.py -f $CRYPTO_CONFIG_H unset-all PSA_WANT_KEY_TYPE_RSA_*
80+
scripts/config.py -f $CRYPTO_CONFIG_H unset-all PSA_WANT_ALG_RSA_*
81+
# DES requires built-in support for key generation (parity check) so it
82+
# cannot be accelerated
83+
scripts/config.py -f $CRYPTO_CONFIG_H unset PSA_WANT_KEY_TYPE_DES
84+
# EC-JPAKE use calloc/free in PSA core
85+
scripts/config.py -f $CRYPTO_CONFIG_H unset PSA_WANT_ALG_JPAKE
86+
87+
# Accelerate all PSA features (which are still enabled in CRYPTO_CONFIG_H).
88+
PSA_SYM_LIST=$(./scripts/config.py -f $CRYPTO_CONFIG_H get-all-enabled PSA_WANT)
89+
loc_accel_list=$(echo $PSA_SYM_LIST | sed 's/PSA_WANT_//g')
90+
91+
msg "build: libtestdriver1"
92+
helper_libtestdriver1_adjust_config crypto
93+
helper_libtestdriver1_make_drivers "$loc_accel_list"
94+
95+
msg "build: main library"
96+
# Enable fully-static key slots in PSA core.
97+
scripts/config.py set MBEDTLS_PSA_STATIC_KEY_SLOTS
98+
# Prevent PSA core from creating a copy of input/output buffers
99+
scripts/config.py set MBEDTLS_PSA_ASSUME_EXCLUSIVE_BUFFERS
100+
# Prevent PSA core from using CTR-DRBG or HMAC-DRBG for random generation.
101+
scripts/config.py set MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG
102+
# Set cmalloc/free as null pointer functions. Calling them would crash
103+
# the program so we can use this as a "sentinel" for being sure no module
104+
# is making use of these functions in the library.
105+
scripts/config.py set MBEDTLS_PLATFORM_MEMORY
106+
scripts/config.py set MBEDTLS_PLATFORM_STD_CALLOC NULL
107+
scripts/config.py set MBEDTLS_PLATFORM_STD_FREE NULL
108+
109+
# Disable all the modules/features that use cmalloc directly
110+
scripts/config.py unset-all MBEDTLS_ASN1_
111+
scripts/config.py unset MBEDTLS_BIGNUM_C
112+
scripts/config.py unset MBEDTLS_CIPHER_C
113+
scripts/config.py unset MBEDTLS_CMAC_C
114+
scripts/config.py unset MBEDTLS_DHM_C
115+
scripts/config.py unset MBEDTLS_ECDSA_C
116+
scripts/config.py unset MBEDTLS_ECP_RESTARTABLE
117+
scripts/config.py unset MBEDTLS_ECP_C
118+
scripts/config.py unset-all MBEDTLS_LMS_
119+
scripts/config.py unset MBEDTLS_MD_C
120+
scripts/config.py unset MBEDTLS_OID_C
121+
scripts/config.py unset-all MBEDTLS_PEM_
122+
scripts/config.py unset MBEDTLS_PKCS7_C
123+
scripts/config.py unset-all MBEDTLS_PK_
124+
scripts/config.py unset MBEDTLS_RSA_C
125+
scripts/config.py unset MBEDTLS_PSA_CRYPTO_STORAGE_C
126+
# Disable all modules that depend on the the previous ones
127+
scripts/config.py unset MBEDTLS_NIST_KW_C
128+
scripts/config.py unset MBEDTLS_ECDH_C
129+
scripts/config.py unset MBEDTLS_ECJPAKE_C
130+
scripts/config.py unset-all MBEDTLS_PKCS1_
131+
scripts/config.py unset-all MBEDTLS_ENTROPY_
132+
scripts/config.py unset-all MBEDTLS_SHA
133+
scripts/config.py unset MBEDTLS_PLATFORM_NV_SEED_ALT
134+
scripts/config.py unset MBEDTLS_HKDF_C
135+
scripts/config.py unset MBEDTLS_PKCS5_C
136+
scripts/config.py unset MBEDTLS_PKCS12_C
137+
scripts/config.py unset MBEDTLS_HMAC_DRBG_C
138+
scripts/config.py unset MBEDTLS_ECDSA_DETERMINISTIC
139+
helper_libtestdriver1_make_main "$loc_accel_list" lib
140+
141+
msg "build: test suites and helpers"
142+
# Reset cmalloc/free functions to normal operations so that test code can
143+
# freely use them.
144+
scripts/config.py unset MBEDTLS_PLATFORM_MEMORY
145+
scripts/config.py unset MBEDTLS_PLATFORM_STD_CALLOC
146+
scripts/config.py unset MBEDTLS_PLATFORM_STD_FREE
147+
helper_libtestdriver1_make_main "$loc_accel_list" tests
148+
149+
msg "run tests"
150+
make test
151+
}
152+
67153
# Get a list of library-wise undefined symbols and ensure that they only
68154
# belong to psa_xxx() functions and not to mbedtls_yyy() ones.
69155
# This function is a common helper used by both:

tests/suites/test_suite_psa_crypto.data

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7402,9 +7402,11 @@ PSA generate key: raw data, 9 bits: invalid argument
74027402
generate_key:PSA_KEY_TYPE_RAW_DATA:9:PSA_KEY_USAGE_EXPORT:0:PSA_ERROR_INVALID_ARGUMENT:0
74037403

74047404
PSA generate key: raw data, (MBEDTLS_CTR_DRBG_MAX_REQUEST + 1) * 8 bits
7405+
depends_on:!MBEDTLS_PSA_STATIC_KEY_SLOTS
74057406
generate_key:PSA_KEY_TYPE_RAW_DATA:(MBEDTLS_CTR_DRBG_MAX_REQUEST + 1) * 8:PSA_KEY_USAGE_EXPORT:0:PSA_SUCCESS:0
74067407

74077408
PSA generate key: raw data, (2 * MBEDTLS_CTR_DRBG_MAX_REQUEST + 1) * 8 bits
7409+
depends_on:!MBEDTLS_PSA_STATIC_KEY_SLOTS
74087410
generate_key:PSA_KEY_TYPE_RAW_DATA:(2 * MBEDTLS_CTR_DRBG_MAX_REQUEST + 1) * 8:PSA_KEY_USAGE_EXPORT:0:PSA_SUCCESS:0
74097411

74107412
PSA generate key: raw data, 65528 bits (large key, ok if it fits)

tests/suites/test_suite_psa_crypto.function

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1258,7 +1258,7 @@ static void interruptible_signverify_get_minmax_completes(uint32_t max_ops,
12581258
}
12591259
#endif /* MBEDTLS_ECP_RESTARTABLE */
12601260

1261-
#if defined(PSA_WANT_KEY_TYPE_RSA_KEY_PAIR_GENERATE)
1261+
#if defined(PSA_WANT_KEY_TYPE_RSA_KEY_PAIR_GENERATE) && defined(MBEDTLS_ASN1_PARSE_C)
12621262
static int rsa_test_e(mbedtls_svc_key_id_t key,
12631263
size_t bits,
12641264
const data_t *e_arg)
@@ -10199,7 +10199,7 @@ void generate_key_ext(int type_arg,
1019910199
TEST_EQUAL(psa_get_key_type(&got_attributes), type);
1020010200
TEST_EQUAL(psa_get_key_bits(&got_attributes), bits);
1020110201

10202-
#if defined(PSA_WANT_KEY_TYPE_RSA_KEY_PAIR_GENERATE)
10202+
#if defined(PSA_WANT_KEY_TYPE_RSA_KEY_PAIR_GENERATE) && defined(MBEDTLS_ASN1_PARSE_C)
1020310203
if (type == PSA_KEY_TYPE_RSA_KEY_PAIR) {
1020410204
TEST_ASSERT(rsa_test_e(key, bits, params_data));
1020510205
}

tests/suites/test_suite_psa_crypto_driver_wrappers.data

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -253,35 +253,35 @@ generate_ec_key through transparent driver: error
253253
generate_ec_key:PSA_ERROR_GENERIC_ERROR:"":PSA_ERROR_GENERIC_ERROR
254254

255255
validate key through transparent driver: good private key
256-
depends_on:PSA_WANT_KEY_TYPE_ECC_KEY_PAIR_BASIC:PSA_WANT_KEY_TYPE_ECC_KEY_PAIR_IMPORT:PSA_WANT_KEY_TYPE_ECC_KEY_PAIR_EXPORT:PSA_WANT_ECC_SECP_R1_256
256+
depends_on:PSA_WANT_KEY_TYPE_ECC_KEY_PAIR_BASIC:PSA_WANT_KEY_TYPE_ECC_KEY_PAIR_IMPORT:PSA_WANT_KEY_TYPE_ECC_KEY_PAIR_EXPORT:PSA_WANT_ECC_SECP_R1_256:MBEDTLS_PSA_CRYPTO_STORAGE_C
257257
validate_key:PSA_SUCCESS:PSA_KEY_LOCATION_LOCAL_STORAGE:130:1:PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_FAMILY_SECP_R1):"49c9a8c18c4b885638c431cf1df1c994131609b580d4fd43a0cab17db2f13eee":PSA_SUCCESS
258258

259259
validate key through transparent driver: good public key
260-
depends_on:PSA_WANT_KEY_TYPE_ECC_PUBLIC_KEY:PSA_WANT_ECC_SECP_R1_256
260+
depends_on:PSA_WANT_KEY_TYPE_ECC_PUBLIC_KEY:PSA_WANT_ECC_SECP_R1_256:MBEDTLS_PSA_CRYPTO_STORAGE_C
261261
validate_key:PSA_SUCCESS:PSA_KEY_LOCATION_LOCAL_STORAGE:131:1:PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_FAMILY_SECP_R1):"04dea5e45d0ea37fc566232a508f4ad20ea13d47e4bf5fa4d54a57a0ba012042087097496efc583fed8b24a5b9be9a51de063f5a00a8b698a16fd7f29b5485f320":PSA_SUCCESS
262262

263263
validate key through transparent driver: fallback private key
264-
depends_on:MBEDTLS_PSA_BUILTIN_KEY_TYPE_ECC_KEY_PAIR_BASIC:MBEDTLS_PSA_BUILTIN_KEY_TYPE_ECC_KEY_PAIR_IMPORT:MBEDTLS_PSA_BUILTIN_KEY_TYPE_ECC_KEY_PAIR_EXPORT:MBEDTLS_PSA_BUILTIN_ECC_SECP_R1_256
264+
depends_on:MBEDTLS_PSA_BUILTIN_KEY_TYPE_ECC_KEY_PAIR_BASIC:MBEDTLS_PSA_BUILTIN_KEY_TYPE_ECC_KEY_PAIR_IMPORT:MBEDTLS_PSA_BUILTIN_KEY_TYPE_ECC_KEY_PAIR_EXPORT:MBEDTLS_PSA_BUILTIN_ECC_SECP_R1_256:MBEDTLS_PSA_CRYPTO_STORAGE_C
265265
validate_key:PSA_ERROR_NOT_SUPPORTED:PSA_KEY_LOCATION_LOCAL_STORAGE:132:1:PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_FAMILY_SECP_R1):"49c9a8c18c4b885638c431cf1df1c994131609b580d4fd43a0cab17db2f13eee":PSA_SUCCESS
266266

267267
validate key through transparent driver: fallback public key
268-
depends_on:MBEDTLS_PSA_BUILTIN_KEY_TYPE_ECC_PUBLIC_KEY:MBEDTLS_PSA_BUILTIN_ECC_SECP_R1_256
268+
depends_on:MBEDTLS_PSA_BUILTIN_KEY_TYPE_ECC_PUBLIC_KEY:MBEDTLS_PSA_BUILTIN_ECC_SECP_R1_256:MBEDTLS_PSA_CRYPTO_STORAGE_C
269269
validate_key:PSA_ERROR_NOT_SUPPORTED:PSA_KEY_LOCATION_LOCAL_STORAGE:133:1:PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_FAMILY_SECP_R1):"04dea5e45d0ea37fc566232a508f4ad20ea13d47e4bf5fa4d54a57a0ba012042087097496efc583fed8b24a5b9be9a51de063f5a00a8b698a16fd7f29b5485f320":PSA_SUCCESS
270270

271271
validate key through transparent driver: error
272-
depends_on:PSA_WANT_KEY_TYPE_ECC_KEY_PAIR_BASIC:PSA_WANT_KEY_TYPE_ECC_KEY_PAIR_IMPORT:PSA_WANT_KEY_TYPE_ECC_KEY_PAIR_EXPORT
272+
depends_on:PSA_WANT_KEY_TYPE_ECC_KEY_PAIR_BASIC:PSA_WANT_KEY_TYPE_ECC_KEY_PAIR_IMPORT:PSA_WANT_KEY_TYPE_ECC_KEY_PAIR_EXPORT:MBEDTLS_PSA_CRYPTO_STORAGE_C
273273
validate_key:PSA_ERROR_GENERIC_ERROR:PSA_KEY_LOCATION_LOCAL_STORAGE:134:1:PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_FAMILY_SECP_R1):"49c9a8c18c4b885638c431cf1df1c994131609b580d4fd43a0cab17db2f13eee":PSA_ERROR_GENERIC_ERROR
274274

275275
validate key through opaque driver: good private key
276-
depends_on:PSA_WANT_KEY_TYPE_ECC_KEY_PAIR_BASIC:PSA_WANT_KEY_TYPE_ECC_KEY_PAIR_IMPORT:PSA_WANT_KEY_TYPE_ECC_KEY_PAIR_EXPORT:PSA_WANT_ECC_SECP_R1_256
276+
depends_on:PSA_WANT_KEY_TYPE_ECC_KEY_PAIR_BASIC:PSA_WANT_KEY_TYPE_ECC_KEY_PAIR_IMPORT:PSA_WANT_KEY_TYPE_ECC_KEY_PAIR_EXPORT:PSA_WANT_ECC_SECP_R1_256:MBEDTLS_PSA_CRYPTO_STORAGE_C
277277
validate_key:PSA_SUCCESS:PSA_CRYPTO_TEST_DRIVER_LOCATION:130:1:PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_FAMILY_SECP_R1):"49c9a8c18c4b885638c431cf1df1c994131609b580d4fd43a0cab17db2f13eee":PSA_SUCCESS
278278

279279
validate key through opaque driver: good public key
280-
depends_on:PSA_WANT_KEY_TYPE_ECC_PUBLIC_KEY:PSA_WANT_ECC_SECP_R1_256
280+
depends_on:PSA_WANT_KEY_TYPE_ECC_PUBLIC_KEY:PSA_WANT_ECC_SECP_R1_256:MBEDTLS_PSA_CRYPTO_STORAGE_C
281281
validate_key:PSA_SUCCESS:PSA_CRYPTO_TEST_DRIVER_LOCATION:131:1:PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_FAMILY_SECP_R1):"04dea5e45d0ea37fc566232a508f4ad20ea13d47e4bf5fa4d54a57a0ba012042087097496efc583fed8b24a5b9be9a51de063f5a00a8b698a16fd7f29b5485f320":PSA_SUCCESS
282282

283283
validate key through opaque driver: error
284-
depends_on:PSA_WANT_KEY_TYPE_ECC_KEY_PAIR_BASIC:PSA_WANT_KEY_TYPE_ECC_KEY_PAIR_IMPORT:PSA_WANT_KEY_TYPE_ECC_KEY_PAIR_EXPORT
284+
depends_on:PSA_WANT_KEY_TYPE_ECC_KEY_PAIR_BASIC:PSA_WANT_KEY_TYPE_ECC_KEY_PAIR_IMPORT:PSA_WANT_KEY_TYPE_ECC_KEY_PAIR_EXPORT:MBEDTLS_PSA_CRYPTO_STORAGE_C
285285
validate_key:PSA_ERROR_GENERIC_ERROR:PSA_CRYPTO_TEST_DRIVER_LOCATION:134:1:PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_FAMILY_SECP_R1):"49c9a8c18c4b885638c431cf1df1c994131609b580d4fd43a0cab17db2f13eee":PSA_ERROR_GENERIC_ERROR
286286

287287
export_key private to public through driver: fake

tests/suites/test_suite_psa_crypto_driver_wrappers.function

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,14 @@
66
size_t pake_expected_hit_count = 0;
77
int pake_in_driver = 0;
88

9+
#if defined(PSA_WANT_ALG_JPAKE) && \
10+
defined(PSA_WANT_KEY_TYPE_ECC_KEY_PAIR_BASIC) && \
11+
defined(PSA_WANT_ECC_SECP_R1_256) && defined(PSA_WANT_ALG_SHA_256)
12+
913
/* The only two JPAKE user/peer identifiers supported for the time being. */
1014
static const uint8_t jpake_server_id[] = { 's', 'e', 'r', 'v', 'e', 'r' };
1115
static const uint8_t jpake_client_id[] = { 'c', 'l', 'i', 'e', 'n', 't' };
1216

13-
#if defined(PSA_WANT_ALG_JPAKE) && \
14-
defined(PSA_WANT_KEY_TYPE_ECC_KEY_PAIR_BASIC) && \
15-
defined(PSA_WANT_ECC_SECP_R1_256) && defined(PSA_WANT_ALG_SHA_256)
1617
static void ecjpake_do_round(psa_algorithm_t alg, unsigned int primitive,
1718
psa_pake_operation_t *server,
1819
psa_pake_operation_t *client,
@@ -437,6 +438,11 @@ static int sanity_check_rsa_encryption_result(
437438
mbedtls_mpi_init(&D);
438439
mbedtls_mpi_init(&C);
439440
mbedtls_mpi_init(&X);
441+
#else /* MBEDTLS_BIGNUM_C */
442+
(void) alg;
443+
(void) private_exponent;
444+
(void) input_data;
445+
(void) buf;
440446
#endif /* MBEDTLS_BIGNUM_C */
441447

442448
int ok = 0;

tests/suites/test_suite_psa_crypto_entropy.function

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@
88
#include "entropy_poll.h"
99

1010
/* Calculating the minimum allowed entropy size in bytes */
11+
#if !defined(MBEDTLS_ENTROPY_BLOCK_SIZE)
12+
#define MBEDTLS_ENTROPY_BLOCK_SIZE MBEDTLS_ENTROPY_MIN_PLATFORM
13+
#endif
14+
1115
#define MBEDTLS_PSA_INJECT_ENTROPY_MIN_SIZE MAX(MBEDTLS_ENTROPY_MIN_PLATFORM, \
1216
MBEDTLS_ENTROPY_BLOCK_SIZE)
1317

tests/suites/test_suite_psa_crypto_init.function

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@
88
#include "mbedtls/entropy.h"
99
#include "entropy_poll.h"
1010

11+
#if !defined(MBEDTLS_ENTROPY_BLOCK_SIZE)
12+
#define MBEDTLS_ENTROPY_BLOCK_SIZE MBEDTLS_ENTROPY_MIN_PLATFORM
13+
#endif
14+
1115
#define ENTROPY_MIN_NV_SEED_SIZE \
1216
MAX(MBEDTLS_ENTROPY_MIN_PLATFORM, MBEDTLS_ENTROPY_BLOCK_SIZE)
1317

0 commit comments

Comments
 (0)