Skip to content

Commit 3e88dcf

Browse files
Oren Cohenitayzafrir
authored andcommitted
Test modifications
* Add support for entropy injection * Move psa_crypto_init & mbedtls_psa_crypto_free to setup & teardown handlers * Skip test_crypto_asymmetric_encrypt_decrypt if RSA generation is not supported
1 parent 7fa969f commit 3e88dcf

File tree

1 file changed

+47
-33
lines changed

1 file changed

+47
-33
lines changed

TESTS/mbed-crypto/sanity/main.cpp

Lines changed: 47 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,30 @@
2121
#include "unity.h"
2222
#include "utest.h"
2323
#include "psa/crypto.h"
24+
#include "entropy.h"
25+
#include "entropy_poll.h"
2426

2527
using namespace utest::v1;
2628

29+
#ifdef MBEDTLS_ENTROPY_NV_SEED
30+
31+
#if !defined(MAX)
32+
#define MAX(a,b) (((a)>(b))?(a):(b))
33+
#endif
34+
35+
#define MBEDTLS_PSA_INJECT_ENTROPY_MIN_SIZE \
36+
MAX(MBEDTLS_ENTROPY_MIN_PLATFORM, MBEDTLS_ENTROPY_BLOCK_SIZE)
37+
38+
void inject_entropy()
39+
{
40+
uint8_t seed[MBEDTLS_PSA_INJECT_ENTROPY_MIN_SIZE] = { 0 };
41+
for (int i = 0; i < MBEDTLS_PSA_INJECT_ENTROPY_MIN_SIZE; ++i) {
42+
seed[i] = i;
43+
}
44+
mbedtls_psa_inject_entropy(seed, MBEDTLS_PSA_INJECT_ENTROPY_MIN_SIZE);
45+
}
46+
#endif
47+
2748
void test_crypto_random(void)
2849
{
2950
static const unsigned char trail[] = "don't overwrite me";
@@ -32,8 +53,6 @@ void test_crypto_random(void)
3253
size_t i, bytes = sizeof(changed);
3354
unsigned int run;
3455

35-
TEST_ASSERT_EQUAL(PSA_SUCCESS, psa_crypto_init());
36-
3756
memcpy(output + bytes, trail, sizeof(trail));
3857
/* Run several times, to ensure that every output byte will be
3958
* nonzero at least once with overwhelming probability
@@ -57,12 +76,11 @@ void test_crypto_random(void)
5776
for (i = 0; i < bytes; i++) {
5877
TEST_ASSERT_NOT_EQUAL(0, changed[i]);
5978
}
60-
61-
mbedtls_psa_crypto_free();
6279
}
6380

6481
void test_crypto_asymmetric_encrypt_decrypt(void)
6582
{
83+
psa_status_t status = PSA_SUCCESS;
6684
psa_key_slot_t slot = 1;
6785
psa_key_type_t key_type = PSA_KEY_TYPE_RSA_KEYPAIR;
6886
psa_algorithm_t alg = PSA_ALG_RSA_PKCS1V15_CRYPT;
@@ -72,12 +90,13 @@ void test_crypto_asymmetric_encrypt_decrypt(void)
7290
unsigned char encrypted[64];
7391
unsigned char decrypted[sizeof(input)];
7492

75-
TEST_ASSERT_EQUAL(PSA_SUCCESS, psa_crypto_init());
76-
7793
psa_key_policy_init(&policy);
7894
psa_key_policy_set_usage(&policy, PSA_KEY_USAGE_ENCRYPT | PSA_KEY_USAGE_DECRYPT, alg);
7995
TEST_ASSERT_EQUAL(PSA_SUCCESS, psa_set_key_policy(slot, &policy));
80-
TEST_ASSERT_EQUAL(PSA_SUCCESS, psa_generate_key(slot, key_type, key_bits, NULL, 0));
96+
97+
status = psa_generate_key(slot, key_type, key_bits, NULL, 0);
98+
TEST_SKIP_UNLESS_MESSAGE(status != PSA_ERROR_NOT_SUPPORTED, "RSA key generation is not supported");
99+
TEST_ASSERT_EQUAL(PSA_SUCCESS, status);
81100
TEST_ASSERT_EQUAL(PSA_SUCCESS, psa_get_key_information(slot, NULL, &got_bits));
82101
TEST_ASSERT_EQUAL(key_bits, got_bits);
83102
TEST_ASSERT_EQUAL(PSA_SUCCESS, psa_asymmetric_encrypt(slot, alg, input, sizeof(input), NULL, 0,
@@ -88,8 +107,6 @@ void test_crypto_asymmetric_encrypt_decrypt(void)
88107
TEST_ASSERT_EQUAL(PSA_SUCCESS, psa_destroy_key(slot));
89108
TEST_ASSERT_EQUAL(sizeof(input), output_length);
90109
TEST_ASSERT_EQUAL_UINT8_ARRAY(input, decrypted, output_length);
91-
92-
mbedtls_psa_crypto_free();
93110
}
94111

95112
void test_crypto_hash_verify(void)
@@ -103,13 +120,9 @@ void test_crypto_hash_verify(void)
103120
0xa4, 0x95, 0x99, 0x1b, 0x78, 0x52, 0xb8, 0x55
104121
};
105122

106-
TEST_ASSERT_EQUAL(PSA_SUCCESS, psa_crypto_init());
107-
108123
TEST_ASSERT_EQUAL(PSA_SUCCESS, psa_hash_setup(&operation, alg));
109124
TEST_ASSERT_EQUAL(PSA_SUCCESS, psa_hash_verify(&operation, hash, sizeof(hash)));
110125
TEST_ASSERT_EQUAL(PSA_SUCCESS, psa_hash_abort(&operation));
111-
112-
mbedtls_psa_crypto_free();
113126
}
114127

115128
void test_crypto_symmetric_cipher_encrypt_decrypt(void)
@@ -135,8 +148,6 @@ void test_crypto_symmetric_cipher_encrypt_decrypt(void)
135148
unsigned char encrypted[sizeof(input)], decrypted[sizeof(input)], iv[16];
136149

137150
memset(iv, 0x2a, sizeof(iv));
138-
TEST_ASSERT_EQUAL(PSA_SUCCESS, psa_crypto_init());
139-
140151
psa_key_policy_init(&policy);
141152
psa_key_policy_set_usage(&policy, PSA_KEY_USAGE_ENCRYPT | PSA_KEY_USAGE_DECRYPT, alg);
142153
TEST_ASSERT_EQUAL(PSA_SUCCESS, psa_set_key_policy(slot, &policy));
@@ -159,8 +170,6 @@ void test_crypto_symmetric_cipher_encrypt_decrypt(void)
159170
TEST_ASSERT_EQUAL(PSA_SUCCESS, psa_cipher_abort(&operation));
160171
TEST_ASSERT_EQUAL(PSA_SUCCESS, psa_destroy_key(slot));
161172
TEST_ASSERT_EQUAL_HEX8_ARRAY(input, decrypted, sizeof(input));
162-
163-
mbedtls_psa_crypto_free();
164173
}
165174

166175
void test_crypto_asymmetric_sign_verify(void)
@@ -239,8 +248,6 @@ void test_crypto_asymmetric_sign_verify(void)
239248
unsigned char signature[sizeof(expected_signature)];
240249
size_t signature_len;
241250

242-
TEST_ASSERT_EQUAL(PSA_SUCCESS, psa_crypto_init());
243-
244251
psa_key_policy_init(&policy);
245252
psa_key_policy_set_usage(&policy, PSA_KEY_USAGE_SIGN | PSA_KEY_USAGE_VERIFY, alg);
246253
TEST_ASSERT_EQUAL(PSA_SUCCESS, psa_set_key_policy(slot, &policy));
@@ -253,8 +260,6 @@ void test_crypto_asymmetric_sign_verify(void)
253260
TEST_ASSERT_EQUAL(PSA_SUCCESS, psa_asymmetric_verify(slot, alg, input, sizeof(input),
254261
signature, signature_len));
255262
TEST_ASSERT_EQUAL(PSA_SUCCESS, psa_destroy_key(slot));
256-
257-
mbedtls_psa_crypto_free();
258263
}
259264

260265
void test_crypto_key_derivation(void)
@@ -266,8 +271,6 @@ void test_crypto_key_derivation(void)
266271
psa_crypto_generator_t generator = PSA_CRYPTO_GENERATOR_INIT;
267272
size_t key_bits = 512, derived_key_bits = 256, got_bits;
268273

269-
TEST_ASSERT_EQUAL(PSA_SUCCESS, psa_crypto_init());
270-
271274
psa_key_policy_init(&policy);
272275
psa_key_policy_set_usage(&policy, PSA_KEY_USAGE_DERIVE, alg);
273276
TEST_ASSERT_EQUAL(PSA_SUCCESS, psa_set_key_policy(slot, &policy));
@@ -284,15 +287,26 @@ void test_crypto_key_derivation(void)
284287
TEST_ASSERT_EQUAL(PSA_SUCCESS, psa_generator_abort(&generator));
285288
TEST_ASSERT_EQUAL(PSA_SUCCESS, psa_destroy_key(slot));
286289
TEST_ASSERT_EQUAL(PSA_SUCCESS, psa_destroy_key(derived_slot));
290+
}
287291

288-
mbedtls_psa_crypto_free();
292+
293+
utest::v1::status_t case_setup_handler(const Case *const source, const size_t index_of_case)
294+
{
295+
psa_status_t status = psa_crypto_init();
296+
#if defined(MBEDTLS_ENTROPY_NV_SEED)
297+
if (status == PSA_ERROR_INSUFFICIENT_ENTROPY) {
298+
inject_entropy();
299+
status = psa_crypto_init();
300+
}
301+
#endif /* MBEDTLS_ENTROPY_NV_SEED */
302+
TEST_ASSERT_EQUAL(PSA_SUCCESS, status);
303+
return greentea_case_setup_handler(source, index_of_case);
289304
}
290305

291-
utest::v1::status_t case_failure_handler(const Case *const source, const failure_t reason)
306+
utest::v1::status_t case_teardown_handler(const Case *const source, const size_t passed, const size_t failed, const failure_t failure)
292307
{
293308
mbedtls_psa_crypto_free();
294-
greentea_case_failure_abort_handler(source, reason);
295-
return STATUS_CONTINUE;
309+
return greentea_case_teardown_handler(source, passed, failed, failure);
296310
}
297311

298312
utest::v1::status_t test_setup(const size_t number_of_cases)
@@ -302,12 +316,12 @@ utest::v1::status_t test_setup(const size_t number_of_cases)
302316
}
303317

304318
Case cases[] = {
305-
Case("mbed-crypto random", test_crypto_random, case_failure_handler),
306-
Case("mbed-crypto asymmetric encrypt/decrypt", test_crypto_asymmetric_encrypt_decrypt, case_failure_handler),
307-
Case("mbed-crypto hash verify", test_crypto_hash_verify, case_failure_handler),
308-
Case("mbed-crypto symmetric cipher encrypt/decrypt", test_crypto_symmetric_cipher_encrypt_decrypt, case_failure_handler),
309-
Case("mbed-crypto asymmetric sign/verify", test_crypto_asymmetric_sign_verify, case_failure_handler),
310-
Case("mbed-crypto key derivation", test_crypto_key_derivation, case_failure_handler),
319+
Case("mbed-crypto random", case_setup_handler, test_crypto_random, case_teardown_handler),
320+
Case("mbed-crypto asymmetric encrypt/decrypt", case_setup_handler, test_crypto_asymmetric_encrypt_decrypt, case_teardown_handler),
321+
Case("mbed-crypto hash verify", case_setup_handler, test_crypto_hash_verify, case_teardown_handler),
322+
Case("mbed-crypto symmetric cipher encrypt/decrypt", case_setup_handler, test_crypto_symmetric_cipher_encrypt_decrypt, case_teardown_handler),
323+
Case("mbed-crypto asymmetric sign/verify", case_setup_handler, test_crypto_asymmetric_sign_verify, case_teardown_handler),
324+
Case("mbed-crypto key derivation", case_setup_handler, test_crypto_key_derivation, case_teardown_handler),
311325
};
312326

313327
Specification specification(test_setup, cases);

0 commit comments

Comments
 (0)