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