summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/x509v3/v3_genn.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/x509v3/v3_genn.c')
-rw-r--r--src/lib/libcrypto/x509v3/v3_genn.c168
1 files changed, 145 insertions, 23 deletions
diff --git a/src/lib/libcrypto/x509v3/v3_genn.c b/src/lib/libcrypto/x509v3/v3_genn.c
index 25d7f447d2..9943fd33d2 100644
--- a/src/lib/libcrypto/x509v3/v3_genn.c
+++ b/src/lib/libcrypto/x509v3/v3_genn.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: v3_genn.c,v 1.10 2015/02/09 16:03:11 jsing Exp $ */ 1/* $OpenBSD: v3_genn.c,v 1.11 2015/07/25 16:00:14 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 1999. 3 * project 1999.
4 */ 4 */
@@ -63,11 +63,33 @@
63#include <openssl/conf.h> 63#include <openssl/conf.h>
64#include <openssl/x509v3.h> 64#include <openssl/x509v3.h>
65 65
66ASN1_SEQUENCE(OTHERNAME) = { 66static const ASN1_TEMPLATE OTHERNAME_seq_tt[] = {
67 ASN1_SIMPLE(OTHERNAME, type_id, ASN1_OBJECT), 67 {
68 .flags = 0,
69 .tag = 0,
70 .offset = offsetof(OTHERNAME, type_id),
71 .field_name = "type_id",
72 .item = &ASN1_OBJECT_it,
73 },
68 /* Maybe have a true ANY DEFINED BY later */ 74 /* Maybe have a true ANY DEFINED BY later */
69 ASN1_EXP(OTHERNAME, value, ASN1_ANY, 0) 75 {
70} ASN1_SEQUENCE_END(OTHERNAME) 76 .flags = ASN1_TFLG_EXPLICIT,
77 .tag = 0,
78 .offset = offsetof(OTHERNAME, value),
79 .field_name = "value",
80 .item = &ASN1_ANY_it,
81 },
82};
83
84const ASN1_ITEM OTHERNAME_it = {
85 .itype = ASN1_ITYPE_SEQUENCE,
86 .utype = V_ASN1_SEQUENCE,
87 .templates = OTHERNAME_seq_tt,
88 .tcount = sizeof(OTHERNAME_seq_tt) / sizeof(ASN1_TEMPLATE),
89 .funcs = NULL,
90 .size = sizeof(OTHERNAME),
91 .sname = "OTHERNAME",
92};
71 93
72 94
73OTHERNAME * 95OTHERNAME *
@@ -95,10 +117,32 @@ OTHERNAME_free(OTHERNAME *a)
95 ASN1_item_free((ASN1_VALUE *)a, &OTHERNAME_it); 117 ASN1_item_free((ASN1_VALUE *)a, &OTHERNAME_it);
96} 118}
97 119
98ASN1_SEQUENCE(EDIPARTYNAME) = { 120static const ASN1_TEMPLATE EDIPARTYNAME_seq_tt[] = {
99 ASN1_IMP_OPT(EDIPARTYNAME, nameAssigner, DIRECTORYSTRING, 0), 121 {
100 ASN1_IMP_OPT(EDIPARTYNAME, partyName, DIRECTORYSTRING, 1) 122 .flags = ASN1_TFLG_IMPLICIT | ASN1_TFLG_OPTIONAL,
101} ASN1_SEQUENCE_END(EDIPARTYNAME) 123 .tag = 0,
124 .offset = offsetof(EDIPARTYNAME, nameAssigner),
125 .field_name = "nameAssigner",
126 .item = &DIRECTORYSTRING_it,
127 },
128 {
129 .flags = ASN1_TFLG_IMPLICIT | ASN1_TFLG_OPTIONAL,
130 .tag = 1,
131 .offset = offsetof(EDIPARTYNAME, partyName),
132 .field_name = "partyName",
133 .item = &DIRECTORYSTRING_it,
134 },
135};
136
137const ASN1_ITEM EDIPARTYNAME_it = {
138 .itype = ASN1_ITYPE_SEQUENCE,
139 .utype = V_ASN1_SEQUENCE,
140 .templates = EDIPARTYNAME_seq_tt,
141 .tcount = sizeof(EDIPARTYNAME_seq_tt) / sizeof(ASN1_TEMPLATE),
142 .funcs = NULL,
143 .size = sizeof(EDIPARTYNAME),
144 .sname = "EDIPARTYNAME",
145};
102 146
103 147
104EDIPARTYNAME * 148EDIPARTYNAME *
@@ -126,19 +170,83 @@ EDIPARTYNAME_free(EDIPARTYNAME *a)
126 ASN1_item_free((ASN1_VALUE *)a, &EDIPARTYNAME_it); 170 ASN1_item_free((ASN1_VALUE *)a, &EDIPARTYNAME_it);
127} 171}
128 172
129ASN1_CHOICE(GENERAL_NAME) = { 173static const ASN1_TEMPLATE GENERAL_NAME_ch_tt[] = {
130 ASN1_IMP(GENERAL_NAME, d.otherName, OTHERNAME, GEN_OTHERNAME), 174 {
131 ASN1_IMP(GENERAL_NAME, d.rfc822Name, ASN1_IA5STRING, GEN_EMAIL), 175 .flags = ASN1_TFLG_IMPLICIT,
132 ASN1_IMP(GENERAL_NAME, d.dNSName, ASN1_IA5STRING, GEN_DNS), 176 .tag = GEN_OTHERNAME,
177 .offset = offsetof(GENERAL_NAME, d.otherName),
178 .field_name = "d.otherName",
179 .item = &OTHERNAME_it,
180 },
181 {
182 .flags = ASN1_TFLG_IMPLICIT,
183 .tag = GEN_EMAIL,
184 .offset = offsetof(GENERAL_NAME, d.rfc822Name),
185 .field_name = "d.rfc822Name",
186 .item = &ASN1_IA5STRING_it,
187 },
188 {
189 .flags = ASN1_TFLG_IMPLICIT,
190 .tag = GEN_DNS,
191 .offset = offsetof(GENERAL_NAME, d.dNSName),
192 .field_name = "d.dNSName",
193 .item = &ASN1_IA5STRING_it,
194 },
133 /* Don't decode this */ 195 /* Don't decode this */
134 ASN1_IMP(GENERAL_NAME, d.x400Address, ASN1_SEQUENCE, GEN_X400), 196 {
197 .flags = ASN1_TFLG_IMPLICIT,
198 .tag = GEN_X400,
199 .offset = offsetof(GENERAL_NAME, d.x400Address),
200 .field_name = "d.x400Address",
201 .item = &ASN1_SEQUENCE_it,
202 },
135 /* X509_NAME is a CHOICE type so use EXPLICIT */ 203 /* X509_NAME is a CHOICE type so use EXPLICIT */
136 ASN1_EXP(GENERAL_NAME, d.directoryName, X509_NAME, GEN_DIRNAME), 204 {
137 ASN1_IMP(GENERAL_NAME, d.ediPartyName, EDIPARTYNAME, GEN_EDIPARTY), 205 .flags = ASN1_TFLG_EXPLICIT,
138 ASN1_IMP(GENERAL_NAME, d.uniformResourceIdentifier, ASN1_IA5STRING, GEN_URI), 206 .tag = GEN_DIRNAME,
139 ASN1_IMP(GENERAL_NAME, d.iPAddress, ASN1_OCTET_STRING, GEN_IPADD), 207 .offset = offsetof(GENERAL_NAME, d.directoryName),
140 ASN1_IMP(GENERAL_NAME, d.registeredID, ASN1_OBJECT, GEN_RID) 208 .field_name = "d.directoryName",
141} ASN1_CHOICE_END(GENERAL_NAME) 209 .item = &X509_NAME_it,
210 },
211 {
212 .flags = ASN1_TFLG_IMPLICIT,
213 .tag = GEN_EDIPARTY,
214 .offset = offsetof(GENERAL_NAME, d.ediPartyName),
215 .field_name = "d.ediPartyName",
216 .item = &EDIPARTYNAME_it,
217 },
218 {
219 .flags = ASN1_TFLG_IMPLICIT,
220 .tag = GEN_URI,
221 .offset = offsetof(GENERAL_NAME, d.uniformResourceIdentifier),
222 .field_name = "d.uniformResourceIdentifier",
223 .item = &ASN1_IA5STRING_it,
224 },
225 {
226 .flags = ASN1_TFLG_IMPLICIT,
227 .tag = GEN_IPADD,
228 .offset = offsetof(GENERAL_NAME, d.iPAddress),
229 .field_name = "d.iPAddress",
230 .item = &ASN1_OCTET_STRING_it,
231 },
232 {
233 .flags = ASN1_TFLG_IMPLICIT,
234 .tag = GEN_RID,
235 .offset = offsetof(GENERAL_NAME, d.registeredID),
236 .field_name = "d.registeredID",
237 .item = &ASN1_OBJECT_it,
238 },
239};
240
241const ASN1_ITEM GENERAL_NAME_it = {
242 .itype = ASN1_ITYPE_CHOICE,
243 .utype = offsetof(GENERAL_NAME, type),
244 .templates = GENERAL_NAME_ch_tt,
245 .tcount = sizeof(GENERAL_NAME_ch_tt) / sizeof(ASN1_TEMPLATE),
246 .funcs = NULL,
247 .size = sizeof(GENERAL_NAME),
248 .sname = "GENERAL_NAME",
249};
142 250
143 251
144GENERAL_NAME * 252GENERAL_NAME *
@@ -166,9 +274,23 @@ GENERAL_NAME_free(GENERAL_NAME *a)
166 ASN1_item_free((ASN1_VALUE *)a, &GENERAL_NAME_it); 274 ASN1_item_free((ASN1_VALUE *)a, &GENERAL_NAME_it);
167} 275}
168 276
169ASN1_ITEM_TEMPLATE(GENERAL_NAMES) = 277static const ASN1_TEMPLATE GENERAL_NAMES_item_tt = {
170 ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SEQUENCE_OF, 0, GeneralNames, GENERAL_NAME) 278 .flags = ASN1_TFLG_SEQUENCE_OF,
171ASN1_ITEM_TEMPLATE_END(GENERAL_NAMES) 279 .tag = 0,
280 .offset = 0,
281 .field_name = "GeneralNames",
282 .item = &GENERAL_NAME_it,
283};
284
285const ASN1_ITEM GENERAL_NAMES_it = {
286 .itype = ASN1_ITYPE_PRIMITIVE,
287 .utype = -1,
288 .templates = &GENERAL_NAMES_item_tt,
289 .tcount = 0,
290 .funcs = NULL,
291 .size = 0,
292 .sname = "GENERAL_NAMES",
293};
172 294
173 295
174GENERAL_NAMES * 296GENERAL_NAMES *