summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/libcrypto/krb5/krb5_asn.c411
-rw-r--r--src/lib/libcrypto/ocsp/ocsp_asn.c572
-rw-r--r--src/lib/libssl/src/crypto/krb5/krb5_asn.c411
-rw-r--r--src/lib/libssl/src/crypto/ocsp/ocsp_asn.c572
4 files changed, 1694 insertions, 272 deletions
diff --git a/src/lib/libcrypto/krb5/krb5_asn.c b/src/lib/libcrypto/krb5/krb5_asn.c
index 1a95e62935..4713fce37b 100644
--- a/src/lib/libcrypto/krb5/krb5_asn.c
+++ b/src/lib/libcrypto/krb5/krb5_asn.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: krb5_asn.c,v 1.3 2015/02/09 16:04:46 jsing Exp $ */ 1/* $OpenBSD: krb5_asn.c,v 1.4 2015/07/25 14:49:45 jsing Exp $ */
2/* Written by Vern Staats <staatsvr@asc.hpc.mil> for the OpenSSL project, 2/* Written by Vern Staats <staatsvr@asc.hpc.mil> for the OpenSSL project,
3** using ocsp/{*.h,*asn*.c} as a starting point 3** using ocsp/{*.h,*asn*.c} as a starting point
4*/ 4*/
@@ -60,11 +60,39 @@
60#include <openssl/krb5_asn.h> 60#include <openssl/krb5_asn.h>
61 61
62 62
63ASN1_SEQUENCE(KRB5_ENCDATA) = { 63static const ASN1_TEMPLATE KRB5_ENCDATA_seq_tt[] = {
64 ASN1_EXP(KRB5_ENCDATA, etype, ASN1_INTEGER, 0), 64 {
65 ASN1_EXP_OPT(KRB5_ENCDATA, kvno, ASN1_INTEGER, 1), 65 .flags = ASN1_TFLG_EXPLICIT,
66 ASN1_EXP(KRB5_ENCDATA, cipher, ASN1_OCTET_STRING,2) 66 .tag = 0,
67} ASN1_SEQUENCE_END(KRB5_ENCDATA) 67 .offset = offsetof(KRB5_ENCDATA, etype),
68 .field_name = "etype",
69 .item = &ASN1_INTEGER_it,
70 },
71 {
72 .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_OPTIONAL,
73 .tag = 1,
74 .offset = offsetof(KRB5_ENCDATA, kvno),
75 .field_name = "kvno",
76 .item = &ASN1_INTEGER_it,
77 },
78 {
79 .flags = ASN1_TFLG_EXPLICIT,
80 .tag = 2,
81 .offset = offsetof(KRB5_ENCDATA, cipher),
82 .field_name = "cipher",
83 .item = &ASN1_OCTET_STRING_it,
84 },
85};
86
87const ASN1_ITEM KRB5_ENCDATA_it = {
88 .itype = ASN1_ITYPE_SEQUENCE,
89 .utype = V_ASN1_SEQUENCE,
90 .templates = KRB5_ENCDATA_seq_tt,
91 .tcount = sizeof(KRB5_ENCDATA_seq_tt) / sizeof(ASN1_TEMPLATE),
92 .funcs = NULL,
93 .size = sizeof(KRB5_ENCDATA),
94 .sname = "KRB5_ENCDATA",
95};
68 96
69 97
70KRB5_ENCDATA * 98KRB5_ENCDATA *
@@ -93,10 +121,32 @@ KRB5_ENCDATA_free(KRB5_ENCDATA *a)
93} 121}
94 122
95 123
96ASN1_SEQUENCE(KRB5_PRINCNAME) = { 124static const ASN1_TEMPLATE KRB5_PRINCNAME_seq_tt[] = {
97 ASN1_EXP(KRB5_PRINCNAME, nametype, ASN1_INTEGER, 0), 125 {
98 ASN1_EXP_SEQUENCE_OF(KRB5_PRINCNAME, namestring, ASN1_GENERALSTRING, 1) 126 .flags = ASN1_TFLG_EXPLICIT,
99} ASN1_SEQUENCE_END(KRB5_PRINCNAME) 127 .tag = 0,
128 .offset = offsetof(KRB5_PRINCNAME, nametype),
129 .field_name = "nametype",
130 .item = &ASN1_INTEGER_it,
131 },
132 {
133 .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_SEQUENCE_OF,
134 .tag = 1,
135 .offset = offsetof(KRB5_PRINCNAME, namestring),
136 .field_name = "namestring",
137 .item = &ASN1_GENERALSTRING_it,
138 },
139};
140
141const ASN1_ITEM KRB5_PRINCNAME_it = {
142 .itype = ASN1_ITYPE_SEQUENCE,
143 .utype = V_ASN1_SEQUENCE,
144 .templates = KRB5_PRINCNAME_seq_tt,
145 .tcount = sizeof(KRB5_PRINCNAME_seq_tt) / sizeof(ASN1_TEMPLATE),
146 .funcs = NULL,
147 .size = sizeof(KRB5_PRINCNAME),
148 .sname = "KRB5_PRINCNAME",
149};
100 150
101 151
102KRB5_PRINCNAME * 152KRB5_PRINCNAME *
@@ -126,12 +176,46 @@ KRB5_PRINCNAME_free(KRB5_PRINCNAME *a)
126 176
127 177
128/* [APPLICATION 1] = 0x61 */ 178/* [APPLICATION 1] = 0x61 */
129ASN1_SEQUENCE(KRB5_TKTBODY) = { 179static const ASN1_TEMPLATE KRB5_TKTBODY_seq_tt[] = {
130 ASN1_EXP(KRB5_TKTBODY, tktvno, ASN1_INTEGER, 0), 180 {
131 ASN1_EXP(KRB5_TKTBODY, realm, ASN1_GENERALSTRING, 1), 181 .flags = ASN1_TFLG_EXPLICIT,
132 ASN1_EXP(KRB5_TKTBODY, sname, KRB5_PRINCNAME, 2), 182 .tag = 0,
133 ASN1_EXP(KRB5_TKTBODY, encdata, KRB5_ENCDATA, 3) 183 .offset = offsetof(KRB5_TKTBODY, tktvno),
134} ASN1_SEQUENCE_END(KRB5_TKTBODY) 184 .field_name = "tktvno",
185 .item = &ASN1_INTEGER_it,
186 },
187 {
188 .flags = ASN1_TFLG_EXPLICIT,
189 .tag = 1,
190 .offset = offsetof(KRB5_TKTBODY, realm),
191 .field_name = "realm",
192 .item = &ASN1_GENERALSTRING_it,
193 },
194 {
195 .flags = ASN1_TFLG_EXPLICIT,
196 .tag = 2,
197 .offset = offsetof(KRB5_TKTBODY, sname),
198 .field_name = "sname",
199 .item = &KRB5_PRINCNAME_it,
200 },
201 {
202 .flags = ASN1_TFLG_EXPLICIT,
203 .tag = 3,
204 .offset = offsetof(KRB5_TKTBODY, encdata),
205 .field_name = "encdata",
206 .item = &KRB5_ENCDATA_it,
207 },
208};
209
210const ASN1_ITEM KRB5_TKTBODY_it = {
211 .itype = ASN1_ITYPE_SEQUENCE,
212 .utype = V_ASN1_SEQUENCE,
213 .templates = KRB5_TKTBODY_seq_tt,
214 .tcount = sizeof(KRB5_TKTBODY_seq_tt) / sizeof(ASN1_TEMPLATE),
215 .funcs = NULL,
216 .size = sizeof(KRB5_TKTBODY),
217 .sname = "KRB5_TKTBODY",
218};
135 219
136 220
137KRB5_TKTBODY * 221KRB5_TKTBODY *
@@ -160,10 +244,23 @@ KRB5_TKTBODY_free(KRB5_TKTBODY *a)
160} 244}
161 245
162 246
163ASN1_ITEM_TEMPLATE(KRB5_TICKET) = 247static const ASN1_TEMPLATE KRB5_TICKET_item_tt = {
164 ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_EXPTAG|ASN1_TFLG_APPLICATION, 1, 248 .flags = ASN1_TFLG_EXPTAG | ASN1_TFLG_APPLICATION,
165 KRB5_TICKET, KRB5_TKTBODY) 249 .tag = 1,
166ASN1_ITEM_TEMPLATE_END(KRB5_TICKET) 250 .offset = 0,
251 .field_name = "KRB5_TICKET",
252 .item = &KRB5_TKTBODY_it,
253};
254
255const ASN1_ITEM KRB5_TICKET_it = {
256 .itype = ASN1_ITYPE_PRIMITIVE,
257 .utype = -1,
258 .templates = &KRB5_TICKET_item_tt,
259 .tcount = 0,
260 .funcs = NULL,
261 .size = 0,
262 .sname = "KRB5_TICKET",
263};
167 264
168 265
169KRB5_TICKET * 266KRB5_TICKET *
@@ -193,13 +290,53 @@ KRB5_TICKET_free(KRB5_TICKET *a)
193 290
194 291
195/* [APPLICATION 14] = 0x6e */ 292/* [APPLICATION 14] = 0x6e */
196ASN1_SEQUENCE(KRB5_APREQBODY) = { 293static const ASN1_TEMPLATE KRB5_APREQBODY_seq_tt[] = {
197 ASN1_EXP(KRB5_APREQBODY, pvno, ASN1_INTEGER, 0), 294 {
198 ASN1_EXP(KRB5_APREQBODY, msgtype, ASN1_INTEGER, 1), 295 .flags = ASN1_TFLG_EXPLICIT,
199 ASN1_EXP(KRB5_APREQBODY, apoptions, ASN1_BIT_STRING, 2), 296 .tag = 0,
200 ASN1_EXP(KRB5_APREQBODY, ticket, KRB5_TICKET, 3), 297 .offset = offsetof(KRB5_APREQBODY, pvno),
201 ASN1_EXP(KRB5_APREQBODY, authenticator, KRB5_ENCDATA, 4), 298 .field_name = "pvno",
202} ASN1_SEQUENCE_END(KRB5_APREQBODY) 299 .item = &ASN1_INTEGER_it,
300 },
301 {
302 .flags = ASN1_TFLG_EXPLICIT,
303 .tag = 1,
304 .offset = offsetof(KRB5_APREQBODY, msgtype),
305 .field_name = "msgtype",
306 .item = &ASN1_INTEGER_it,
307 },
308 {
309 .flags = ASN1_TFLG_EXPLICIT,
310 .tag = 2,
311 .offset = offsetof(KRB5_APREQBODY, apoptions),
312 .field_name = "apoptions",
313 .item = &ASN1_BIT_STRING_it,
314 },
315 {
316 .flags = ASN1_TFLG_EXPLICIT,
317 .tag = 3,
318 .offset = offsetof(KRB5_APREQBODY, ticket),
319 .field_name = "ticket",
320 .item = &KRB5_TICKET_it,
321 },
322 {
323 .flags = ASN1_TFLG_EXPLICIT,
324 .tag = 4,
325 .offset = offsetof(KRB5_APREQBODY, authenticator),
326 .field_name = "authenticator",
327 .item = &KRB5_ENCDATA_it,
328 },
329};
330
331const ASN1_ITEM KRB5_APREQBODY_it = {
332 .itype = ASN1_ITYPE_SEQUENCE,
333 .utype = V_ASN1_SEQUENCE,
334 .templates = KRB5_APREQBODY_seq_tt,
335 .tcount = sizeof(KRB5_APREQBODY_seq_tt) / sizeof(ASN1_TEMPLATE),
336 .funcs = NULL,
337 .size = sizeof(KRB5_APREQBODY),
338 .sname = "KRB5_APREQBODY",
339};
203 340
204 341
205KRB5_APREQBODY * 342KRB5_APREQBODY *
@@ -227,10 +364,23 @@ KRB5_APREQBODY_free(KRB5_APREQBODY *a)
227 ASN1_item_free((ASN1_VALUE *)a, &KRB5_APREQBODY_it); 364 ASN1_item_free((ASN1_VALUE *)a, &KRB5_APREQBODY_it);
228} 365}
229 366
230ASN1_ITEM_TEMPLATE(KRB5_APREQ) = 367static const ASN1_TEMPLATE KRB5_APREQ_item_tt = {
231 ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_EXPTAG|ASN1_TFLG_APPLICATION, 14, 368 .flags = ASN1_TFLG_EXPTAG | ASN1_TFLG_APPLICATION,
232 KRB5_APREQ, KRB5_APREQBODY) 369 .tag = 14,
233ASN1_ITEM_TEMPLATE_END(KRB5_APREQ) 370 .offset = 0,
371 .field_name = "KRB5_APREQ",
372 .item = &KRB5_APREQBODY_it,
373};
374
375const ASN1_ITEM KRB5_APREQ_it = {
376 .itype = ASN1_ITYPE_PRIMITIVE,
377 .utype = -1,
378 .templates = &KRB5_APREQ_item_tt,
379 .tcount = 0,
380 .funcs = NULL,
381 .size = 0,
382 .sname = "KRB5_APREQ",
383};
234 384
235 385
236KRB5_APREQ * 386KRB5_APREQ *
@@ -261,10 +411,32 @@ KRB5_APREQ_free(KRB5_APREQ *a)
261 411
262/* Authenticator stuff */ 412/* Authenticator stuff */
263 413
264ASN1_SEQUENCE(KRB5_CHECKSUM) = { 414static const ASN1_TEMPLATE KRB5_CHECKSUM_seq_tt[] = {
265 ASN1_EXP(KRB5_CHECKSUM, ctype, ASN1_INTEGER, 0), 415 {
266 ASN1_EXP(KRB5_CHECKSUM, checksum, ASN1_OCTET_STRING,1) 416 .flags = ASN1_TFLG_EXPLICIT,
267} ASN1_SEQUENCE_END(KRB5_CHECKSUM) 417 .tag = 0,
418 .offset = offsetof(KRB5_CHECKSUM, ctype),
419 .field_name = "ctype",
420 .item = &ASN1_INTEGER_it,
421 },
422 {
423 .flags = ASN1_TFLG_EXPLICIT,
424 .tag = 1,
425 .offset = offsetof(KRB5_CHECKSUM, checksum),
426 .field_name = "checksum",
427 .item = &ASN1_OCTET_STRING_it,
428 },
429};
430
431const ASN1_ITEM KRB5_CHECKSUM_it = {
432 .itype = ASN1_ITYPE_SEQUENCE,
433 .utype = V_ASN1_SEQUENCE,
434 .templates = KRB5_CHECKSUM_seq_tt,
435 .tcount = sizeof(KRB5_CHECKSUM_seq_tt) / sizeof(ASN1_TEMPLATE),
436 .funcs = NULL,
437 .size = sizeof(KRB5_CHECKSUM),
438 .sname = "KRB5_CHECKSUM",
439};
268 440
269 441
270KRB5_CHECKSUM * 442KRB5_CHECKSUM *
@@ -293,10 +465,32 @@ KRB5_CHECKSUM_free(KRB5_CHECKSUM *a)
293} 465}
294 466
295 467
296ASN1_SEQUENCE(KRB5_ENCKEY) = { 468static const ASN1_TEMPLATE KRB5_ENCKEY_seq_tt[] = {
297 ASN1_EXP(KRB5_ENCKEY, ktype, ASN1_INTEGER, 0), 469 {
298 ASN1_EXP(KRB5_ENCKEY, keyvalue, ASN1_OCTET_STRING,1) 470 .flags = ASN1_TFLG_EXPLICIT,
299} ASN1_SEQUENCE_END(KRB5_ENCKEY) 471 .tag = 0,
472 .offset = offsetof(KRB5_ENCKEY, ktype),
473 .field_name = "ktype",
474 .item = &ASN1_INTEGER_it,
475 },
476 {
477 .flags = ASN1_TFLG_EXPLICIT,
478 .tag = 1,
479 .offset = offsetof(KRB5_ENCKEY, keyvalue),
480 .field_name = "keyvalue",
481 .item = &ASN1_OCTET_STRING_it,
482 },
483};
484
485const ASN1_ITEM KRB5_ENCKEY_it = {
486 .itype = ASN1_ITYPE_SEQUENCE,
487 .utype = V_ASN1_SEQUENCE,
488 .templates = KRB5_ENCKEY_seq_tt,
489 .tcount = sizeof(KRB5_ENCKEY_seq_tt) / sizeof(ASN1_TEMPLATE),
490 .funcs = NULL,
491 .size = sizeof(KRB5_ENCKEY),
492 .sname = "KRB5_ENCKEY",
493};
300 494
301 495
302KRB5_ENCKEY * 496KRB5_ENCKEY *
@@ -326,10 +520,32 @@ KRB5_ENCKEY_free(KRB5_ENCKEY *a)
326 520
327 521
328/* SEQ OF SEQ; see ASN1_EXP_SEQUENCE_OF_OPT() below */ 522/* SEQ OF SEQ; see ASN1_EXP_SEQUENCE_OF_OPT() below */
329ASN1_SEQUENCE(KRB5_AUTHDATA) = { 523static const ASN1_TEMPLATE KRB5_AUTHDATA_seq_tt[] = {
330 ASN1_EXP(KRB5_AUTHDATA, adtype, ASN1_INTEGER, 0), 524 {
331 ASN1_EXP(KRB5_AUTHDATA, addata, ASN1_OCTET_STRING,1) 525 .flags = ASN1_TFLG_EXPLICIT,
332} ASN1_SEQUENCE_END(KRB5_AUTHDATA) 526 .tag = 0,
527 .offset = offsetof(KRB5_AUTHDATA, adtype),
528 .field_name = "adtype",
529 .item = &ASN1_INTEGER_it,
530 },
531 {
532 .flags = ASN1_TFLG_EXPLICIT,
533 .tag = 1,
534 .offset = offsetof(KRB5_AUTHDATA, addata),
535 .field_name = "addata",
536 .item = &ASN1_OCTET_STRING_it,
537 },
538};
539
540const ASN1_ITEM KRB5_AUTHDATA_it = {
541 .itype = ASN1_ITYPE_SEQUENCE,
542 .utype = V_ASN1_SEQUENCE,
543 .templates = KRB5_AUTHDATA_seq_tt,
544 .tcount = sizeof(KRB5_AUTHDATA_seq_tt) / sizeof(ASN1_TEMPLATE),
545 .funcs = NULL,
546 .size = sizeof(KRB5_AUTHDATA),
547 .sname = "KRB5_AUTHDATA",
548};
333 549
334 550
335KRB5_AUTHDATA * 551KRB5_AUTHDATA *
@@ -359,18 +575,81 @@ KRB5_AUTHDATA_free(KRB5_AUTHDATA *a)
359 575
360 576
361/* [APPLICATION 2] = 0x62 */ 577/* [APPLICATION 2] = 0x62 */
362ASN1_SEQUENCE(KRB5_AUTHENTBODY) = { 578static const ASN1_TEMPLATE KRB5_AUTHENTBODY_seq_tt[] = {
363 ASN1_EXP(KRB5_AUTHENTBODY, avno, ASN1_INTEGER, 0), 579 {
364 ASN1_EXP(KRB5_AUTHENTBODY, crealm, ASN1_GENERALSTRING, 1), 580 .flags = ASN1_TFLG_EXPLICIT,
365 ASN1_EXP(KRB5_AUTHENTBODY, cname, KRB5_PRINCNAME, 2), 581 .tag = 0,
366 ASN1_EXP_OPT(KRB5_AUTHENTBODY, cksum, KRB5_CHECKSUM, 3), 582 .offset = offsetof(KRB5_AUTHENTBODY, avno),
367 ASN1_EXP(KRB5_AUTHENTBODY, cusec, ASN1_INTEGER, 4), 583 .field_name = "avno",
368 ASN1_EXP(KRB5_AUTHENTBODY, ctime, ASN1_GENERALIZEDTIME, 5), 584 .item = &ASN1_INTEGER_it,
369 ASN1_EXP_OPT(KRB5_AUTHENTBODY, subkey, KRB5_ENCKEY, 6), 585 },
370 ASN1_EXP_OPT(KRB5_AUTHENTBODY, seqnum, ASN1_INTEGER, 7), 586 {
371 ASN1_EXP_SEQUENCE_OF_OPT 587 .flags = ASN1_TFLG_EXPLICIT,
372 (KRB5_AUTHENTBODY, authorization, KRB5_AUTHDATA, 8), 588 .tag = 1,
373} ASN1_SEQUENCE_END(KRB5_AUTHENTBODY) 589 .offset = offsetof(KRB5_AUTHENTBODY, crealm),
590 .field_name = "crealm",
591 .item = &ASN1_GENERALSTRING_it,
592 },
593 {
594 .flags = ASN1_TFLG_EXPLICIT,
595 .tag = 2,
596 .offset = offsetof(KRB5_AUTHENTBODY, cname),
597 .field_name = "cname",
598 .item = &KRB5_PRINCNAME_it,
599 },
600 {
601 .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_OPTIONAL,
602 .tag = 3,
603 .offset = offsetof(KRB5_AUTHENTBODY, cksum),
604 .field_name = "cksum",
605 .item = &KRB5_CHECKSUM_it,
606 },
607 {
608 .flags = ASN1_TFLG_EXPLICIT,
609 .tag = 4,
610 .offset = offsetof(KRB5_AUTHENTBODY, cusec),
611 .field_name = "cusec",
612 .item = &ASN1_INTEGER_it,
613 },
614 {
615 .flags = ASN1_TFLG_EXPLICIT,
616 .tag = 5,
617 .offset = offsetof(KRB5_AUTHENTBODY, ctime),
618 .field_name = "ctime",
619 .item = &ASN1_GENERALIZEDTIME_it,
620 },
621 {
622 .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_OPTIONAL,
623 .tag = 6,
624 .offset = offsetof(KRB5_AUTHENTBODY, subkey),
625 .field_name = "subkey",
626 .item = &KRB5_ENCKEY_it,
627 },
628 {
629 .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_OPTIONAL,
630 .tag = 7,
631 .offset = offsetof(KRB5_AUTHENTBODY, seqnum),
632 .field_name = "seqnum",
633 .item = &ASN1_INTEGER_it,
634 },
635 {
636 .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_SEQUENCE_OF | ASN1_TFLG_OPTIONAL,
637 .tag = 8,
638 .offset = offsetof(KRB5_AUTHENTBODY, authorization),
639 .field_name = "authorization",
640 .item = &KRB5_AUTHDATA_it,
641 },
642};
643
644const ASN1_ITEM KRB5_AUTHENTBODY_it = {
645 .itype = ASN1_ITYPE_SEQUENCE,
646 .utype = V_ASN1_SEQUENCE,
647 .templates = KRB5_AUTHENTBODY_seq_tt,
648 .tcount = sizeof(KRB5_AUTHENTBODY_seq_tt) / sizeof(ASN1_TEMPLATE),
649 .funcs = NULL,
650 .size = sizeof(KRB5_AUTHENTBODY),
651 .sname = "KRB5_AUTHENTBODY",
652};
374 653
375 654
376KRB5_AUTHENTBODY * 655KRB5_AUTHENTBODY *
@@ -398,10 +677,23 @@ KRB5_AUTHENTBODY_free(KRB5_AUTHENTBODY *a)
398 ASN1_item_free((ASN1_VALUE *)a, &KRB5_AUTHENTBODY_it); 677 ASN1_item_free((ASN1_VALUE *)a, &KRB5_AUTHENTBODY_it);
399} 678}
400 679
401ASN1_ITEM_TEMPLATE(KRB5_AUTHENT) = 680static const ASN1_TEMPLATE KRB5_AUTHENT_item_tt = {
402 ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_EXPTAG|ASN1_TFLG_APPLICATION, 2, 681 .flags = ASN1_TFLG_EXPTAG | ASN1_TFLG_APPLICATION,
403 KRB5_AUTHENT, KRB5_AUTHENTBODY) 682 .tag = 2,
404ASN1_ITEM_TEMPLATE_END(KRB5_AUTHENT) 683 .offset = 0,
684 .field_name = "KRB5_AUTHENT",
685 .item = &KRB5_AUTHENTBODY_it,
686};
687
688const ASN1_ITEM KRB5_AUTHENT_it = {
689 .itype = ASN1_ITYPE_PRIMITIVE,
690 .utype = -1,
691 .templates = &KRB5_AUTHENT_item_tt,
692 .tcount = 0,
693 .funcs = NULL,
694 .size = 0,
695 .sname = "KRB5_AUTHENT",
696};
405 697
406 698
407KRB5_AUTHENT * 699KRB5_AUTHENT *
@@ -428,4 +720,3 @@ KRB5_AUTHENT_free(KRB5_AUTHENT *a)
428{ 720{
429 ASN1_item_free((ASN1_VALUE *)a, &KRB5_AUTHENT_it); 721 ASN1_item_free((ASN1_VALUE *)a, &KRB5_AUTHENT_it);
430} 722}
431
diff --git a/src/lib/libcrypto/ocsp/ocsp_asn.c b/src/lib/libcrypto/ocsp/ocsp_asn.c
index 6ca21af89a..72e7638c75 100644
--- a/src/lib/libcrypto/ocsp/ocsp_asn.c
+++ b/src/lib/libcrypto/ocsp/ocsp_asn.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ocsp_asn.c,v 1.7 2015/02/09 16:04:46 jsing Exp $ */ 1/* $OpenBSD: ocsp_asn.c,v 1.8 2015/07/25 14:52:47 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 */
@@ -59,11 +59,39 @@
59#include <openssl/asn1t.h> 59#include <openssl/asn1t.h>
60#include <openssl/ocsp.h> 60#include <openssl/ocsp.h>
61 61
62ASN1_SEQUENCE(OCSP_SIGNATURE) = { 62static const ASN1_TEMPLATE OCSP_SIGNATURE_seq_tt[] = {
63 ASN1_SIMPLE(OCSP_SIGNATURE, signatureAlgorithm, X509_ALGOR), 63 {
64 ASN1_SIMPLE(OCSP_SIGNATURE, signature, ASN1_BIT_STRING), 64 .flags = 0,
65 ASN1_EXP_SEQUENCE_OF_OPT(OCSP_SIGNATURE, certs, X509, 0) 65 .tag = 0,
66} ASN1_SEQUENCE_END(OCSP_SIGNATURE) 66 .offset = offsetof(OCSP_SIGNATURE, signatureAlgorithm),
67 .field_name = "signatureAlgorithm",
68 .item = &X509_ALGOR_it,
69 },
70 {
71 .flags = 0,
72 .tag = 0,
73 .offset = offsetof(OCSP_SIGNATURE, signature),
74 .field_name = "signature",
75 .item = &ASN1_BIT_STRING_it,
76 },
77 {
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,
83 },
84};
85
86const 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",
94};
67 95
68 96
69OCSP_SIGNATURE * 97OCSP_SIGNATURE *
@@ -91,12 +119,46 @@ OCSP_SIGNATURE_free(OCSP_SIGNATURE *a)
91 ASN1_item_free((ASN1_VALUE *)a, &OCSP_SIGNATURE_it); 119 ASN1_item_free((ASN1_VALUE *)a, &OCSP_SIGNATURE_it);
92} 120}
93 121
94ASN1_SEQUENCE(OCSP_CERTID) = { 122static const ASN1_TEMPLATE OCSP_CERTID_seq_tt[] = {
95 ASN1_SIMPLE(OCSP_CERTID, hashAlgorithm, X509_ALGOR), 123 {
96 ASN1_SIMPLE(OCSP_CERTID, issuerNameHash, ASN1_OCTET_STRING), 124 .flags = 0,
97 ASN1_SIMPLE(OCSP_CERTID, issuerKeyHash, ASN1_OCTET_STRING), 125 .tag = 0,
98 ASN1_SIMPLE(OCSP_CERTID, serialNumber, ASN1_INTEGER) 126 .offset = offsetof(OCSP_CERTID, hashAlgorithm),
99} ASN1_SEQUENCE_END(OCSP_CERTID) 127 .field_name = "hashAlgorithm",
128 .item = &X509_ALGOR_it,
129 },
130 {
131 .flags = 0,
132 .tag = 0,
133 .offset = offsetof(OCSP_CERTID, issuerNameHash),
134 .field_name = "issuerNameHash",
135 .item = &ASN1_OCTET_STRING_it,
136 },
137 {
138 .flags = 0,
139 .tag = 0,
140 .offset = offsetof(OCSP_CERTID, issuerKeyHash),
141 .field_name = "issuerKeyHash",
142 .item = &ASN1_OCTET_STRING_it,
143 },
144 {
145 .flags = 0,
146 .tag = 0,
147 .offset = offsetof(OCSP_CERTID, serialNumber),
148 .field_name = "serialNumber",
149 .item = &ASN1_INTEGER_it,
150 },
151};
152
153const 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",
161};
100 162
101 163
102OCSP_CERTID * 164OCSP_CERTID *
@@ -124,10 +186,32 @@ OCSP_CERTID_free(OCSP_CERTID *a)
124 ASN1_item_free((ASN1_VALUE *)a, &OCSP_CERTID_it); 186 ASN1_item_free((ASN1_VALUE *)a, &OCSP_CERTID_it);
125} 187}
126 188
127ASN1_SEQUENCE(OCSP_ONEREQ) = { 189static const ASN1_TEMPLATE OCSP_ONEREQ_seq_tt[] = {
128 ASN1_SIMPLE(OCSP_ONEREQ, reqCert, OCSP_CERTID), 190 {
129 ASN1_EXP_SEQUENCE_OF_OPT(OCSP_ONEREQ, singleRequestExtensions, X509_EXTENSION, 0) 191 .flags = 0,
130} ASN1_SEQUENCE_END(OCSP_ONEREQ) 192 .tag = 0,
193 .offset = offsetof(OCSP_ONEREQ, reqCert),
194 .field_name = "reqCert",
195 .item = &OCSP_CERTID_it,
196 },
197 {
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,
203 },
204};
205
206const 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",
214};
131 215
132 216
133OCSP_ONEREQ * 217OCSP_ONEREQ *
@@ -155,12 +239,46 @@ OCSP_ONEREQ_free(OCSP_ONEREQ *a)
155 ASN1_item_free((ASN1_VALUE *)a, &OCSP_ONEREQ_it); 239 ASN1_item_free((ASN1_VALUE *)a, &OCSP_ONEREQ_it);
156} 240}
157 241
158ASN1_SEQUENCE(OCSP_REQINFO) = { 242static const ASN1_TEMPLATE OCSP_REQINFO_seq_tt[] = {
159 ASN1_EXP_OPT(OCSP_REQINFO, version, ASN1_INTEGER, 0), 243 {
160 ASN1_EXP_OPT(OCSP_REQINFO, requestorName, GENERAL_NAME, 1), 244 .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_OPTIONAL,
161 ASN1_SEQUENCE_OF(OCSP_REQINFO, requestList, OCSP_ONEREQ), 245 .tag = 0,
162 ASN1_EXP_SEQUENCE_OF_OPT(OCSP_REQINFO, requestExtensions, X509_EXTENSION, 2) 246 .offset = offsetof(OCSP_REQINFO, version),
163} ASN1_SEQUENCE_END(OCSP_REQINFO) 247 .field_name = "version",
248 .item = &ASN1_INTEGER_it,
249 },
250 {
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,
256 },
257 {
258 .flags = ASN1_TFLG_SEQUENCE_OF,
259 .tag = 0,
260 .offset = offsetof(OCSP_REQINFO, requestList),
261 .field_name = "requestList",
262 .item = &OCSP_ONEREQ_it,
263 },
264 {
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,
270 },
271};
272
273const 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",
281};
164 282
165 283
166OCSP_REQINFO * 284OCSP_REQINFO *
@@ -188,10 +306,32 @@ OCSP_REQINFO_free(OCSP_REQINFO *a)
188 ASN1_item_free((ASN1_VALUE *)a, &OCSP_REQINFO_it); 306 ASN1_item_free((ASN1_VALUE *)a, &OCSP_REQINFO_it);
189} 307}
190 308
191ASN1_SEQUENCE(OCSP_REQUEST) = { 309static const ASN1_TEMPLATE OCSP_REQUEST_seq_tt[] = {
192 ASN1_SIMPLE(OCSP_REQUEST, tbsRequest, OCSP_REQINFO), 310 {
193 ASN1_EXP_OPT(OCSP_REQUEST, optionalSignature, OCSP_SIGNATURE, 0) 311 .flags = 0,
194} ASN1_SEQUENCE_END(OCSP_REQUEST) 312 .tag = 0,
313 .offset = offsetof(OCSP_REQUEST, tbsRequest),
314 .field_name = "tbsRequest",
315 .item = &OCSP_REQINFO_it,
316 },
317 {
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,
323 },
324};
325
326const 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",
334};
195 335
196 336
197OCSP_REQUEST * 337OCSP_REQUEST *
@@ -221,10 +361,32 @@ OCSP_REQUEST_free(OCSP_REQUEST *a)
221 361
222/* OCSP_RESPONSE templates */ 362/* OCSP_RESPONSE templates */
223 363
224ASN1_SEQUENCE(OCSP_RESPBYTES) = { 364static const ASN1_TEMPLATE OCSP_RESPBYTES_seq_tt[] = {
225 ASN1_SIMPLE(OCSP_RESPBYTES, responseType, ASN1_OBJECT), 365 {
226 ASN1_SIMPLE(OCSP_RESPBYTES, response, ASN1_OCTET_STRING) 366 .flags = 0,
227} ASN1_SEQUENCE_END(OCSP_RESPBYTES) 367 .tag = 0,
368 .offset = offsetof(OCSP_RESPBYTES, responseType),
369 .field_name = "responseType",
370 .item = &ASN1_OBJECT_it,
371 },
372 {
373 .flags = 0,
374 .tag = 0,
375 .offset = offsetof(OCSP_RESPBYTES, response),
376 .field_name = "response",
377 .item = &ASN1_OCTET_STRING_it,
378 },
379};
380
381const ASN1_ITEM OCSP_RESPBYTES_it = {
382 .itype = ASN1_ITYPE_SEQUENCE,
383 .utype = V_ASN1_SEQUENCE,
384 .templates = OCSP_RESPBYTES_seq_tt,
385 .tcount = sizeof(OCSP_RESPBYTES_seq_tt) / sizeof(ASN1_TEMPLATE),
386 .funcs = NULL,
387 .size = sizeof(OCSP_RESPBYTES),
388 .sname = "OCSP_RESPBYTES",
389};
228 390
229 391
230OCSP_RESPBYTES * 392OCSP_RESPBYTES *
@@ -252,10 +414,32 @@ OCSP_RESPBYTES_free(OCSP_RESPBYTES *a)
252 ASN1_item_free((ASN1_VALUE *)a, &OCSP_RESPBYTES_it); 414 ASN1_item_free((ASN1_VALUE *)a, &OCSP_RESPBYTES_it);
253} 415}
254 416
255ASN1_SEQUENCE(OCSP_RESPONSE) = { 417static const ASN1_TEMPLATE OCSP_RESPONSE_seq_tt[] = {
256 ASN1_SIMPLE(OCSP_RESPONSE, responseStatus, ASN1_ENUMERATED), 418 {
257 ASN1_EXP_OPT(OCSP_RESPONSE, responseBytes, OCSP_RESPBYTES, 0) 419 .flags = 0,
258} ASN1_SEQUENCE_END(OCSP_RESPONSE) 420 .tag = 0,
421 .offset = offsetof(OCSP_RESPONSE, responseStatus),
422 .field_name = "responseStatus",
423 .item = &ASN1_ENUMERATED_it,
424 },
425 {
426 .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_OPTIONAL,
427 .tag = 0,
428 .offset = offsetof(OCSP_RESPONSE, responseBytes),
429 .field_name = "responseBytes",
430 .item = &OCSP_RESPBYTES_it,
431 },
432};
433
434const ASN1_ITEM OCSP_RESPONSE_it = {
435 .itype = ASN1_ITYPE_SEQUENCE,
436 .utype = V_ASN1_SEQUENCE,
437 .templates = OCSP_RESPONSE_seq_tt,
438 .tcount = sizeof(OCSP_RESPONSE_seq_tt) / sizeof(ASN1_TEMPLATE),
439 .funcs = NULL,
440 .size = sizeof(OCSP_RESPONSE),
441 .sname = "OCSP_RESPONSE",
442};
259 443
260 444
261OCSP_RESPONSE * 445OCSP_RESPONSE *
@@ -283,10 +467,32 @@ OCSP_RESPONSE_free(OCSP_RESPONSE *a)
283 ASN1_item_free((ASN1_VALUE *)a, &OCSP_RESPONSE_it); 467 ASN1_item_free((ASN1_VALUE *)a, &OCSP_RESPONSE_it);
284} 468}
285 469
286ASN1_CHOICE(OCSP_RESPID) = { 470static const ASN1_TEMPLATE OCSP_RESPID_ch_tt[] = {
287 ASN1_EXP(OCSP_RESPID, value.byName, X509_NAME, 1), 471 {
288 ASN1_EXP(OCSP_RESPID, value.byKey, ASN1_OCTET_STRING, 2) 472 .flags = ASN1_TFLG_EXPLICIT,
289} ASN1_CHOICE_END(OCSP_RESPID) 473 .tag = 1,
474 .offset = offsetof(OCSP_RESPID, value.byName),
475 .field_name = "value.byName",
476 .item = &X509_NAME_it,
477 },
478 {
479 .flags = ASN1_TFLG_EXPLICIT,
480 .tag = 2,
481 .offset = offsetof(OCSP_RESPID, value.byKey),
482 .field_name = "value.byKey",
483 .item = &ASN1_OCTET_STRING_it,
484 },
485};
486
487const ASN1_ITEM OCSP_RESPID_it = {
488 .itype = ASN1_ITYPE_CHOICE,
489 .utype = offsetof(OCSP_RESPID, type),
490 .templates = OCSP_RESPID_ch_tt,
491 .tcount = sizeof(OCSP_RESPID_ch_tt) / sizeof(ASN1_TEMPLATE),
492 .funcs = NULL,
493 .size = sizeof(OCSP_RESPID),
494 .sname = "OCSP_RESPID",
495};
290 496
291 497
292OCSP_RESPID * 498OCSP_RESPID *
@@ -314,10 +520,32 @@ OCSP_RESPID_free(OCSP_RESPID *a)
314 ASN1_item_free((ASN1_VALUE *)a, &OCSP_RESPID_it); 520 ASN1_item_free((ASN1_VALUE *)a, &OCSP_RESPID_it);
315} 521}
316 522
317ASN1_SEQUENCE(OCSP_REVOKEDINFO) = { 523static const ASN1_TEMPLATE OCSP_REVOKEDINFO_seq_tt[] = {
318 ASN1_SIMPLE(OCSP_REVOKEDINFO, revocationTime, ASN1_GENERALIZEDTIME), 524 {
319 ASN1_EXP_OPT(OCSP_REVOKEDINFO, revocationReason, ASN1_ENUMERATED, 0) 525 .flags = 0,
320} ASN1_SEQUENCE_END(OCSP_REVOKEDINFO) 526 .tag = 0,
527 .offset = offsetof(OCSP_REVOKEDINFO, revocationTime),
528 .field_name = "revocationTime",
529 .item = &ASN1_GENERALIZEDTIME_it,
530 },
531 {
532 .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_OPTIONAL,
533 .tag = 0,
534 .offset = offsetof(OCSP_REVOKEDINFO, revocationReason),
535 .field_name = "revocationReason",
536 .item = &ASN1_ENUMERATED_it,
537 },
538};
539
540const ASN1_ITEM OCSP_REVOKEDINFO_it = {
541 .itype = ASN1_ITYPE_SEQUENCE,
542 .utype = V_ASN1_SEQUENCE,
543 .templates = OCSP_REVOKEDINFO_seq_tt,
544 .tcount = sizeof(OCSP_REVOKEDINFO_seq_tt) / sizeof(ASN1_TEMPLATE),
545 .funcs = NULL,
546 .size = sizeof(OCSP_REVOKEDINFO),
547 .sname = "OCSP_REVOKEDINFO",
548};
321 549
322 550
323OCSP_REVOKEDINFO * 551OCSP_REVOKEDINFO *
@@ -345,11 +573,39 @@ OCSP_REVOKEDINFO_free(OCSP_REVOKEDINFO *a)
345 ASN1_item_free((ASN1_VALUE *)a, &OCSP_REVOKEDINFO_it); 573 ASN1_item_free((ASN1_VALUE *)a, &OCSP_REVOKEDINFO_it);
346} 574}
347 575
348ASN1_CHOICE(OCSP_CERTSTATUS) = { 576static const ASN1_TEMPLATE OCSP_CERTSTATUS_ch_tt[] = {
349 ASN1_IMP(OCSP_CERTSTATUS, value.good, ASN1_NULL, 0), 577 {
350 ASN1_IMP(OCSP_CERTSTATUS, value.revoked, OCSP_REVOKEDINFO, 1), 578 .flags = ASN1_TFLG_IMPLICIT,
351 ASN1_IMP(OCSP_CERTSTATUS, value.unknown, ASN1_NULL, 2) 579 .tag = 0,
352} ASN1_CHOICE_END(OCSP_CERTSTATUS) 580 .offset = offsetof(OCSP_CERTSTATUS, value.good),
581 .field_name = "value.good",
582 .item = &ASN1_NULL_it,
583 },
584 {
585 .flags = ASN1_TFLG_IMPLICIT,
586 .tag = 1,
587 .offset = offsetof(OCSP_CERTSTATUS, value.revoked),
588 .field_name = "value.revoked",
589 .item = &OCSP_REVOKEDINFO_it,
590 },
591 {
592 .flags = ASN1_TFLG_IMPLICIT,
593 .tag = 2,
594 .offset = offsetof(OCSP_CERTSTATUS, value.unknown),
595 .field_name = "value.unknown",
596 .item = &ASN1_NULL_it,
597 },
598};
599
600const ASN1_ITEM OCSP_CERTSTATUS_it = {
601 .itype = ASN1_ITYPE_CHOICE,
602 .utype = offsetof(OCSP_CERTSTATUS, type),
603 .templates = OCSP_CERTSTATUS_ch_tt,
604 .tcount = sizeof(OCSP_CERTSTATUS_ch_tt) / sizeof(ASN1_TEMPLATE),
605 .funcs = NULL,
606 .size = sizeof(OCSP_CERTSTATUS),
607 .sname = "OCSP_CERTSTATUS",
608};
353 609
354 610
355OCSP_CERTSTATUS * 611OCSP_CERTSTATUS *
@@ -377,13 +633,53 @@ OCSP_CERTSTATUS_free(OCSP_CERTSTATUS *a)
377 ASN1_item_free((ASN1_VALUE *)a, &OCSP_CERTSTATUS_it); 633 ASN1_item_free((ASN1_VALUE *)a, &OCSP_CERTSTATUS_it);
378} 634}
379 635
380ASN1_SEQUENCE(OCSP_SINGLERESP) = { 636static const ASN1_TEMPLATE OCSP_SINGLERESP_seq_tt[] = {
381 ASN1_SIMPLE(OCSP_SINGLERESP, certId, OCSP_CERTID), 637 {
382 ASN1_SIMPLE(OCSP_SINGLERESP, certStatus, OCSP_CERTSTATUS), 638 .flags = 0,
383 ASN1_SIMPLE(OCSP_SINGLERESP, thisUpdate, ASN1_GENERALIZEDTIME), 639 .tag = 0,
384 ASN1_EXP_OPT(OCSP_SINGLERESP, nextUpdate, ASN1_GENERALIZEDTIME, 0), 640 .offset = offsetof(OCSP_SINGLERESP, certId),
385 ASN1_EXP_SEQUENCE_OF_OPT(OCSP_SINGLERESP, singleExtensions, X509_EXTENSION, 1) 641 .field_name = "certId",
386} ASN1_SEQUENCE_END(OCSP_SINGLERESP) 642 .item = &OCSP_CERTID_it,
643 },
644 {
645 .flags = 0,
646 .tag = 0,
647 .offset = offsetof(OCSP_SINGLERESP, certStatus),
648 .field_name = "certStatus",
649 .item = &OCSP_CERTSTATUS_it,
650 },
651 {
652 .flags = 0,
653 .tag = 0,
654 .offset = offsetof(OCSP_SINGLERESP, thisUpdate),
655 .field_name = "thisUpdate",
656 .item = &ASN1_GENERALIZEDTIME_it,
657 },
658 {
659 .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_OPTIONAL,
660 .tag = 0,
661 .offset = offsetof(OCSP_SINGLERESP, nextUpdate),
662 .field_name = "nextUpdate",
663 .item = &ASN1_GENERALIZEDTIME_it,
664 },
665 {
666 .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_SEQUENCE_OF | ASN1_TFLG_OPTIONAL,
667 .tag = 1,
668 .offset = offsetof(OCSP_SINGLERESP, singleExtensions),
669 .field_name = "singleExtensions",
670 .item = &X509_EXTENSION_it,
671 },
672};
673
674const ASN1_ITEM OCSP_SINGLERESP_it = {
675 .itype = ASN1_ITYPE_SEQUENCE,
676 .utype = V_ASN1_SEQUENCE,
677 .templates = OCSP_SINGLERESP_seq_tt,
678 .tcount = sizeof(OCSP_SINGLERESP_seq_tt) / sizeof(ASN1_TEMPLATE),
679 .funcs = NULL,
680 .size = sizeof(OCSP_SINGLERESP),
681 .sname = "OCSP_SINGLERESP",
682};
387 683
388 684
389OCSP_SINGLERESP * 685OCSP_SINGLERESP *
@@ -411,13 +707,53 @@ OCSP_SINGLERESP_free(OCSP_SINGLERESP *a)
411 ASN1_item_free((ASN1_VALUE *)a, &OCSP_SINGLERESP_it); 707 ASN1_item_free((ASN1_VALUE *)a, &OCSP_SINGLERESP_it);
412} 708}
413 709
414ASN1_SEQUENCE(OCSP_RESPDATA) = { 710static const ASN1_TEMPLATE OCSP_RESPDATA_seq_tt[] = {
415 ASN1_EXP_OPT(OCSP_RESPDATA, version, ASN1_INTEGER, 0), 711 {
416 ASN1_SIMPLE(OCSP_RESPDATA, responderId, OCSP_RESPID), 712 .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_OPTIONAL,
417 ASN1_SIMPLE(OCSP_RESPDATA, producedAt, ASN1_GENERALIZEDTIME), 713 .tag = 0,
418 ASN1_SEQUENCE_OF(OCSP_RESPDATA, responses, OCSP_SINGLERESP), 714 .offset = offsetof(OCSP_RESPDATA, version),
419 ASN1_EXP_SEQUENCE_OF_OPT(OCSP_RESPDATA, responseExtensions, X509_EXTENSION, 1) 715 .field_name = "version",
420} ASN1_SEQUENCE_END(OCSP_RESPDATA) 716 .item = &ASN1_INTEGER_it,
717 },
718 {
719 .flags = 0,
720 .tag = 0,
721 .offset = offsetof(OCSP_RESPDATA, responderId),
722 .field_name = "responderId",
723 .item = &OCSP_RESPID_it,
724 },
725 {
726 .flags = 0,
727 .tag = 0,
728 .offset = offsetof(OCSP_RESPDATA, producedAt),
729 .field_name = "producedAt",
730 .item = &ASN1_GENERALIZEDTIME_it,
731 },
732 {
733 .flags = ASN1_TFLG_SEQUENCE_OF,
734 .tag = 0,
735 .offset = offsetof(OCSP_RESPDATA, responses),
736 .field_name = "responses",
737 .item = &OCSP_SINGLERESP_it,
738 },
739 {
740 .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_SEQUENCE_OF | ASN1_TFLG_OPTIONAL,
741 .tag = 1,
742 .offset = offsetof(OCSP_RESPDATA, responseExtensions),
743 .field_name = "responseExtensions",
744 .item = &X509_EXTENSION_it,
745 },
746};
747
748const ASN1_ITEM OCSP_RESPDATA_it = {
749 .itype = ASN1_ITYPE_SEQUENCE,
750 .utype = V_ASN1_SEQUENCE,
751 .templates = OCSP_RESPDATA_seq_tt,
752 .tcount = sizeof(OCSP_RESPDATA_seq_tt) / sizeof(ASN1_TEMPLATE),
753 .funcs = NULL,
754 .size = sizeof(OCSP_RESPDATA),
755 .sname = "OCSP_RESPDATA",
756};
421 757
422 758
423OCSP_RESPDATA * 759OCSP_RESPDATA *
@@ -445,12 +781,46 @@ OCSP_RESPDATA_free(OCSP_RESPDATA *a)
445 ASN1_item_free((ASN1_VALUE *)a, &OCSP_RESPDATA_it); 781 ASN1_item_free((ASN1_VALUE *)a, &OCSP_RESPDATA_it);
446} 782}
447 783
448ASN1_SEQUENCE(OCSP_BASICRESP) = { 784static const ASN1_TEMPLATE OCSP_BASICRESP_seq_tt[] = {
449 ASN1_SIMPLE(OCSP_BASICRESP, tbsResponseData, OCSP_RESPDATA), 785 {
450 ASN1_SIMPLE(OCSP_BASICRESP, signatureAlgorithm, X509_ALGOR), 786 .flags = 0,
451 ASN1_SIMPLE(OCSP_BASICRESP, signature, ASN1_BIT_STRING), 787 .tag = 0,
452 ASN1_EXP_SEQUENCE_OF_OPT(OCSP_BASICRESP, certs, X509, 0) 788 .offset = offsetof(OCSP_BASICRESP, tbsResponseData),
453} ASN1_SEQUENCE_END(OCSP_BASICRESP) 789 .field_name = "tbsResponseData",
790 .item = &OCSP_RESPDATA_it,
791 },
792 {
793 .flags = 0,
794 .tag = 0,
795 .offset = offsetof(OCSP_BASICRESP, signatureAlgorithm),
796 .field_name = "signatureAlgorithm",
797 .item = &X509_ALGOR_it,
798 },
799 {
800 .flags = 0,
801 .tag = 0,
802 .offset = offsetof(OCSP_BASICRESP, signature),
803 .field_name = "signature",
804 .item = &ASN1_BIT_STRING_it,
805 },
806 {
807 .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_SEQUENCE_OF | ASN1_TFLG_OPTIONAL,
808 .tag = 0,
809 .offset = offsetof(OCSP_BASICRESP, certs),
810 .field_name = "certs",
811 .item = &X509_it,
812 },
813};
814
815const ASN1_ITEM OCSP_BASICRESP_it = {
816 .itype = ASN1_ITYPE_SEQUENCE,
817 .utype = V_ASN1_SEQUENCE,
818 .templates = OCSP_BASICRESP_seq_tt,
819 .tcount = sizeof(OCSP_BASICRESP_seq_tt) / sizeof(ASN1_TEMPLATE),
820 .funcs = NULL,
821 .size = sizeof(OCSP_BASICRESP),
822 .sname = "OCSP_BASICRESP",
823};
454 824
455 825
456OCSP_BASICRESP * 826OCSP_BASICRESP *
@@ -478,11 +848,39 @@ OCSP_BASICRESP_free(OCSP_BASICRESP *a)
478 ASN1_item_free((ASN1_VALUE *)a, &OCSP_BASICRESP_it); 848 ASN1_item_free((ASN1_VALUE *)a, &OCSP_BASICRESP_it);
479} 849}
480 850
481ASN1_SEQUENCE(OCSP_CRLID) = { 851static const ASN1_TEMPLATE OCSP_CRLID_seq_tt[] = {
482 ASN1_EXP_OPT(OCSP_CRLID, crlUrl, ASN1_IA5STRING, 0), 852 {
483 ASN1_EXP_OPT(OCSP_CRLID, crlNum, ASN1_INTEGER, 1), 853 .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_OPTIONAL,
484 ASN1_EXP_OPT(OCSP_CRLID, crlTime, ASN1_GENERALIZEDTIME, 2) 854 .tag = 0,
485} ASN1_SEQUENCE_END(OCSP_CRLID) 855 .offset = offsetof(OCSP_CRLID, crlUrl),
856 .field_name = "crlUrl",
857 .item = &ASN1_IA5STRING_it,
858 },
859 {
860 .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_OPTIONAL,
861 .tag = 1,
862 .offset = offsetof(OCSP_CRLID, crlNum),
863 .field_name = "crlNum",
864 .item = &ASN1_INTEGER_it,
865 },
866 {
867 .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_OPTIONAL,
868 .tag = 2,
869 .offset = offsetof(OCSP_CRLID, crlTime),
870 .field_name = "crlTime",
871 .item = &ASN1_GENERALIZEDTIME_it,
872 },
873};
874
875const ASN1_ITEM OCSP_CRLID_it = {
876 .itype = ASN1_ITYPE_SEQUENCE,
877 .utype = V_ASN1_SEQUENCE,
878 .templates = OCSP_CRLID_seq_tt,
879 .tcount = sizeof(OCSP_CRLID_seq_tt) / sizeof(ASN1_TEMPLATE),
880 .funcs = NULL,
881 .size = sizeof(OCSP_CRLID),
882 .sname = "OCSP_CRLID",
883};
486 884
487 885
488OCSP_CRLID * 886OCSP_CRLID *
@@ -510,10 +908,32 @@ OCSP_CRLID_free(OCSP_CRLID *a)
510 ASN1_item_free((ASN1_VALUE *)a, &OCSP_CRLID_it); 908 ASN1_item_free((ASN1_VALUE *)a, &OCSP_CRLID_it);
511} 909}
512 910
513ASN1_SEQUENCE(OCSP_SERVICELOC) = { 911static const ASN1_TEMPLATE OCSP_SERVICELOC_seq_tt[] = {
514 ASN1_SIMPLE(OCSP_SERVICELOC, issuer, X509_NAME), 912 {
515 ASN1_SEQUENCE_OF_OPT(OCSP_SERVICELOC, locator, ACCESS_DESCRIPTION) 913 .flags = 0,
516} ASN1_SEQUENCE_END(OCSP_SERVICELOC) 914 .tag = 0,
915 .offset = offsetof(OCSP_SERVICELOC, issuer),
916 .field_name = "issuer",
917 .item = &X509_NAME_it,
918 },
919 {
920 .flags = ASN1_TFLG_SEQUENCE_OF | ASN1_TFLG_OPTIONAL,
921 .tag = 0,
922 .offset = offsetof(OCSP_SERVICELOC, locator),
923 .field_name = "locator",
924 .item = &ACCESS_DESCRIPTION_it,
925 },
926};
927
928const ASN1_ITEM OCSP_SERVICELOC_it = {
929 .itype = ASN1_ITYPE_SEQUENCE,
930 .utype = V_ASN1_SEQUENCE,
931 .templates = OCSP_SERVICELOC_seq_tt,
932 .tcount = sizeof(OCSP_SERVICELOC_seq_tt) / sizeof(ASN1_TEMPLATE),
933 .funcs = NULL,
934 .size = sizeof(OCSP_SERVICELOC),
935 .sname = "OCSP_SERVICELOC",
936};
517 937
518 938
519OCSP_SERVICELOC * 939OCSP_SERVICELOC *
diff --git a/src/lib/libssl/src/crypto/krb5/krb5_asn.c b/src/lib/libssl/src/crypto/krb5/krb5_asn.c
index 1a95e62935..4713fce37b 100644
--- a/src/lib/libssl/src/crypto/krb5/krb5_asn.c
+++ b/src/lib/libssl/src/crypto/krb5/krb5_asn.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: krb5_asn.c,v 1.3 2015/02/09 16:04:46 jsing Exp $ */ 1/* $OpenBSD: krb5_asn.c,v 1.4 2015/07/25 14:49:45 jsing Exp $ */
2/* Written by Vern Staats <staatsvr@asc.hpc.mil> for the OpenSSL project, 2/* Written by Vern Staats <staatsvr@asc.hpc.mil> for the OpenSSL project,
3** using ocsp/{*.h,*asn*.c} as a starting point 3** using ocsp/{*.h,*asn*.c} as a starting point
4*/ 4*/
@@ -60,11 +60,39 @@
60#include <openssl/krb5_asn.h> 60#include <openssl/krb5_asn.h>
61 61
62 62
63ASN1_SEQUENCE(KRB5_ENCDATA) = { 63static const ASN1_TEMPLATE KRB5_ENCDATA_seq_tt[] = {
64 ASN1_EXP(KRB5_ENCDATA, etype, ASN1_INTEGER, 0), 64 {
65 ASN1_EXP_OPT(KRB5_ENCDATA, kvno, ASN1_INTEGER, 1), 65 .flags = ASN1_TFLG_EXPLICIT,
66 ASN1_EXP(KRB5_ENCDATA, cipher, ASN1_OCTET_STRING,2) 66 .tag = 0,
67} ASN1_SEQUENCE_END(KRB5_ENCDATA) 67 .offset = offsetof(KRB5_ENCDATA, etype),
68 .field_name = "etype",
69 .item = &ASN1_INTEGER_it,
70 },
71 {
72 .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_OPTIONAL,
73 .tag = 1,
74 .offset = offsetof(KRB5_ENCDATA, kvno),
75 .field_name = "kvno",
76 .item = &ASN1_INTEGER_it,
77 },
78 {
79 .flags = ASN1_TFLG_EXPLICIT,
80 .tag = 2,
81 .offset = offsetof(KRB5_ENCDATA, cipher),
82 .field_name = "cipher",
83 .item = &ASN1_OCTET_STRING_it,
84 },
85};
86
87const ASN1_ITEM KRB5_ENCDATA_it = {
88 .itype = ASN1_ITYPE_SEQUENCE,
89 .utype = V_ASN1_SEQUENCE,
90 .templates = KRB5_ENCDATA_seq_tt,
91 .tcount = sizeof(KRB5_ENCDATA_seq_tt) / sizeof(ASN1_TEMPLATE),
92 .funcs = NULL,
93 .size = sizeof(KRB5_ENCDATA),
94 .sname = "KRB5_ENCDATA",
95};
68 96
69 97
70KRB5_ENCDATA * 98KRB5_ENCDATA *
@@ -93,10 +121,32 @@ KRB5_ENCDATA_free(KRB5_ENCDATA *a)
93} 121}
94 122
95 123
96ASN1_SEQUENCE(KRB5_PRINCNAME) = { 124static const ASN1_TEMPLATE KRB5_PRINCNAME_seq_tt[] = {
97 ASN1_EXP(KRB5_PRINCNAME, nametype, ASN1_INTEGER, 0), 125 {
98 ASN1_EXP_SEQUENCE_OF(KRB5_PRINCNAME, namestring, ASN1_GENERALSTRING, 1) 126 .flags = ASN1_TFLG_EXPLICIT,
99} ASN1_SEQUENCE_END(KRB5_PRINCNAME) 127 .tag = 0,
128 .offset = offsetof(KRB5_PRINCNAME, nametype),
129 .field_name = "nametype",
130 .item = &ASN1_INTEGER_it,
131 },
132 {
133 .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_SEQUENCE_OF,
134 .tag = 1,
135 .offset = offsetof(KRB5_PRINCNAME, namestring),
136 .field_name = "namestring",
137 .item = &ASN1_GENERALSTRING_it,
138 },
139};
140
141const ASN1_ITEM KRB5_PRINCNAME_it = {
142 .itype = ASN1_ITYPE_SEQUENCE,
143 .utype = V_ASN1_SEQUENCE,
144 .templates = KRB5_PRINCNAME_seq_tt,
145 .tcount = sizeof(KRB5_PRINCNAME_seq_tt) / sizeof(ASN1_TEMPLATE),
146 .funcs = NULL,
147 .size = sizeof(KRB5_PRINCNAME),
148 .sname = "KRB5_PRINCNAME",
149};
100 150
101 151
102KRB5_PRINCNAME * 152KRB5_PRINCNAME *
@@ -126,12 +176,46 @@ KRB5_PRINCNAME_free(KRB5_PRINCNAME *a)
126 176
127 177
128/* [APPLICATION 1] = 0x61 */ 178/* [APPLICATION 1] = 0x61 */
129ASN1_SEQUENCE(KRB5_TKTBODY) = { 179static const ASN1_TEMPLATE KRB5_TKTBODY_seq_tt[] = {
130 ASN1_EXP(KRB5_TKTBODY, tktvno, ASN1_INTEGER, 0), 180 {
131 ASN1_EXP(KRB5_TKTBODY, realm, ASN1_GENERALSTRING, 1), 181 .flags = ASN1_TFLG_EXPLICIT,
132 ASN1_EXP(KRB5_TKTBODY, sname, KRB5_PRINCNAME, 2), 182 .tag = 0,
133 ASN1_EXP(KRB5_TKTBODY, encdata, KRB5_ENCDATA, 3) 183 .offset = offsetof(KRB5_TKTBODY, tktvno),
134} ASN1_SEQUENCE_END(KRB5_TKTBODY) 184 .field_name = "tktvno",
185 .item = &ASN1_INTEGER_it,
186 },
187 {
188 .flags = ASN1_TFLG_EXPLICIT,
189 .tag = 1,
190 .offset = offsetof(KRB5_TKTBODY, realm),
191 .field_name = "realm",
192 .item = &ASN1_GENERALSTRING_it,
193 },
194 {
195 .flags = ASN1_TFLG_EXPLICIT,
196 .tag = 2,
197 .offset = offsetof(KRB5_TKTBODY, sname),
198 .field_name = "sname",
199 .item = &KRB5_PRINCNAME_it,
200 },
201 {
202 .flags = ASN1_TFLG_EXPLICIT,
203 .tag = 3,
204 .offset = offsetof(KRB5_TKTBODY, encdata),
205 .field_name = "encdata",
206 .item = &KRB5_ENCDATA_it,
207 },
208};
209
210const ASN1_ITEM KRB5_TKTBODY_it = {
211 .itype = ASN1_ITYPE_SEQUENCE,
212 .utype = V_ASN1_SEQUENCE,
213 .templates = KRB5_TKTBODY_seq_tt,
214 .tcount = sizeof(KRB5_TKTBODY_seq_tt) / sizeof(ASN1_TEMPLATE),
215 .funcs = NULL,
216 .size = sizeof(KRB5_TKTBODY),
217 .sname = "KRB5_TKTBODY",
218};
135 219
136 220
137KRB5_TKTBODY * 221KRB5_TKTBODY *
@@ -160,10 +244,23 @@ KRB5_TKTBODY_free(KRB5_TKTBODY *a)
160} 244}
161 245
162 246
163ASN1_ITEM_TEMPLATE(KRB5_TICKET) = 247static const ASN1_TEMPLATE KRB5_TICKET_item_tt = {
164 ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_EXPTAG|ASN1_TFLG_APPLICATION, 1, 248 .flags = ASN1_TFLG_EXPTAG | ASN1_TFLG_APPLICATION,
165 KRB5_TICKET, KRB5_TKTBODY) 249 .tag = 1,
166ASN1_ITEM_TEMPLATE_END(KRB5_TICKET) 250 .offset = 0,
251 .field_name = "KRB5_TICKET",
252 .item = &KRB5_TKTBODY_it,
253};
254
255const ASN1_ITEM KRB5_TICKET_it = {
256 .itype = ASN1_ITYPE_PRIMITIVE,
257 .utype = -1,
258 .templates = &KRB5_TICKET_item_tt,
259 .tcount = 0,
260 .funcs = NULL,
261 .size = 0,
262 .sname = "KRB5_TICKET",
263};
167 264
168 265
169KRB5_TICKET * 266KRB5_TICKET *
@@ -193,13 +290,53 @@ KRB5_TICKET_free(KRB5_TICKET *a)
193 290
194 291
195/* [APPLICATION 14] = 0x6e */ 292/* [APPLICATION 14] = 0x6e */
196ASN1_SEQUENCE(KRB5_APREQBODY) = { 293static const ASN1_TEMPLATE KRB5_APREQBODY_seq_tt[] = {
197 ASN1_EXP(KRB5_APREQBODY, pvno, ASN1_INTEGER, 0), 294 {
198 ASN1_EXP(KRB5_APREQBODY, msgtype, ASN1_INTEGER, 1), 295 .flags = ASN1_TFLG_EXPLICIT,
199 ASN1_EXP(KRB5_APREQBODY, apoptions, ASN1_BIT_STRING, 2), 296 .tag = 0,
200 ASN1_EXP(KRB5_APREQBODY, ticket, KRB5_TICKET, 3), 297 .offset = offsetof(KRB5_APREQBODY, pvno),
201 ASN1_EXP(KRB5_APREQBODY, authenticator, KRB5_ENCDATA, 4), 298 .field_name = "pvno",
202} ASN1_SEQUENCE_END(KRB5_APREQBODY) 299 .item = &ASN1_INTEGER_it,
300 },
301 {
302 .flags = ASN1_TFLG_EXPLICIT,
303 .tag = 1,
304 .offset = offsetof(KRB5_APREQBODY, msgtype),
305 .field_name = "msgtype",
306 .item = &ASN1_INTEGER_it,
307 },
308 {
309 .flags = ASN1_TFLG_EXPLICIT,
310 .tag = 2,
311 .offset = offsetof(KRB5_APREQBODY, apoptions),
312 .field_name = "apoptions",
313 .item = &ASN1_BIT_STRING_it,
314 },
315 {
316 .flags = ASN1_TFLG_EXPLICIT,
317 .tag = 3,
318 .offset = offsetof(KRB5_APREQBODY, ticket),
319 .field_name = "ticket",
320 .item = &KRB5_TICKET_it,
321 },
322 {
323 .flags = ASN1_TFLG_EXPLICIT,
324 .tag = 4,
325 .offset = offsetof(KRB5_APREQBODY, authenticator),
326 .field_name = "authenticator",
327 .item = &KRB5_ENCDATA_it,
328 },
329};
330
331const ASN1_ITEM KRB5_APREQBODY_it = {
332 .itype = ASN1_ITYPE_SEQUENCE,
333 .utype = V_ASN1_SEQUENCE,
334 .templates = KRB5_APREQBODY_seq_tt,
335 .tcount = sizeof(KRB5_APREQBODY_seq_tt) / sizeof(ASN1_TEMPLATE),
336 .funcs = NULL,
337 .size = sizeof(KRB5_APREQBODY),
338 .sname = "KRB5_APREQBODY",
339};
203 340
204 341
205KRB5_APREQBODY * 342KRB5_APREQBODY *
@@ -227,10 +364,23 @@ KRB5_APREQBODY_free(KRB5_APREQBODY *a)
227 ASN1_item_free((ASN1_VALUE *)a, &KRB5_APREQBODY_it); 364 ASN1_item_free((ASN1_VALUE *)a, &KRB5_APREQBODY_it);
228} 365}
229 366
230ASN1_ITEM_TEMPLATE(KRB5_APREQ) = 367static const ASN1_TEMPLATE KRB5_APREQ_item_tt = {
231 ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_EXPTAG|ASN1_TFLG_APPLICATION, 14, 368 .flags = ASN1_TFLG_EXPTAG | ASN1_TFLG_APPLICATION,
232 KRB5_APREQ, KRB5_APREQBODY) 369 .tag = 14,
233ASN1_ITEM_TEMPLATE_END(KRB5_APREQ) 370 .offset = 0,
371 .field_name = "KRB5_APREQ",
372 .item = &KRB5_APREQBODY_it,
373};
374
375const ASN1_ITEM KRB5_APREQ_it = {
376 .itype = ASN1_ITYPE_PRIMITIVE,
377 .utype = -1,
378 .templates = &KRB5_APREQ_item_tt,
379 .tcount = 0,
380 .funcs = NULL,
381 .size = 0,
382 .sname = "KRB5_APREQ",
383};
234 384
235 385
236KRB5_APREQ * 386KRB5_APREQ *
@@ -261,10 +411,32 @@ KRB5_APREQ_free(KRB5_APREQ *a)
261 411
262/* Authenticator stuff */ 412/* Authenticator stuff */
263 413
264ASN1_SEQUENCE(KRB5_CHECKSUM) = { 414static const ASN1_TEMPLATE KRB5_CHECKSUM_seq_tt[] = {
265 ASN1_EXP(KRB5_CHECKSUM, ctype, ASN1_INTEGER, 0), 415 {
266 ASN1_EXP(KRB5_CHECKSUM, checksum, ASN1_OCTET_STRING,1) 416 .flags = ASN1_TFLG_EXPLICIT,
267} ASN1_SEQUENCE_END(KRB5_CHECKSUM) 417 .tag = 0,
418 .offset = offsetof(KRB5_CHECKSUM, ctype),
419 .field_name = "ctype",
420 .item = &ASN1_INTEGER_it,
421 },
422 {
423 .flags = ASN1_TFLG_EXPLICIT,
424 .tag = 1,
425 .offset = offsetof(KRB5_CHECKSUM, checksum),
426 .field_name = "checksum",
427 .item = &ASN1_OCTET_STRING_it,
428 },
429};
430
431const ASN1_ITEM KRB5_CHECKSUM_it = {
432 .itype = ASN1_ITYPE_SEQUENCE,
433 .utype = V_ASN1_SEQUENCE,
434 .templates = KRB5_CHECKSUM_seq_tt,
435 .tcount = sizeof(KRB5_CHECKSUM_seq_tt) / sizeof(ASN1_TEMPLATE),
436 .funcs = NULL,
437 .size = sizeof(KRB5_CHECKSUM),
438 .sname = "KRB5_CHECKSUM",
439};
268 440
269 441
270KRB5_CHECKSUM * 442KRB5_CHECKSUM *
@@ -293,10 +465,32 @@ KRB5_CHECKSUM_free(KRB5_CHECKSUM *a)
293} 465}
294 466
295 467
296ASN1_SEQUENCE(KRB5_ENCKEY) = { 468static const ASN1_TEMPLATE KRB5_ENCKEY_seq_tt[] = {
297 ASN1_EXP(KRB5_ENCKEY, ktype, ASN1_INTEGER, 0), 469 {
298 ASN1_EXP(KRB5_ENCKEY, keyvalue, ASN1_OCTET_STRING,1) 470 .flags = ASN1_TFLG_EXPLICIT,
299} ASN1_SEQUENCE_END(KRB5_ENCKEY) 471 .tag = 0,
472 .offset = offsetof(KRB5_ENCKEY, ktype),
473 .field_name = "ktype",
474 .item = &ASN1_INTEGER_it,
475 },
476 {
477 .flags = ASN1_TFLG_EXPLICIT,
478 .tag = 1,
479 .offset = offsetof(KRB5_ENCKEY, keyvalue),
480 .field_name = "keyvalue",
481 .item = &ASN1_OCTET_STRING_it,
482 },
483};
484
485const ASN1_ITEM KRB5_ENCKEY_it = {
486 .itype = ASN1_ITYPE_SEQUENCE,
487 .utype = V_ASN1_SEQUENCE,
488 .templates = KRB5_ENCKEY_seq_tt,
489 .tcount = sizeof(KRB5_ENCKEY_seq_tt) / sizeof(ASN1_TEMPLATE),
490 .funcs = NULL,
491 .size = sizeof(KRB5_ENCKEY),
492 .sname = "KRB5_ENCKEY",
493};
300 494
301 495
302KRB5_ENCKEY * 496KRB5_ENCKEY *
@@ -326,10 +520,32 @@ KRB5_ENCKEY_free(KRB5_ENCKEY *a)
326 520
327 521
328/* SEQ OF SEQ; see ASN1_EXP_SEQUENCE_OF_OPT() below */ 522/* SEQ OF SEQ; see ASN1_EXP_SEQUENCE_OF_OPT() below */
329ASN1_SEQUENCE(KRB5_AUTHDATA) = { 523static const ASN1_TEMPLATE KRB5_AUTHDATA_seq_tt[] = {
330 ASN1_EXP(KRB5_AUTHDATA, adtype, ASN1_INTEGER, 0), 524 {
331 ASN1_EXP(KRB5_AUTHDATA, addata, ASN1_OCTET_STRING,1) 525 .flags = ASN1_TFLG_EXPLICIT,
332} ASN1_SEQUENCE_END(KRB5_AUTHDATA) 526 .tag = 0,
527 .offset = offsetof(KRB5_AUTHDATA, adtype),
528 .field_name = "adtype",
529 .item = &ASN1_INTEGER_it,
530 },
531 {
532 .flags = ASN1_TFLG_EXPLICIT,
533 .tag = 1,
534 .offset = offsetof(KRB5_AUTHDATA, addata),
535 .field_name = "addata",
536 .item = &ASN1_OCTET_STRING_it,
537 },
538};
539
540const ASN1_ITEM KRB5_AUTHDATA_it = {
541 .itype = ASN1_ITYPE_SEQUENCE,
542 .utype = V_ASN1_SEQUENCE,
543 .templates = KRB5_AUTHDATA_seq_tt,
544 .tcount = sizeof(KRB5_AUTHDATA_seq_tt) / sizeof(ASN1_TEMPLATE),
545 .funcs = NULL,
546 .size = sizeof(KRB5_AUTHDATA),
547 .sname = "KRB5_AUTHDATA",
548};
333 549
334 550
335KRB5_AUTHDATA * 551KRB5_AUTHDATA *
@@ -359,18 +575,81 @@ KRB5_AUTHDATA_free(KRB5_AUTHDATA *a)
359 575
360 576
361/* [APPLICATION 2] = 0x62 */ 577/* [APPLICATION 2] = 0x62 */
362ASN1_SEQUENCE(KRB5_AUTHENTBODY) = { 578static const ASN1_TEMPLATE KRB5_AUTHENTBODY_seq_tt[] = {
363 ASN1_EXP(KRB5_AUTHENTBODY, avno, ASN1_INTEGER, 0), 579 {
364 ASN1_EXP(KRB5_AUTHENTBODY, crealm, ASN1_GENERALSTRING, 1), 580 .flags = ASN1_TFLG_EXPLICIT,
365 ASN1_EXP(KRB5_AUTHENTBODY, cname, KRB5_PRINCNAME, 2), 581 .tag = 0,
366 ASN1_EXP_OPT(KRB5_AUTHENTBODY, cksum, KRB5_CHECKSUM, 3), 582 .offset = offsetof(KRB5_AUTHENTBODY, avno),
367 ASN1_EXP(KRB5_AUTHENTBODY, cusec, ASN1_INTEGER, 4), 583 .field_name = "avno",
368 ASN1_EXP(KRB5_AUTHENTBODY, ctime, ASN1_GENERALIZEDTIME, 5), 584 .item = &ASN1_INTEGER_it,
369 ASN1_EXP_OPT(KRB5_AUTHENTBODY, subkey, KRB5_ENCKEY, 6), 585 },
370 ASN1_EXP_OPT(KRB5_AUTHENTBODY, seqnum, ASN1_INTEGER, 7), 586 {
371 ASN1_EXP_SEQUENCE_OF_OPT 587 .flags = ASN1_TFLG_EXPLICIT,
372 (KRB5_AUTHENTBODY, authorization, KRB5_AUTHDATA, 8), 588 .tag = 1,
373} ASN1_SEQUENCE_END(KRB5_AUTHENTBODY) 589 .offset = offsetof(KRB5_AUTHENTBODY, crealm),
590 .field_name = "crealm",
591 .item = &ASN1_GENERALSTRING_it,
592 },
593 {
594 .flags = ASN1_TFLG_EXPLICIT,
595 .tag = 2,
596 .offset = offsetof(KRB5_AUTHENTBODY, cname),
597 .field_name = "cname",
598 .item = &KRB5_PRINCNAME_it,
599 },
600 {
601 .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_OPTIONAL,
602 .tag = 3,
603 .offset = offsetof(KRB5_AUTHENTBODY, cksum),
604 .field_name = "cksum",
605 .item = &KRB5_CHECKSUM_it,
606 },
607 {
608 .flags = ASN1_TFLG_EXPLICIT,
609 .tag = 4,
610 .offset = offsetof(KRB5_AUTHENTBODY, cusec),
611 .field_name = "cusec",
612 .item = &ASN1_INTEGER_it,
613 },
614 {
615 .flags = ASN1_TFLG_EXPLICIT,
616 .tag = 5,
617 .offset = offsetof(KRB5_AUTHENTBODY, ctime),
618 .field_name = "ctime",
619 .item = &ASN1_GENERALIZEDTIME_it,
620 },
621 {
622 .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_OPTIONAL,
623 .tag = 6,
624 .offset = offsetof(KRB5_AUTHENTBODY, subkey),
625 .field_name = "subkey",
626 .item = &KRB5_ENCKEY_it,
627 },
628 {
629 .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_OPTIONAL,
630 .tag = 7,
631 .offset = offsetof(KRB5_AUTHENTBODY, seqnum),
632 .field_name = "seqnum",
633 .item = &ASN1_INTEGER_it,
634 },
635 {
636 .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_SEQUENCE_OF | ASN1_TFLG_OPTIONAL,
637 .tag = 8,
638 .offset = offsetof(KRB5_AUTHENTBODY, authorization),
639 .field_name = "authorization",
640 .item = &KRB5_AUTHDATA_it,
641 },
642};
643
644const ASN1_ITEM KRB5_AUTHENTBODY_it = {
645 .itype = ASN1_ITYPE_SEQUENCE,
646 .utype = V_ASN1_SEQUENCE,
647 .templates = KRB5_AUTHENTBODY_seq_tt,
648 .tcount = sizeof(KRB5_AUTHENTBODY_seq_tt) / sizeof(ASN1_TEMPLATE),
649 .funcs = NULL,
650 .size = sizeof(KRB5_AUTHENTBODY),
651 .sname = "KRB5_AUTHENTBODY",
652};
374 653
375 654
376KRB5_AUTHENTBODY * 655KRB5_AUTHENTBODY *
@@ -398,10 +677,23 @@ KRB5_AUTHENTBODY_free(KRB5_AUTHENTBODY *a)
398 ASN1_item_free((ASN1_VALUE *)a, &KRB5_AUTHENTBODY_it); 677 ASN1_item_free((ASN1_VALUE *)a, &KRB5_AUTHENTBODY_it);
399} 678}
400 679
401ASN1_ITEM_TEMPLATE(KRB5_AUTHENT) = 680static const ASN1_TEMPLATE KRB5_AUTHENT_item_tt = {
402 ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_EXPTAG|ASN1_TFLG_APPLICATION, 2, 681 .flags = ASN1_TFLG_EXPTAG | ASN1_TFLG_APPLICATION,
403 KRB5_AUTHENT, KRB5_AUTHENTBODY) 682 .tag = 2,
404ASN1_ITEM_TEMPLATE_END(KRB5_AUTHENT) 683 .offset = 0,
684 .field_name = "KRB5_AUTHENT",
685 .item = &KRB5_AUTHENTBODY_it,
686};
687
688const ASN1_ITEM KRB5_AUTHENT_it = {
689 .itype = ASN1_ITYPE_PRIMITIVE,
690 .utype = -1,
691 .templates = &KRB5_AUTHENT_item_tt,
692 .tcount = 0,
693 .funcs = NULL,
694 .size = 0,
695 .sname = "KRB5_AUTHENT",
696};
405 697
406 698
407KRB5_AUTHENT * 699KRB5_AUTHENT *
@@ -428,4 +720,3 @@ KRB5_AUTHENT_free(KRB5_AUTHENT *a)
428{ 720{
429 ASN1_item_free((ASN1_VALUE *)a, &KRB5_AUTHENT_it); 721 ASN1_item_free((ASN1_VALUE *)a, &KRB5_AUTHENT_it);
430} 722}
431
diff --git a/src/lib/libssl/src/crypto/ocsp/ocsp_asn.c b/src/lib/libssl/src/crypto/ocsp/ocsp_asn.c
index 6ca21af89a..72e7638c75 100644
--- a/src/lib/libssl/src/crypto/ocsp/ocsp_asn.c
+++ b/src/lib/libssl/src/crypto/ocsp/ocsp_asn.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ocsp_asn.c,v 1.7 2015/02/09 16:04:46 jsing Exp $ */ 1/* $OpenBSD: ocsp_asn.c,v 1.8 2015/07/25 14:52:47 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 */
@@ -59,11 +59,39 @@
59#include <openssl/asn1t.h> 59#include <openssl/asn1t.h>
60#include <openssl/ocsp.h> 60#include <openssl/ocsp.h>
61 61
62ASN1_SEQUENCE(OCSP_SIGNATURE) = { 62static const ASN1_TEMPLATE OCSP_SIGNATURE_seq_tt[] = {
63 ASN1_SIMPLE(OCSP_SIGNATURE, signatureAlgorithm, X509_ALGOR), 63 {
64 ASN1_SIMPLE(OCSP_SIGNATURE, signature, ASN1_BIT_STRING), 64 .flags = 0,
65 ASN1_EXP_SEQUENCE_OF_OPT(OCSP_SIGNATURE, certs, X509, 0) 65 .tag = 0,
66} ASN1_SEQUENCE_END(OCSP_SIGNATURE) 66 .offset = offsetof(OCSP_SIGNATURE, signatureAlgorithm),
67 .field_name = "signatureAlgorithm",
68 .item = &X509_ALGOR_it,
69 },
70 {
71 .flags = 0,
72 .tag = 0,
73 .offset = offsetof(OCSP_SIGNATURE, signature),
74 .field_name = "signature",
75 .item = &ASN1_BIT_STRING_it,
76 },
77 {
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,
83 },
84};
85
86const 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",
94};
67 95
68 96
69OCSP_SIGNATURE * 97OCSP_SIGNATURE *
@@ -91,12 +119,46 @@ OCSP_SIGNATURE_free(OCSP_SIGNATURE *a)
91 ASN1_item_free((ASN1_VALUE *)a, &OCSP_SIGNATURE_it); 119 ASN1_item_free((ASN1_VALUE *)a, &OCSP_SIGNATURE_it);
92} 120}
93 121
94ASN1_SEQUENCE(OCSP_CERTID) = { 122static const ASN1_TEMPLATE OCSP_CERTID_seq_tt[] = {
95 ASN1_SIMPLE(OCSP_CERTID, hashAlgorithm, X509_ALGOR), 123 {
96 ASN1_SIMPLE(OCSP_CERTID, issuerNameHash, ASN1_OCTET_STRING), 124 .flags = 0,
97 ASN1_SIMPLE(OCSP_CERTID, issuerKeyHash, ASN1_OCTET_STRING), 125 .tag = 0,
98 ASN1_SIMPLE(OCSP_CERTID, serialNumber, ASN1_INTEGER) 126 .offset = offsetof(OCSP_CERTID, hashAlgorithm),
99} ASN1_SEQUENCE_END(OCSP_CERTID) 127 .field_name = "hashAlgorithm",
128 .item = &X509_ALGOR_it,
129 },
130 {
131 .flags = 0,
132 .tag = 0,
133 .offset = offsetof(OCSP_CERTID, issuerNameHash),
134 .field_name = "issuerNameHash",
135 .item = &ASN1_OCTET_STRING_it,
136 },
137 {
138 .flags = 0,
139 .tag = 0,
140 .offset = offsetof(OCSP_CERTID, issuerKeyHash),
141 .field_name = "issuerKeyHash",
142 .item = &ASN1_OCTET_STRING_it,
143 },
144 {
145 .flags = 0,
146 .tag = 0,
147 .offset = offsetof(OCSP_CERTID, serialNumber),
148 .field_name = "serialNumber",
149 .item = &ASN1_INTEGER_it,
150 },
151};
152
153const 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",
161};
100 162
101 163
102OCSP_CERTID * 164OCSP_CERTID *
@@ -124,10 +186,32 @@ OCSP_CERTID_free(OCSP_CERTID *a)
124 ASN1_item_free((ASN1_VALUE *)a, &OCSP_CERTID_it); 186 ASN1_item_free((ASN1_VALUE *)a, &OCSP_CERTID_it);
125} 187}
126 188
127ASN1_SEQUENCE(OCSP_ONEREQ) = { 189static const ASN1_TEMPLATE OCSP_ONEREQ_seq_tt[] = {
128 ASN1_SIMPLE(OCSP_ONEREQ, reqCert, OCSP_CERTID), 190 {
129 ASN1_EXP_SEQUENCE_OF_OPT(OCSP_ONEREQ, singleRequestExtensions, X509_EXTENSION, 0) 191 .flags = 0,
130} ASN1_SEQUENCE_END(OCSP_ONEREQ) 192 .tag = 0,
193 .offset = offsetof(OCSP_ONEREQ, reqCert),
194 .field_name = "reqCert",
195 .item = &OCSP_CERTID_it,
196 },
197 {
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,
203 },
204};
205
206const 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",
214};
131 215
132 216
133OCSP_ONEREQ * 217OCSP_ONEREQ *
@@ -155,12 +239,46 @@ OCSP_ONEREQ_free(OCSP_ONEREQ *a)
155 ASN1_item_free((ASN1_VALUE *)a, &OCSP_ONEREQ_it); 239 ASN1_item_free((ASN1_VALUE *)a, &OCSP_ONEREQ_it);
156} 240}
157 241
158ASN1_SEQUENCE(OCSP_REQINFO) = { 242static const ASN1_TEMPLATE OCSP_REQINFO_seq_tt[] = {
159 ASN1_EXP_OPT(OCSP_REQINFO, version, ASN1_INTEGER, 0), 243 {
160 ASN1_EXP_OPT(OCSP_REQINFO, requestorName, GENERAL_NAME, 1), 244 .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_OPTIONAL,
161 ASN1_SEQUENCE_OF(OCSP_REQINFO, requestList, OCSP_ONEREQ), 245 .tag = 0,
162 ASN1_EXP_SEQUENCE_OF_OPT(OCSP_REQINFO, requestExtensions, X509_EXTENSION, 2) 246 .offset = offsetof(OCSP_REQINFO, version),
163} ASN1_SEQUENCE_END(OCSP_REQINFO) 247 .field_name = "version",
248 .item = &ASN1_INTEGER_it,
249 },
250 {
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,
256 },
257 {
258 .flags = ASN1_TFLG_SEQUENCE_OF,
259 .tag = 0,
260 .offset = offsetof(OCSP_REQINFO, requestList),
261 .field_name = "requestList",
262 .item = &OCSP_ONEREQ_it,
263 },
264 {
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,
270 },
271};
272
273const 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",
281};
164 282
165 283
166OCSP_REQINFO * 284OCSP_REQINFO *
@@ -188,10 +306,32 @@ OCSP_REQINFO_free(OCSP_REQINFO *a)
188 ASN1_item_free((ASN1_VALUE *)a, &OCSP_REQINFO_it); 306 ASN1_item_free((ASN1_VALUE *)a, &OCSP_REQINFO_it);
189} 307}
190 308
191ASN1_SEQUENCE(OCSP_REQUEST) = { 309static const ASN1_TEMPLATE OCSP_REQUEST_seq_tt[] = {
192 ASN1_SIMPLE(OCSP_REQUEST, tbsRequest, OCSP_REQINFO), 310 {
193 ASN1_EXP_OPT(OCSP_REQUEST, optionalSignature, OCSP_SIGNATURE, 0) 311 .flags = 0,
194} ASN1_SEQUENCE_END(OCSP_REQUEST) 312 .tag = 0,
313 .offset = offsetof(OCSP_REQUEST, tbsRequest),
314 .field_name = "tbsRequest",
315 .item = &OCSP_REQINFO_it,
316 },
317 {
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,
323 },
324};
325
326const 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",
334};
195 335
196 336
197OCSP_REQUEST * 337OCSP_REQUEST *
@@ -221,10 +361,32 @@ OCSP_REQUEST_free(OCSP_REQUEST *a)
221 361
222/* OCSP_RESPONSE templates */ 362/* OCSP_RESPONSE templates */
223 363
224ASN1_SEQUENCE(OCSP_RESPBYTES) = { 364static const ASN1_TEMPLATE OCSP_RESPBYTES_seq_tt[] = {
225 ASN1_SIMPLE(OCSP_RESPBYTES, responseType, ASN1_OBJECT), 365 {
226 ASN1_SIMPLE(OCSP_RESPBYTES, response, ASN1_OCTET_STRING) 366 .flags = 0,
227} ASN1_SEQUENCE_END(OCSP_RESPBYTES) 367 .tag = 0,
368 .offset = offsetof(OCSP_RESPBYTES, responseType),
369 .field_name = "responseType",
370 .item = &ASN1_OBJECT_it,
371 },
372 {
373 .flags = 0,
374 .tag = 0,
375 .offset = offsetof(OCSP_RESPBYTES, response),
376 .field_name = "response",
377 .item = &ASN1_OCTET_STRING_it,
378 },
379};
380
381const ASN1_ITEM OCSP_RESPBYTES_it = {
382 .itype = ASN1_ITYPE_SEQUENCE,
383 .utype = V_ASN1_SEQUENCE,
384 .templates = OCSP_RESPBYTES_seq_tt,
385 .tcount = sizeof(OCSP_RESPBYTES_seq_tt) / sizeof(ASN1_TEMPLATE),
386 .funcs = NULL,
387 .size = sizeof(OCSP_RESPBYTES),
388 .sname = "OCSP_RESPBYTES",
389};
228 390
229 391
230OCSP_RESPBYTES * 392OCSP_RESPBYTES *
@@ -252,10 +414,32 @@ OCSP_RESPBYTES_free(OCSP_RESPBYTES *a)
252 ASN1_item_free((ASN1_VALUE *)a, &OCSP_RESPBYTES_it); 414 ASN1_item_free((ASN1_VALUE *)a, &OCSP_RESPBYTES_it);
253} 415}
254 416
255ASN1_SEQUENCE(OCSP_RESPONSE) = { 417static const ASN1_TEMPLATE OCSP_RESPONSE_seq_tt[] = {
256 ASN1_SIMPLE(OCSP_RESPONSE, responseStatus, ASN1_ENUMERATED), 418 {
257 ASN1_EXP_OPT(OCSP_RESPONSE, responseBytes, OCSP_RESPBYTES, 0) 419 .flags = 0,
258} ASN1_SEQUENCE_END(OCSP_RESPONSE) 420 .tag = 0,
421 .offset = offsetof(OCSP_RESPONSE, responseStatus),
422 .field_name = "responseStatus",
423 .item = &ASN1_ENUMERATED_it,
424 },
425 {
426 .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_OPTIONAL,
427 .tag = 0,
428 .offset = offsetof(OCSP_RESPONSE, responseBytes),
429 .field_name = "responseBytes",
430 .item = &OCSP_RESPBYTES_it,
431 },
432};
433
434const ASN1_ITEM OCSP_RESPONSE_it = {
435 .itype = ASN1_ITYPE_SEQUENCE,
436 .utype = V_ASN1_SEQUENCE,
437 .templates = OCSP_RESPONSE_seq_tt,
438 .tcount = sizeof(OCSP_RESPONSE_seq_tt) / sizeof(ASN1_TEMPLATE),
439 .funcs = NULL,
440 .size = sizeof(OCSP_RESPONSE),
441 .sname = "OCSP_RESPONSE",
442};
259 443
260 444
261OCSP_RESPONSE * 445OCSP_RESPONSE *
@@ -283,10 +467,32 @@ OCSP_RESPONSE_free(OCSP_RESPONSE *a)
283 ASN1_item_free((ASN1_VALUE *)a, &OCSP_RESPONSE_it); 467 ASN1_item_free((ASN1_VALUE *)a, &OCSP_RESPONSE_it);
284} 468}
285 469
286ASN1_CHOICE(OCSP_RESPID) = { 470static const ASN1_TEMPLATE OCSP_RESPID_ch_tt[] = {
287 ASN1_EXP(OCSP_RESPID, value.byName, X509_NAME, 1), 471 {
288 ASN1_EXP(OCSP_RESPID, value.byKey, ASN1_OCTET_STRING, 2) 472 .flags = ASN1_TFLG_EXPLICIT,
289} ASN1_CHOICE_END(OCSP_RESPID) 473 .tag = 1,
474 .offset = offsetof(OCSP_RESPID, value.byName),
475 .field_name = "value.byName",
476 .item = &X509_NAME_it,
477 },
478 {
479 .flags = ASN1_TFLG_EXPLICIT,
480 .tag = 2,
481 .offset = offsetof(OCSP_RESPID, value.byKey),
482 .field_name = "value.byKey",
483 .item = &ASN1_OCTET_STRING_it,
484 },
485};
486
487const ASN1_ITEM OCSP_RESPID_it = {
488 .itype = ASN1_ITYPE_CHOICE,
489 .utype = offsetof(OCSP_RESPID, type),
490 .templates = OCSP_RESPID_ch_tt,
491 .tcount = sizeof(OCSP_RESPID_ch_tt) / sizeof(ASN1_TEMPLATE),
492 .funcs = NULL,
493 .size = sizeof(OCSP_RESPID),
494 .sname = "OCSP_RESPID",
495};
290 496
291 497
292OCSP_RESPID * 498OCSP_RESPID *
@@ -314,10 +520,32 @@ OCSP_RESPID_free(OCSP_RESPID *a)
314 ASN1_item_free((ASN1_VALUE *)a, &OCSP_RESPID_it); 520 ASN1_item_free((ASN1_VALUE *)a, &OCSP_RESPID_it);
315} 521}
316 522
317ASN1_SEQUENCE(OCSP_REVOKEDINFO) = { 523static const ASN1_TEMPLATE OCSP_REVOKEDINFO_seq_tt[] = {
318 ASN1_SIMPLE(OCSP_REVOKEDINFO, revocationTime, ASN1_GENERALIZEDTIME), 524 {
319 ASN1_EXP_OPT(OCSP_REVOKEDINFO, revocationReason, ASN1_ENUMERATED, 0) 525 .flags = 0,
320} ASN1_SEQUENCE_END(OCSP_REVOKEDINFO) 526 .tag = 0,
527 .offset = offsetof(OCSP_REVOKEDINFO, revocationTime),
528 .field_name = "revocationTime",
529 .item = &ASN1_GENERALIZEDTIME_it,
530 },
531 {
532 .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_OPTIONAL,
533 .tag = 0,
534 .offset = offsetof(OCSP_REVOKEDINFO, revocationReason),
535 .field_name = "revocationReason",
536 .item = &ASN1_ENUMERATED_it,
537 },
538};
539
540const ASN1_ITEM OCSP_REVOKEDINFO_it = {
541 .itype = ASN1_ITYPE_SEQUENCE,
542 .utype = V_ASN1_SEQUENCE,
543 .templates = OCSP_REVOKEDINFO_seq_tt,
544 .tcount = sizeof(OCSP_REVOKEDINFO_seq_tt) / sizeof(ASN1_TEMPLATE),
545 .funcs = NULL,
546 .size = sizeof(OCSP_REVOKEDINFO),
547 .sname = "OCSP_REVOKEDINFO",
548};
321 549
322 550
323OCSP_REVOKEDINFO * 551OCSP_REVOKEDINFO *
@@ -345,11 +573,39 @@ OCSP_REVOKEDINFO_free(OCSP_REVOKEDINFO *a)
345 ASN1_item_free((ASN1_VALUE *)a, &OCSP_REVOKEDINFO_it); 573 ASN1_item_free((ASN1_VALUE *)a, &OCSP_REVOKEDINFO_it);
346} 574}
347 575
348ASN1_CHOICE(OCSP_CERTSTATUS) = { 576static const ASN1_TEMPLATE OCSP_CERTSTATUS_ch_tt[] = {
349 ASN1_IMP(OCSP_CERTSTATUS, value.good, ASN1_NULL, 0), 577 {
350 ASN1_IMP(OCSP_CERTSTATUS, value.revoked, OCSP_REVOKEDINFO, 1), 578 .flags = ASN1_TFLG_IMPLICIT,
351 ASN1_IMP(OCSP_CERTSTATUS, value.unknown, ASN1_NULL, 2) 579 .tag = 0,
352} ASN1_CHOICE_END(OCSP_CERTSTATUS) 580 .offset = offsetof(OCSP_CERTSTATUS, value.good),
581 .field_name = "value.good",
582 .item = &ASN1_NULL_it,
583 },
584 {
585 .flags = ASN1_TFLG_IMPLICIT,
586 .tag = 1,
587 .offset = offsetof(OCSP_CERTSTATUS, value.revoked),
588 .field_name = "value.revoked",
589 .item = &OCSP_REVOKEDINFO_it,
590 },
591 {
592 .flags = ASN1_TFLG_IMPLICIT,
593 .tag = 2,
594 .offset = offsetof(OCSP_CERTSTATUS, value.unknown),
595 .field_name = "value.unknown",
596 .item = &ASN1_NULL_it,
597 },
598};
599
600const ASN1_ITEM OCSP_CERTSTATUS_it = {
601 .itype = ASN1_ITYPE_CHOICE,
602 .utype = offsetof(OCSP_CERTSTATUS, type),
603 .templates = OCSP_CERTSTATUS_ch_tt,
604 .tcount = sizeof(OCSP_CERTSTATUS_ch_tt) / sizeof(ASN1_TEMPLATE),
605 .funcs = NULL,
606 .size = sizeof(OCSP_CERTSTATUS),
607 .sname = "OCSP_CERTSTATUS",
608};
353 609
354 610
355OCSP_CERTSTATUS * 611OCSP_CERTSTATUS *
@@ -377,13 +633,53 @@ OCSP_CERTSTATUS_free(OCSP_CERTSTATUS *a)
377 ASN1_item_free((ASN1_VALUE *)a, &OCSP_CERTSTATUS_it); 633 ASN1_item_free((ASN1_VALUE *)a, &OCSP_CERTSTATUS_it);
378} 634}
379 635
380ASN1_SEQUENCE(OCSP_SINGLERESP) = { 636static const ASN1_TEMPLATE OCSP_SINGLERESP_seq_tt[] = {
381 ASN1_SIMPLE(OCSP_SINGLERESP, certId, OCSP_CERTID), 637 {
382 ASN1_SIMPLE(OCSP_SINGLERESP, certStatus, OCSP_CERTSTATUS), 638 .flags = 0,
383 ASN1_SIMPLE(OCSP_SINGLERESP, thisUpdate, ASN1_GENERALIZEDTIME), 639 .tag = 0,
384 ASN1_EXP_OPT(OCSP_SINGLERESP, nextUpdate, ASN1_GENERALIZEDTIME, 0), 640 .offset = offsetof(OCSP_SINGLERESP, certId),
385 ASN1_EXP_SEQUENCE_OF_OPT(OCSP_SINGLERESP, singleExtensions, X509_EXTENSION, 1) 641 .field_name = "certId",
386} ASN1_SEQUENCE_END(OCSP_SINGLERESP) 642 .item = &OCSP_CERTID_it,
643 },
644 {
645 .flags = 0,
646 .tag = 0,
647 .offset = offsetof(OCSP_SINGLERESP, certStatus),
648 .field_name = "certStatus",
649 .item = &OCSP_CERTSTATUS_it,
650 },
651 {
652 .flags = 0,
653 .tag = 0,
654 .offset = offsetof(OCSP_SINGLERESP, thisUpdate),
655 .field_name = "thisUpdate",
656 .item = &ASN1_GENERALIZEDTIME_it,
657 },
658 {
659 .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_OPTIONAL,
660 .tag = 0,
661 .offset = offsetof(OCSP_SINGLERESP, nextUpdate),
662 .field_name = "nextUpdate",
663 .item = &ASN1_GENERALIZEDTIME_it,
664 },
665 {
666 .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_SEQUENCE_OF | ASN1_TFLG_OPTIONAL,
667 .tag = 1,
668 .offset = offsetof(OCSP_SINGLERESP, singleExtensions),
669 .field_name = "singleExtensions",
670 .item = &X509_EXTENSION_it,
671 },
672};
673
674const ASN1_ITEM OCSP_SINGLERESP_it = {
675 .itype = ASN1_ITYPE_SEQUENCE,
676 .utype = V_ASN1_SEQUENCE,
677 .templates = OCSP_SINGLERESP_seq_tt,
678 .tcount = sizeof(OCSP_SINGLERESP_seq_tt) / sizeof(ASN1_TEMPLATE),
679 .funcs = NULL,
680 .size = sizeof(OCSP_SINGLERESP),
681 .sname = "OCSP_SINGLERESP",
682};
387 683
388 684
389OCSP_SINGLERESP * 685OCSP_SINGLERESP *
@@ -411,13 +707,53 @@ OCSP_SINGLERESP_free(OCSP_SINGLERESP *a)
411 ASN1_item_free((ASN1_VALUE *)a, &OCSP_SINGLERESP_it); 707 ASN1_item_free((ASN1_VALUE *)a, &OCSP_SINGLERESP_it);
412} 708}
413 709
414ASN1_SEQUENCE(OCSP_RESPDATA) = { 710static const ASN1_TEMPLATE OCSP_RESPDATA_seq_tt[] = {
415 ASN1_EXP_OPT(OCSP_RESPDATA, version, ASN1_INTEGER, 0), 711 {
416 ASN1_SIMPLE(OCSP_RESPDATA, responderId, OCSP_RESPID), 712 .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_OPTIONAL,
417 ASN1_SIMPLE(OCSP_RESPDATA, producedAt, ASN1_GENERALIZEDTIME), 713 .tag = 0,
418 ASN1_SEQUENCE_OF(OCSP_RESPDATA, responses, OCSP_SINGLERESP), 714 .offset = offsetof(OCSP_RESPDATA, version),
419 ASN1_EXP_SEQUENCE_OF_OPT(OCSP_RESPDATA, responseExtensions, X509_EXTENSION, 1) 715 .field_name = "version",
420} ASN1_SEQUENCE_END(OCSP_RESPDATA) 716 .item = &ASN1_INTEGER_it,
717 },
718 {
719 .flags = 0,
720 .tag = 0,
721 .offset = offsetof(OCSP_RESPDATA, responderId),
722 .field_name = "responderId",
723 .item = &OCSP_RESPID_it,
724 },
725 {
726 .flags = 0,
727 .tag = 0,
728 .offset = offsetof(OCSP_RESPDATA, producedAt),
729 .field_name = "producedAt",
730 .item = &ASN1_GENERALIZEDTIME_it,
731 },
732 {
733 .flags = ASN1_TFLG_SEQUENCE_OF,
734 .tag = 0,
735 .offset = offsetof(OCSP_RESPDATA, responses),
736 .field_name = "responses",
737 .item = &OCSP_SINGLERESP_it,
738 },
739 {
740 .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_SEQUENCE_OF | ASN1_TFLG_OPTIONAL,
741 .tag = 1,
742 .offset = offsetof(OCSP_RESPDATA, responseExtensions),
743 .field_name = "responseExtensions",
744 .item = &X509_EXTENSION_it,
745 },
746};
747
748const ASN1_ITEM OCSP_RESPDATA_it = {
749 .itype = ASN1_ITYPE_SEQUENCE,
750 .utype = V_ASN1_SEQUENCE,
751 .templates = OCSP_RESPDATA_seq_tt,
752 .tcount = sizeof(OCSP_RESPDATA_seq_tt) / sizeof(ASN1_TEMPLATE),
753 .funcs = NULL,
754 .size = sizeof(OCSP_RESPDATA),
755 .sname = "OCSP_RESPDATA",
756};
421 757
422 758
423OCSP_RESPDATA * 759OCSP_RESPDATA *
@@ -445,12 +781,46 @@ OCSP_RESPDATA_free(OCSP_RESPDATA *a)
445 ASN1_item_free((ASN1_VALUE *)a, &OCSP_RESPDATA_it); 781 ASN1_item_free((ASN1_VALUE *)a, &OCSP_RESPDATA_it);
446} 782}
447 783
448ASN1_SEQUENCE(OCSP_BASICRESP) = { 784static const ASN1_TEMPLATE OCSP_BASICRESP_seq_tt[] = {
449 ASN1_SIMPLE(OCSP_BASICRESP, tbsResponseData, OCSP_RESPDATA), 785 {
450 ASN1_SIMPLE(OCSP_BASICRESP, signatureAlgorithm, X509_ALGOR), 786 .flags = 0,
451 ASN1_SIMPLE(OCSP_BASICRESP, signature, ASN1_BIT_STRING), 787 .tag = 0,
452 ASN1_EXP_SEQUENCE_OF_OPT(OCSP_BASICRESP, certs, X509, 0) 788 .offset = offsetof(OCSP_BASICRESP, tbsResponseData),
453} ASN1_SEQUENCE_END(OCSP_BASICRESP) 789 .field_name = "tbsResponseData",
790 .item = &OCSP_RESPDATA_it,
791 },
792 {
793 .flags = 0,
794 .tag = 0,
795 .offset = offsetof(OCSP_BASICRESP, signatureAlgorithm),
796 .field_name = "signatureAlgorithm",
797 .item = &X509_ALGOR_it,
798 },
799 {
800 .flags = 0,
801 .tag = 0,
802 .offset = offsetof(OCSP_BASICRESP, signature),
803 .field_name = "signature",
804 .item = &ASN1_BIT_STRING_it,
805 },
806 {
807 .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_SEQUENCE_OF | ASN1_TFLG_OPTIONAL,
808 .tag = 0,
809 .offset = offsetof(OCSP_BASICRESP, certs),
810 .field_name = "certs",
811 .item = &X509_it,
812 },
813};
814
815const ASN1_ITEM OCSP_BASICRESP_it = {
816 .itype = ASN1_ITYPE_SEQUENCE,
817 .utype = V_ASN1_SEQUENCE,
818 .templates = OCSP_BASICRESP_seq_tt,
819 .tcount = sizeof(OCSP_BASICRESP_seq_tt) / sizeof(ASN1_TEMPLATE),
820 .funcs = NULL,
821 .size = sizeof(OCSP_BASICRESP),
822 .sname = "OCSP_BASICRESP",
823};
454 824
455 825
456OCSP_BASICRESP * 826OCSP_BASICRESP *
@@ -478,11 +848,39 @@ OCSP_BASICRESP_free(OCSP_BASICRESP *a)
478 ASN1_item_free((ASN1_VALUE *)a, &OCSP_BASICRESP_it); 848 ASN1_item_free((ASN1_VALUE *)a, &OCSP_BASICRESP_it);
479} 849}
480 850
481ASN1_SEQUENCE(OCSP_CRLID) = { 851static const ASN1_TEMPLATE OCSP_CRLID_seq_tt[] = {
482 ASN1_EXP_OPT(OCSP_CRLID, crlUrl, ASN1_IA5STRING, 0), 852 {
483 ASN1_EXP_OPT(OCSP_CRLID, crlNum, ASN1_INTEGER, 1), 853 .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_OPTIONAL,
484 ASN1_EXP_OPT(OCSP_CRLID, crlTime, ASN1_GENERALIZEDTIME, 2) 854 .tag = 0,
485} ASN1_SEQUENCE_END(OCSP_CRLID) 855 .offset = offsetof(OCSP_CRLID, crlUrl),
856 .field_name = "crlUrl",
857 .item = &ASN1_IA5STRING_it,
858 },
859 {
860 .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_OPTIONAL,
861 .tag = 1,
862 .offset = offsetof(OCSP_CRLID, crlNum),
863 .field_name = "crlNum",
864 .item = &ASN1_INTEGER_it,
865 },
866 {
867 .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_OPTIONAL,
868 .tag = 2,
869 .offset = offsetof(OCSP_CRLID, crlTime),
870 .field_name = "crlTime",
871 .item = &ASN1_GENERALIZEDTIME_it,
872 },
873};
874
875const ASN1_ITEM OCSP_CRLID_it = {
876 .itype = ASN1_ITYPE_SEQUENCE,
877 .utype = V_ASN1_SEQUENCE,
878 .templates = OCSP_CRLID_seq_tt,
879 .tcount = sizeof(OCSP_CRLID_seq_tt) / sizeof(ASN1_TEMPLATE),
880 .funcs = NULL,
881 .size = sizeof(OCSP_CRLID),
882 .sname = "OCSP_CRLID",
883};
486 884
487 885
488OCSP_CRLID * 886OCSP_CRLID *
@@ -510,10 +908,32 @@ OCSP_CRLID_free(OCSP_CRLID *a)
510 ASN1_item_free((ASN1_VALUE *)a, &OCSP_CRLID_it); 908 ASN1_item_free((ASN1_VALUE *)a, &OCSP_CRLID_it);
511} 909}
512 910
513ASN1_SEQUENCE(OCSP_SERVICELOC) = { 911static const ASN1_TEMPLATE OCSP_SERVICELOC_seq_tt[] = {
514 ASN1_SIMPLE(OCSP_SERVICELOC, issuer, X509_NAME), 912 {
515 ASN1_SEQUENCE_OF_OPT(OCSP_SERVICELOC, locator, ACCESS_DESCRIPTION) 913 .flags = 0,
516} ASN1_SEQUENCE_END(OCSP_SERVICELOC) 914 .tag = 0,
915 .offset = offsetof(OCSP_SERVICELOC, issuer),
916 .field_name = "issuer",
917 .item = &X509_NAME_it,
918 },
919 {
920 .flags = ASN1_TFLG_SEQUENCE_OF | ASN1_TFLG_OPTIONAL,
921 .tag = 0,
922 .offset = offsetof(OCSP_SERVICELOC, locator),
923 .field_name = "locator",
924 .item = &ACCESS_DESCRIPTION_it,
925 },
926};
927
928const ASN1_ITEM OCSP_SERVICELOC_it = {
929 .itype = ASN1_ITYPE_SEQUENCE,
930 .utype = V_ASN1_SEQUENCE,
931 .templates = OCSP_SERVICELOC_seq_tt,
932 .tcount = sizeof(OCSP_SERVICELOC_seq_tt) / sizeof(ASN1_TEMPLATE),
933 .funcs = NULL,
934 .size = sizeof(OCSP_SERVICELOC),
935 .sname = "OCSP_SERVICELOC",
936};
517 937
518 938
519OCSP_SERVICELOC * 939OCSP_SERVICELOC *