enable apic_kmdb_on_nmi by default
[unleashed.git] / lib / libcrypto / ocsp / ocsp_asn.c
blobbb58ca79abfbdfe3a34b5cc435598e54bdd5221e
1 /* $OpenBSD: ocsp_asn.c,v 1.9 2016/11/04 18:35:30 jsing Exp $ */
2 /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
3 * project 2000.
4 */
5 /* ====================================================================
6 * Copyright (c) 2000 The OpenSSL Project. All rights reserved.
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
12 * 1. Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer.
15 * 2. Redistributions in binary form must reproduce the above copyright
16 * notice, this list of conditions and the following disclaimer in
17 * the documentation and/or other materials provided with the
18 * distribution.
20 * 3. All advertising materials mentioning features or use of this
21 * software must display the following acknowledgment:
22 * "This product includes software developed by the OpenSSL Project
23 * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
25 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
26 * endorse or promote products derived from this software without
27 * prior written permission. For written permission, please contact
28 * licensing@OpenSSL.org.
30 * 5. Products derived from this software may not be called "OpenSSL"
31 * nor may "OpenSSL" appear in their names without prior written
32 * permission of the OpenSSL Project.
34 * 6. Redistributions of any form whatsoever must retain the following
35 * acknowledgment:
36 * "This product includes software developed by the OpenSSL Project
37 * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
39 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
40 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
41 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
42 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
43 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
44 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
45 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
46 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
47 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
48 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
49 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
50 * OF THE POSSIBILITY OF SUCH DAMAGE.
51 * ====================================================================
53 * This product includes cryptographic software written by Eric Young
54 * (eay@cryptsoft.com). This product includes software written by Tim
55 * Hudson (tjh@cryptsoft.com).
58 #include <openssl/asn1.h>
59 #include <openssl/asn1t.h>
60 #include <openssl/ocsp.h>
62 static const ASN1_TEMPLATE OCSP_SIGNATURE_seq_tt[] = {
64 .flags = 0,
65 .tag = 0,
66 .offset = offsetof(OCSP_SIGNATURE, signatureAlgorithm),
67 .field_name = "signatureAlgorithm",
68 .item = &X509_ALGOR_it,
71 .flags = 0,
72 .tag = 0,
73 .offset = offsetof(OCSP_SIGNATURE, signature),
74 .field_name = "signature",
75 .item = &ASN1_BIT_STRING_it,
78 .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_SEQUENCE_OF | ASN1_TFLG_OPTIONAL,
79 .tag = 0,
80 .offset = offsetof(OCSP_SIGNATURE, certs),
81 .field_name = "certs",
82 .item = &X509_it,
86 const ASN1_ITEM OCSP_SIGNATURE_it = {
87 .itype = ASN1_ITYPE_SEQUENCE,
88 .utype = V_ASN1_SEQUENCE,
89 .templates = OCSP_SIGNATURE_seq_tt,
90 .tcount = sizeof(OCSP_SIGNATURE_seq_tt) / sizeof(ASN1_TEMPLATE),
91 .funcs = NULL,
92 .size = sizeof(OCSP_SIGNATURE),
93 .sname = "OCSP_SIGNATURE",
97 OCSP_SIGNATURE *
98 d2i_OCSP_SIGNATURE(OCSP_SIGNATURE **a, const unsigned char **in, long len)
100 return (OCSP_SIGNATURE *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
101 &OCSP_SIGNATURE_it);
105 i2d_OCSP_SIGNATURE(OCSP_SIGNATURE *a, unsigned char **out)
107 return ASN1_item_i2d((ASN1_VALUE *)a, out, &OCSP_SIGNATURE_it);
110 OCSP_SIGNATURE *
111 OCSP_SIGNATURE_new(void)
113 return (OCSP_SIGNATURE *)ASN1_item_new(&OCSP_SIGNATURE_it);
116 void
117 OCSP_SIGNATURE_free(OCSP_SIGNATURE *a)
119 ASN1_item_free((ASN1_VALUE *)a, &OCSP_SIGNATURE_it);
122 static const ASN1_TEMPLATE OCSP_CERTID_seq_tt[] = {
124 .flags = 0,
125 .tag = 0,
126 .offset = offsetof(OCSP_CERTID, hashAlgorithm),
127 .field_name = "hashAlgorithm",
128 .item = &X509_ALGOR_it,
131 .flags = 0,
132 .tag = 0,
133 .offset = offsetof(OCSP_CERTID, issuerNameHash),
134 .field_name = "issuerNameHash",
135 .item = &ASN1_OCTET_STRING_it,
138 .flags = 0,
139 .tag = 0,
140 .offset = offsetof(OCSP_CERTID, issuerKeyHash),
141 .field_name = "issuerKeyHash",
142 .item = &ASN1_OCTET_STRING_it,
145 .flags = 0,
146 .tag = 0,
147 .offset = offsetof(OCSP_CERTID, serialNumber),
148 .field_name = "serialNumber",
149 .item = &ASN1_INTEGER_it,
153 const ASN1_ITEM OCSP_CERTID_it = {
154 .itype = ASN1_ITYPE_SEQUENCE,
155 .utype = V_ASN1_SEQUENCE,
156 .templates = OCSP_CERTID_seq_tt,
157 .tcount = sizeof(OCSP_CERTID_seq_tt) / sizeof(ASN1_TEMPLATE),
158 .funcs = NULL,
159 .size = sizeof(OCSP_CERTID),
160 .sname = "OCSP_CERTID",
164 OCSP_CERTID *
165 d2i_OCSP_CERTID(OCSP_CERTID **a, const unsigned char **in, long len)
167 return (OCSP_CERTID *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
168 &OCSP_CERTID_it);
172 i2d_OCSP_CERTID(OCSP_CERTID *a, unsigned char **out)
174 return ASN1_item_i2d((ASN1_VALUE *)a, out, &OCSP_CERTID_it);
177 OCSP_CERTID *
178 OCSP_CERTID_new(void)
180 return (OCSP_CERTID *)ASN1_item_new(&OCSP_CERTID_it);
183 void
184 OCSP_CERTID_free(OCSP_CERTID *a)
186 ASN1_item_free((ASN1_VALUE *)a, &OCSP_CERTID_it);
189 static const ASN1_TEMPLATE OCSP_ONEREQ_seq_tt[] = {
191 .flags = 0,
192 .tag = 0,
193 .offset = offsetof(OCSP_ONEREQ, reqCert),
194 .field_name = "reqCert",
195 .item = &OCSP_CERTID_it,
198 .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_SEQUENCE_OF | ASN1_TFLG_OPTIONAL,
199 .tag = 0,
200 .offset = offsetof(OCSP_ONEREQ, singleRequestExtensions),
201 .field_name = "singleRequestExtensions",
202 .item = &X509_EXTENSION_it,
206 const ASN1_ITEM OCSP_ONEREQ_it = {
207 .itype = ASN1_ITYPE_SEQUENCE,
208 .utype = V_ASN1_SEQUENCE,
209 .templates = OCSP_ONEREQ_seq_tt,
210 .tcount = sizeof(OCSP_ONEREQ_seq_tt) / sizeof(ASN1_TEMPLATE),
211 .funcs = NULL,
212 .size = sizeof(OCSP_ONEREQ),
213 .sname = "OCSP_ONEREQ",
217 OCSP_ONEREQ *
218 d2i_OCSP_ONEREQ(OCSP_ONEREQ **a, const unsigned char **in, long len)
220 return (OCSP_ONEREQ *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
221 &OCSP_ONEREQ_it);
225 i2d_OCSP_ONEREQ(OCSP_ONEREQ *a, unsigned char **out)
227 return ASN1_item_i2d((ASN1_VALUE *)a, out, &OCSP_ONEREQ_it);
230 OCSP_ONEREQ *
231 OCSP_ONEREQ_new(void)
233 return (OCSP_ONEREQ *)ASN1_item_new(&OCSP_ONEREQ_it);
236 void
237 OCSP_ONEREQ_free(OCSP_ONEREQ *a)
239 ASN1_item_free((ASN1_VALUE *)a, &OCSP_ONEREQ_it);
242 static const ASN1_TEMPLATE OCSP_REQINFO_seq_tt[] = {
244 .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_OPTIONAL,
245 .tag = 0,
246 .offset = offsetof(OCSP_REQINFO, version),
247 .field_name = "version",
248 .item = &ASN1_INTEGER_it,
251 .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_OPTIONAL,
252 .tag = 1,
253 .offset = offsetof(OCSP_REQINFO, requestorName),
254 .field_name = "requestorName",
255 .item = &GENERAL_NAME_it,
258 .flags = ASN1_TFLG_SEQUENCE_OF,
259 .tag = 0,
260 .offset = offsetof(OCSP_REQINFO, requestList),
261 .field_name = "requestList",
262 .item = &OCSP_ONEREQ_it,
265 .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_SEQUENCE_OF | ASN1_TFLG_OPTIONAL,
266 .tag = 2,
267 .offset = offsetof(OCSP_REQINFO, requestExtensions),
268 .field_name = "requestExtensions",
269 .item = &X509_EXTENSION_it,
273 const ASN1_ITEM OCSP_REQINFO_it = {
274 .itype = ASN1_ITYPE_SEQUENCE,
275 .utype = V_ASN1_SEQUENCE,
276 .templates = OCSP_REQINFO_seq_tt,
277 .tcount = sizeof(OCSP_REQINFO_seq_tt) / sizeof(ASN1_TEMPLATE),
278 .funcs = NULL,
279 .size = sizeof(OCSP_REQINFO),
280 .sname = "OCSP_REQINFO",
284 OCSP_REQINFO *
285 d2i_OCSP_REQINFO(OCSP_REQINFO **a, const unsigned char **in, long len)
287 return (OCSP_REQINFO *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
288 &OCSP_REQINFO_it);
292 i2d_OCSP_REQINFO(OCSP_REQINFO *a, unsigned char **out)
294 return ASN1_item_i2d((ASN1_VALUE *)a, out, &OCSP_REQINFO_it);
297 OCSP_REQINFO *
298 OCSP_REQINFO_new(void)
300 return (OCSP_REQINFO *)ASN1_item_new(&OCSP_REQINFO_it);
303 void
304 OCSP_REQINFO_free(OCSP_REQINFO *a)
306 ASN1_item_free((ASN1_VALUE *)a, &OCSP_REQINFO_it);
309 static const ASN1_TEMPLATE OCSP_REQUEST_seq_tt[] = {
311 .flags = 0,
312 .tag = 0,
313 .offset = offsetof(OCSP_REQUEST, tbsRequest),
314 .field_name = "tbsRequest",
315 .item = &OCSP_REQINFO_it,
318 .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_OPTIONAL,
319 .tag = 0,
320 .offset = offsetof(OCSP_REQUEST, optionalSignature),
321 .field_name = "optionalSignature",
322 .item = &OCSP_SIGNATURE_it,
326 const ASN1_ITEM OCSP_REQUEST_it = {
327 .itype = ASN1_ITYPE_SEQUENCE,
328 .utype = V_ASN1_SEQUENCE,
329 .templates = OCSP_REQUEST_seq_tt,
330 .tcount = sizeof(OCSP_REQUEST_seq_tt) / sizeof(ASN1_TEMPLATE),
331 .funcs = NULL,
332 .size = sizeof(OCSP_REQUEST),
333 .sname = "OCSP_REQUEST",
336 OCSP_REQUEST *
337 d2i_OCSP_REQUEST(OCSP_REQUEST **a, const unsigned char **in, long len)
339 return (OCSP_REQUEST *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
340 &OCSP_REQUEST_it);
344 i2d_OCSP_REQUEST(OCSP_REQUEST *a, unsigned char **out)
346 return ASN1_item_i2d((ASN1_VALUE *)a, out, &OCSP_REQUEST_it);
349 OCSP_REQUEST *
350 d2i_OCSP_REQUEST_bio(BIO *bp, OCSP_REQUEST **a)
352 return ASN1_item_d2i_bio(&OCSP_REQUEST_it, bp, a);
356 i2d_OCSP_REQUEST_bio(BIO *bp, OCSP_REQUEST *a)
358 return ASN1_item_i2d_bio(&OCSP_REQUEST_it, bp, a);
361 OCSP_REQUEST *
362 OCSP_REQUEST_new(void)
364 return (OCSP_REQUEST *)ASN1_item_new(&OCSP_REQUEST_it);
367 void
368 OCSP_REQUEST_free(OCSP_REQUEST *a)
370 ASN1_item_free((ASN1_VALUE *)a, &OCSP_REQUEST_it);
373 /* OCSP_RESPONSE templates */
375 static const ASN1_TEMPLATE OCSP_RESPBYTES_seq_tt[] = {
377 .flags = 0,
378 .tag = 0,
379 .offset = offsetof(OCSP_RESPBYTES, responseType),
380 .field_name = "responseType",
381 .item = &ASN1_OBJECT_it,
384 .flags = 0,
385 .tag = 0,
386 .offset = offsetof(OCSP_RESPBYTES, response),
387 .field_name = "response",
388 .item = &ASN1_OCTET_STRING_it,
392 const ASN1_ITEM OCSP_RESPBYTES_it = {
393 .itype = ASN1_ITYPE_SEQUENCE,
394 .utype = V_ASN1_SEQUENCE,
395 .templates = OCSP_RESPBYTES_seq_tt,
396 .tcount = sizeof(OCSP_RESPBYTES_seq_tt) / sizeof(ASN1_TEMPLATE),
397 .funcs = NULL,
398 .size = sizeof(OCSP_RESPBYTES),
399 .sname = "OCSP_RESPBYTES",
403 OCSP_RESPBYTES *
404 d2i_OCSP_RESPBYTES(OCSP_RESPBYTES **a, const unsigned char **in, long len)
406 return (OCSP_RESPBYTES *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
407 &OCSP_RESPBYTES_it);
411 i2d_OCSP_RESPBYTES(OCSP_RESPBYTES *a, unsigned char **out)
413 return ASN1_item_i2d((ASN1_VALUE *)a, out, &OCSP_RESPBYTES_it);
416 OCSP_RESPBYTES *
417 OCSP_RESPBYTES_new(void)
419 return (OCSP_RESPBYTES *)ASN1_item_new(&OCSP_RESPBYTES_it);
422 void
423 OCSP_RESPBYTES_free(OCSP_RESPBYTES *a)
425 ASN1_item_free((ASN1_VALUE *)a, &OCSP_RESPBYTES_it);
428 static const ASN1_TEMPLATE OCSP_RESPONSE_seq_tt[] = {
430 .flags = 0,
431 .tag = 0,
432 .offset = offsetof(OCSP_RESPONSE, responseStatus),
433 .field_name = "responseStatus",
434 .item = &ASN1_ENUMERATED_it,
437 .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_OPTIONAL,
438 .tag = 0,
439 .offset = offsetof(OCSP_RESPONSE, responseBytes),
440 .field_name = "responseBytes",
441 .item = &OCSP_RESPBYTES_it,
445 const ASN1_ITEM OCSP_RESPONSE_it = {
446 .itype = ASN1_ITYPE_SEQUENCE,
447 .utype = V_ASN1_SEQUENCE,
448 .templates = OCSP_RESPONSE_seq_tt,
449 .tcount = sizeof(OCSP_RESPONSE_seq_tt) / sizeof(ASN1_TEMPLATE),
450 .funcs = NULL,
451 .size = sizeof(OCSP_RESPONSE),
452 .sname = "OCSP_RESPONSE",
456 OCSP_RESPONSE *
457 d2i_OCSP_RESPONSE(OCSP_RESPONSE **a, const unsigned char **in, long len)
459 return (OCSP_RESPONSE *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
460 &OCSP_RESPONSE_it);
464 i2d_OCSP_RESPONSE(OCSP_RESPONSE *a, unsigned char **out)
466 return ASN1_item_i2d((ASN1_VALUE *)a, out, &OCSP_RESPONSE_it);
469 OCSP_RESPONSE *
470 d2i_OCSP_RESPONSE_bio(BIO *bp, OCSP_RESPONSE **a)
472 return ASN1_item_d2i_bio(&OCSP_RESPONSE_it, bp, a);
476 i2d_OCSP_RESPONSE_bio(BIO *bp, OCSP_RESPONSE *a)
478 return ASN1_item_i2d_bio(&OCSP_RESPONSE_it, bp, a);
481 OCSP_RESPONSE *
482 OCSP_RESPONSE_new(void)
484 return (OCSP_RESPONSE *)ASN1_item_new(&OCSP_RESPONSE_it);
487 void
488 OCSP_RESPONSE_free(OCSP_RESPONSE *a)
490 ASN1_item_free((ASN1_VALUE *)a, &OCSP_RESPONSE_it);
493 static const ASN1_TEMPLATE OCSP_RESPID_ch_tt[] = {
495 .flags = ASN1_TFLG_EXPLICIT,
496 .tag = 1,
497 .offset = offsetof(OCSP_RESPID, value.byName),
498 .field_name = "value.byName",
499 .item = &X509_NAME_it,
502 .flags = ASN1_TFLG_EXPLICIT,
503 .tag = 2,
504 .offset = offsetof(OCSP_RESPID, value.byKey),
505 .field_name = "value.byKey",
506 .item = &ASN1_OCTET_STRING_it,
510 const ASN1_ITEM OCSP_RESPID_it = {
511 .itype = ASN1_ITYPE_CHOICE,
512 .utype = offsetof(OCSP_RESPID, type),
513 .templates = OCSP_RESPID_ch_tt,
514 .tcount = sizeof(OCSP_RESPID_ch_tt) / sizeof(ASN1_TEMPLATE),
515 .funcs = NULL,
516 .size = sizeof(OCSP_RESPID),
517 .sname = "OCSP_RESPID",
521 OCSP_RESPID *
522 d2i_OCSP_RESPID(OCSP_RESPID **a, const unsigned char **in, long len)
524 return (OCSP_RESPID *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
525 &OCSP_RESPID_it);
529 i2d_OCSP_RESPID(OCSP_RESPID *a, unsigned char **out)
531 return ASN1_item_i2d((ASN1_VALUE *)a, out, &OCSP_RESPID_it);
534 OCSP_RESPID *
535 OCSP_RESPID_new(void)
537 return (OCSP_RESPID *)ASN1_item_new(&OCSP_RESPID_it);
540 void
541 OCSP_RESPID_free(OCSP_RESPID *a)
543 ASN1_item_free((ASN1_VALUE *)a, &OCSP_RESPID_it);
546 static const ASN1_TEMPLATE OCSP_REVOKEDINFO_seq_tt[] = {
548 .flags = 0,
549 .tag = 0,
550 .offset = offsetof(OCSP_REVOKEDINFO, revocationTime),
551 .field_name = "revocationTime",
552 .item = &ASN1_GENERALIZEDTIME_it,
555 .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_OPTIONAL,
556 .tag = 0,
557 .offset = offsetof(OCSP_REVOKEDINFO, revocationReason),
558 .field_name = "revocationReason",
559 .item = &ASN1_ENUMERATED_it,
563 const ASN1_ITEM OCSP_REVOKEDINFO_it = {
564 .itype = ASN1_ITYPE_SEQUENCE,
565 .utype = V_ASN1_SEQUENCE,
566 .templates = OCSP_REVOKEDINFO_seq_tt,
567 .tcount = sizeof(OCSP_REVOKEDINFO_seq_tt) / sizeof(ASN1_TEMPLATE),
568 .funcs = NULL,
569 .size = sizeof(OCSP_REVOKEDINFO),
570 .sname = "OCSP_REVOKEDINFO",
574 OCSP_REVOKEDINFO *
575 d2i_OCSP_REVOKEDINFO(OCSP_REVOKEDINFO **a, const unsigned char **in, long len)
577 return (OCSP_REVOKEDINFO *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
578 &OCSP_REVOKEDINFO_it);
582 i2d_OCSP_REVOKEDINFO(OCSP_REVOKEDINFO *a, unsigned char **out)
584 return ASN1_item_i2d((ASN1_VALUE *)a, out, &OCSP_REVOKEDINFO_it);
587 OCSP_REVOKEDINFO *
588 OCSP_REVOKEDINFO_new(void)
590 return (OCSP_REVOKEDINFO *)ASN1_item_new(&OCSP_REVOKEDINFO_it);
593 void
594 OCSP_REVOKEDINFO_free(OCSP_REVOKEDINFO *a)
596 ASN1_item_free((ASN1_VALUE *)a, &OCSP_REVOKEDINFO_it);
599 static const ASN1_TEMPLATE OCSP_CERTSTATUS_ch_tt[] = {
601 .flags = ASN1_TFLG_IMPLICIT,
602 .tag = 0,
603 .offset = offsetof(OCSP_CERTSTATUS, value.good),
604 .field_name = "value.good",
605 .item = &ASN1_NULL_it,
608 .flags = ASN1_TFLG_IMPLICIT,
609 .tag = 1,
610 .offset = offsetof(OCSP_CERTSTATUS, value.revoked),
611 .field_name = "value.revoked",
612 .item = &OCSP_REVOKEDINFO_it,
615 .flags = ASN1_TFLG_IMPLICIT,
616 .tag = 2,
617 .offset = offsetof(OCSP_CERTSTATUS, value.unknown),
618 .field_name = "value.unknown",
619 .item = &ASN1_NULL_it,
623 const ASN1_ITEM OCSP_CERTSTATUS_it = {
624 .itype = ASN1_ITYPE_CHOICE,
625 .utype = offsetof(OCSP_CERTSTATUS, type),
626 .templates = OCSP_CERTSTATUS_ch_tt,
627 .tcount = sizeof(OCSP_CERTSTATUS_ch_tt) / sizeof(ASN1_TEMPLATE),
628 .funcs = NULL,
629 .size = sizeof(OCSP_CERTSTATUS),
630 .sname = "OCSP_CERTSTATUS",
634 OCSP_CERTSTATUS *
635 d2i_OCSP_CERTSTATUS(OCSP_CERTSTATUS **a, const unsigned char **in, long len)
637 return (OCSP_CERTSTATUS *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
638 &OCSP_CERTSTATUS_it);
642 i2d_OCSP_CERTSTATUS(OCSP_CERTSTATUS *a, unsigned char **out)
644 return ASN1_item_i2d((ASN1_VALUE *)a, out, &OCSP_CERTSTATUS_it);
647 OCSP_CERTSTATUS *
648 OCSP_CERTSTATUS_new(void)
650 return (OCSP_CERTSTATUS *)ASN1_item_new(&OCSP_CERTSTATUS_it);
653 void
654 OCSP_CERTSTATUS_free(OCSP_CERTSTATUS *a)
656 ASN1_item_free((ASN1_VALUE *)a, &OCSP_CERTSTATUS_it);
659 static const ASN1_TEMPLATE OCSP_SINGLERESP_seq_tt[] = {
661 .flags = 0,
662 .tag = 0,
663 .offset = offsetof(OCSP_SINGLERESP, certId),
664 .field_name = "certId",
665 .item = &OCSP_CERTID_it,
668 .flags = 0,
669 .tag = 0,
670 .offset = offsetof(OCSP_SINGLERESP, certStatus),
671 .field_name = "certStatus",
672 .item = &OCSP_CERTSTATUS_it,
675 .flags = 0,
676 .tag = 0,
677 .offset = offsetof(OCSP_SINGLERESP, thisUpdate),
678 .field_name = "thisUpdate",
679 .item = &ASN1_GENERALIZEDTIME_it,
682 .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_OPTIONAL,
683 .tag = 0,
684 .offset = offsetof(OCSP_SINGLERESP, nextUpdate),
685 .field_name = "nextUpdate",
686 .item = &ASN1_GENERALIZEDTIME_it,
689 .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_SEQUENCE_OF | ASN1_TFLG_OPTIONAL,
690 .tag = 1,
691 .offset = offsetof(OCSP_SINGLERESP, singleExtensions),
692 .field_name = "singleExtensions",
693 .item = &X509_EXTENSION_it,
697 const ASN1_ITEM OCSP_SINGLERESP_it = {
698 .itype = ASN1_ITYPE_SEQUENCE,
699 .utype = V_ASN1_SEQUENCE,
700 .templates = OCSP_SINGLERESP_seq_tt,
701 .tcount = sizeof(OCSP_SINGLERESP_seq_tt) / sizeof(ASN1_TEMPLATE),
702 .funcs = NULL,
703 .size = sizeof(OCSP_SINGLERESP),
704 .sname = "OCSP_SINGLERESP",
708 OCSP_SINGLERESP *
709 d2i_OCSP_SINGLERESP(OCSP_SINGLERESP **a, const unsigned char **in, long len)
711 return (OCSP_SINGLERESP *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
712 &OCSP_SINGLERESP_it);
716 i2d_OCSP_SINGLERESP(OCSP_SINGLERESP *a, unsigned char **out)
718 return ASN1_item_i2d((ASN1_VALUE *)a, out, &OCSP_SINGLERESP_it);
721 OCSP_SINGLERESP *
722 OCSP_SINGLERESP_new(void)
724 return (OCSP_SINGLERESP *)ASN1_item_new(&OCSP_SINGLERESP_it);
727 void
728 OCSP_SINGLERESP_free(OCSP_SINGLERESP *a)
730 ASN1_item_free((ASN1_VALUE *)a, &OCSP_SINGLERESP_it);
733 static const ASN1_TEMPLATE OCSP_RESPDATA_seq_tt[] = {
735 .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_OPTIONAL,
736 .tag = 0,
737 .offset = offsetof(OCSP_RESPDATA, version),
738 .field_name = "version",
739 .item = &ASN1_INTEGER_it,
742 .flags = 0,
743 .tag = 0,
744 .offset = offsetof(OCSP_RESPDATA, responderId),
745 .field_name = "responderId",
746 .item = &OCSP_RESPID_it,
749 .flags = 0,
750 .tag = 0,
751 .offset = offsetof(OCSP_RESPDATA, producedAt),
752 .field_name = "producedAt",
753 .item = &ASN1_GENERALIZEDTIME_it,
756 .flags = ASN1_TFLG_SEQUENCE_OF,
757 .tag = 0,
758 .offset = offsetof(OCSP_RESPDATA, responses),
759 .field_name = "responses",
760 .item = &OCSP_SINGLERESP_it,
763 .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_SEQUENCE_OF | ASN1_TFLG_OPTIONAL,
764 .tag = 1,
765 .offset = offsetof(OCSP_RESPDATA, responseExtensions),
766 .field_name = "responseExtensions",
767 .item = &X509_EXTENSION_it,
771 const ASN1_ITEM OCSP_RESPDATA_it = {
772 .itype = ASN1_ITYPE_SEQUENCE,
773 .utype = V_ASN1_SEQUENCE,
774 .templates = OCSP_RESPDATA_seq_tt,
775 .tcount = sizeof(OCSP_RESPDATA_seq_tt) / sizeof(ASN1_TEMPLATE),
776 .funcs = NULL,
777 .size = sizeof(OCSP_RESPDATA),
778 .sname = "OCSP_RESPDATA",
782 OCSP_RESPDATA *
783 d2i_OCSP_RESPDATA(OCSP_RESPDATA **a, const unsigned char **in, long len)
785 return (OCSP_RESPDATA *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
786 &OCSP_RESPDATA_it);
790 i2d_OCSP_RESPDATA(OCSP_RESPDATA *a, unsigned char **out)
792 return ASN1_item_i2d((ASN1_VALUE *)a, out, &OCSP_RESPDATA_it);
795 OCSP_RESPDATA *
796 OCSP_RESPDATA_new(void)
798 return (OCSP_RESPDATA *)ASN1_item_new(&OCSP_RESPDATA_it);
801 void
802 OCSP_RESPDATA_free(OCSP_RESPDATA *a)
804 ASN1_item_free((ASN1_VALUE *)a, &OCSP_RESPDATA_it);
807 static const ASN1_TEMPLATE OCSP_BASICRESP_seq_tt[] = {
809 .flags = 0,
810 .tag = 0,
811 .offset = offsetof(OCSP_BASICRESP, tbsResponseData),
812 .field_name = "tbsResponseData",
813 .item = &OCSP_RESPDATA_it,
816 .flags = 0,
817 .tag = 0,
818 .offset = offsetof(OCSP_BASICRESP, signatureAlgorithm),
819 .field_name = "signatureAlgorithm",
820 .item = &X509_ALGOR_it,
823 .flags = 0,
824 .tag = 0,
825 .offset = offsetof(OCSP_BASICRESP, signature),
826 .field_name = "signature",
827 .item = &ASN1_BIT_STRING_it,
830 .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_SEQUENCE_OF | ASN1_TFLG_OPTIONAL,
831 .tag = 0,
832 .offset = offsetof(OCSP_BASICRESP, certs),
833 .field_name = "certs",
834 .item = &X509_it,
838 const ASN1_ITEM OCSP_BASICRESP_it = {
839 .itype = ASN1_ITYPE_SEQUENCE,
840 .utype = V_ASN1_SEQUENCE,
841 .templates = OCSP_BASICRESP_seq_tt,
842 .tcount = sizeof(OCSP_BASICRESP_seq_tt) / sizeof(ASN1_TEMPLATE),
843 .funcs = NULL,
844 .size = sizeof(OCSP_BASICRESP),
845 .sname = "OCSP_BASICRESP",
849 OCSP_BASICRESP *
850 d2i_OCSP_BASICRESP(OCSP_BASICRESP **a, const unsigned char **in, long len)
852 return (OCSP_BASICRESP *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
853 &OCSP_BASICRESP_it);
857 i2d_OCSP_BASICRESP(OCSP_BASICRESP *a, unsigned char **out)
859 return ASN1_item_i2d((ASN1_VALUE *)a, out, &OCSP_BASICRESP_it);
862 OCSP_BASICRESP *
863 OCSP_BASICRESP_new(void)
865 return (OCSP_BASICRESP *)ASN1_item_new(&OCSP_BASICRESP_it);
868 void
869 OCSP_BASICRESP_free(OCSP_BASICRESP *a)
871 ASN1_item_free((ASN1_VALUE *)a, &OCSP_BASICRESP_it);
874 static const ASN1_TEMPLATE OCSP_CRLID_seq_tt[] = {
876 .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_OPTIONAL,
877 .tag = 0,
878 .offset = offsetof(OCSP_CRLID, crlUrl),
879 .field_name = "crlUrl",
880 .item = &ASN1_IA5STRING_it,
883 .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_OPTIONAL,
884 .tag = 1,
885 .offset = offsetof(OCSP_CRLID, crlNum),
886 .field_name = "crlNum",
887 .item = &ASN1_INTEGER_it,
890 .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_OPTIONAL,
891 .tag = 2,
892 .offset = offsetof(OCSP_CRLID, crlTime),
893 .field_name = "crlTime",
894 .item = &ASN1_GENERALIZEDTIME_it,
898 const ASN1_ITEM OCSP_CRLID_it = {
899 .itype = ASN1_ITYPE_SEQUENCE,
900 .utype = V_ASN1_SEQUENCE,
901 .templates = OCSP_CRLID_seq_tt,
902 .tcount = sizeof(OCSP_CRLID_seq_tt) / sizeof(ASN1_TEMPLATE),
903 .funcs = NULL,
904 .size = sizeof(OCSP_CRLID),
905 .sname = "OCSP_CRLID",
909 OCSP_CRLID *
910 d2i_OCSP_CRLID(OCSP_CRLID **a, const unsigned char **in, long len)
912 return (OCSP_CRLID *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
913 &OCSP_CRLID_it);
917 i2d_OCSP_CRLID(OCSP_CRLID *a, unsigned char **out)
919 return ASN1_item_i2d((ASN1_VALUE *)a, out, &OCSP_CRLID_it);
922 OCSP_CRLID *
923 OCSP_CRLID_new(void)
925 return (OCSP_CRLID *)ASN1_item_new(&OCSP_CRLID_it);
928 void
929 OCSP_CRLID_free(OCSP_CRLID *a)
931 ASN1_item_free((ASN1_VALUE *)a, &OCSP_CRLID_it);
934 static const ASN1_TEMPLATE OCSP_SERVICELOC_seq_tt[] = {
936 .flags = 0,
937 .tag = 0,
938 .offset = offsetof(OCSP_SERVICELOC, issuer),
939 .field_name = "issuer",
940 .item = &X509_NAME_it,
943 .flags = ASN1_TFLG_SEQUENCE_OF | ASN1_TFLG_OPTIONAL,
944 .tag = 0,
945 .offset = offsetof(OCSP_SERVICELOC, locator),
946 .field_name = "locator",
947 .item = &ACCESS_DESCRIPTION_it,
951 const ASN1_ITEM OCSP_SERVICELOC_it = {
952 .itype = ASN1_ITYPE_SEQUENCE,
953 .utype = V_ASN1_SEQUENCE,
954 .templates = OCSP_SERVICELOC_seq_tt,
955 .tcount = sizeof(OCSP_SERVICELOC_seq_tt) / sizeof(ASN1_TEMPLATE),
956 .funcs = NULL,
957 .size = sizeof(OCSP_SERVICELOC),
958 .sname = "OCSP_SERVICELOC",
962 OCSP_SERVICELOC *
963 d2i_OCSP_SERVICELOC(OCSP_SERVICELOC **a, const unsigned char **in, long len)
965 return (OCSP_SERVICELOC *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
966 &OCSP_SERVICELOC_it);
970 i2d_OCSP_SERVICELOC(OCSP_SERVICELOC *a, unsigned char **out)
972 return ASN1_item_i2d((ASN1_VALUE *)a, out, &OCSP_SERVICELOC_it);
975 OCSP_SERVICELOC *
976 OCSP_SERVICELOC_new(void)
978 return (OCSP_SERVICELOC *)ASN1_item_new(&OCSP_SERVICELOC_it);
981 void
982 OCSP_SERVICELOC_free(OCSP_SERVICELOC *a)
984 ASN1_item_free((ASN1_VALUE *)a, &OCSP_SERVICELOC_it);