summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/pkcs7/pk7_asn1.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/pkcs7/pk7_asn1.c')
-rw-r--r--src/lib/libcrypto/pkcs7/pk7_asn1.c262
1 files changed, 251 insertions, 11 deletions
diff --git a/src/lib/libcrypto/pkcs7/pk7_asn1.c b/src/lib/libcrypto/pkcs7/pk7_asn1.c
index 5191eb5076..2522a1ae6c 100644
--- a/src/lib/libcrypto/pkcs7/pk7_asn1.c
+++ b/src/lib/libcrypto/pkcs7/pk7_asn1.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: pk7_asn1.c,v 1.7 2014/07/11 08:44:49 jsing Exp $ */ 1/* $OpenBSD: pk7_asn1.c,v 1.8 2015/02/09 16:04:46 jsing Exp $ */
2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL 2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
3 * project 2000. 3 * project 2000.
4 */ 4 */
@@ -116,7 +116,31 @@ ASN1_NDEF_SEQUENCE_cb(PKCS7, pk7_cb) = {
116 ASN1_ADB_OBJECT(PKCS7) 116 ASN1_ADB_OBJECT(PKCS7)
117}ASN1_NDEF_SEQUENCE_END_cb(PKCS7, PKCS7) 117}ASN1_NDEF_SEQUENCE_END_cb(PKCS7, PKCS7)
118 118
119IMPLEMENT_ASN1_FUNCTIONS(PKCS7) 119
120PKCS7 *
121d2i_PKCS7(PKCS7 **a, const unsigned char **in, long len)
122{
123 return (PKCS7 *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
124 &PKCS7_it);
125}
126
127int
128i2d_PKCS7(PKCS7 *a, unsigned char **out)
129{
130 return ASN1_item_i2d((ASN1_VALUE *)a, out, &PKCS7_it);
131}
132
133PKCS7 *
134PKCS7_new(void)
135{
136 return (PKCS7 *)ASN1_item_new(&PKCS7_it);
137}
138
139void
140PKCS7_free(PKCS7 *a)
141{
142 ASN1_item_free((ASN1_VALUE *)a, &PKCS7_it);
143}
120IMPLEMENT_ASN1_NDEF_FUNCTION(PKCS7) 144IMPLEMENT_ASN1_NDEF_FUNCTION(PKCS7)
121IMPLEMENT_ASN1_DUP_FUNCTION(PKCS7) 145IMPLEMENT_ASN1_DUP_FUNCTION(PKCS7)
122 146
@@ -129,7 +153,31 @@ ASN1_NDEF_SEQUENCE(PKCS7_SIGNED) = {
129 ASN1_SET_OF(PKCS7_SIGNED, signer_info, PKCS7_SIGNER_INFO) 153 ASN1_SET_OF(PKCS7_SIGNED, signer_info, PKCS7_SIGNER_INFO)
130} ASN1_NDEF_SEQUENCE_END(PKCS7_SIGNED) 154} ASN1_NDEF_SEQUENCE_END(PKCS7_SIGNED)
131 155
132IMPLEMENT_ASN1_FUNCTIONS(PKCS7_SIGNED) 156
157PKCS7_SIGNED *
158d2i_PKCS7_SIGNED(PKCS7_SIGNED **a, const unsigned char **in, long len)
159{
160 return (PKCS7_SIGNED *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
161 &PKCS7_SIGNED_it);
162}
163
164int
165i2d_PKCS7_SIGNED(PKCS7_SIGNED *a, unsigned char **out)
166{
167 return ASN1_item_i2d((ASN1_VALUE *)a, out, &PKCS7_SIGNED_it);
168}
169
170PKCS7_SIGNED *
171PKCS7_SIGNED_new(void)
172{
173 return (PKCS7_SIGNED *)ASN1_item_new(&PKCS7_SIGNED_it);
174}
175
176void
177PKCS7_SIGNED_free(PKCS7_SIGNED *a)
178{
179 ASN1_item_free((ASN1_VALUE *)a, &PKCS7_SIGNED_it);
180}
133 181
134/* Minor tweak to operation: free up EVP_PKEY */ 182/* Minor tweak to operation: free up EVP_PKEY */
135static int 183static int
@@ -159,14 +207,62 @@ ASN1_SEQUENCE_cb(PKCS7_SIGNER_INFO, si_cb) = {
159 ASN1_IMP_SET_OF_OPT(PKCS7_SIGNER_INFO, unauth_attr, X509_ATTRIBUTE, 1) 207 ASN1_IMP_SET_OF_OPT(PKCS7_SIGNER_INFO, unauth_attr, X509_ATTRIBUTE, 1)
160} ASN1_SEQUENCE_END_cb(PKCS7_SIGNER_INFO, PKCS7_SIGNER_INFO) 208} ASN1_SEQUENCE_END_cb(PKCS7_SIGNER_INFO, PKCS7_SIGNER_INFO)
161 209
162IMPLEMENT_ASN1_FUNCTIONS(PKCS7_SIGNER_INFO) 210
211PKCS7_SIGNER_INFO *
212d2i_PKCS7_SIGNER_INFO(PKCS7_SIGNER_INFO **a, const unsigned char **in, long len)
213{
214 return (PKCS7_SIGNER_INFO *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
215 &PKCS7_SIGNER_INFO_it);
216}
217
218int
219i2d_PKCS7_SIGNER_INFO(PKCS7_SIGNER_INFO *a, unsigned char **out)
220{
221 return ASN1_item_i2d((ASN1_VALUE *)a, out, &PKCS7_SIGNER_INFO_it);
222}
223
224PKCS7_SIGNER_INFO *
225PKCS7_SIGNER_INFO_new(void)
226{
227 return (PKCS7_SIGNER_INFO *)ASN1_item_new(&PKCS7_SIGNER_INFO_it);
228}
229
230void
231PKCS7_SIGNER_INFO_free(PKCS7_SIGNER_INFO *a)
232{
233 ASN1_item_free((ASN1_VALUE *)a, &PKCS7_SIGNER_INFO_it);
234}
163 235
164ASN1_SEQUENCE(PKCS7_ISSUER_AND_SERIAL) = { 236ASN1_SEQUENCE(PKCS7_ISSUER_AND_SERIAL) = {
165 ASN1_SIMPLE(PKCS7_ISSUER_AND_SERIAL, issuer, X509_NAME), 237 ASN1_SIMPLE(PKCS7_ISSUER_AND_SERIAL, issuer, X509_NAME),
166 ASN1_SIMPLE(PKCS7_ISSUER_AND_SERIAL, serial, ASN1_INTEGER) 238 ASN1_SIMPLE(PKCS7_ISSUER_AND_SERIAL, serial, ASN1_INTEGER)
167} ASN1_SEQUENCE_END(PKCS7_ISSUER_AND_SERIAL) 239} ASN1_SEQUENCE_END(PKCS7_ISSUER_AND_SERIAL)
168 240
169IMPLEMENT_ASN1_FUNCTIONS(PKCS7_ISSUER_AND_SERIAL) 241
242PKCS7_ISSUER_AND_SERIAL *
243d2i_PKCS7_ISSUER_AND_SERIAL(PKCS7_ISSUER_AND_SERIAL **a, const unsigned char **in, long len)
244{
245 return (PKCS7_ISSUER_AND_SERIAL *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
246 &PKCS7_ISSUER_AND_SERIAL_it);
247}
248
249int
250i2d_PKCS7_ISSUER_AND_SERIAL(PKCS7_ISSUER_AND_SERIAL *a, unsigned char **out)
251{
252 return ASN1_item_i2d((ASN1_VALUE *)a, out, &PKCS7_ISSUER_AND_SERIAL_it);
253}
254
255PKCS7_ISSUER_AND_SERIAL *
256PKCS7_ISSUER_AND_SERIAL_new(void)
257{
258 return (PKCS7_ISSUER_AND_SERIAL *)ASN1_item_new(&PKCS7_ISSUER_AND_SERIAL_it);
259}
260
261void
262PKCS7_ISSUER_AND_SERIAL_free(PKCS7_ISSUER_AND_SERIAL *a)
263{
264 ASN1_item_free((ASN1_VALUE *)a, &PKCS7_ISSUER_AND_SERIAL_it);
265}
170 266
171ASN1_NDEF_SEQUENCE(PKCS7_ENVELOPE) = { 267ASN1_NDEF_SEQUENCE(PKCS7_ENVELOPE) = {
172 ASN1_SIMPLE(PKCS7_ENVELOPE, version, ASN1_INTEGER), 268 ASN1_SIMPLE(PKCS7_ENVELOPE, version, ASN1_INTEGER),
@@ -174,7 +270,31 @@ ASN1_NDEF_SEQUENCE(PKCS7_ENVELOPE) = {
174 ASN1_SIMPLE(PKCS7_ENVELOPE, enc_data, PKCS7_ENC_CONTENT) 270 ASN1_SIMPLE(PKCS7_ENVELOPE, enc_data, PKCS7_ENC_CONTENT)
175} ASN1_NDEF_SEQUENCE_END(PKCS7_ENVELOPE) 271} ASN1_NDEF_SEQUENCE_END(PKCS7_ENVELOPE)
176 272
177IMPLEMENT_ASN1_FUNCTIONS(PKCS7_ENVELOPE) 273
274PKCS7_ENVELOPE *
275d2i_PKCS7_ENVELOPE(PKCS7_ENVELOPE **a, const unsigned char **in, long len)
276{
277 return (PKCS7_ENVELOPE *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
278 &PKCS7_ENVELOPE_it);
279}
280
281int
282i2d_PKCS7_ENVELOPE(PKCS7_ENVELOPE *a, unsigned char **out)
283{
284 return ASN1_item_i2d((ASN1_VALUE *)a, out, &PKCS7_ENVELOPE_it);
285}
286
287PKCS7_ENVELOPE *
288PKCS7_ENVELOPE_new(void)
289{
290 return (PKCS7_ENVELOPE *)ASN1_item_new(&PKCS7_ENVELOPE_it);
291}
292
293void
294PKCS7_ENVELOPE_free(PKCS7_ENVELOPE *a)
295{
296 ASN1_item_free((ASN1_VALUE *)a, &PKCS7_ENVELOPE_it);
297}
178 298
179/* Minor tweak to operation: free up X509 */ 299/* Minor tweak to operation: free up X509 */
180static int 300static int
@@ -195,7 +315,31 @@ ASN1_SEQUENCE_cb(PKCS7_RECIP_INFO, ri_cb) = {
195 ASN1_SIMPLE(PKCS7_RECIP_INFO, enc_key, ASN1_OCTET_STRING) 315 ASN1_SIMPLE(PKCS7_RECIP_INFO, enc_key, ASN1_OCTET_STRING)
196} ASN1_SEQUENCE_END_cb(PKCS7_RECIP_INFO, PKCS7_RECIP_INFO) 316} ASN1_SEQUENCE_END_cb(PKCS7_RECIP_INFO, PKCS7_RECIP_INFO)
197 317
198IMPLEMENT_ASN1_FUNCTIONS(PKCS7_RECIP_INFO) 318
319PKCS7_RECIP_INFO *
320d2i_PKCS7_RECIP_INFO(PKCS7_RECIP_INFO **a, const unsigned char **in, long len)
321{
322 return (PKCS7_RECIP_INFO *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
323 &PKCS7_RECIP_INFO_it);
324}
325
326int
327i2d_PKCS7_RECIP_INFO(PKCS7_RECIP_INFO *a, unsigned char **out)
328{
329 return ASN1_item_i2d((ASN1_VALUE *)a, out, &PKCS7_RECIP_INFO_it);
330}
331
332PKCS7_RECIP_INFO *
333PKCS7_RECIP_INFO_new(void)
334{
335 return (PKCS7_RECIP_INFO *)ASN1_item_new(&PKCS7_RECIP_INFO_it);
336}
337
338void
339PKCS7_RECIP_INFO_free(PKCS7_RECIP_INFO *a)
340{
341 ASN1_item_free((ASN1_VALUE *)a, &PKCS7_RECIP_INFO_it);
342}
199 343
200ASN1_NDEF_SEQUENCE(PKCS7_ENC_CONTENT) = { 344ASN1_NDEF_SEQUENCE(PKCS7_ENC_CONTENT) = {
201 ASN1_SIMPLE(PKCS7_ENC_CONTENT, content_type, ASN1_OBJECT), 345 ASN1_SIMPLE(PKCS7_ENC_CONTENT, content_type, ASN1_OBJECT),
@@ -203,7 +347,31 @@ ASN1_NDEF_SEQUENCE(PKCS7_ENC_CONTENT) = {
203 ASN1_IMP_OPT(PKCS7_ENC_CONTENT, enc_data, ASN1_OCTET_STRING_NDEF, 0) 347 ASN1_IMP_OPT(PKCS7_ENC_CONTENT, enc_data, ASN1_OCTET_STRING_NDEF, 0)
204} ASN1_NDEF_SEQUENCE_END(PKCS7_ENC_CONTENT) 348} ASN1_NDEF_SEQUENCE_END(PKCS7_ENC_CONTENT)
205 349
206IMPLEMENT_ASN1_FUNCTIONS(PKCS7_ENC_CONTENT) 350
351PKCS7_ENC_CONTENT *
352d2i_PKCS7_ENC_CONTENT(PKCS7_ENC_CONTENT **a, const unsigned char **in, long len)
353{
354 return (PKCS7_ENC_CONTENT *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
355 &PKCS7_ENC_CONTENT_it);
356}
357
358int
359i2d_PKCS7_ENC_CONTENT(PKCS7_ENC_CONTENT *a, unsigned char **out)
360{
361 return ASN1_item_i2d((ASN1_VALUE *)a, out, &PKCS7_ENC_CONTENT_it);
362}
363
364PKCS7_ENC_CONTENT *
365PKCS7_ENC_CONTENT_new(void)
366{
367 return (PKCS7_ENC_CONTENT *)ASN1_item_new(&PKCS7_ENC_CONTENT_it);
368}
369
370void
371PKCS7_ENC_CONTENT_free(PKCS7_ENC_CONTENT *a)
372{
373 ASN1_item_free((ASN1_VALUE *)a, &PKCS7_ENC_CONTENT_it);
374}
207 375
208ASN1_NDEF_SEQUENCE(PKCS7_SIGN_ENVELOPE) = { 376ASN1_NDEF_SEQUENCE(PKCS7_SIGN_ENVELOPE) = {
209 ASN1_SIMPLE(PKCS7_SIGN_ENVELOPE, version, ASN1_INTEGER), 377 ASN1_SIMPLE(PKCS7_SIGN_ENVELOPE, version, ASN1_INTEGER),
@@ -215,14 +383,62 @@ ASN1_NDEF_SEQUENCE(PKCS7_SIGN_ENVELOPE) = {
215 ASN1_SET_OF(PKCS7_SIGN_ENVELOPE, signer_info, PKCS7_SIGNER_INFO) 383 ASN1_SET_OF(PKCS7_SIGN_ENVELOPE, signer_info, PKCS7_SIGNER_INFO)
216} ASN1_NDEF_SEQUENCE_END(PKCS7_SIGN_ENVELOPE) 384} ASN1_NDEF_SEQUENCE_END(PKCS7_SIGN_ENVELOPE)
217 385
218IMPLEMENT_ASN1_FUNCTIONS(PKCS7_SIGN_ENVELOPE) 386
387PKCS7_SIGN_ENVELOPE *
388d2i_PKCS7_SIGN_ENVELOPE(PKCS7_SIGN_ENVELOPE **a, const unsigned char **in, long len)
389{
390 return (PKCS7_SIGN_ENVELOPE *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
391 &PKCS7_SIGN_ENVELOPE_it);
392}
393
394int
395i2d_PKCS7_SIGN_ENVELOPE(PKCS7_SIGN_ENVELOPE *a, unsigned char **out)
396{
397 return ASN1_item_i2d((ASN1_VALUE *)a, out, &PKCS7_SIGN_ENVELOPE_it);
398}
399
400PKCS7_SIGN_ENVELOPE *
401PKCS7_SIGN_ENVELOPE_new(void)
402{
403 return (PKCS7_SIGN_ENVELOPE *)ASN1_item_new(&PKCS7_SIGN_ENVELOPE_it);
404}
405
406void
407PKCS7_SIGN_ENVELOPE_free(PKCS7_SIGN_ENVELOPE *a)
408{
409 ASN1_item_free((ASN1_VALUE *)a, &PKCS7_SIGN_ENVELOPE_it);
410}
219 411
220ASN1_NDEF_SEQUENCE(PKCS7_ENCRYPT) = { 412ASN1_NDEF_SEQUENCE(PKCS7_ENCRYPT) = {
221 ASN1_SIMPLE(PKCS7_ENCRYPT, version, ASN1_INTEGER), 413 ASN1_SIMPLE(PKCS7_ENCRYPT, version, ASN1_INTEGER),
222 ASN1_SIMPLE(PKCS7_ENCRYPT, enc_data, PKCS7_ENC_CONTENT) 414 ASN1_SIMPLE(PKCS7_ENCRYPT, enc_data, PKCS7_ENC_CONTENT)
223} ASN1_NDEF_SEQUENCE_END(PKCS7_ENCRYPT) 415} ASN1_NDEF_SEQUENCE_END(PKCS7_ENCRYPT)
224 416
225IMPLEMENT_ASN1_FUNCTIONS(PKCS7_ENCRYPT) 417
418PKCS7_ENCRYPT *
419d2i_PKCS7_ENCRYPT(PKCS7_ENCRYPT **a, const unsigned char **in, long len)
420{
421 return (PKCS7_ENCRYPT *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
422 &PKCS7_ENCRYPT_it);
423}
424
425int
426i2d_PKCS7_ENCRYPT(PKCS7_ENCRYPT *a, unsigned char **out)
427{
428 return ASN1_item_i2d((ASN1_VALUE *)a, out, &PKCS7_ENCRYPT_it);
429}
430
431PKCS7_ENCRYPT *
432PKCS7_ENCRYPT_new(void)
433{
434 return (PKCS7_ENCRYPT *)ASN1_item_new(&PKCS7_ENCRYPT_it);
435}
436
437void
438PKCS7_ENCRYPT_free(PKCS7_ENCRYPT *a)
439{
440 ASN1_item_free((ASN1_VALUE *)a, &PKCS7_ENCRYPT_it);
441}
226 442
227ASN1_NDEF_SEQUENCE(PKCS7_DIGEST) = { 443ASN1_NDEF_SEQUENCE(PKCS7_DIGEST) = {
228 ASN1_SIMPLE(PKCS7_DIGEST, version, ASN1_INTEGER), 444 ASN1_SIMPLE(PKCS7_DIGEST, version, ASN1_INTEGER),
@@ -231,7 +447,31 @@ ASN1_NDEF_SEQUENCE(PKCS7_DIGEST) = {
231 ASN1_SIMPLE(PKCS7_DIGEST, digest, ASN1_OCTET_STRING) 447 ASN1_SIMPLE(PKCS7_DIGEST, digest, ASN1_OCTET_STRING)
232} ASN1_NDEF_SEQUENCE_END(PKCS7_DIGEST) 448} ASN1_NDEF_SEQUENCE_END(PKCS7_DIGEST)
233 449
234IMPLEMENT_ASN1_FUNCTIONS(PKCS7_DIGEST) 450
451PKCS7_DIGEST *
452d2i_PKCS7_DIGEST(PKCS7_DIGEST **a, const unsigned char **in, long len)
453{
454 return (PKCS7_DIGEST *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
455 &PKCS7_DIGEST_it);
456}
457
458int
459i2d_PKCS7_DIGEST(PKCS7_DIGEST *a, unsigned char **out)
460{
461 return ASN1_item_i2d((ASN1_VALUE *)a, out, &PKCS7_DIGEST_it);
462}
463
464PKCS7_DIGEST *
465PKCS7_DIGEST_new(void)
466{
467 return (PKCS7_DIGEST *)ASN1_item_new(&PKCS7_DIGEST_it);
468}
469
470void
471PKCS7_DIGEST_free(PKCS7_DIGEST *a)
472{
473 ASN1_item_free((ASN1_VALUE *)a, &PKCS7_DIGEST_it);
474}
235 475
236/* Specials for authenticated attributes */ 476/* Specials for authenticated attributes */
237 477