1 /* Generated from spnego.asn1 */
9 #include <spnego_asn1.h>
12 #include <parse_units.h>
14 #define BACK if (e) return e; p -= l; len -= l; ret += l
17 encode_NegTokenInit(unsigned char *p, size_t len, const NegTokenInit *data, size_t *size)
24 if((data)->mechListMIC)
28 e = encode_octet_string(p, len, (data)->mechListMIC, &l);
30 e = der_put_length_and_tag (p, len, ret, CONTEXT, CONS, 3, &l);
38 e = encode_octet_string(p, len, (data)->mechToken, &l);
40 e = der_put_length_and_tag (p, len, ret, CONTEXT, CONS, 2, &l);
48 e = encode_ContextFlags(p, len, (data)->reqFlags, &l);
50 e = der_put_length_and_tag (p, len, ret, CONTEXT, CONS, 1, &l);
58 e = encode_MechTypeList(p, len, (data)->mechTypes, &l);
60 e = der_put_length_and_tag (p, len, ret, CONTEXT, CONS, 0, &l);
64 e = der_put_length_and_tag (p, len, ret, UNIV, CONS, UT_Sequence, &l);
70 #define FORW if(e) goto fail; p += l; len -= l; ret += l
73 decode_NegTokenInit(const unsigned char *p, size_t len, NegTokenInit *data, size_t *size)
75 size_t ret = 0, reallen;
79 memset(data, 0, sizeof(*data));
81 e = der_match_tag_and_length (p, len, UNIV, CONS, UT_Sequence,&reallen, &l);
85 if((dce_fix = fix_dce(reallen, &len)) < 0)
86 return ASN1_BAD_FORMAT;
88 size_t newlen, oldlen;
90 e = der_match_tag (p, len, CONTEXT, CONS, 0, &l);
92 (data)->mechTypes = NULL;
97 e = der_get_length (p, len, &newlen, &l);
102 if((dce_fix = fix_dce(newlen, &len)) < 0)return ASN1_BAD_FORMAT;
103 (data)->mechTypes = malloc(sizeof(*(data)->mechTypes));
104 if((data)->mechTypes == NULL) return ENOMEM;
105 e = decode_MechTypeList(p, len, (data)->mechTypes, &l);
108 e = der_match_tag_and_length (p, len, (Der_class)0, (Der_type)0, 0, &reallen, &l);
111 len = oldlen - newlen;
116 size_t newlen, oldlen;
118 e = der_match_tag (p, len, CONTEXT, CONS, 1, &l);
120 (data)->reqFlags = NULL;
125 e = der_get_length (p, len, &newlen, &l);
130 if((dce_fix = fix_dce(newlen, &len)) < 0)return ASN1_BAD_FORMAT;
131 (data)->reqFlags = malloc(sizeof(*(data)->reqFlags));
132 if((data)->reqFlags == NULL) return ENOMEM;
133 e = decode_ContextFlags(p, len, (data)->reqFlags, &l);
136 e = der_match_tag_and_length (p, len, (Der_class)0, (Der_type)0, 0, &reallen, &l);
139 len = oldlen - newlen;
144 size_t newlen, oldlen;
146 e = der_match_tag (p, len, CONTEXT, CONS, 2, &l);
148 (data)->mechToken = NULL;
153 e = der_get_length (p, len, &newlen, &l);
158 if((dce_fix = fix_dce(newlen, &len)) < 0)return ASN1_BAD_FORMAT;
159 (data)->mechToken = malloc(sizeof(*(data)->mechToken));
160 if((data)->mechToken == NULL) return ENOMEM;
161 e = decode_octet_string(p, len, (data)->mechToken, &l);
164 e = der_match_tag_and_length (p, len, (Der_class)0, (Der_type)0, 0, &reallen, &l);
167 len = oldlen - newlen;
172 size_t newlen, oldlen;
174 e = der_match_tag (p, len, CONTEXT, CONS, 3, &l);
176 (data)->mechListMIC = NULL;
181 e = der_get_length (p, len, &newlen, &l);
186 if((dce_fix = fix_dce(newlen, &len)) < 0)return ASN1_BAD_FORMAT;
187 (data)->mechListMIC = malloc(sizeof(*(data)->mechListMIC));
188 if((data)->mechListMIC == NULL) return ENOMEM;
189 e = decode_octet_string(p, len, (data)->mechListMIC, &l);
192 e = der_match_tag_and_length (p, len, (Der_class)0, (Der_type)0, 0, &reallen, &l);
195 len = oldlen - newlen;
200 e = der_match_tag_and_length (p, len, (Der_class)0, (Der_type)0, 0, &reallen, &l);
204 if(size) *size = ret;
207 free_NegTokenInit(data);
212 free_NegTokenInit(NegTokenInit *data)
214 if((data)->mechTypes) {
215 free_MechTypeList((data)->mechTypes);
216 free((data)->mechTypes);
218 if((data)->reqFlags) {
219 free_ContextFlags((data)->reqFlags);
220 free((data)->reqFlags);
222 if((data)->mechToken) {
223 free_octet_string((data)->mechToken);
224 free((data)->mechToken);
226 if((data)->mechListMIC) {
227 free_octet_string((data)->mechListMIC);
228 free((data)->mechListMIC);
233 length_NegTokenInit(const NegTokenInit *data)
236 if((data)->mechTypes){
239 ret += length_MechTypeList((data)->mechTypes);
240 ret += 1 + length_len(ret) + oldret;
242 if((data)->reqFlags){
245 ret += length_ContextFlags((data)->reqFlags);
246 ret += 1 + length_len(ret) + oldret;
248 if((data)->mechToken){
251 ret += length_octet_string((data)->mechToken);
252 ret += 1 + length_len(ret) + oldret;
254 if((data)->mechListMIC){
257 ret += length_octet_string((data)->mechListMIC);
258 ret += 1 + length_len(ret) + oldret;
260 ret += 1 + length_len(ret);
265 copy_NegTokenInit(const NegTokenInit *from, NegTokenInit *to)
267 if((from)->mechTypes) {
268 (to)->mechTypes = malloc(sizeof(*(to)->mechTypes));
269 if((to)->mechTypes == NULL) return ENOMEM;
270 if(copy_MechTypeList((from)->mechTypes, (to)->mechTypes)) return ENOMEM;
272 (to)->mechTypes = NULL;
273 if((from)->reqFlags) {
274 (to)->reqFlags = malloc(sizeof(*(to)->reqFlags));
275 if((to)->reqFlags == NULL) return ENOMEM;
276 if(copy_ContextFlags((from)->reqFlags, (to)->reqFlags)) return ENOMEM;
278 (to)->reqFlags = NULL;
279 if((from)->mechToken) {
280 (to)->mechToken = malloc(sizeof(*(to)->mechToken));
281 if((to)->mechToken == NULL) return ENOMEM;
282 if(copy_octet_string((from)->mechToken, (to)->mechToken)) return ENOMEM;
284 (to)->mechToken = NULL;
285 if((from)->mechListMIC) {
286 (to)->mechListMIC = malloc(sizeof(*(to)->mechListMIC));
287 if((to)->mechListMIC == NULL) return ENOMEM;
288 if(copy_octet_string((from)->mechListMIC, (to)->mechListMIC)) return ENOMEM;
290 (to)->mechListMIC = NULL;