blob: 9822fb826e90355a8453400ed1d03b12090588fa [file] [log] [blame]
Nayna Jainc9deb182020-11-16 19:03:12 +00001/* BEGIN_HEADER */
2#include "mbedtls/bignum.h"
3#include "mbedtls/pkcs7.h"
4#include "mbedtls/x509.h"
5#include "mbedtls/x509_crt.h"
6#include "mbedtls/x509_crl.h"
7#include "mbedtls/oid.h"
8#include "sys/types.h"
9#include "sys/stat.h"
10/* END_HEADER */
11
12/* BEGIN_DEPENDENCIES
Nick Child45525d32022-02-25 11:54:34 -060013 * depends_on:MBEDTLS_PKCS7_C
Nayna Jainc9deb182020-11-16 19:03:12 +000014 * END_DEPENDENCIES
15 */
16
Nick Child45525d32022-02-25 11:54:34 -060017/* BEGIN_CASE depends_on:MBEDTLS_FS_IO:MBEDTLS_RSA_C */
Nayna Jainc9deb182020-11-16 19:03:12 +000018void pkcs7_parse( char *pkcs7_file )
19{
20 unsigned char *pkcs7_buf = NULL;
21 size_t buflen;
22 int res;
23
24 mbedtls_pkcs7 pkcs7;
25
26 mbedtls_pkcs7_init( &pkcs7 );
27
28 res = mbedtls_pk_load_file( pkcs7_file, &pkcs7_buf, &buflen );
29 TEST_ASSERT( res == 0 );
30
31 res = mbedtls_pkcs7_parse_der( &pkcs7, pkcs7_buf, buflen );
Nayna Jain673a2262020-12-14 22:44:49 +000032 TEST_ASSERT( res == MBEDTLS_PKCS7_SIGNED_DATA );
Nayna Jainc9deb182020-11-16 19:03:12 +000033
34exit:
35 mbedtls_free( pkcs7_buf );
36 mbedtls_pkcs7_free( &pkcs7 );
37}
38/* END_CASE */
39
Nick Child45525d32022-02-25 11:54:34 -060040/* BEGIN_CASE depends_on:MBEDTLS_FS_IO */
Nayna Jainc9deb182020-11-16 19:03:12 +000041void pkcs7_parse_without_cert( char *pkcs7_file )
42{
43 unsigned char *pkcs7_buf = NULL;
44 size_t buflen;
45 int res;
46
47 mbedtls_pkcs7 pkcs7;
48
49 mbedtls_pkcs7_init( &pkcs7 );
50
51 res = mbedtls_pk_load_file( pkcs7_file, &pkcs7_buf, &buflen );
52 TEST_ASSERT( res == 0 );
53
54 res = mbedtls_pkcs7_parse_der( &pkcs7, pkcs7_buf, buflen );
Nayna Jain673a2262020-12-14 22:44:49 +000055 TEST_ASSERT( res == MBEDTLS_PKCS7_SIGNED_DATA );
Nayna Jainc9deb182020-11-16 19:03:12 +000056
57exit:
58 mbedtls_free( pkcs7_buf );
59 mbedtls_pkcs7_free( &pkcs7 );
60}
61/* END_CASE */
62
Nick Child45525d32022-02-25 11:54:34 -060063/* BEGIN_CASE depends_on:MBEDTLS_FS_IO:MBEDTLS_RSA_C */
Daniel Axtens35384792020-09-02 14:48:45 +100064void pkcs7_parse_multiple_certs( char *pkcs7_file )
Nayna Jainc9deb182020-11-16 19:03:12 +000065{
66 unsigned char *pkcs7_buf = NULL;
67 size_t buflen;
68 int res;
69
70 mbedtls_pkcs7 pkcs7;
71
72 mbedtls_pkcs7_init( &pkcs7 );
73
74 res = mbedtls_pk_load_file( pkcs7_file, &pkcs7_buf, &buflen );
75 TEST_ASSERT( res == 0 );
76
77 res = mbedtls_pkcs7_parse_der( &pkcs7, pkcs7_buf, buflen );
Daniel Axtens35384792020-09-02 14:48:45 +100078 TEST_ASSERT( res == MBEDTLS_ERR_PKCS7_INVALID_CERT );
Nayna Jainc9deb182020-11-16 19:03:12 +000079
80exit:
81 mbedtls_free( pkcs7_buf );
82 mbedtls_pkcs7_free( &pkcs7 );
83}
84/* END_CASE */
85
Nick Child45525d32022-02-25 11:54:34 -060086/* BEGIN_CASE depends_on:MBEDTLS_FS_IO:MBEDTLS_RSA_C */
Nayna Jainc9deb182020-11-16 19:03:12 +000087void pkcs7_parse_corrupted_cert( char *pkcs7_file )
88{
89 unsigned char *pkcs7_buf = NULL;
90 size_t buflen;
91 int res;
92
93 mbedtls_pkcs7 pkcs7;
94
95 mbedtls_pkcs7_init( &pkcs7 );
96
97 res = mbedtls_pk_load_file( pkcs7_file, &pkcs7_buf, &buflen );
98 TEST_ASSERT( res == 0 );
99
100 res = mbedtls_pkcs7_parse_der( &pkcs7, pkcs7_buf, buflen );
101 TEST_ASSERT( res == MBEDTLS_ERR_PKCS7_INVALID_CERT );
102
103exit:
104 mbedtls_free( pkcs7_buf );
105 mbedtls_pkcs7_free( &pkcs7 );
106}
107/* END_CASE */
108
Nick Child45525d32022-02-25 11:54:34 -0600109/* BEGIN_CASE depends_on:MBEDTLS_FS_IO:MBEDTLS_RSA_C */
Nayna Jainc9deb182020-11-16 19:03:12 +0000110void pkcs7_parse_corrupted_signer_info( char *pkcs7_file )
111{
112 unsigned char *pkcs7_buf = NULL;
113 size_t buflen;
114 int res;
115
116 mbedtls_pkcs7 pkcs7;
117
118 mbedtls_pkcs7_init( &pkcs7 );
119
120 res = mbedtls_pk_load_file( pkcs7_file, &pkcs7_buf, &buflen );
121 TEST_ASSERT( res == 0 );
122
123 res = mbedtls_pkcs7_parse_der( &pkcs7, pkcs7_buf, buflen );
124 TEST_ASSERT( res < 0 );
125
126exit:
127 mbedtls_free( pkcs7_buf );
128 mbedtls_pkcs7_free( &pkcs7 );
129}
130/* END_CASE */
131
Nick Child45525d32022-02-25 11:54:34 -0600132/* BEGIN_CASE depends_on:MBEDTLS_FS_IO */
Nayna Jainc9deb182020-11-16 19:03:12 +0000133void pkcs7_parse_version( char *pkcs7_file )
134{
135 unsigned char *pkcs7_buf = NULL;
136 size_t buflen;
137 int res;
138
139 mbedtls_pkcs7 pkcs7;
140
141 mbedtls_pkcs7_init( &pkcs7 );
142
143 res = mbedtls_pk_load_file( pkcs7_file, &pkcs7_buf, &buflen );
144 TEST_ASSERT( res == 0 );
145
146 res = mbedtls_pkcs7_parse_der( &pkcs7, pkcs7_buf, buflen );
147 TEST_ASSERT( res == MBEDTLS_ERR_PKCS7_INVALID_VERSION );
148
149exit:
150 mbedtls_free( pkcs7_buf );
151 mbedtls_pkcs7_free( &pkcs7 );
152}
153/* END_CASE */
154
Nick Child45525d32022-02-25 11:54:34 -0600155/* BEGIN_CASE depends_on:MBEDTLS_FS_IO */
Nayna Jainc9deb182020-11-16 19:03:12 +0000156void pkcs7_parse_content_oid( char *pkcs7_file )
157{
158 unsigned char *pkcs7_buf = NULL;
159 size_t buflen;
160 int res;
161 mbedtls_pkcs7 pkcs7;
162
163 mbedtls_pkcs7_init( &pkcs7 );
164
165 res = mbedtls_pk_load_file( pkcs7_file, &pkcs7_buf, &buflen);
166 TEST_ASSERT( res == 0 );
167
168 res = mbedtls_pkcs7_parse_der( &pkcs7, pkcs7_buf, buflen );
169 TEST_ASSERT( res != 0 );
170 TEST_ASSERT( res == MBEDTLS_ERR_PKCS7_FEATURE_UNAVAILABLE );
171exit:
172 mbedtls_free( pkcs7_buf );
173 mbedtls_pkcs7_free( &pkcs7 );
174}
175/* END_CASE */
176
Nick Child45525d32022-02-25 11:54:34 -0600177/* BEGIN_CASE depends_on:MBEDTLS_FS_IO:MBEDTLS_X509_CRT_PARSE_C:MBEDTLS_PKCS1_V15:MBEDTLS_RSA_C */
Nayna Jainc9deb182020-11-16 19:03:12 +0000178void pkcs7_verify( char *pkcs7_file, char *crt, char *filetobesigned )
179{
180 unsigned char *pkcs7_buf = NULL;
181 size_t buflen;
182 unsigned char *data = NULL;
183 struct stat st;
184 size_t datalen;
185 int res;
186 FILE *file;
187
188 mbedtls_pkcs7 pkcs7;
189 mbedtls_x509_crt x509;
190
Nick Child8a10f662022-06-06 12:18:40 -0500191 USE_PSA_INIT();
192
Nayna Jainc9deb182020-11-16 19:03:12 +0000193 mbedtls_pkcs7_init( &pkcs7 );
194 mbedtls_x509_crt_init( &x509 );
195
196 res = mbedtls_x509_crt_parse_file( &x509, crt );
197 TEST_ASSERT( res == 0 );
198
199 res = mbedtls_pk_load_file( pkcs7_file, &pkcs7_buf, &buflen );
200 TEST_ASSERT( res == 0 );
201
202 res = mbedtls_pkcs7_parse_der( &pkcs7, pkcs7_buf, buflen );
Nayna Jain673a2262020-12-14 22:44:49 +0000203 TEST_ASSERT( res == MBEDTLS_PKCS7_SIGNED_DATA );
Nayna Jainc9deb182020-11-16 19:03:12 +0000204 mbedtls_free( pkcs7_buf );
205
Nayna Jain673a2262020-12-14 22:44:49 +0000206 res = stat( filetobesigned, &st );
Nayna Jainc9deb182020-11-16 19:03:12 +0000207 TEST_ASSERT( res == 0 );
208
209 file = fopen( filetobesigned, "rb" );
210 TEST_ASSERT( file != NULL );
211
212 datalen = st.st_size;
213 data = mbedtls_calloc( datalen, 1 );
214 buflen = fread( ( void * )data , sizeof( unsigned char ), datalen, file );
215 TEST_ASSERT( buflen == datalen);
216
217 fclose(file);
218
219 res = mbedtls_pkcs7_signed_data_verify( &pkcs7, &x509, data, datalen );
220 TEST_ASSERT( res == 0 );
221
222exit:
223 mbedtls_x509_crt_free( &x509 );
224 mbedtls_free( data );
225 mbedtls_pkcs7_free( &pkcs7 );
Nick Child8a10f662022-06-06 12:18:40 -0500226 USE_PSA_DONE();
Nayna Jainc9deb182020-11-16 19:03:12 +0000227}
228/* END_CASE */
229
Nick Child45525d32022-02-25 11:54:34 -0600230/* BEGIN_CASE depends_on:MBEDTLS_FS_IO:MBEDTLS_X509_CRT_PARSE_C:MBEDTLS_PKCS1_V15:MBEDTLS_RSA_C:MBEDTLS_SHA256_C */
Nayna Jainc9deb182020-11-16 19:03:12 +0000231void pkcs7_verify_hash( char *pkcs7_file, char *crt, char *filetobesigned )
232{
233 unsigned char *pkcs7_buf = NULL;
234 size_t buflen;
235 unsigned char *data = NULL;
236 unsigned char hash[32];
237 struct stat st;
238 size_t datalen;
239 int res;
240 FILE *file;
241 const mbedtls_md_info_t *md_info;
242 mbedtls_md_type_t md_alg;
243
244 mbedtls_pkcs7 pkcs7;
245 mbedtls_x509_crt x509;
246
Nick Child8a10f662022-06-06 12:18:40 -0500247 USE_PSA_INIT();
248
Nayna Jainc9deb182020-11-16 19:03:12 +0000249 mbedtls_pkcs7_init( &pkcs7 );
250 mbedtls_x509_crt_init( &x509 );
251
252 res = mbedtls_x509_crt_parse_file( &x509, crt );
253 TEST_ASSERT( res == 0 );
254
255 res = mbedtls_pk_load_file( pkcs7_file, &pkcs7_buf, &buflen );
256 TEST_ASSERT( res == 0 );
257
258 res = mbedtls_pkcs7_parse_der( &pkcs7, pkcs7_buf, buflen );
Nayna Jain673a2262020-12-14 22:44:49 +0000259 TEST_ASSERT( res == MBEDTLS_PKCS7_SIGNED_DATA );
Nayna Jainc9deb182020-11-16 19:03:12 +0000260
Nayna Jain673a2262020-12-14 22:44:49 +0000261 res = stat( filetobesigned, &st );
Nayna Jainc9deb182020-11-16 19:03:12 +0000262 TEST_ASSERT( res == 0 );
263
264 file = fopen( filetobesigned, "rb" );
265 TEST_ASSERT( file != NULL );
266
267 datalen = st.st_size;
268 data = mbedtls_calloc( datalen, 1 );
269 TEST_ASSERT( data != NULL);
270
271 buflen = fread( (void *)data , sizeof( unsigned char ), datalen, file );
272 TEST_ASSERT( buflen == datalen);
273 fclose( file );
274
275 res = mbedtls_oid_get_md_alg( &(pkcs7.signed_data.digest_alg_identifiers), &md_alg );
276 TEST_ASSERT( res == 0 );
277 TEST_ASSERT( md_alg == MBEDTLS_MD_SHA256 );
278
279 md_info = mbedtls_md_info_from_type( md_alg );
280
Nick Child66718412022-02-22 17:19:59 -0600281 res = mbedtls_md( md_info, data, datalen, hash );
282 TEST_ASSERT( res == 0 );
Nayna Jainc9deb182020-11-16 19:03:12 +0000283
Nick Child66718412022-02-22 17:19:59 -0600284 res = mbedtls_pkcs7_signed_hash_verify( &pkcs7, &x509, hash, sizeof(hash) );
Nayna Jainc9deb182020-11-16 19:03:12 +0000285 TEST_ASSERT( res == 0 );
286
287exit:
288 mbedtls_x509_crt_free( &x509 );
289 mbedtls_free( data );
290 mbedtls_pkcs7_free( &pkcs7 );
291 mbedtls_free( pkcs7_buf );
Nick Child8a10f662022-06-06 12:18:40 -0500292 USE_PSA_DONE();
Nayna Jainc9deb182020-11-16 19:03:12 +0000293}
294/* END_CASE */
295
Nick Child45525d32022-02-25 11:54:34 -0600296/* BEGIN_CASE depends_on:MBEDTLS_FS_IO:MBEDTLS_X509_CRT_PARSE_C:MBEDTLS_PKCS1_V15:MBEDTLS_RSA_C */
Nick Child62b2d7e2022-07-14 16:24:59 -0500297void pkcs7_verify_hash_multiple_signers( char *pkcs7_file, char *crt1, char *crt2, char *filetobesigned )
298{
299 unsigned char *pkcs7_buf = NULL;
300 size_t buflen;
301 unsigned char *data = NULL;
302 unsigned char hash[32];
303 struct stat st;
304 size_t datalen;
305 int res;
306 FILE *file;
307 const mbedtls_md_info_t *md_info;
308 mbedtls_md_type_t md_alg;
309
310 mbedtls_pkcs7 pkcs7;
311 mbedtls_x509_crt x509_1;
312 mbedtls_x509_crt x509_2;
313
314 USE_PSA_INIT();
315
316 mbedtls_pkcs7_init( &pkcs7 );
317 mbedtls_x509_crt_init( &x509_1 );
318 mbedtls_x509_crt_init( &x509_2 );
319
320 res = mbedtls_pk_load_file( pkcs7_file, &pkcs7_buf, &buflen );
321 TEST_ASSERT( res == 0 );
322
323 res = mbedtls_pkcs7_parse_der( &pkcs7, pkcs7_buf, buflen );
324 TEST_ASSERT( res == MBEDTLS_PKCS7_SIGNED_DATA );
325
326 TEST_ASSERT( pkcs7.signed_data.no_of_signers == 2 );
327
328 res = mbedtls_x509_crt_parse_file( &x509_1, crt1 );
329 TEST_ASSERT( res == 0 );
330
331 res = mbedtls_x509_crt_parse_file( &x509_2, crt2 );
332 TEST_ASSERT( res == 0 );
333
334 res = stat( filetobesigned, &st );
335 TEST_ASSERT( res == 0 );
336
337 file = fopen( filetobesigned, "r" );
338 TEST_ASSERT( file != NULL );
339
340 datalen = st.st_size;
341 data = ( unsigned char* ) calloc( datalen, sizeof(unsigned char) );
342 buflen = fread( ( void * )data , sizeof( unsigned char ), datalen, file );
343 TEST_ASSERT( buflen == datalen );
344
345 fclose( file );
346
347 res = mbedtls_oid_get_md_alg( &(pkcs7.signed_data.digest_alg_identifiers), &md_alg );
348 TEST_ASSERT( res == 0 );
349 TEST_ASSERT( md_alg == MBEDTLS_MD_SHA256 );
350
351 md_info = mbedtls_md_info_from_type( md_alg );
352
353 res = mbedtls_md( md_info, data, datalen, hash );
354 TEST_ASSERT( res == 0 );
355
356 res = mbedtls_pkcs7_signed_hash_verify( &pkcs7, &x509_1, hash, sizeof(hash));
357 TEST_ASSERT( res == 0 );
358
359 res = mbedtls_pkcs7_signed_data_verify( &pkcs7, &x509_2, data, datalen );
360 TEST_ASSERT( res == 0 );
361
362exit:
363 mbedtls_x509_crt_free( &x509_1 );
364 mbedtls_x509_crt_free( &x509_2 );
365 mbedtls_pkcs7_free( &pkcs7 );
366 mbedtls_free( data );
367 mbedtls_free( pkcs7_buf );
368 USE_PSA_DONE();
369}
370/* END_CASE */
371
372/* BEGIN_CASE depends_on:MBEDTLS_FS_IO:MBEDTLS_X509_CRT_PARSE_C:MBEDTLS_PKCS1_V15:MBEDTLS_RSA_C */
Nayna Jainc9deb182020-11-16 19:03:12 +0000373void pkcs7_verify_badcert( char *pkcs7_file, char *crt, char *filetobesigned )
374{
375 unsigned char *pkcs7_buf = NULL;
376 size_t buflen;
377 unsigned char *data = NULL;
378 struct stat st;
379 size_t datalen;
380 int res;
381 FILE *file;
382
383 mbedtls_pkcs7 pkcs7;
384 mbedtls_x509_crt x509;
385
Nick Child8a10f662022-06-06 12:18:40 -0500386 USE_PSA_INIT();
387
Nayna Jainc9deb182020-11-16 19:03:12 +0000388 mbedtls_pkcs7_init( &pkcs7 );
389 mbedtls_x509_crt_init( &x509 );
390
391 res = mbedtls_pk_load_file( pkcs7_file, &pkcs7_buf, &buflen );
392 TEST_ASSERT( res == 0 );
393
394 res = mbedtls_pkcs7_parse_der( &pkcs7, pkcs7_buf, buflen );
Nayna Jain673a2262020-12-14 22:44:49 +0000395 TEST_ASSERT( res == MBEDTLS_PKCS7_SIGNED_DATA );
Nayna Jainc9deb182020-11-16 19:03:12 +0000396
397 res = mbedtls_x509_crt_parse_file( &x509, crt );
398 TEST_ASSERT( res == 0 );
399
Nayna Jain673a2262020-12-14 22:44:49 +0000400 res = stat( filetobesigned, &st );
Nayna Jainc9deb182020-11-16 19:03:12 +0000401 TEST_ASSERT( res == 0 );
402
403 file = fopen( filetobesigned, "rb" );
404 TEST_ASSERT( file != NULL );
405
406 datalen = st.st_size;
407 data = mbedtls_calloc( datalen, 1 );
408 buflen = fread( ( void * )data , sizeof( unsigned char ), datalen, file );
409 TEST_ASSERT( buflen == datalen);
410
411 fclose(file);
412
413 res = mbedtls_pkcs7_signed_data_verify( &pkcs7, &x509, data, datalen );
414 TEST_ASSERT( res != 0 );
415
416exit:
417 mbedtls_x509_crt_free( &x509 );
418 mbedtls_free( data );
419 mbedtls_pkcs7_free( &pkcs7 );
420 mbedtls_free( pkcs7_buf );
Nick Child8a10f662022-06-06 12:18:40 -0500421 USE_PSA_DONE();
Nayna Jainc9deb182020-11-16 19:03:12 +0000422}
423/* END_CASE */
424
Nick Child45525d32022-02-25 11:54:34 -0600425/* BEGIN_CASE depends_on:MBEDTLS_FS_IO:MBEDTLS_X509_CRT_PARSE_C:MBEDTLS_PKCS1_V15:MBEDTLS_RSA_C */
Nayna Jainc9deb182020-11-16 19:03:12 +0000426void pkcs7_verify_tampered_data( char *pkcs7_file, char *crt, char *filetobesigned )
427{
428 unsigned char *pkcs7_buf = NULL;
429 size_t buflen;
430 unsigned char *data = NULL;
431 struct stat st;
432 size_t datalen;
433 int res;
434 FILE *file;
435
436 mbedtls_pkcs7 pkcs7;
437 mbedtls_x509_crt x509;
438
Nick Child8a10f662022-06-06 12:18:40 -0500439 USE_PSA_INIT();
440
Nayna Jainc9deb182020-11-16 19:03:12 +0000441 mbedtls_pkcs7_init( &pkcs7 );
442 mbedtls_x509_crt_init( &x509 );
443
444 res = mbedtls_pk_load_file( pkcs7_file, &pkcs7_buf, &buflen );
445 TEST_ASSERT( res == 0 );
446
447 res = mbedtls_pkcs7_parse_der( &pkcs7, pkcs7_buf, buflen );
Nayna Jain673a2262020-12-14 22:44:49 +0000448 TEST_ASSERT( res == MBEDTLS_PKCS7_SIGNED_DATA );
Nayna Jainc9deb182020-11-16 19:03:12 +0000449
450 res = mbedtls_x509_crt_parse_file( &x509, crt );
451 TEST_ASSERT( res == 0 );
452
Nayna Jain673a2262020-12-14 22:44:49 +0000453 res = stat( filetobesigned, &st );
Nayna Jainc9deb182020-11-16 19:03:12 +0000454 TEST_ASSERT( res == 0 );
455
456 file = fopen( filetobesigned, "rb" );
457 TEST_ASSERT( file != NULL );
458
459 datalen = st.st_size;
460 data = mbedtls_calloc( datalen, 1 );
461 buflen = fread( ( void * )data , sizeof( unsigned char ), datalen, file );
462 TEST_ASSERT( buflen == datalen);
463
464 fclose(file);
465
466 res = mbedtls_pkcs7_signed_data_verify( &pkcs7, &x509, data, datalen );
467 TEST_ASSERT( res != 0 );
468
469exit:
470 mbedtls_x509_crt_free( &x509 );
471 mbedtls_pkcs7_free( &pkcs7 );
472 mbedtls_free( data );
473 mbedtls_free( pkcs7_buf );
Nick Child8a10f662022-06-06 12:18:40 -0500474 USE_PSA_DONE();
Nayna Jainc9deb182020-11-16 19:03:12 +0000475}
476/* END_CASE */
477
Daniel Axtens35384792020-09-02 14:48:45 +1000478/* BEGIN_CASE depends_on:MBEDTLS_FS_IO:MBEDTLS_X509_CRT_PARSE_C:MBEDTLS_PKCS1_V15:MBEDTLS_RSA_C */
479void pkcs7_verify_multiple_signers( char *pkcs7_file, char *crt1, char *crt2, char *filetobesigned )
480{
481 unsigned char *pkcs7_buf = NULL;
482 size_t buflen;
483 unsigned char *data = NULL;
484 struct stat st;
485 size_t datalen;
486 int res;
487 FILE *file;
488
489 mbedtls_pkcs7 pkcs7;
490 mbedtls_x509_crt x509_1;
491 mbedtls_x509_crt x509_2;
492
493 USE_PSA_INIT();
494
495 mbedtls_pkcs7_init( &pkcs7 );
496 mbedtls_x509_crt_init( &x509_1 );
497 mbedtls_x509_crt_init( &x509_2 );
498
499 res = mbedtls_pk_load_file( pkcs7_file, &pkcs7_buf, &buflen );
500 TEST_ASSERT( res == 0 );
501
502 res = mbedtls_pkcs7_parse_der( &pkcs7, pkcs7_buf, buflen );
503 TEST_ASSERT( res == MBEDTLS_PKCS7_SIGNED_DATA );
504
505 TEST_ASSERT( pkcs7.signed_data.no_of_signers == 2 );
506
507 res = mbedtls_x509_crt_parse_file( &x509_1, crt1 );
508 TEST_ASSERT( res == 0 );
509
510 res = mbedtls_x509_crt_parse_file( &x509_2, crt2 );
511 TEST_ASSERT( res == 0 );
512
513 res = stat( filetobesigned, &st );
514 TEST_ASSERT( res == 0 );
515
516 file = fopen( filetobesigned, "r" );
517 TEST_ASSERT( file != NULL );
518
519 datalen = st.st_size;
520 data = ( unsigned char* ) calloc( datalen, sizeof(unsigned char) );
521 buflen = fread( ( void * )data , sizeof( unsigned char ), datalen, file );
522 TEST_ASSERT( buflen == datalen );
523
524 fclose( file );
525
526 res = mbedtls_pkcs7_signed_data_verify( &pkcs7, &x509_1, data, datalen );
527 TEST_ASSERT( res == 0 );
528
529 res = mbedtls_pkcs7_signed_data_verify( &pkcs7, &x509_2, data, datalen );
530 TEST_ASSERT( res == 0 );
531
532exit:
533 mbedtls_x509_crt_free( &x509_1 );
534 mbedtls_x509_crt_free( &x509_2 );
535 mbedtls_pkcs7_free( &pkcs7 );
536 mbedtls_free( data );
537 mbedtls_free( pkcs7_buf );
538 USE_PSA_DONE();
539}
540/* END_CASE */
541
Nick Child45525d32022-02-25 11:54:34 -0600542/* BEGIN_CASE depends_on:MBEDTLS_FS_IO */
Nayna Jainc9deb182020-11-16 19:03:12 +0000543void pkcs7_parse_failure( char *pkcs7_file )
544{
545 unsigned char *pkcs7_buf = NULL;
546 size_t buflen;
547 int res;
548 mbedtls_pkcs7 pkcs7;
549
550 mbedtls_pkcs7_init( &pkcs7 );
551
552 res = mbedtls_pk_load_file( pkcs7_file, &pkcs7_buf, &buflen );
553 TEST_ASSERT( res == 0 );
554
555 res = mbedtls_pkcs7_parse_der( &pkcs7, pkcs7_buf, buflen );
556 TEST_ASSERT( res != 0 );
557exit:
558 mbedtls_free( pkcs7_buf );
559 mbedtls_pkcs7_free( &pkcs7 );
560}
561/* END_CASE */