summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/krb5/krb5_asn.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/krb5/krb5_asn.c')
-rw-r--r--src/lib/libcrypto/krb5/krb5_asn.c288
1 files changed, 276 insertions, 12 deletions
diff --git a/src/lib/libcrypto/krb5/krb5_asn.c b/src/lib/libcrypto/krb5/krb5_asn.c
index bcef47a7bd..1a95e62935 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.2 2014/06/12 15:49:29 deraadt Exp $ */ 1/* $OpenBSD: krb5_asn.c,v 1.3 2015/02/09 16:04:46 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*/
@@ -66,7 +66,31 @@ ASN1_SEQUENCE(KRB5_ENCDATA) = {
66 ASN1_EXP(KRB5_ENCDATA, cipher, ASN1_OCTET_STRING,2) 66 ASN1_EXP(KRB5_ENCDATA, cipher, ASN1_OCTET_STRING,2)
67} ASN1_SEQUENCE_END(KRB5_ENCDATA) 67} ASN1_SEQUENCE_END(KRB5_ENCDATA)
68 68
69IMPLEMENT_ASN1_FUNCTIONS(KRB5_ENCDATA) 69
70KRB5_ENCDATA *
71d2i_KRB5_ENCDATA(KRB5_ENCDATA **a, const unsigned char **in, long len)
72{
73 return (KRB5_ENCDATA *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
74 &KRB5_ENCDATA_it);
75}
76
77int
78i2d_KRB5_ENCDATA(KRB5_ENCDATA *a, unsigned char **out)
79{
80 return ASN1_item_i2d((ASN1_VALUE *)a, out, &KRB5_ENCDATA_it);
81}
82
83KRB5_ENCDATA *
84KRB5_ENCDATA_new(void)
85{
86 return (KRB5_ENCDATA *)ASN1_item_new(&KRB5_ENCDATA_it);
87}
88
89void
90KRB5_ENCDATA_free(KRB5_ENCDATA *a)
91{
92 ASN1_item_free((ASN1_VALUE *)a, &KRB5_ENCDATA_it);
93}
70 94
71 95
72ASN1_SEQUENCE(KRB5_PRINCNAME) = { 96ASN1_SEQUENCE(KRB5_PRINCNAME) = {
@@ -74,7 +98,31 @@ ASN1_SEQUENCE(KRB5_PRINCNAME) = {
74 ASN1_EXP_SEQUENCE_OF(KRB5_PRINCNAME, namestring, ASN1_GENERALSTRING, 1) 98 ASN1_EXP_SEQUENCE_OF(KRB5_PRINCNAME, namestring, ASN1_GENERALSTRING, 1)
75} ASN1_SEQUENCE_END(KRB5_PRINCNAME) 99} ASN1_SEQUENCE_END(KRB5_PRINCNAME)
76 100
77IMPLEMENT_ASN1_FUNCTIONS(KRB5_PRINCNAME) 101
102KRB5_PRINCNAME *
103d2i_KRB5_PRINCNAME(KRB5_PRINCNAME **a, const unsigned char **in, long len)
104{
105 return (KRB5_PRINCNAME *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
106 &KRB5_PRINCNAME_it);
107}
108
109int
110i2d_KRB5_PRINCNAME(KRB5_PRINCNAME *a, unsigned char **out)
111{
112 return ASN1_item_i2d((ASN1_VALUE *)a, out, &KRB5_PRINCNAME_it);
113}
114
115KRB5_PRINCNAME *
116KRB5_PRINCNAME_new(void)
117{
118 return (KRB5_PRINCNAME *)ASN1_item_new(&KRB5_PRINCNAME_it);
119}
120
121void
122KRB5_PRINCNAME_free(KRB5_PRINCNAME *a)
123{
124 ASN1_item_free((ASN1_VALUE *)a, &KRB5_PRINCNAME_it);
125}
78 126
79 127
80/* [APPLICATION 1] = 0x61 */ 128/* [APPLICATION 1] = 0x61 */
@@ -85,7 +133,31 @@ ASN1_SEQUENCE(KRB5_TKTBODY) = {
85 ASN1_EXP(KRB5_TKTBODY, encdata, KRB5_ENCDATA, 3) 133 ASN1_EXP(KRB5_TKTBODY, encdata, KRB5_ENCDATA, 3)
86} ASN1_SEQUENCE_END(KRB5_TKTBODY) 134} ASN1_SEQUENCE_END(KRB5_TKTBODY)
87 135
88IMPLEMENT_ASN1_FUNCTIONS(KRB5_TKTBODY) 136
137KRB5_TKTBODY *
138d2i_KRB5_TKTBODY(KRB5_TKTBODY **a, const unsigned char **in, long len)
139{
140 return (KRB5_TKTBODY *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
141 &KRB5_TKTBODY_it);
142}
143
144int
145i2d_KRB5_TKTBODY(KRB5_TKTBODY *a, unsigned char **out)
146{
147 return ASN1_item_i2d((ASN1_VALUE *)a, out, &KRB5_TKTBODY_it);
148}
149
150KRB5_TKTBODY *
151KRB5_TKTBODY_new(void)
152{
153 return (KRB5_TKTBODY *)ASN1_item_new(&KRB5_TKTBODY_it);
154}
155
156void
157KRB5_TKTBODY_free(KRB5_TKTBODY *a)
158{
159 ASN1_item_free((ASN1_VALUE *)a, &KRB5_TKTBODY_it);
160}
89 161
90 162
91ASN1_ITEM_TEMPLATE(KRB5_TICKET) = 163ASN1_ITEM_TEMPLATE(KRB5_TICKET) =
@@ -93,7 +165,31 @@ ASN1_ITEM_TEMPLATE(KRB5_TICKET) =
93 KRB5_TICKET, KRB5_TKTBODY) 165 KRB5_TICKET, KRB5_TKTBODY)
94ASN1_ITEM_TEMPLATE_END(KRB5_TICKET) 166ASN1_ITEM_TEMPLATE_END(KRB5_TICKET)
95 167
96IMPLEMENT_ASN1_FUNCTIONS(KRB5_TICKET) 168
169KRB5_TICKET *
170d2i_KRB5_TICKET(KRB5_TICKET **a, const unsigned char **in, long len)
171{
172 return (KRB5_TICKET *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
173 &KRB5_TICKET_it);
174}
175
176int
177i2d_KRB5_TICKET(KRB5_TICKET *a, unsigned char **out)
178{
179 return ASN1_item_i2d((ASN1_VALUE *)a, out, &KRB5_TICKET_it);
180}
181
182KRB5_TICKET *
183KRB5_TICKET_new(void)
184{
185 return (KRB5_TICKET *)ASN1_item_new(&KRB5_TICKET_it);
186}
187
188void
189KRB5_TICKET_free(KRB5_TICKET *a)
190{
191 ASN1_item_free((ASN1_VALUE *)a, &KRB5_TICKET_it);
192}
97 193
98 194
99/* [APPLICATION 14] = 0x6e */ 195/* [APPLICATION 14] = 0x6e */
@@ -105,14 +201,62 @@ ASN1_SEQUENCE(KRB5_APREQBODY) = {
105 ASN1_EXP(KRB5_APREQBODY, authenticator, KRB5_ENCDATA, 4), 201 ASN1_EXP(KRB5_APREQBODY, authenticator, KRB5_ENCDATA, 4),
106} ASN1_SEQUENCE_END(KRB5_APREQBODY) 202} ASN1_SEQUENCE_END(KRB5_APREQBODY)
107 203
108IMPLEMENT_ASN1_FUNCTIONS(KRB5_APREQBODY) 204
205KRB5_APREQBODY *
206d2i_KRB5_APREQBODY(KRB5_APREQBODY **a, const unsigned char **in, long len)
207{
208 return (KRB5_APREQBODY *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
209 &KRB5_APREQBODY_it);
210}
211
212int
213i2d_KRB5_APREQBODY(KRB5_APREQBODY *a, unsigned char **out)
214{
215 return ASN1_item_i2d((ASN1_VALUE *)a, out, &KRB5_APREQBODY_it);
216}
217
218KRB5_APREQBODY *
219KRB5_APREQBODY_new(void)
220{
221 return (KRB5_APREQBODY *)ASN1_item_new(&KRB5_APREQBODY_it);
222}
223
224void
225KRB5_APREQBODY_free(KRB5_APREQBODY *a)
226{
227 ASN1_item_free((ASN1_VALUE *)a, &KRB5_APREQBODY_it);
228}
109 229
110ASN1_ITEM_TEMPLATE(KRB5_APREQ) = 230ASN1_ITEM_TEMPLATE(KRB5_APREQ) =
111 ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_EXPTAG|ASN1_TFLG_APPLICATION, 14, 231 ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_EXPTAG|ASN1_TFLG_APPLICATION, 14,
112 KRB5_APREQ, KRB5_APREQBODY) 232 KRB5_APREQ, KRB5_APREQBODY)
113ASN1_ITEM_TEMPLATE_END(KRB5_APREQ) 233ASN1_ITEM_TEMPLATE_END(KRB5_APREQ)
114 234
115IMPLEMENT_ASN1_FUNCTIONS(KRB5_APREQ) 235
236KRB5_APREQ *
237d2i_KRB5_APREQ(KRB5_APREQ **a, const unsigned char **in, long len)
238{
239 return (KRB5_APREQ *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
240 &KRB5_APREQ_it);
241}
242
243int
244i2d_KRB5_APREQ(KRB5_APREQ *a, unsigned char **out)
245{
246 return ASN1_item_i2d((ASN1_VALUE *)a, out, &KRB5_APREQ_it);
247}
248
249KRB5_APREQ *
250KRB5_APREQ_new(void)
251{
252 return (KRB5_APREQ *)ASN1_item_new(&KRB5_APREQ_it);
253}
254
255void
256KRB5_APREQ_free(KRB5_APREQ *a)
257{
258 ASN1_item_free((ASN1_VALUE *)a, &KRB5_APREQ_it);
259}
116 260
117 261
118/* Authenticator stuff */ 262/* Authenticator stuff */
@@ -122,7 +266,31 @@ ASN1_SEQUENCE(KRB5_CHECKSUM) = {
122 ASN1_EXP(KRB5_CHECKSUM, checksum, ASN1_OCTET_STRING,1) 266 ASN1_EXP(KRB5_CHECKSUM, checksum, ASN1_OCTET_STRING,1)
123} ASN1_SEQUENCE_END(KRB5_CHECKSUM) 267} ASN1_SEQUENCE_END(KRB5_CHECKSUM)
124 268
125IMPLEMENT_ASN1_FUNCTIONS(KRB5_CHECKSUM) 269
270KRB5_CHECKSUM *
271d2i_KRB5_CHECKSUM(KRB5_CHECKSUM **a, const unsigned char **in, long len)
272{
273 return (KRB5_CHECKSUM *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
274 &KRB5_CHECKSUM_it);
275}
276
277int
278i2d_KRB5_CHECKSUM(KRB5_CHECKSUM *a, unsigned char **out)
279{
280 return ASN1_item_i2d((ASN1_VALUE *)a, out, &KRB5_CHECKSUM_it);
281}
282
283KRB5_CHECKSUM *
284KRB5_CHECKSUM_new(void)
285{
286 return (KRB5_CHECKSUM *)ASN1_item_new(&KRB5_CHECKSUM_it);
287}
288
289void
290KRB5_CHECKSUM_free(KRB5_CHECKSUM *a)
291{
292 ASN1_item_free((ASN1_VALUE *)a, &KRB5_CHECKSUM_it);
293}
126 294
127 295
128ASN1_SEQUENCE(KRB5_ENCKEY) = { 296ASN1_SEQUENCE(KRB5_ENCKEY) = {
@@ -130,7 +298,31 @@ ASN1_SEQUENCE(KRB5_ENCKEY) = {
130 ASN1_EXP(KRB5_ENCKEY, keyvalue, ASN1_OCTET_STRING,1) 298 ASN1_EXP(KRB5_ENCKEY, keyvalue, ASN1_OCTET_STRING,1)
131} ASN1_SEQUENCE_END(KRB5_ENCKEY) 299} ASN1_SEQUENCE_END(KRB5_ENCKEY)
132 300
133IMPLEMENT_ASN1_FUNCTIONS(KRB5_ENCKEY) 301
302KRB5_ENCKEY *
303d2i_KRB5_ENCKEY(KRB5_ENCKEY **a, const unsigned char **in, long len)
304{
305 return (KRB5_ENCKEY *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
306 &KRB5_ENCKEY_it);
307}
308
309int
310i2d_KRB5_ENCKEY(KRB5_ENCKEY *a, unsigned char **out)
311{
312 return ASN1_item_i2d((ASN1_VALUE *)a, out, &KRB5_ENCKEY_it);
313}
314
315KRB5_ENCKEY *
316KRB5_ENCKEY_new(void)
317{
318 return (KRB5_ENCKEY *)ASN1_item_new(&KRB5_ENCKEY_it);
319}
320
321void
322KRB5_ENCKEY_free(KRB5_ENCKEY *a)
323{
324 ASN1_item_free((ASN1_VALUE *)a, &KRB5_ENCKEY_it);
325}
134 326
135 327
136/* SEQ OF SEQ; see ASN1_EXP_SEQUENCE_OF_OPT() below */ 328/* SEQ OF SEQ; see ASN1_EXP_SEQUENCE_OF_OPT() below */
@@ -139,7 +331,31 @@ ASN1_SEQUENCE(KRB5_AUTHDATA) = {
139 ASN1_EXP(KRB5_AUTHDATA, addata, ASN1_OCTET_STRING,1) 331 ASN1_EXP(KRB5_AUTHDATA, addata, ASN1_OCTET_STRING,1)
140} ASN1_SEQUENCE_END(KRB5_AUTHDATA) 332} ASN1_SEQUENCE_END(KRB5_AUTHDATA)
141 333
142IMPLEMENT_ASN1_FUNCTIONS(KRB5_AUTHDATA) 334
335KRB5_AUTHDATA *
336d2i_KRB5_AUTHDATA(KRB5_AUTHDATA **a, const unsigned char **in, long len)
337{
338 return (KRB5_AUTHDATA *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
339 &KRB5_AUTHDATA_it);
340}
341
342int
343i2d_KRB5_AUTHDATA(KRB5_AUTHDATA *a, unsigned char **out)
344{
345 return ASN1_item_i2d((ASN1_VALUE *)a, out, &KRB5_AUTHDATA_it);
346}
347
348KRB5_AUTHDATA *
349KRB5_AUTHDATA_new(void)
350{
351 return (KRB5_AUTHDATA *)ASN1_item_new(&KRB5_AUTHDATA_it);
352}
353
354void
355KRB5_AUTHDATA_free(KRB5_AUTHDATA *a)
356{
357 ASN1_item_free((ASN1_VALUE *)a, &KRB5_AUTHDATA_it);
358}
143 359
144 360
145/* [APPLICATION 2] = 0x62 */ 361/* [APPLICATION 2] = 0x62 */
@@ -156,12 +372,60 @@ ASN1_SEQUENCE(KRB5_AUTHENTBODY) = {
156 (KRB5_AUTHENTBODY, authorization, KRB5_AUTHDATA, 8), 372 (KRB5_AUTHENTBODY, authorization, KRB5_AUTHDATA, 8),
157} ASN1_SEQUENCE_END(KRB5_AUTHENTBODY) 373} ASN1_SEQUENCE_END(KRB5_AUTHENTBODY)
158 374
159IMPLEMENT_ASN1_FUNCTIONS(KRB5_AUTHENTBODY) 375
376KRB5_AUTHENTBODY *
377d2i_KRB5_AUTHENTBODY(KRB5_AUTHENTBODY **a, const unsigned char **in, long len)
378{
379 return (KRB5_AUTHENTBODY *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
380 &KRB5_AUTHENTBODY_it);
381}
382
383int
384i2d_KRB5_AUTHENTBODY(KRB5_AUTHENTBODY *a, unsigned char **out)
385{
386 return ASN1_item_i2d((ASN1_VALUE *)a, out, &KRB5_AUTHENTBODY_it);
387}
388
389KRB5_AUTHENTBODY *
390KRB5_AUTHENTBODY_new(void)
391{
392 return (KRB5_AUTHENTBODY *)ASN1_item_new(&KRB5_AUTHENTBODY_it);
393}
394
395void
396KRB5_AUTHENTBODY_free(KRB5_AUTHENTBODY *a)
397{
398 ASN1_item_free((ASN1_VALUE *)a, &KRB5_AUTHENTBODY_it);
399}
160 400
161ASN1_ITEM_TEMPLATE(KRB5_AUTHENT) = 401ASN1_ITEM_TEMPLATE(KRB5_AUTHENT) =
162 ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_EXPTAG|ASN1_TFLG_APPLICATION, 2, 402 ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_EXPTAG|ASN1_TFLG_APPLICATION, 2,
163 KRB5_AUTHENT, KRB5_AUTHENTBODY) 403 KRB5_AUTHENT, KRB5_AUTHENTBODY)
164ASN1_ITEM_TEMPLATE_END(KRB5_AUTHENT) 404ASN1_ITEM_TEMPLATE_END(KRB5_AUTHENT)
165 405
166IMPLEMENT_ASN1_FUNCTIONS(KRB5_AUTHENT) 406
407KRB5_AUTHENT *
408d2i_KRB5_AUTHENT(KRB5_AUTHENT **a, const unsigned char **in, long len)
409{
410 return (KRB5_AUTHENT *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
411 &KRB5_AUTHENT_it);
412}
413
414int
415i2d_KRB5_AUTHENT(KRB5_AUTHENT *a, unsigned char **out)
416{
417 return ASN1_item_i2d((ASN1_VALUE *)a, out, &KRB5_AUTHENT_it);
418}
419
420KRB5_AUTHENT *
421KRB5_AUTHENT_new(void)
422{
423 return (KRB5_AUTHENT *)ASN1_item_new(&KRB5_AUTHENT_it);
424}
425
426void
427KRB5_AUTHENT_free(KRB5_AUTHENT *a)
428{
429 ASN1_item_free((ASN1_VALUE *)a, &KRB5_AUTHENT_it);
430}
167 431