aboutsummaryrefslogtreecommitdiffstats
path: root/package/network/services/hostapd/patches/130-mbedtls-annotate-with-TEST_FAIL-for-hwsim-tests.patch
blob: ae7620b90c14b3a88c54c9f866bd69d0892fbd21 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
From 31bd19e0e0254b910cccfd3ddc6a6a9222bbcfc0 Mon Sep 17 00:00:00 2001
From: Glenn Strauss <gstrauss@gluelogic.com>
Date: Sun, 9 Oct 2022 05:12:17 -0400
Subject: [PATCH 3/7] mbedtls: annotate with TEST_FAIL() for hwsim tests

Signed-off-by: Glenn Strauss <gstrauss@gluelogic.com>
---
 src/crypto/crypto_mbedtls.c | 124 ++++++++++++++++++++++++++++++++++++
 1 file changed, 124 insertions(+)

--- a/src/crypto/crypto_mbedtls.c
+++ b/src/crypto/crypto_mbedtls.c
@@ -280,6 +280,9 @@ __attribute_noinline__
 static int md_vector(size_t num_elem, const u8 *addr[], const size_t *len,
                      u8 *mac, mbedtls_md_type_t md_type)
 {
+	if (TEST_FAIL())
+		return -1;
+
 	mbedtls_md_context_t ctx;
 	mbedtls_md_init(&ctx);
 	if (mbedtls_md_setup(&ctx, mbedtls_md_info_from_type(md_type), 0) != 0){
@@ -343,6 +346,9 @@ __attribute_noinline__
 static int sha384_512_vector(size_t num_elem, const u8 *addr[],
                              const size_t *len, u8 *mac, int is384)
 {
+	if (TEST_FAIL())
+		return -1;
+
 	struct mbedtls_sha512_context ctx;
 	mbedtls_sha512_init(&ctx);
   #if MBEDTLS_VERSION_MAJOR >= 3
@@ -375,6 +381,9 @@ int sha384_vector(size_t num_elem, const
 #include <mbedtls/sha256.h>
 int sha256_vector(size_t num_elem, const u8 *addr[], const size_t *len, u8 *mac)
 {
+	if (TEST_FAIL())
+		return -1;
+
 	struct mbedtls_sha256_context ctx;
 	mbedtls_sha256_init(&ctx);
   #if MBEDTLS_VERSION_MAJOR >= 3
@@ -397,6 +406,9 @@ int sha256_vector(size_t num_elem, const
 #include <mbedtls/sha1.h>
 int sha1_vector(size_t num_elem, const u8 *addr[], const size_t *len, u8 *mac)
 {
+	if (TEST_FAIL())
+		return -1;
+
 	struct mbedtls_sha1_context ctx;
 	mbedtls_sha1_init(&ctx);
   #if MBEDTLS_VERSION_MAJOR >= 3
@@ -419,6 +431,9 @@ int sha1_vector(size_t num_elem, const u
 #include <mbedtls/md5.h>
 int md5_vector(size_t num_elem, const u8 *addr[], const size_t *len, u8 *mac)
 {
+	if (TEST_FAIL())
+		return -1;
+
 	struct mbedtls_md5_context ctx;
 	mbedtls_md5_init(&ctx);
   #if MBEDTLS_VERSION_MAJOR >= 3
@@ -441,6 +456,9 @@ int md5_vector(size_t num_elem, const u8
 #include <mbedtls/md4.h>
 int md4_vector(size_t num_elem, const u8 *addr[], const size_t *len, u8 *mac)
 {
+	if (TEST_FAIL())
+		return -1;
+
 	struct mbedtls_md4_context ctx;
 	mbedtls_md4_init(&ctx);
 	mbedtls_md4_starts_ret(&ctx);
@@ -460,6 +478,9 @@ static int hmac_vector(const u8 *key, si
                        const u8 *addr[], const size_t *len, u8 *mac,
                        mbedtls_md_type_t md_type)
 {
+	if (TEST_FAIL())
+		return -1;
+
 	mbedtls_md_context_t ctx;
 	mbedtls_md_init(&ctx);
 	if (mbedtls_md_setup(&ctx, mbedtls_md_info_from_type(md_type), 1) != 0){
@@ -571,6 +592,9 @@ static int hmac_kdf_expand(const u8 *prk
                            const char *label, const u8 *info, size_t info_len,
                            u8 *okm, size_t okm_len, mbedtls_md_type_t md_type)
 {
+	if (TEST_FAIL())
+		return -1;
+
 	const mbedtls_md_info_t *md_info = mbedtls_md_info_from_type(md_type);
   #ifdef MBEDTLS_HKDF_C
 	if (label == NULL)  /* RFC 5869 HKDF-Expand when (label == NULL) */
@@ -663,6 +687,9 @@ static int hmac_prf_bits(const u8 *key,
                          const u8 *data, size_t data_len, u8 *buf,
                          size_t buf_len_bits, mbedtls_md_type_t md_type)
 {
+	if (TEST_FAIL())
+		return -1;
+
 	mbedtls_md_context_t ctx;
 	mbedtls_md_init(&ctx);
 	const mbedtls_md_info_t *md_info = mbedtls_md_info_from_type(md_type);
@@ -938,6 +965,9 @@ int pbkdf2_sha1(const char *passphrase,
 
 static void *aes_crypt_init_mode(const u8 *key, size_t len, int mode)
 {
+	if (TEST_FAIL())
+		return NULL;
+
 	mbedtls_aes_context *aes = os_malloc(sizeof(*aes));
 	if (!aes)
 		return NULL;
@@ -996,6 +1026,9 @@ void aes_decrypt_deinit(void *ctx)
 /* aes-wrap.c */
 int aes_wrap(const u8 *kek, size_t kek_len, int n, const u8 *plain, u8 *cipher)
 {
+	if (TEST_FAIL())
+		return -1;
+
 	mbedtls_nist_kw_context ctx;
 	mbedtls_nist_kw_init(&ctx);
 	size_t olen;
@@ -1010,6 +1043,9 @@ int aes_wrap(const u8 *kek, size_t kek_l
 /* aes-unwrap.c */
 int aes_unwrap(const u8 *kek, size_t kek_len, int n, const u8 *cipher, u8 *plain)
 {
+	if (TEST_FAIL())
+		return -1;
+
 	mbedtls_nist_kw_context ctx;
 	mbedtls_nist_kw_init(&ctx);
 	size_t olen;
@@ -1041,6 +1077,9 @@ int omac1_aes_vector(
     const u8 *key, size_t key_len, size_t num_elem, const u8 *addr[],
     const size_t *len, u8 *mac)
 {
+	if (TEST_FAIL())
+		return -1;
+
 	mbedtls_cipher_type_t cipher_type;
 	switch (key_len) {
 	case 16: cipher_type = MBEDTLS_CIPHER_AES_128_ECB; break;
@@ -1103,6 +1142,9 @@ int omac1_aes_256(const u8 *key, const u
 /* aes-encblock.c */
 int aes_128_encrypt_block(const u8 *key, const u8 *in, u8 *out)
 {
+	if (TEST_FAIL())
+		return -1;
+
 	mbedtls_aes_context aes;
 	mbedtls_aes_init(&aes);
 	int ret = mbedtls_aes_setkey_enc(&aes, key, 128)
@@ -1118,6 +1160,9 @@ int aes_128_encrypt_block(const u8 *key,
 int aes_ctr_encrypt(const u8 *key, size_t key_len, const u8 *nonce,
 		    u8 *data, size_t data_len)
 {
+	if (TEST_FAIL())
+		return -1;
+
 	unsigned char counter[MBEDTLS_AES_BLOCK_SIZE];
 	unsigned char stream_block[MBEDTLS_AES_BLOCK_SIZE];
 	os_memcpy(counter, nonce, MBEDTLS_AES_BLOCK_SIZE);/*(must be writable)*/
@@ -1160,11 +1205,17 @@ static int aes_128_cbc_oper(const u8 *ke
 
 int aes_128_cbc_encrypt(const u8 *key, const u8 *iv, u8 *data, size_t data_len)
 {
+	if (TEST_FAIL())
+		return -1;
+
 	return aes_128_cbc_oper(key, iv, data, data_len, MBEDTLS_AES_ENCRYPT);
 }
 
 int aes_128_cbc_decrypt(const u8 *key, const u8 *iv, u8 *data, size_t data_len)
 {
+	if (TEST_FAIL())
+		return -1;
+
 	return aes_128_cbc_oper(key, iv, data, data_len, MBEDTLS_AES_DECRYPT);
 }
 
@@ -1407,6 +1458,10 @@ int crypto_hash_finish(struct crypto_has
 	}
 	mbedtls_md_free(mctx);
 	os_free(mctx);
+
+	if (TEST_FAIL())
+		return -1;
+
 	return 0;
 }
 
@@ -1421,6 +1476,9 @@ int crypto_hash_finish(struct crypto_has
 
 struct crypto_bignum *crypto_bignum_init(void)
 {
+	if (TEST_FAIL())
+		return NULL;
+
 	mbedtls_mpi *bn = os_malloc(sizeof(*bn));
 	if (bn)
 		mbedtls_mpi_init(bn);
@@ -1429,6 +1487,9 @@ struct crypto_bignum *crypto_bignum_init
 
 struct crypto_bignum *crypto_bignum_init_set(const u8 *buf, size_t len)
 {
+	if (TEST_FAIL())
+		return NULL;
+
 	mbedtls_mpi *bn = os_malloc(sizeof(*bn));
 	if (bn) {
 		mbedtls_mpi_init(bn);
@@ -1442,6 +1503,9 @@ struct crypto_bignum *crypto_bignum_init
 
 struct crypto_bignum *crypto_bignum_init_uint(unsigned int val)
 {
+	if (TEST_FAIL())
+		return NULL;
+
   #if 0 /*(hostap use of this interface passes int, not uint)*/
 	val = host_to_be32(val);
 	return crypto_bignum_init_set((const u8 *)&val, sizeof(val));
@@ -1467,6 +1531,9 @@ void crypto_bignum_deinit(struct crypto_
 int crypto_bignum_to_bin(const struct crypto_bignum *a,
 			 u8 *buf, size_t buflen, size_t padlen)
 {
+	if (TEST_FAIL())
+		return -1;
+
 	size_t n = mbedtls_mpi_size((mbedtls_mpi *)a);
 	if (n < padlen)
 		n = padlen;
@@ -1477,6 +1544,9 @@ int crypto_bignum_to_bin(const struct cr
 
 int crypto_bignum_rand(struct crypto_bignum *r, const struct crypto_bignum *m)
 {
+	if (TEST_FAIL())
+		return -1;
+
 	/*assert(r != m);*//* r must not be same as m for mbedtls_mpi_random()*/
   #if MBEDTLS_VERSION_NUMBER >= 0x021B0000 /* mbedtls 2.27.0 */
 	return mbedtls_mpi_random((mbedtls_mpi *)r, 0, (mbedtls_mpi *)m,
@@ -1513,6 +1583,9 @@ int crypto_bignum_exptmod(const struct c
 			  const struct crypto_bignum *c,
 			  struct crypto_bignum *d)
 {
+	if (TEST_FAIL())
+		return -1;
+
 	/* (check if input params match d; d is the result) */
 	/* (a == d) is ok in current mbedtls implementation */
 	if (b == d || c == d) { /*(not ok; store result in intermediate)*/
@@ -1540,6 +1613,9 @@ int crypto_bignum_inverse(const struct c
 			  const struct crypto_bignum *b,
 			  struct crypto_bignum *c)
 {
+	if (TEST_FAIL())
+		return -1;
+
 	return mbedtls_mpi_inv_mod((mbedtls_mpi *)c,
 				   (const mbedtls_mpi *)a,
 				   (const mbedtls_mpi *)b) ? -1 : 0;
@@ -1549,6 +1625,9 @@ int crypto_bignum_sub(const struct crypt
 		      const struct crypto_bignum *b,
 		      struct crypto_bignum *c)
 {
+	if (TEST_FAIL())
+		return -1;
+
 	return mbedtls_mpi_sub_mpi((mbedtls_mpi *)c,
 				   (const mbedtls_mpi *)a,
 				   (const mbedtls_mpi *)b) ? -1 : 0;
@@ -1558,6 +1637,9 @@ int crypto_bignum_div(const struct crypt
 		      const struct crypto_bignum *b,
 		      struct crypto_bignum *c)
 {
+	if (TEST_FAIL())
+		return -1;
+
 	/*(most current use of this crypto.h interface has a == c (result),
 	 * so store result in an intermediate to avoid overwritten input)*/
 	mbedtls_mpi R;
@@ -1575,6 +1657,9 @@ int crypto_bignum_addmod(const struct cr
 			 const struct crypto_bignum *c,
 			 struct crypto_bignum *d)
 {
+	if (TEST_FAIL())
+		return -1;
+
 	return mbedtls_mpi_add_mpi((mbedtls_mpi *)d,
 				   (const mbedtls_mpi *)a,
 				   (const mbedtls_mpi *)b)
@@ -1588,6 +1673,9 @@ int crypto_bignum_mulmod(const struct cr
 			 const struct crypto_bignum *c,
 			 struct crypto_bignum *d)
 {
+	if (TEST_FAIL())
+		return -1;
+
 	return mbedtls_mpi_mul_mpi((mbedtls_mpi *)d,
 				   (const mbedtls_mpi *)a,
 				   (const mbedtls_mpi *)b)
@@ -1600,6 +1688,9 @@ int crypto_bignum_sqrmod(const struct cr
 			 const struct crypto_bignum *b,
 			 struct crypto_bignum *c)
 {
+	if (TEST_FAIL())
+		return -1;
+
   #if 1
 	return crypto_bignum_mulmod(a, a, b, c);
   #else
@@ -1650,6 +1741,9 @@ int crypto_bignum_is_odd(const struct cr
 int crypto_bignum_legendre(const struct crypto_bignum *a,
 			   const struct crypto_bignum *p)
 {
+	if (TEST_FAIL())
+		return -2;
+
 	/* Security Note:
 	 * mbedtls_mpi_exp_mod() is not documented to run in constant time,
 	 * though mbedtls/library/bignum.c uses constant_time_internal.h funcs.
@@ -1702,6 +1796,9 @@ int crypto_mod_exp(const u8 *base, size_
 		   const u8 *modulus, size_t modulus_len,
 		   u8 *result, size_t *result_len)
 {
+	if (TEST_FAIL())
+		return -1;
+
 	mbedtls_mpi bn_base, bn_exp, bn_modulus, bn_result;
 	mbedtls_mpi_init(&bn_base);
 	mbedtls_mpi_init(&bn_exp);
@@ -1769,6 +1866,9 @@ static int crypto_mbedtls_dh_init_public
 int crypto_dh_init(u8 generator, const u8 *prime, size_t prime_len, u8 *privkey,
 		   u8 *pubkey)
 {
+	if (TEST_FAIL())
+		return -1;
+
   #if 0 /*(crypto_dh_init() duplicated (and identical) in crypto_*.c modules)*/
 	size_t pubkey_len, pad;
 
@@ -1810,6 +1910,9 @@ int crypto_dh_derive_secret(u8 generator
 			    const u8 *pubkey, size_t pubkey_len,
 			    u8 *secret, size_t *len)
 {
+	if (TEST_FAIL())
+		return -1;
+
   #if 0
 	if (pubkey_len > prime_len ||
 	    (pubkey_len == prime_len &&
@@ -2512,6 +2615,9 @@ const struct crypto_ec_point * crypto_ec
 
 struct crypto_ec_point *crypto_ec_point_init(struct crypto_ec *e)
 {
+	if (TEST_FAIL())
+		return NULL;
+
 	mbedtls_ecp_point *p = os_malloc(sizeof(*p));
 	if (p != NULL)
 		mbedtls_ecp_point_init(p);
@@ -2536,6 +2642,9 @@ int crypto_ec_point_x(struct crypto_ec *
 int crypto_ec_point_to_bin(struct crypto_ec *e,
 			   const struct crypto_ec_point *point, u8 *x, u8 *y)
 {
+	if (TEST_FAIL())
+		return -1;
+
 	/* crypto.h documents crypto_ec_point_to_bin() output is big-endian */
 	size_t len = CRYPTO_EC_plen(e);
 	if (x) {
@@ -2563,6 +2672,9 @@ int crypto_ec_point_to_bin(struct crypto
 struct crypto_ec_point * crypto_ec_point_from_bin(struct crypto_ec *e,
 						  const u8 *val)
 {
+	if (TEST_FAIL())
+		return NULL;
+
 	size_t len = CRYPTO_EC_plen(e);
 	mbedtls_ecp_point *p = os_malloc(sizeof(*p));
 	u8 buf[1+MBEDTLS_MPI_MAX_SIZE*2];
@@ -2615,6 +2727,9 @@ int crypto_ec_point_add(struct crypto_ec
 			const struct crypto_ec_point *b,
 			struct crypto_ec_point *c)
 {
+	if (TEST_FAIL())
+		return -1;
+
 	/* mbedtls does not provide an mbedtls_ecp_point add function */
 	mbedtls_mpi one;
 	mbedtls_mpi_init(&one);
@@ -2631,6 +2746,9 @@ int crypto_ec_point_mul(struct crypto_ec
 			const struct crypto_bignum *b,
 			struct crypto_ec_point *res)
 {
+	if (TEST_FAIL())
+		return -1;
+
 	return mbedtls_ecp_mul(
 		(mbedtls_ecp_group *)e, (mbedtls_ecp_point *)res,
 		(const mbedtls_mpi *)b, (const mbedtls_ecp_point *)p,
@@ -2639,6 +2757,9 @@ int crypto_ec_point_mul(struct crypto_ec
 
 int crypto_ec_point_invert(struct crypto_ec *e, struct crypto_ec_point *p)
 {
+	if (TEST_FAIL())
+		return -1;
+
 	if (mbedtls_ecp_get_type((mbedtls_ecp_group *)e)
 	    == MBEDTLS_ECP_TYPE_MONTGOMERY) {
 		/* e.g. MBEDTLS_ECP_DP_CURVE25519 and MBEDTLS_ECP_DP_CURVE448 */
@@ -2751,6 +2872,9 @@ struct crypto_bignum *
 crypto_ec_point_compute_y_sqr(struct crypto_ec *e,
 			      const struct crypto_bignum *x)
 {
+	if (TEST_FAIL())
+		return NULL;
+
 	mbedtls_mpi *y2 = os_malloc(sizeof(*y2));
 	if (y2 == NULL)
 		return NULL;