summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/asn1/x_x509.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/asn1/x_x509.c')
-rw-r--r--src/lib/libcrypto/asn1/x_x509.c150
1 files changed, 132 insertions, 18 deletions
diff --git a/src/lib/libcrypto/asn1/x_x509.c b/src/lib/libcrypto/asn1/x_x509.c
index 756848fe19..1f29d5498a 100644
--- a/src/lib/libcrypto/asn1/x_x509.c
+++ b/src/lib/libcrypto/asn1/x_x509.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: x_x509.c,v 1.21 2015/02/10 13:28:17 jsing Exp $ */ 1/* $OpenBSD: x_x509.c,v 1.22 2015/02/11 03:39:51 jsing Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
@@ -65,18 +65,96 @@
65#include <openssl/x509.h> 65#include <openssl/x509.h>
66#include <openssl/x509v3.h> 66#include <openssl/x509v3.h>
67 67
68ASN1_SEQUENCE_enc(X509_CINF, enc, 0) = { 68static const ASN1_AUX X509_CINF_aux = {
69 ASN1_EXP_OPT(X509_CINF, version, ASN1_INTEGER, 0), 69 .app_data = NULL,
70 ASN1_SIMPLE(X509_CINF, serialNumber, ASN1_INTEGER), 70 .flags = ASN1_AFLG_ENCODING,
71 ASN1_SIMPLE(X509_CINF, signature, X509_ALGOR), 71 .ref_offset = 0,
72 ASN1_SIMPLE(X509_CINF, issuer, X509_NAME), 72 .ref_lock = 0,
73 ASN1_SIMPLE(X509_CINF, validity, X509_VAL), 73 .asn1_cb = 0,
74 ASN1_SIMPLE(X509_CINF, subject, X509_NAME), 74 .enc_offset = offsetof(X509_CINF, enc),
75 ASN1_SIMPLE(X509_CINF, key, X509_PUBKEY), 75};
76 ASN1_IMP_OPT(X509_CINF, issuerUID, ASN1_BIT_STRING, 1), 76static const ASN1_TEMPLATE X509_CINF_seq_tt[] = {
77 ASN1_IMP_OPT(X509_CINF, subjectUID, ASN1_BIT_STRING, 2), 77 {
78 ASN1_EXP_SEQUENCE_OF_OPT(X509_CINF, extensions, X509_EXTENSION, 3) 78 .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_OPTIONAL,
79} ASN1_SEQUENCE_END_enc(X509_CINF, X509_CINF) 79 .tag = 0,
80 .offset = offsetof(X509_CINF, version),
81 .field_name = "version",
82 .item = &ASN1_INTEGER_it,
83 },
84 {
85 .flags = 0,
86 .tag = 0,
87 .offset = offsetof(X509_CINF, serialNumber),
88 .field_name = "serialNumber",
89 .item = &ASN1_INTEGER_it,
90 },
91 {
92 .flags = 0,
93 .tag = 0,
94 .offset = offsetof(X509_CINF, signature),
95 .field_name = "signature",
96 .item = &X509_ALGOR_it,
97 },
98 {
99 .flags = 0,
100 .tag = 0,
101 .offset = offsetof(X509_CINF, issuer),
102 .field_name = "issuer",
103 .item = &X509_NAME_it,
104 },
105 {
106 .flags = 0,
107 .tag = 0,
108 .offset = offsetof(X509_CINF, validity),
109 .field_name = "validity",
110 .item = &X509_VAL_it,
111 },
112 {
113 .flags = 0,
114 .tag = 0,
115 .offset = offsetof(X509_CINF, subject),
116 .field_name = "subject",
117 .item = &X509_NAME_it,
118 },
119 {
120 .flags = 0,
121 .tag = 0,
122 .offset = offsetof(X509_CINF, key),
123 .field_name = "key",
124 .item = &X509_PUBKEY_it,
125 },
126 {
127 .flags = ASN1_TFLG_IMPLICIT | ASN1_TFLG_OPTIONAL,
128 .tag = 1,
129 .offset = offsetof(X509_CINF, issuerUID),
130 .field_name = "issuerUID",
131 .item = &ASN1_BIT_STRING_it,
132 },
133 {
134 .flags = ASN1_TFLG_IMPLICIT | ASN1_TFLG_OPTIONAL,
135 .tag = 2,
136 .offset = offsetof(X509_CINF, subjectUID),
137 .field_name = "subjectUID",
138 .item = &ASN1_BIT_STRING_it,
139 },
140 {
141 .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_SEQUENCE_OF | ASN1_TFLG_OPTIONAL,
142 .tag = 3,
143 .offset = offsetof(X509_CINF, extensions),
144 .field_name = "extensions",
145 .item = &X509_EXTENSION_it,
146 },
147};
148
149const ASN1_ITEM X509_CINF_it = {
150 .itype = ASN1_ITYPE_SEQUENCE,
151 .utype = V_ASN1_SEQUENCE,
152 .templates = X509_CINF_seq_tt,
153 .tcount = sizeof(X509_CINF_seq_tt) / sizeof(ASN1_TEMPLATE),
154 .funcs = &X509_CINF_aux,
155 .size = sizeof(X509_CINF),
156 .sname = "X509_CINF",
157};
80 158
81 159
82X509_CINF * 160X509_CINF *
@@ -148,11 +226,47 @@ x509_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, void *exarg)
148 return 1; 226 return 1;
149} 227}
150 228
151ASN1_SEQUENCE_ref(X509, x509_cb, CRYPTO_LOCK_X509) = { 229static const ASN1_AUX X509_aux = {
152 ASN1_SIMPLE(X509, cert_info, X509_CINF), 230 .app_data = NULL,
153 ASN1_SIMPLE(X509, sig_alg, X509_ALGOR), 231 .flags = ASN1_AFLG_REFCOUNT,
154 ASN1_SIMPLE(X509, signature, ASN1_BIT_STRING) 232 .ref_offset = offsetof(X509, references),
155} ASN1_SEQUENCE_END_ref(X509, X509) 233 .ref_lock = CRYPTO_LOCK_X509,
234 .asn1_cb = x509_cb,
235 .enc_offset = 0,
236};
237static const ASN1_TEMPLATE X509_seq_tt[] = {
238 {
239 .flags = 0,
240 .tag = 0,
241 .offset = offsetof(X509, cert_info),
242 .field_name = "cert_info",
243 .item = &X509_CINF_it,
244 },
245 {
246 .flags = 0,
247 .tag = 0,
248 .offset = offsetof(X509, sig_alg),
249 .field_name = "sig_alg",
250 .item = &X509_ALGOR_it,
251 },
252 {
253 .flags = 0,
254 .tag = 0,
255 .offset = offsetof(X509, signature),
256 .field_name = "signature",
257 .item = &ASN1_BIT_STRING_it,
258 },
259};
260
261const ASN1_ITEM X509_it = {
262 .itype = ASN1_ITYPE_SEQUENCE,
263 .utype = V_ASN1_SEQUENCE,
264 .templates = X509_seq_tt,
265 .tcount = sizeof(X509_seq_tt) / sizeof(ASN1_TEMPLATE),
266 .funcs = &X509_aux,
267 .size = sizeof(X509),
268 .sname = "X509",
269};
156 270
157 271
158X509 * 272X509 *