Update copyright year
[openssl.git] / test / cmsapitest.c
1 /*
2  * Copyright 2018-2021 The OpenSSL Project Authors. All Rights Reserved.
3  *
4  * Licensed under the Apache License 2.0 (the "License").  You may not use
5  * this file except in compliance with the License.  You can obtain a copy
6  * in the file LICENSE in the source distribution or at
7  * https://www.openssl.org/source/license.html
8  */
9
10 #include <string.h>
11
12 #include <openssl/cms.h>
13 #include <openssl/bio.h>
14 #include <openssl/x509.h>
15 #include <openssl/pem.h>
16
17 #include "testutil.h"
18
19 static X509 *cert = NULL;
20 static EVP_PKEY *privkey = NULL;
21
22 static int test_encrypt_decrypt(const EVP_CIPHER *cipher)
23 {
24     int testresult = 0;
25     STACK_OF(X509) *certstack = sk_X509_new_null();
26     const char *msg = "Hello world";
27     BIO *msgbio = BIO_new_mem_buf(msg, strlen(msg));
28     BIO *outmsgbio = BIO_new(BIO_s_mem());
29     CMS_ContentInfo* content = NULL;
30     char buf[80];
31
32     if (!TEST_ptr(certstack) || !TEST_ptr(msgbio) || !TEST_ptr(outmsgbio))
33         goto end;
34
35     if (!TEST_int_gt(sk_X509_push(certstack, cert), 0))
36         goto end;
37
38     content = CMS_encrypt(certstack, msgbio, cipher, CMS_TEXT);
39     if (!TEST_ptr(content))
40         goto end;
41
42     if (!TEST_true(CMS_decrypt(content, privkey, cert, NULL, outmsgbio,
43                                CMS_TEXT)))
44         goto end;
45
46     /* Check we got the message we first started with */
47     if (!TEST_int_eq(BIO_gets(outmsgbio, buf, sizeof(buf)), strlen(msg))
48             || !TEST_int_eq(strcmp(buf, msg), 0))
49         goto end;
50
51     testresult = 1;
52  end:
53     sk_X509_free(certstack);
54     BIO_free(msgbio);
55     BIO_free(outmsgbio);
56     CMS_ContentInfo_free(content);
57
58     return testresult;
59 }
60
61 static int test_encrypt_decrypt_aes_cbc(void)
62 {
63     return test_encrypt_decrypt(EVP_aes_128_cbc());
64 }
65
66 static int test_encrypt_decrypt_aes_128_gcm(void)
67 {
68     return test_encrypt_decrypt(EVP_aes_128_gcm());
69 }
70
71 static int test_encrypt_decrypt_aes_192_gcm(void)
72 {
73     return test_encrypt_decrypt(EVP_aes_192_gcm());
74 }
75
76 static int test_encrypt_decrypt_aes_256_gcm(void)
77 {
78     return test_encrypt_decrypt(EVP_aes_256_gcm());
79 }
80
81 static int test_d2i_CMS_bio_NULL(void)
82 {
83     BIO *bio;
84     CMS_ContentInfo *cms = NULL;
85     int ret = 0;
86
87     /*
88      * Test data generated using:
89      * openssl cms -sign -md sha256 -signer ./test/certs/rootCA.pem -inkey \
90      * ./test/certs/rootCA.key -nodetach -outform DER -in ./in.txt -out out.der \
91      * -nosmimecap
92      */
93     static const unsigned char cms_data[] = {
94         0x30, 0x82, 0x05, 0xc5, 0x06, 0x09, 0x2a, 0x86,
95         0x48, 0x86, 0xf7, 0x0d, 0x01, 0x07, 0x02, 0xa0,
96         0x82, 0x05, 0xb6, 0x30, 0x82, 0x05, 0xb2, 0x02,
97         0x01, 0x01, 0x31, 0x0d, 0x30, 0x0b, 0x06, 0x09,
98         0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02,
99         0x01, 0x30, 0x1c, 0x06, 0x09, 0x2a, 0x86, 0x48,
100         0x86, 0xf7, 0x0d, 0x01, 0x07, 0x01, 0xa0, 0x0f,
101         0x04, 0x0d, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x20,
102         0x57, 0x6f, 0x72, 0x6c, 0x64, 0x0d, 0x0a, 0xa0,
103         0x82, 0x03, 0x83, 0x30, 0x82, 0x03, 0x7f, 0x30,
104         0x82, 0x02, 0x67, 0xa0, 0x03, 0x02, 0x01, 0x02,
105         0x02, 0x09, 0x00, 0x88, 0x43, 0x29, 0xcb, 0xc2,
106         0xeb, 0x15, 0x9a, 0x30, 0x0d, 0x06, 0x09, 0x2a,
107         0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b,
108         0x05, 0x00, 0x30, 0x56, 0x31, 0x0b, 0x30, 0x09,
109         0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x41,
110         0x55, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55,
111         0x04, 0x08, 0x0c, 0x0a, 0x53, 0x6f, 0x6d, 0x65,
112         0x2d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x31, 0x21,
113         0x30, 0x1f, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c,
114         0x18, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65,
115         0x74, 0x20, 0x57, 0x69, 0x64, 0x67, 0x69, 0x74,
116         0x73, 0x20, 0x50, 0x74, 0x79, 0x20, 0x4c, 0x74,
117         0x64, 0x31, 0x0f, 0x30, 0x0d, 0x06, 0x03, 0x55,
118         0x04, 0x03, 0x0c, 0x06, 0x72, 0x6f, 0x6f, 0x74,
119         0x43, 0x41, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x35,
120         0x30, 0x37, 0x30, 0x32, 0x31, 0x33, 0x31, 0x35,
121         0x31, 0x31, 0x5a, 0x17, 0x0d, 0x33, 0x35, 0x30,
122         0x37, 0x30, 0x32, 0x31, 0x33, 0x31, 0x35, 0x31,
123         0x31, 0x5a, 0x30, 0x56, 0x31, 0x0b, 0x30, 0x09,
124         0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x41,
125         0x55, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55,
126         0x04, 0x08, 0x0c, 0x0a, 0x53, 0x6f, 0x6d, 0x65,
127         0x2d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x31, 0x21,
128         0x30, 0x1f, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c,
129         0x18, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65,
130         0x74, 0x20, 0x57, 0x69, 0x64, 0x67, 0x69, 0x74,
131         0x73, 0x20, 0x50, 0x74, 0x79, 0x20, 0x4c, 0x74,
132         0x64, 0x31, 0x0f, 0x30, 0x0d, 0x06, 0x03, 0x55,
133         0x04, 0x03, 0x0c, 0x06, 0x72, 0x6f, 0x6f, 0x74,
134         0x43, 0x41, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d,
135         0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d,
136         0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01,
137         0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82,
138         0x01, 0x01, 0x00, 0xc0, 0xf1, 0x6b, 0x77, 0x88,
139         0xac, 0x35, 0xdf, 0xfb, 0x73, 0x53, 0x2f, 0x92,
140         0x80, 0x2f, 0x74, 0x16, 0x32, 0x4d, 0xf5, 0x10,
141         0x20, 0x6f, 0x6c, 0x3a, 0x8e, 0xd1, 0xdc, 0x6b,
142         0xe1, 0x2e, 0x3e, 0xc3, 0x04, 0x0f, 0xbf, 0x9b,
143         0xc4, 0xc9, 0x12, 0xd1, 0xe4, 0x0b, 0x45, 0x97,
144         0xe5, 0x06, 0xcd, 0x66, 0x3a, 0xe1, 0xe0, 0xe2,
145         0x2b, 0xdf, 0xa2, 0xc4, 0xec, 0x7b, 0xd3, 0x3d,
146         0x3c, 0x8a, 0xff, 0x5e, 0x74, 0xa0, 0xab, 0xa7,
147         0x03, 0x6a, 0x16, 0x5b, 0x5e, 0x92, 0xc4, 0x7e,
148         0x5b, 0x79, 0x8a, 0x69, 0xd4, 0xbc, 0x83, 0x5e,
149         0xae, 0x42, 0x92, 0x74, 0xa5, 0x2b, 0xe7, 0x00,
150         0xc1, 0xa9, 0xdc, 0xd5, 0xb1, 0x53, 0x07, 0x0f,
151         0x73, 0xf7, 0x8e, 0xad, 0x14, 0x3e, 0x25, 0x9e,
152         0xe5, 0x1e, 0xe6, 0xcc, 0x91, 0xcd, 0x95, 0x0c,
153         0x80, 0x44, 0x20, 0xc3, 0xfd, 0x17, 0xcf, 0x91,
154         0x3d, 0x63, 0x10, 0x1c, 0x14, 0x5b, 0xfb, 0xc3,
155         0xa8, 0xc1, 0x88, 0xb2, 0x77, 0xff, 0x9c, 0xdb,
156         0xfc, 0x6a, 0x44, 0x44, 0x44, 0xf7, 0x85, 0xec,
157         0x08, 0x2c, 0xd4, 0xdf, 0x81, 0xa3, 0x79, 0xc9,
158         0xfe, 0x1e, 0x9b, 0x93, 0x16, 0x53, 0xb7, 0x97,
159         0xab, 0xbe, 0x4f, 0x1a, 0xa5, 0xe2, 0xfa, 0x46,
160         0x05, 0xe4, 0x0d, 0x9c, 0x2a, 0xa4, 0xcc, 0xb9,
161         0x1e, 0x21, 0xa0, 0x6c, 0xc4, 0xab, 0x59, 0xb0,
162         0x40, 0x39, 0xbb, 0xf9, 0x88, 0xad, 0xfd, 0xdf,
163         0x8d, 0xb4, 0x0b, 0xaf, 0x7e, 0x41, 0xe0, 0x21,
164         0x3c, 0xc8, 0x33, 0x45, 0x49, 0x84, 0x2f, 0x93,
165         0x06, 0xee, 0xfd, 0x4f, 0xed, 0x4f, 0xf3, 0xbc,
166         0x9b, 0xde, 0xfc, 0x25, 0x5e, 0x55, 0xd5, 0x75,
167         0xd4, 0xc5, 0x7b, 0x3a, 0x40, 0x35, 0x06, 0x9f,
168         0xc4, 0x84, 0xb4, 0x6c, 0x93, 0x0c, 0xaf, 0x37,
169         0x5a, 0xaf, 0xb6, 0x41, 0x4d, 0x26, 0x23, 0x1c,
170         0xb8, 0x02, 0xb3, 0x02, 0x03, 0x01, 0x00, 0x01,
171         0xa3, 0x50, 0x30, 0x4e, 0x30, 0x0c, 0x06, 0x03,
172         0x55, 0x1d, 0x13, 0x04, 0x05, 0x30, 0x03, 0x01,
173         0x01, 0xff, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d,
174         0x0e, 0x04, 0x16, 0x04, 0x14, 0x85, 0x56, 0x89,
175         0x35, 0xe2, 0x9f, 0x00, 0x1a, 0xe1, 0x86, 0x03,
176         0x0b, 0x4b, 0xaf, 0x76, 0x12, 0x6b, 0x33, 0x6d,
177         0xfd, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23,
178         0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x85, 0x56,
179         0x89, 0x35, 0xe2, 0x9f, 0x00, 0x1a, 0xe1, 0x86,
180         0x03, 0x0b, 0x4b, 0xaf, 0x76, 0x12, 0x6b, 0x33,
181         0x6d, 0xfd, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86,
182         0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05,
183         0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x32, 0x0a,
184         0xbf, 0x2a, 0x0a, 0xe2, 0xbb, 0x4f, 0x43, 0xce,
185         0x88, 0xda, 0x5a, 0x39, 0x10, 0x37, 0x80, 0xbb,
186         0x37, 0x2d, 0x5e, 0x2d, 0x88, 0xdd, 0x26, 0x69,
187         0x9c, 0xe7, 0xb4, 0x98, 0x20, 0xb1, 0x25, 0xe6,
188         0x61, 0x59, 0x6d, 0x12, 0xec, 0x9b, 0x87, 0xbe,
189         0x57, 0xe1, 0x12, 0x05, 0xc5, 0x04, 0xf1, 0x17,
190         0xce, 0x14, 0xb8, 0x1c, 0x92, 0xd4, 0x95, 0x95,
191         0x2c, 0x5b, 0x28, 0x89, 0xfb, 0x72, 0x9c, 0x20,
192         0xd3, 0x32, 0x81, 0xa8, 0x85, 0xec, 0xc8, 0x08,
193         0x7b, 0xa8, 0x59, 0x5b, 0x3a, 0x6c, 0x31, 0xab,
194         0x52, 0xe2, 0x66, 0xcd, 0x14, 0x49, 0x5c, 0xf3,
195         0xd3, 0x3e, 0x62, 0xbc, 0x91, 0x16, 0xb4, 0x1c,
196         0xf5, 0xdd, 0x54, 0xaa, 0x3c, 0x61, 0x97, 0x79,
197         0xac, 0xe4, 0xc8, 0x43, 0x35, 0xc3, 0x0f, 0xfc,
198         0xf3, 0x70, 0x1d, 0xaf, 0xf0, 0x9c, 0x8a, 0x2a,
199         0x92, 0x93, 0x48, 0xaa, 0xd0, 0xe8, 0x47, 0xbe,
200         0x35, 0xc1, 0xc6, 0x7b, 0x6d, 0xda, 0xfa, 0x5d,
201         0x57, 0x45, 0xf3, 0xea, 0x41, 0x8f, 0x36, 0xc1,
202         0x3c, 0xf4, 0x52, 0x7f, 0x6e, 0x31, 0xdd, 0xba,
203         0x9a, 0xbc, 0x70, 0x56, 0x71, 0x38, 0xdc, 0x49,
204         0x57, 0x0c, 0xfd, 0x91, 0x17, 0xc5, 0xea, 0x87,
205         0xe5, 0x23, 0x74, 0x19, 0xb2, 0xb6, 0x99, 0x0c,
206         0x6b, 0xa2, 0x05, 0xf8, 0x51, 0x68, 0xed, 0x97,
207         0xe0, 0xdf, 0x62, 0xf9, 0x7e, 0x7a, 0x3a, 0x44,
208         0x71, 0x83, 0x57, 0x28, 0x49, 0x88, 0x69, 0xb5,
209         0x14, 0x1e, 0xda, 0x46, 0xe3, 0x6e, 0x78, 0xe1,
210         0xcb, 0x8f, 0xb5, 0x98, 0xb3, 0x2d, 0x6e, 0x5b,
211         0xb7, 0xf6, 0x93, 0x24, 0x14, 0x1f, 0xa4, 0xf6,
212         0x69, 0xbd, 0xff, 0x4c, 0x52, 0x50, 0x02, 0xc5,
213         0x43, 0x8d, 0x14, 0xe2, 0xd0, 0x75, 0x9f, 0x12,
214         0x5e, 0x94, 0x89, 0xd1, 0xef, 0x77, 0x89, 0x7d,
215         0x89, 0xd9, 0x9e, 0x76, 0x99, 0x24, 0x31, 0x82,
216         0x01, 0xf7, 0x30, 0x82, 0x01, 0xf3, 0x02, 0x01,
217         0x01, 0x30, 0x63, 0x30, 0x56, 0x31, 0x0b, 0x30,
218         0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02,
219         0x41, 0x55, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03,
220         0x55, 0x04, 0x08, 0x0c, 0x0a, 0x53, 0x6f, 0x6d,
221         0x65, 0x2d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x31,
222         0x21, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x04, 0x0a,
223         0x0c, 0x18, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e,
224         0x65, 0x74, 0x20, 0x57, 0x69, 0x64, 0x67, 0x69,
225         0x74, 0x73, 0x20, 0x50, 0x74, 0x79, 0x20, 0x4c,
226         0x74, 0x64, 0x31, 0x0f, 0x30, 0x0d, 0x06, 0x03,
227         0x55, 0x04, 0x03, 0x0c, 0x06, 0x72, 0x6f, 0x6f,
228         0x74, 0x43, 0x41, 0x02, 0x09, 0x00, 0x88, 0x43,
229         0x29, 0xcb, 0xc2, 0xeb, 0x15, 0x9a, 0x30, 0x0b,
230         0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03,
231         0x04, 0x02, 0x01, 0xa0, 0x69, 0x30, 0x18, 0x06,
232         0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01,
233         0x09, 0x03, 0x31, 0x0b, 0x06, 0x09, 0x2a, 0x86,
234         0x48, 0x86, 0xf7, 0x0d, 0x01, 0x07, 0x01, 0x30,
235         0x1c, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7,
236         0x0d, 0x01, 0x09, 0x05, 0x31, 0x0f, 0x17, 0x0d,
237         0x32, 0x30, 0x31, 0x32, 0x31, 0x31, 0x30, 0x39,
238         0x30, 0x30, 0x31, 0x33, 0x5a, 0x30, 0x2f, 0x06,
239         0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01,
240         0x09, 0x04, 0x31, 0x22, 0x04, 0x20, 0xb0, 0x80,
241         0x22, 0xd3, 0x15, 0xcf, 0x1e, 0xb1, 0x2d, 0x26,
242         0x65, 0xbd, 0xed, 0x0e, 0x6a, 0xf4, 0x06, 0x53,
243         0xc0, 0xa0, 0xbe, 0x97, 0x52, 0x32, 0xfb, 0x49,
244         0xbc, 0xbd, 0x02, 0x1c, 0xfc, 0x36, 0x30, 0x0d,
245         0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d,
246         0x01, 0x01, 0x01, 0x05, 0x00, 0x04, 0x82, 0x01,
247         0x00, 0x37, 0x44, 0x39, 0x08, 0xb2, 0x19, 0x52,
248         0x35, 0x9c, 0xd0, 0x67, 0x87, 0xae, 0xb8, 0x1c,
249         0x80, 0xf4, 0x03, 0x29, 0x2e, 0xe3, 0x76, 0x4a,
250         0xb0, 0x98, 0x10, 0x00, 0x9a, 0x30, 0xdb, 0x05,
251         0x28, 0x53, 0x34, 0x31, 0x14, 0xbd, 0x87, 0xb9,
252         0x4d, 0x45, 0x07, 0x97, 0xa3, 0x57, 0x0b, 0x7e,
253         0xd1, 0x67, 0xfb, 0x4e, 0x0f, 0x5b, 0x90, 0xb2,
254         0x6f, 0xe6, 0xce, 0x49, 0xdd, 0x72, 0x46, 0x71,
255         0x26, 0xa1, 0x1b, 0x98, 0x23, 0x7d, 0x69, 0x73,
256         0x84, 0xdc, 0xf9, 0xd2, 0x1c, 0x6d, 0xf6, 0xf5,
257         0x17, 0x49, 0x6e, 0x9d, 0x4d, 0xf1, 0xe2, 0x43,
258         0x29, 0x53, 0x55, 0xa5, 0x22, 0x1e, 0x89, 0x2c,
259         0xaf, 0xf2, 0x43, 0x47, 0xd5, 0xfa, 0xad, 0xe7,
260         0x89, 0x60, 0xbf, 0x96, 0x35, 0x6f, 0xc2, 0x99,
261         0xb7, 0x55, 0xc5, 0xe3, 0x04, 0x25, 0x1b, 0xf6,
262         0x7e, 0xf2, 0x2b, 0x14, 0xa9, 0x57, 0x96, 0xbe,
263         0xbd, 0x6e, 0x95, 0x44, 0x94, 0xbd, 0xaf, 0x9a,
264         0x6d, 0x77, 0x55, 0x5e, 0x6c, 0xf6, 0x32, 0x37,
265         0xec, 0xef, 0xe5, 0x81, 0xb0, 0xe3, 0x35, 0xc7,
266         0x86, 0xea, 0x47, 0x59, 0x38, 0xb6, 0x16, 0xfb,
267         0x1d, 0x10, 0x55, 0x48, 0xb1, 0x44, 0x33, 0xde,
268         0xf6, 0x29, 0xbe, 0xbf, 0xbc, 0x71, 0x3e, 0x49,
269         0xba, 0xe7, 0x9f, 0x4d, 0x6c, 0xfb, 0xec, 0xd2,
270         0xe0, 0x12, 0xa9, 0x7c, 0xc9, 0x9a, 0x7b, 0x85,
271         0x83, 0xb8, 0xca, 0xdd, 0xf6, 0xb7, 0x15, 0x75,
272         0x7b, 0x4a, 0x69, 0xcf, 0x0a, 0xc7, 0x80, 0x01,
273         0xe7, 0x94, 0x16, 0x7f, 0x8d, 0x3c, 0xfa, 0x1f,
274         0x05, 0x71, 0x76, 0x15, 0xb0, 0xf6, 0x61, 0x30,
275         0x58, 0x16, 0xbe, 0x1b, 0xd1, 0x93, 0xc4, 0x1a,
276         0x91, 0x0c, 0x48, 0xe2, 0x1c, 0x8e, 0xa5, 0xc5,
277         0xa7, 0x81, 0x44, 0x48, 0x3b, 0x10, 0xc2, 0x74,
278         0x07, 0xdf, 0xa8, 0xae, 0x57, 0xee, 0x7f, 0xe3,
279         0x6a
280     };
281
282     ret = TEST_ptr(bio = BIO_new_mem_buf(cms_data, sizeof(cms_data)))
283           && TEST_ptr(cms = d2i_CMS_bio(bio, NULL))
284           && TEST_true(CMS_verify(cms, NULL, NULL, NULL, NULL,
285                                   CMS_NO_SIGNER_CERT_VERIFY));
286     CMS_ContentInfo_free(cms);
287     BIO_free(bio);
288     return ret;
289 }
290
291 OPT_TEST_DECLARE_USAGE("certfile privkeyfile\n")
292
293 int setup_tests(void)
294 {
295     char *certin = NULL, *privkeyin = NULL;
296     BIO *certbio = NULL, *privkeybio = NULL;
297
298     if (!test_skip_common_options()) {
299         TEST_error("Error parsing test options\n");
300         return 0;
301     }
302
303     if (!TEST_ptr(certin = test_get_argument(0))
304             || !TEST_ptr(privkeyin = test_get_argument(1)))
305         return 0;
306
307     certbio = BIO_new_file(certin, "r");
308     if (!TEST_ptr(certbio))
309         return 0;
310     if (!TEST_true(PEM_read_bio_X509(certbio, &cert, NULL, NULL))) {
311         BIO_free(certbio);
312         return 0;
313     }
314     BIO_free(certbio);
315
316     privkeybio = BIO_new_file(privkeyin, "r");
317     if (!TEST_ptr(privkeybio)) {
318         X509_free(cert);
319         cert = NULL;
320         return 0;
321     }
322     if (!TEST_true(PEM_read_bio_PrivateKey(privkeybio, &privkey, NULL, NULL))) {
323         BIO_free(privkeybio);
324         X509_free(cert);
325         cert = NULL;
326         return 0;
327     }
328     BIO_free(privkeybio);
329
330     ADD_TEST(test_encrypt_decrypt_aes_cbc);
331     ADD_TEST(test_encrypt_decrypt_aes_128_gcm);
332     ADD_TEST(test_encrypt_decrypt_aes_192_gcm);
333     ADD_TEST(test_encrypt_decrypt_aes_256_gcm);
334     ADD_TEST(test_d2i_CMS_bio_NULL);
335     return 1;
336 }
337
338 void cleanup_tests(void)
339 {
340     X509_free(cert);
341     EVP_PKEY_free(privkey);
342 }