1 | /* Generated from gssapi.asn1 */ |
2 | /* Do not edit */ |
3 | |
4 | #define ASN1_LIB |
5 | |
6 | #include <stdio.h> |
7 | #include <stdlib.h> |
8 | #include <time.h> |
9 | #include <string.h> |
10 | #include <errno.h> |
11 | #include <limits.h> |
12 | #include <krb5/krb5-types.h> |
13 | #include "gssapi_asn1.h" |
14 | #include "gssapi_asn1-priv.h" |
15 | #include <krb5/asn1_err.h> |
16 | #include <krb5/der.h> |
17 | #include <asn1-template.h> |
18 | |
19 | #include <krb5/parse_units.h> |
20 | |
21 | int ASN1CALL |
22 | encode_GSSAPIContextToken(unsigned char *p HEIMDAL_UNUSED_ATTRIBUTE, size_t len HEIMDAL_UNUSED_ATTRIBUTE, const GSSAPIContextToken *data, size_t *size) |
23 | { |
24 | size_t ret HEIMDAL_UNUSED_ATTRIBUTE = 0; |
25 | size_t l HEIMDAL_UNUSED_ATTRIBUTE; |
26 | int i HEIMDAL_UNUSED_ATTRIBUTE, e HEIMDAL_UNUSED_ATTRIBUTE; |
27 | |
28 | /* innerContextToken */ |
29 | { |
30 | size_t Top_tag_oldret HEIMDAL_UNUSED_ATTRIBUTE = ret; |
31 | ret = 0; |
32 | e = encode_heim_any_set(p, len, &(data)->innerContextToken, &l); |
33 | if (e) return e; |
34 | p -= l; len -= l; ret += l; |
35 | |
36 | ret += Top_tag_oldret; |
37 | } |
38 | /* thisMech */ |
39 | { |
40 | size_t Top_tag_oldret HEIMDAL_UNUSED_ATTRIBUTE = ret; |
41 | ret = 0; |
42 | e = der_put_oid(p, len, &(data)->thisMech, &l); |
43 | if (e) return e; |
44 | p -= l; len -= l; ret += l; |
45 | |
46 | e = der_put_length_and_tag (p, len, ret, ASN1_C_UNIV, PRIM, UT_OID, &l); |
47 | if (e) return e; |
48 | p -= l; len -= l; ret += l; |
49 | |
50 | ret += Top_tag_oldret; |
51 | } |
52 | e = der_put_length_and_tag (p, len, ret, ASN1_C_APPL, CONS, 0, &l); |
53 | if (e) return e; |
54 | p -= l; len -= l; ret += l; |
55 | |
56 | *size = ret; |
57 | return 0; |
58 | } |
59 | |
60 | int ASN1CALL |
61 | decode_GSSAPIContextToken(const unsigned char *p HEIMDAL_UNUSED_ATTRIBUTE, size_t len HEIMDAL_UNUSED_ATTRIBUTE, GSSAPIContextToken *data, size_t *size) |
62 | { |
63 | size_t ret = 0; |
64 | size_t l HEIMDAL_UNUSED_ATTRIBUTE; |
65 | int e HEIMDAL_UNUSED_ATTRIBUTE; |
66 | |
67 | memset(data, 0, sizeof(*data)); |
68 | { |
69 | size_t Top_datalen, Top_oldlen; |
70 | Der_type Top_type; |
71 | e = der_match_tag_and_length(p, len, ASN1_C_APPL, &Top_type, 0, &Top_datalen, &l); |
72 | if (e == 0 && Top_type != CONS) { e = ASN1_BAD_ID; } |
73 | if(e) goto fail; |
74 | p += l; len -= l; ret += l; |
75 | Top_oldlen = len; |
76 | if (Top_datalen > len) { e = ASN1_OVERRUN; goto fail; } |
77 | len = Top_datalen; |
78 | { |
79 | size_t thisMech_datalen, thisMech_oldlen; |
80 | Der_type thisMech_type; |
81 | e = der_match_tag_and_length(p, len, ASN1_C_UNIV, &thisMech_type, UT_OID, &thisMech_datalen, &l); |
82 | if (e == 0 && thisMech_type != PRIM) { e = ASN1_BAD_ID; } |
83 | if(e) goto fail; |
84 | p += l; len -= l; ret += l; |
85 | thisMech_oldlen = len; |
86 | if (thisMech_datalen > len) { e = ASN1_OVERRUN; goto fail; } |
87 | len = thisMech_datalen; |
88 | e = der_get_oid(p, len, &(data)->thisMech, &l); |
89 | if(e) goto fail; |
90 | p += l; len -= l; ret += l; |
91 | len = thisMech_oldlen - thisMech_datalen; |
92 | } |
93 | e = decode_heim_any_set(p, len, &(data)->innerContextToken, &l); |
94 | if(e) goto fail; |
95 | p += l; len -= l; ret += l; |
96 | len = Top_oldlen - Top_datalen; |
97 | } |
98 | if(size) *size = ret; |
99 | return 0; |
100 | fail: |
101 | free_GSSAPIContextToken(data); |
102 | return e; |
103 | } |
104 | |
105 | void ASN1CALL |
106 | free_GSSAPIContextToken(GSSAPIContextToken *data) |
107 | { |
108 | der_free_oid(&(data)->thisMech); |
109 | free_heim_any_set(&(data)->innerContextToken); |
110 | } |
111 | |
112 | size_t ASN1CALL |
113 | length_GSSAPIContextToken(const GSSAPIContextToken *data) |
114 | { |
115 | size_t ret = 0; |
116 | { |
117 | size_t Top_tag_oldret = ret; |
118 | ret = 0; |
119 | ret += der_length_oid(&(data)->thisMech); |
120 | ret += 1 + der_length_len (ret); |
121 | ret += Top_tag_oldret; |
122 | } |
123 | { |
124 | size_t Top_tag_oldret = ret; |
125 | ret = 0; |
126 | ret += length_heim_any_set(&(data)->innerContextToken); |
127 | ret += Top_tag_oldret; |
128 | } |
129 | ret += 1 + der_length_len (ret); |
130 | return ret; |
131 | } |
132 | |
133 | int ASN1CALL |
134 | copy_GSSAPIContextToken(const GSSAPIContextToken *from, GSSAPIContextToken *to) |
135 | { |
136 | memset(to, 0, sizeof(*to)); |
137 | if(der_copy_oid(&(from)->thisMech, &(to)->thisMech)) goto fail; |
138 | if(copy_heim_any_set(&(from)->innerContextToken, &(to)->innerContextToken)) goto fail; |
139 | return 0; |
140 | fail: |
141 | free_GSSAPIContextToken(to); |
142 | return ENOMEM; |
143 | } |
144 | |
145 | |