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