TF-M Reference Manual  1.2.0
TrustedFirmware-M
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
crypto_ns_interface_testsuite.c
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2018-2020, Arm Limited. All rights reserved.
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  *
6  */
7 
9 #include "tfm_api.h"
10 #include "../crypto_tests_common.h"
11 
12 /* List of tests */
13 static void tfm_crypto_test_6001(struct test_result_t *ret);
14 #ifdef TFM_CRYPTO_TEST_ALG_CBC
15 static void tfm_crypto_test_6002(struct test_result_t *ret);
16 #endif /* TFM_CRYPTO_TEST_ALG_CBC */
17 #ifdef TFM_CRYPTO_TEST_ALG_CFB
18 static void tfm_crypto_test_6003(struct test_result_t *ret);
19 #endif /* TFM_CRYPTO_TEST_ALG_CFB */
20 #ifdef TFM_CRYPTO_TEST_ALG_CTR
21 static void tfm_crypto_test_6005(struct test_result_t *ret);
22 #endif /* TFM_CRYPTO_TEST_ALG_CTR */
23 static void tfm_crypto_test_6007(struct test_result_t *ret);
24 static void tfm_crypto_test_6008(struct test_result_t *ret);
25 #ifdef TFM_CRYPTO_TEST_ALG_CFB
26 static void tfm_crypto_test_6009(struct test_result_t *ret);
27 #endif /* TFM_CRYPTO_TEST_ALG_CFB */
28 static void tfm_crypto_test_6010(struct test_result_t *ret);
29 static void tfm_crypto_test_6011(struct test_result_t *ret);
30 static void tfm_crypto_test_6012(struct test_result_t *ret);
31 #ifdef TFM_CRYPTO_TEST_ALG_SHA_512
32 static void tfm_crypto_test_6013(struct test_result_t *ret);
33 static void tfm_crypto_test_6014(struct test_result_t *ret);
34 #endif /* TFM_CRYPTO_TEST_ALG_SHA_512 */
35 static void tfm_crypto_test_6019(struct test_result_t *ret);
36 static void tfm_crypto_test_6020(struct test_result_t *ret);
37 #ifdef TFM_CRYPTO_TEST_ALG_SHA_512
38 static void tfm_crypto_test_6021(struct test_result_t *ret);
39 static void tfm_crypto_test_6022(struct test_result_t *ret);
40 #endif /* TFM_CRYPTO_TEST_ALG_SHA_512 */
41 static void tfm_crypto_test_6024(struct test_result_t *ret);
42 #ifdef TFM_CRYPTO_TEST_ALG_CCM
43 static void tfm_crypto_test_6030(struct test_result_t *ret);
44 #endif /* TFM_CRYPTO_TEST_ALG_CCM */
45 #ifdef TFM_CRYPTO_TEST_ALG_GCM
46 static void tfm_crypto_test_6031(struct test_result_t *ret);
47 #endif /* TFM_CRYPTO_TEST_ALG_GCM */
48 static void tfm_crypto_test_6032(struct test_result_t *ret);
49 static void tfm_crypto_test_6033(struct test_result_t *ret);
50 static void tfm_crypto_test_6034(struct test_result_t *ret);
51 #ifdef TFM_CRYPTO_TEST_ALG_CCM
52 static void tfm_crypto_test_6035(struct test_result_t *ret);
53 #endif /* TFM_CRYPTO_TEST_ALG_CCM */
54 static void tfm_crypto_test_6036(struct test_result_t *ret);
55 static void tfm_crypto_test_6037(struct test_result_t *ret);
56 #ifdef TFM_CRYPTO_TEST_HKDF
57 static void tfm_crypto_test_6038(struct test_result_t *ret);
58 #endif /* TFM_CRYPTO_TEST_HKDF */
59 
60 static struct test_t crypto_tests[] = {
61  {&tfm_crypto_test_6001, "TFM_CRYPTO_TEST_6001",
62  "Non Secure Key management interface", {TEST_PASSED} },
63 #ifdef TFM_CRYPTO_TEST_ALG_CBC
64  {&tfm_crypto_test_6002, "TFM_CRYPTO_TEST_6002",
65  "Non Secure Symmetric encryption (AES-128-CBC) interface", {TEST_PASSED} },
66 #endif /* TFM_CRYPTO_TEST_ALG_CBC */
67 #ifdef TFM_CRYPTO_TEST_ALG_CFB
68  {&tfm_crypto_test_6003, "TFM_CRYPTO_TEST_6003",
69  "Non Secure Symmetric encryption (AES-128-CFB) interface", {TEST_PASSED} },
70 #endif /* TFM_CRYPTO_TEST_ALG_CFB */
71 #ifdef TFM_CRYPTO_TEST_ALG_CTR
72  {&tfm_crypto_test_6005, "TFM_CRYPTO_TEST_6005",
73  "Non Secure Symmetric encryption (AES-128-CTR) interface", {TEST_PASSED} },
74 #endif /* TFM_CRYPTO_TEST_ALG_CTR */
75  {&tfm_crypto_test_6007, "TFM_CRYPTO_TEST_6007",
76  "Non Secure Symmetric encryption invalid cipher", {TEST_PASSED} },
77  {&tfm_crypto_test_6008, "TFM_CRYPTO_TEST_6008",
78  "Non Secure Symmetric encryption invalid cipher (AES-152)", {TEST_PASSED} },
79 #ifdef TFM_CRYPTO_TEST_ALG_CFB
80  {&tfm_crypto_test_6009, "TFM_CRYPTO_TEST_6009",
81  "Non Secure Symmetric encryption invalid cipher (HMAC-128-CFB)", {TEST_PASSED} },
82 #endif /* TFM_CRYPTO_TEST_ALG_CFB */
83  {&tfm_crypto_test_6010, "TFM_CRYPTO_TEST_6010",
84  "Non Secure Unsupported Hash (SHA-1) interface", {TEST_PASSED} },
85  {&tfm_crypto_test_6011, "TFM_CRYPTO_TEST_6011",
86  "Non Secure Hash (SHA-224) interface", {TEST_PASSED} },
87  {&tfm_crypto_test_6012, "TFM_CRYPTO_TEST_6012",
88  "Non Secure Hash (SHA-256) interface", {TEST_PASSED} },
89 #ifdef TFM_CRYPTO_TEST_ALG_SHA_512
90  {&tfm_crypto_test_6013, "TFM_CRYPTO_TEST_6013",
91  "Non Secure Hash (SHA-384) interface", {TEST_PASSED} },
92  {&tfm_crypto_test_6014, "TFM_CRYPTO_TEST_6014",
93  "Non Secure Hash (SHA-512) interface", {TEST_PASSED} },
94 #endif /* TFM_CRYPTO_TEST_ALG_SHA_512 */
95  {&tfm_crypto_test_6019, "TFM_CRYPTO_TEST_6019",
96  "Non Secure Unsupported HMAC (SHA-1) interface", {TEST_PASSED} },
97  {&tfm_crypto_test_6020, "TFM_CRYPTO_TEST_6020",
98  "Non Secure HMAC (SHA-256) interface", {TEST_PASSED} },
99 #ifdef TFM_CRYPTO_TEST_ALG_SHA_512
100  {&tfm_crypto_test_6021, "TFM_CRYPTO_TEST_6021",
101  "Non Secure HMAC (SHA-384) interface", {TEST_PASSED} },
102  {&tfm_crypto_test_6022, "TFM_CRYPTO_TEST_6022",
103  "Non Secure HMAC (SHA-512) interface", {TEST_PASSED} },
104 #endif /* TFM_CRYPTO_TEST_ALG_SHA_512 */
105  {&tfm_crypto_test_6024, "TFM_CRYPTO_TEST_6024",
106  "Non Secure HMAC with long key (SHA-224) interface", {TEST_PASSED} },
107 #ifdef TFM_CRYPTO_TEST_ALG_CCM
108  {&tfm_crypto_test_6030, "TFM_CRYPTO_TEST_6030",
109  "Non Secure AEAD (AES-128-CCM) interface", {TEST_PASSED} },
110 #endif /* TFM_CRYPTO_TEST_ALG_CCM */
111 #ifdef TFM_CRYPTO_TEST_ALG_GCM
112  {&tfm_crypto_test_6031, "TFM_CRYPTO_TEST_6031",
113  "Non Secure AEAD (AES-128-GCM) interface", {TEST_PASSED} },
114 #endif /* TFM_CRYPTO_TEST_ALG_GCM */
115  {&tfm_crypto_test_6032, "TFM_CRYPTO_TEST_6032",
116  "Non Secure key policy interface", {TEST_PASSED} },
117  {&tfm_crypto_test_6033, "TFM_CRYPTO_TEST_6033",
118  "Non Secure key policy check permissions", {TEST_PASSED} },
119  {&tfm_crypto_test_6034, "TFM_CRYPTO_TEST_6034",
120  "Non Secure persistent key interface", {TEST_PASSED} },
121 #ifdef TFM_CRYPTO_TEST_ALG_CCM
122  {&tfm_crypto_test_6035, "TFM_CRYPTO_TEST_6035",
123  "Non Secure AEAD interface with truncated auth tag (AES-128-CCM-8)",
124  {TEST_PASSED} },
125 #endif /* TFM_CRYPTO_TEST_ALG_CCM */
126  {&tfm_crypto_test_6036, "TFM_CRYPTO_TEST_6036",
127  "Non Secure TLS 1.2 PRF key derivation", {TEST_PASSED} },
128  {&tfm_crypto_test_6037, "TFM_CRYPTO_TEST_6037",
129  "Non Secure TLS-1.2 PSK-to-MasterSecret key derivation", {TEST_PASSED} },
130 #ifdef TFM_CRYPTO_TEST_HKDF
131  {&tfm_crypto_test_6038, "TFM_CRYPTO_TEST_6038",
132  "Non Secure HKDF key derivation", {TEST_PASSED} },
133 #endif /* TFM_CRYPTO_TEST_HKDF */
134 };
135 
137 {
138  uint32_t list_size = (sizeof(crypto_tests) / sizeof(crypto_tests[0]));
139 
140  set_testsuite("Crypto non-secure interface test (TFM_CRYPTO_TEST_6XXX)",
141  crypto_tests, list_size, p_test_suite);
142 }
143 
153 static void tfm_crypto_test_6001(struct test_result_t *ret)
154 {
156 }
157 
158 #ifdef TFM_CRYPTO_TEST_ALG_CBC
159 static void tfm_crypto_test_6002(struct test_result_t *ret)
160 {
162 }
163 #endif /* TFM_CRYPTO_TEST_ALG_CBC */
164 
165 #ifdef TFM_CRYPTO_TEST_ALG_CFB
166 static void tfm_crypto_test_6003(struct test_result_t *ret)
167 {
169 }
170 #endif /* TFM_CRYPTO_TEST_ALG_CFB */
171 
172 #ifdef TFM_CRYPTO_TEST_ALG_CTR
173 static void tfm_crypto_test_6005(struct test_result_t *ret)
174 {
176 }
177 #endif /* TFM_CRYPTO_TEST_ALG_CTR */
178 
179 static void tfm_crypto_test_6007(struct test_result_t *ret)
180 {
182  16, ret);
183 }
184 
185 static void tfm_crypto_test_6008(struct test_result_t *ret)
186 {
188 }
189 
190 #ifdef TFM_CRYPTO_TEST_ALG_CFB
191 static void tfm_crypto_test_6009(struct test_result_t *ret)
192 {
193  /* HMAC is not a block cipher */
195 }
196 #endif /* TFM_CRYPTO_TEST_ALG_CFB */
197 
198 static void tfm_crypto_test_6010(struct test_result_t *ret)
199 {
201 }
202 
203 static void tfm_crypto_test_6011(struct test_result_t *ret)
204 {
206 }
207 
208 static void tfm_crypto_test_6012(struct test_result_t *ret)
209 {
211 }
212 
213 #ifdef TFM_CRYPTO_TEST_ALG_SHA_512
214 static void tfm_crypto_test_6013(struct test_result_t *ret)
215 {
217 }
218 
219 static void tfm_crypto_test_6014(struct test_result_t *ret)
220 {
222 }
223 #endif /* TFM_CRYPTO_TEST_ALG_SHA_512 */
224 
225 static void tfm_crypto_test_6019(struct test_result_t *ret)
226 {
228  ret);
229 }
230 
231 static void tfm_crypto_test_6020(struct test_result_t *ret)
232 {
234 }
235 
236 #ifdef TFM_CRYPTO_TEST_ALG_SHA_512
237 static void tfm_crypto_test_6021(struct test_result_t *ret)
238 {
240 }
241 
242 static void tfm_crypto_test_6022(struct test_result_t *ret)
243 {
245 }
246 #endif /* TFM_CRYPTO_TEST_ALG_SHA_512 */
247 
248 static void tfm_crypto_test_6024(struct test_result_t *ret)
249 {
251 }
252 
253 #ifdef TFM_CRYPTO_TEST_ALG_CCM
254 static void tfm_crypto_test_6030(struct test_result_t *ret)
255 {
257 }
258 #endif /* TFM_CRYPTO_TEST_ALG_CCM */
259 
260 #ifdef TFM_CRYPTO_TEST_ALG_GCM
261 static void tfm_crypto_test_6031(struct test_result_t *ret)
262 {
264 }
265 #endif /* TFM_CRYPTO_TEST_ALG_GCM */
266 
267 static void tfm_crypto_test_6032(struct test_result_t *ret)
268 {
270 }
271 
272 static void tfm_crypto_test_6033(struct test_result_t *ret)
273 {
275 }
276 
277 static void tfm_crypto_test_6034(struct test_result_t *ret)
278 {
279  psa_persistent_key_test(1, ret);
280 }
281 
282 #ifdef TFM_CRYPTO_TEST_ALG_CCM
283 static void tfm_crypto_test_6035(struct test_result_t *ret)
284 {
287 
288  psa_aead_test(PSA_KEY_TYPE_AES, alg, ret);
289 }
290 #endif /* TFM_CRYPTO_TEST_ALG_GCM */
291 
292 static void tfm_crypto_test_6036(struct test_result_t *ret)
293 {
295 }
296 
297 static void tfm_crypto_test_6037(struct test_result_t *ret)
298 {
300 }
301 
302 #ifdef TFM_CRYPTO_TEST_HKDF
303 static void tfm_crypto_test_6038(struct test_result_t *ret)
304 {
306 }
307 #endif /* TFM_CRYPTO_TEST_HKDF */
void psa_unsupported_hash_test(const psa_algorithm_t alg, struct test_result_t *ret)
Tests setup of an unsupported hash algorithm.
void psa_key_interface_test(const psa_key_type_t key_type, struct test_result_t *ret)
Tests the key interfaces with different key types.
void psa_invalid_cipher_test(const psa_key_type_t key_type, const psa_algorithm_t alg, const size_t key_size, struct test_result_t *ret)
Tests invalid key type and algorithm combinations for block ciphers.
enum test_suite_err_t set_testsuite(const char *name, struct test_t *test_list, uint32_t size, struct test_suite_t *p_ts)
Sets test suite parameters.
#define PSA_ALG_GCM
#define PSA_ALG_HMAC(hash_alg)
#define PSA_ALG_SHA_256
void psa_mac_test(const psa_algorithm_t alg, uint8_t use_long_key, struct test_result_t *ret)
Tests different MAC algorithms.
#define PSA_ALG_SHA_512
void psa_invalid_key_length_test(struct test_result_t *ret)
Tests invalid key length.
void psa_persistent_key_test(psa_key_id_t key_id, struct test_result_t *ret)
Tests persistent keys.
#define PSA_ALG_SHA_224
void psa_policy_key_interface_test(struct test_result_t *ret)
Tests the policy key interface.
void psa_cipher_test(const psa_key_type_t key_type, const psa_algorithm_t alg, struct test_result_t *ret)
Run block ciphering tests with different algorithms and key types.
#define PSA_ALG_SHA_384
#define PSA_ALG_CBC_NO_PADDING
#define PSA_ALG_TLS12_PRF(hash_alg)
#define PSA_ALG_CFB
void register_testsuite_ns_crypto_interface(struct test_suite_t *p_test_suite)
Register testsuite for Crypto non-secure interface.
uint32_t psa_algorithm_t
Encoding of a cryptographic algorithm.
Definition: crypto_types.h:90
void psa_aead_test(const psa_key_type_t key_type, const psa_algorithm_t alg, struct test_result_t *ret)
Run AEAD tests with different algorithms and key types.
struct test_result_t ret
void psa_unsupported_mac_test(const psa_key_type_t key_type, const psa_algorithm_t alg, struct test_result_t *ret)
Tests setup of an unsupported MAC algorithm.
#define PSA_KEY_TYPE_AES
void psa_key_derivation_test(psa_algorithm_t deriv_alg, struct test_result_t *ret)
Key derivation test.
#define PSA_ALG_CTR
#define PSA_KEY_TYPE_HMAC
#define PSA_ALG_HKDF(hash_alg)
#define TRUNCATED_AUTH_TAG_LEN
The length of truncated authentication tag for AEAD algorithm.
#define PSA_ALG_CCM
void psa_hash_test(const psa_algorithm_t alg, struct test_result_t *ret)
Tests different hashing algorithms.
#define PSA_ALG_SHA_1
void psa_policy_invalid_policy_usage_test(struct test_result_t *ret)
Tests invalid policy usage.
#define PSA_ALG_TLS12_PSK_TO_MS(hash_alg)
#define PSA_ALG_AEAD_WITH_TAG_LENGTH(aead_alg, tag_length)