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
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
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
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
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
[] = {
66 .offset
= offsetof(OCSP_SIGNATURE
, signatureAlgorithm
),
67 .field_name
= "signatureAlgorithm",
68 .item
= &X509_ALGOR_it
,
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
,
80 .offset
= offsetof(OCSP_SIGNATURE
, certs
),
81 .field_name
= "certs",
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
),
92 .size
= sizeof(OCSP_SIGNATURE
),
93 .sname
= "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
,
105 i2d_OCSP_SIGNATURE(OCSP_SIGNATURE
*a
, unsigned char **out
)
107 return ASN1_item_i2d((ASN1_VALUE
*)a
, out
, &OCSP_SIGNATURE_it
);
111 OCSP_SIGNATURE_new(void)
113 return (OCSP_SIGNATURE
*)ASN1_item_new(&OCSP_SIGNATURE_it
);
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
[] = {
126 .offset
= offsetof(OCSP_CERTID
, hashAlgorithm
),
127 .field_name
= "hashAlgorithm",
128 .item
= &X509_ALGOR_it
,
133 .offset
= offsetof(OCSP_CERTID
, issuerNameHash
),
134 .field_name
= "issuerNameHash",
135 .item
= &ASN1_OCTET_STRING_it
,
140 .offset
= offsetof(OCSP_CERTID
, issuerKeyHash
),
141 .field_name
= "issuerKeyHash",
142 .item
= &ASN1_OCTET_STRING_it
,
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
),
159 .size
= sizeof(OCSP_CERTID
),
160 .sname
= "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
,
172 i2d_OCSP_CERTID(OCSP_CERTID
*a
, unsigned char **out
)
174 return ASN1_item_i2d((ASN1_VALUE
*)a
, out
, &OCSP_CERTID_it
);
178 OCSP_CERTID_new(void)
180 return (OCSP_CERTID
*)ASN1_item_new(&OCSP_CERTID_it
);
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
[] = {
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
,
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
),
212 .size
= sizeof(OCSP_ONEREQ
),
213 .sname
= "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
,
225 i2d_OCSP_ONEREQ(OCSP_ONEREQ
*a
, unsigned char **out
)
227 return ASN1_item_i2d((ASN1_VALUE
*)a
, out
, &OCSP_ONEREQ_it
);
231 OCSP_ONEREQ_new(void)
233 return (OCSP_ONEREQ
*)ASN1_item_new(&OCSP_ONEREQ_it
);
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
,
246 .offset
= offsetof(OCSP_REQINFO
, version
),
247 .field_name
= "version",
248 .item
= &ASN1_INTEGER_it
,
251 .flags
= ASN1_TFLG_EXPLICIT
| ASN1_TFLG_OPTIONAL
,
253 .offset
= offsetof(OCSP_REQINFO
, requestorName
),
254 .field_name
= "requestorName",
255 .item
= &GENERAL_NAME_it
,
258 .flags
= ASN1_TFLG_SEQUENCE_OF
,
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
,
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
),
279 .size
= sizeof(OCSP_REQINFO
),
280 .sname
= "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
,
292 i2d_OCSP_REQINFO(OCSP_REQINFO
*a
, unsigned char **out
)
294 return ASN1_item_i2d((ASN1_VALUE
*)a
, out
, &OCSP_REQINFO_it
);
298 OCSP_REQINFO_new(void)
300 return (OCSP_REQINFO
*)ASN1_item_new(&OCSP_REQINFO_it
);
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
[] = {
313 .offset
= offsetof(OCSP_REQUEST
, tbsRequest
),
314 .field_name
= "tbsRequest",
315 .item
= &OCSP_REQINFO_it
,
318 .flags
= ASN1_TFLG_EXPLICIT
| ASN1_TFLG_OPTIONAL
,
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
),
332 .size
= sizeof(OCSP_REQUEST
),
333 .sname
= "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
,
344 i2d_OCSP_REQUEST(OCSP_REQUEST
*a
, unsigned char **out
)
346 return ASN1_item_i2d((ASN1_VALUE
*)a
, out
, &OCSP_REQUEST_it
);
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
);
362 OCSP_REQUEST_new(void)
364 return (OCSP_REQUEST
*)ASN1_item_new(&OCSP_REQUEST_it
);
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
[] = {
379 .offset
= offsetof(OCSP_RESPBYTES
, responseType
),
380 .field_name
= "responseType",
381 .item
= &ASN1_OBJECT_it
,
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
),
398 .size
= sizeof(OCSP_RESPBYTES
),
399 .sname
= "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
,
411 i2d_OCSP_RESPBYTES(OCSP_RESPBYTES
*a
, unsigned char **out
)
413 return ASN1_item_i2d((ASN1_VALUE
*)a
, out
, &OCSP_RESPBYTES_it
);
417 OCSP_RESPBYTES_new(void)
419 return (OCSP_RESPBYTES
*)ASN1_item_new(&OCSP_RESPBYTES_it
);
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
[] = {
432 .offset
= offsetof(OCSP_RESPONSE
, responseStatus
),
433 .field_name
= "responseStatus",
434 .item
= &ASN1_ENUMERATED_it
,
437 .flags
= ASN1_TFLG_EXPLICIT
| ASN1_TFLG_OPTIONAL
,
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
),
451 .size
= sizeof(OCSP_RESPONSE
),
452 .sname
= "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
,
464 i2d_OCSP_RESPONSE(OCSP_RESPONSE
*a
, unsigned char **out
)
466 return ASN1_item_i2d((ASN1_VALUE
*)a
, out
, &OCSP_RESPONSE_it
);
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
);
482 OCSP_RESPONSE_new(void)
484 return (OCSP_RESPONSE
*)ASN1_item_new(&OCSP_RESPONSE_it
);
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
,
497 .offset
= offsetof(OCSP_RESPID
, value
.byName
),
498 .field_name
= "value.byName",
499 .item
= &X509_NAME_it
,
502 .flags
= ASN1_TFLG_EXPLICIT
,
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
),
516 .size
= sizeof(OCSP_RESPID
),
517 .sname
= "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
,
529 i2d_OCSP_RESPID(OCSP_RESPID
*a
, unsigned char **out
)
531 return ASN1_item_i2d((ASN1_VALUE
*)a
, out
, &OCSP_RESPID_it
);
535 OCSP_RESPID_new(void)
537 return (OCSP_RESPID
*)ASN1_item_new(&OCSP_RESPID_it
);
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
[] = {
550 .offset
= offsetof(OCSP_REVOKEDINFO
, revocationTime
),
551 .field_name
= "revocationTime",
552 .item
= &ASN1_GENERALIZEDTIME_it
,
555 .flags
= ASN1_TFLG_EXPLICIT
| ASN1_TFLG_OPTIONAL
,
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
),
569 .size
= sizeof(OCSP_REVOKEDINFO
),
570 .sname
= "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
);
588 OCSP_REVOKEDINFO_new(void)
590 return (OCSP_REVOKEDINFO
*)ASN1_item_new(&OCSP_REVOKEDINFO_it
);
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
,
603 .offset
= offsetof(OCSP_CERTSTATUS
, value
.good
),
604 .field_name
= "value.good",
605 .item
= &ASN1_NULL_it
,
608 .flags
= ASN1_TFLG_IMPLICIT
,
610 .offset
= offsetof(OCSP_CERTSTATUS
, value
.revoked
),
611 .field_name
= "value.revoked",
612 .item
= &OCSP_REVOKEDINFO_it
,
615 .flags
= ASN1_TFLG_IMPLICIT
,
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
),
629 .size
= sizeof(OCSP_CERTSTATUS
),
630 .sname
= "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
);
648 OCSP_CERTSTATUS_new(void)
650 return (OCSP_CERTSTATUS
*)ASN1_item_new(&OCSP_CERTSTATUS_it
);
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
[] = {
663 .offset
= offsetof(OCSP_SINGLERESP
, certId
),
664 .field_name
= "certId",
665 .item
= &OCSP_CERTID_it
,
670 .offset
= offsetof(OCSP_SINGLERESP
, certStatus
),
671 .field_name
= "certStatus",
672 .item
= &OCSP_CERTSTATUS_it
,
677 .offset
= offsetof(OCSP_SINGLERESP
, thisUpdate
),
678 .field_name
= "thisUpdate",
679 .item
= &ASN1_GENERALIZEDTIME_it
,
682 .flags
= ASN1_TFLG_EXPLICIT
| ASN1_TFLG_OPTIONAL
,
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
,
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
),
703 .size
= sizeof(OCSP_SINGLERESP
),
704 .sname
= "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
);
722 OCSP_SINGLERESP_new(void)
724 return (OCSP_SINGLERESP
*)ASN1_item_new(&OCSP_SINGLERESP_it
);
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
,
737 .offset
= offsetof(OCSP_RESPDATA
, version
),
738 .field_name
= "version",
739 .item
= &ASN1_INTEGER_it
,
744 .offset
= offsetof(OCSP_RESPDATA
, responderId
),
745 .field_name
= "responderId",
746 .item
= &OCSP_RESPID_it
,
751 .offset
= offsetof(OCSP_RESPDATA
, producedAt
),
752 .field_name
= "producedAt",
753 .item
= &ASN1_GENERALIZEDTIME_it
,
756 .flags
= ASN1_TFLG_SEQUENCE_OF
,
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
,
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
),
777 .size
= sizeof(OCSP_RESPDATA
),
778 .sname
= "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
,
790 i2d_OCSP_RESPDATA(OCSP_RESPDATA
*a
, unsigned char **out
)
792 return ASN1_item_i2d((ASN1_VALUE
*)a
, out
, &OCSP_RESPDATA_it
);
796 OCSP_RESPDATA_new(void)
798 return (OCSP_RESPDATA
*)ASN1_item_new(&OCSP_RESPDATA_it
);
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
[] = {
811 .offset
= offsetof(OCSP_BASICRESP
, tbsResponseData
),
812 .field_name
= "tbsResponseData",
813 .item
= &OCSP_RESPDATA_it
,
818 .offset
= offsetof(OCSP_BASICRESP
, signatureAlgorithm
),
819 .field_name
= "signatureAlgorithm",
820 .item
= &X509_ALGOR_it
,
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
,
832 .offset
= offsetof(OCSP_BASICRESP
, certs
),
833 .field_name
= "certs",
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
),
844 .size
= sizeof(OCSP_BASICRESP
),
845 .sname
= "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
,
857 i2d_OCSP_BASICRESP(OCSP_BASICRESP
*a
, unsigned char **out
)
859 return ASN1_item_i2d((ASN1_VALUE
*)a
, out
, &OCSP_BASICRESP_it
);
863 OCSP_BASICRESP_new(void)
865 return (OCSP_BASICRESP
*)ASN1_item_new(&OCSP_BASICRESP_it
);
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
,
878 .offset
= offsetof(OCSP_CRLID
, crlUrl
),
879 .field_name
= "crlUrl",
880 .item
= &ASN1_IA5STRING_it
,
883 .flags
= ASN1_TFLG_EXPLICIT
| ASN1_TFLG_OPTIONAL
,
885 .offset
= offsetof(OCSP_CRLID
, crlNum
),
886 .field_name
= "crlNum",
887 .item
= &ASN1_INTEGER_it
,
890 .flags
= ASN1_TFLG_EXPLICIT
| ASN1_TFLG_OPTIONAL
,
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
),
904 .size
= sizeof(OCSP_CRLID
),
905 .sname
= "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
,
917 i2d_OCSP_CRLID(OCSP_CRLID
*a
, unsigned char **out
)
919 return ASN1_item_i2d((ASN1_VALUE
*)a
, out
, &OCSP_CRLID_it
);
925 return (OCSP_CRLID
*)ASN1_item_new(&OCSP_CRLID_it
);
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
[] = {
938 .offset
= offsetof(OCSP_SERVICELOC
, issuer
),
939 .field_name
= "issuer",
940 .item
= &X509_NAME_it
,
943 .flags
= ASN1_TFLG_SEQUENCE_OF
| ASN1_TFLG_OPTIONAL
,
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
),
957 .size
= sizeof(OCSP_SERVICELOC
),
958 .sname
= "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
);
976 OCSP_SERVICELOC_new(void)
978 return (OCSP_SERVICELOC
*)ASN1_item_new(&OCSP_SERVICELOC_it
);
982 OCSP_SERVICELOC_free(OCSP_SERVICELOC
*a
)
984 ASN1_item_free((ASN1_VALUE
*)a
, &OCSP_SERVICELOC_it
);