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