1 /* krb5_asn.h */
2 /* Written by Vern Staats <staatsvr@asc.hpc.mil> for the OpenSSL project,
3 ** using ocsp/{*.h,*asn*.c} as a starting point
4 */
5 
6 /* ====================================================================
7  * Copyright (c) 1998-2000 The OpenSSL Project.  All rights reserved.
8  *
9  * Redistribution and use in source and binary forms, with or without
10  * modification, are permitted provided that the following conditions
11  * are met:
12  *
13  * 1. Redistributions of source code must retain the above copyright
14  *    notice, this list of conditions and the following disclaimer.
15  *
16  * 2. Redistributions in binary form must reproduce the above copyright
17  *    notice, this list of conditions and the following disclaimer in
18  *    the documentation and/or other materials provided with the
19  *    distribution.
20  *
21  * 3. All advertising materials mentioning features or use of this
22  *    software must display the following acknowledgment:
23  *    "This product includes software developed by the OpenSSL Project
24  *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
25  *
26  * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
27  *    endorse or promote products derived from this software without
28  *    prior written permission. For written permission, please contact
29  *    openssl-core@openssl.org.
30  *
31  * 5. Products derived from this software may not be called "OpenSSL"
32  *    nor may "OpenSSL" appear in their names without prior written
33  *    permission of the OpenSSL Project.
34  *
35  * 6. Redistributions of any form whatsoever must retain the following
36  *    acknowledgment:
37  *    "This product includes software developed by the OpenSSL Project
38  *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
39  *
40  * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
41  * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
42  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
43  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
44  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
45  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
46  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
47  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
49  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
50  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
51  * OF THE POSSIBILITY OF SUCH DAMAGE.
52  * ====================================================================
53  *
54  * This product includes cryptographic software written by Eric Young
55  * (eay@cryptsoft.com).  This product includes software written by Tim
56  * Hudson (tjh@cryptsoft.com).
57  *
58  */
59 
60 #ifndef HEADER_KRB5_ASN_H
61 #define HEADER_KRB5_ASN_H
62 
63 /*
64 #include <krb5.h>
65 */
66 #include <openssl/safestack.h>
67 
68 #ifdef  __cplusplus
69 extern "C" {
70 #endif
71 
72 
73 /*	ASN.1 from Kerberos RFC 1510
74 */
75 
76 /*	EncryptedData ::=   SEQUENCE {
77 **		etype[0]                      INTEGER, -- EncryptionType
78 **		kvno[1]                       INTEGER OPTIONAL,
79 **		cipher[2]                     OCTET STRING -- ciphertext
80 **	}
81 */
82 typedef	struct	krb5_encdata_st
83 	{
84 	ASN1_INTEGER			*etype;
85 	ASN1_INTEGER			*kvno;
86 	ASN1_OCTET_STRING		*cipher;
87 	}	KRB5_ENCDATA;
88 
89 DECLARE_STACK_OF(KRB5_ENCDATA)
90 
91 /*	PrincipalName ::=   SEQUENCE {
92 **		name-type[0]                  INTEGER,
93 **		name-string[1]                SEQUENCE OF GeneralString
94 **	}
95 */
96 typedef	struct	krb5_princname_st
97 	{
98 	ASN1_INTEGER			*nametype;
99 	STACK_OF(ASN1_GENERALSTRING)	*namestring;
100 	}	KRB5_PRINCNAME;
101 
102 DECLARE_STACK_OF(KRB5_PRINCNAME)
103 
104 
105 /*	Ticket ::=	[APPLICATION 1] SEQUENCE {
106 **		tkt-vno[0]                    INTEGER,
107 **		realm[1]                      Realm,
108 **		sname[2]                      PrincipalName,
109 **		enc-part[3]                   EncryptedData
110 **	}
111 */
112 typedef	struct	krb5_tktbody_st
113 	{
114 	ASN1_INTEGER			*tktvno;
115 	ASN1_GENERALSTRING		*realm;
116 	KRB5_PRINCNAME			*sname;
117 	KRB5_ENCDATA			*encdata;
118 	}	KRB5_TKTBODY;
119 
120 typedef STACK_OF(KRB5_TKTBODY) KRB5_TICKET;
121 DECLARE_STACK_OF(KRB5_TKTBODY)
122 
123 
124 /*	AP-REQ ::=      [APPLICATION 14] SEQUENCE {
125 **		pvno[0]                       INTEGER,
126 **		msg-type[1]                   INTEGER,
127 **		ap-options[2]                 APOptions,
128 **		ticket[3]                     Ticket,
129 **		authenticator[4]              EncryptedData
130 **	}
131 **
132 **	APOptions ::=   BIT STRING {
133 **		reserved(0), use-session-key(1), mutual-required(2) }
134 */
135 typedef	struct	krb5_ap_req_st
136 	{
137 	ASN1_INTEGER			*pvno;
138 	ASN1_INTEGER			*msgtype;
139 	ASN1_BIT_STRING			*apoptions;
140 	KRB5_TICKET			*ticket;
141 	KRB5_ENCDATA			*authenticator;
142 	}	KRB5_APREQBODY;
143 
144 typedef STACK_OF(KRB5_APREQBODY) KRB5_APREQ;
145 DECLARE_STACK_OF(KRB5_APREQBODY)
146 
147 
148 /*	Authenticator Stuff	*/
149 
150 
151 /*	Checksum ::=   SEQUENCE {
152 **		cksumtype[0]                  INTEGER,
153 **		checksum[1]                   OCTET STRING
154 **	}
155 */
156 typedef	struct	krb5_checksum_st
157 	{
158 	ASN1_INTEGER			*ctype;
159 	ASN1_OCTET_STRING		*checksum;
160 	}	KRB5_CHECKSUM;
161 
162 DECLARE_STACK_OF(KRB5_CHECKSUM)
163 
164 
165 /*	EncryptionKey ::=   SEQUENCE {
166 **		keytype[0]                    INTEGER,
167 **		keyvalue[1]                   OCTET STRING
168 **	}
169 */
170 typedef struct  krb5_encryptionkey_st
171 	{
172 	ASN1_INTEGER			*ktype;
173 	ASN1_OCTET_STRING		*keyvalue;
174 	}	KRB5_ENCKEY;
175 
176 DECLARE_STACK_OF(KRB5_ENCKEY)
177 
178 
179 /*	AuthorizationData ::=   SEQUENCE OF SEQUENCE {
180 **		ad-type[0]                    INTEGER,
181 **              ad-data[1]                    OCTET STRING
182 **	}
183 */
184 typedef struct	krb5_authorization_st
185 	{
186 	ASN1_INTEGER			*adtype;
187 	ASN1_OCTET_STRING		*addata;
188 	}	KRB5_AUTHDATA;
189 
190 DECLARE_STACK_OF(KRB5_AUTHDATA)
191 
192 
193 /*	-- Unencrypted authenticator
194 **	Authenticator ::=    [APPLICATION 2] SEQUENCE    {
195 **		authenticator-vno[0]          INTEGER,
196 **		crealm[1]                     Realm,
197 **		cname[2]                      PrincipalName,
198 **		cksum[3]                      Checksum OPTIONAL,
199 **		cusec[4]                      INTEGER,
200 **		ctime[5]                      KerberosTime,
201 **		subkey[6]                     EncryptionKey OPTIONAL,
202 **		seq-number[7]                 INTEGER OPTIONAL,
203 **		authorization-data[8]         AuthorizationData OPTIONAL
204 **	}
205 */
206 typedef struct	krb5_authenticator_st
207 	{
208 	ASN1_INTEGER			*avno;
209 	ASN1_GENERALSTRING		*crealm;
210 	KRB5_PRINCNAME			*cname;
211 	KRB5_CHECKSUM			*cksum;
212 	ASN1_INTEGER			*cusec;
213 	ASN1_GENERALIZEDTIME		*ctime;
214 	KRB5_ENCKEY			*subkey;
215 	ASN1_INTEGER			*seqnum;
216 	KRB5_AUTHDATA			*authorization;
217 	}	KRB5_AUTHENTBODY;
218 
219 typedef STACK_OF(KRB5_AUTHENTBODY) KRB5_AUTHENT;
220 DECLARE_STACK_OF(KRB5_AUTHENTBODY)
221 
222 
223 /*  DECLARE_ASN1_FUNCTIONS(type) = DECLARE_ASN1_FUNCTIONS_name(type, type) =
224 **	type *name##_new(void);
225 **	void name##_free(type *a);
226 **	DECLARE_ASN1_ENCODE_FUNCTIONS(type, name, name) =
227 **	 DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name) =
228 **	  type *d2i_##name(type **a, const unsigned char **in, long len);
229 **	  int i2d_##name(type *a, unsigned char **out);
230 **	  DECLARE_ASN1_ITEM(itname) = OPENSSL_EXTERN const ASN1_ITEM itname##_it
231 */
232 
233 DECLARE_ASN1_FUNCTIONS(KRB5_ENCDATA)
234 DECLARE_ASN1_FUNCTIONS(KRB5_PRINCNAME)
235 DECLARE_ASN1_FUNCTIONS(KRB5_TKTBODY)
236 DECLARE_ASN1_FUNCTIONS(KRB5_APREQBODY)
237 DECLARE_ASN1_FUNCTIONS(KRB5_TICKET)
238 DECLARE_ASN1_FUNCTIONS(KRB5_APREQ)
239 
240 DECLARE_ASN1_FUNCTIONS(KRB5_CHECKSUM)
241 DECLARE_ASN1_FUNCTIONS(KRB5_ENCKEY)
242 DECLARE_ASN1_FUNCTIONS(KRB5_AUTHDATA)
243 DECLARE_ASN1_FUNCTIONS(KRB5_AUTHENTBODY)
244 DECLARE_ASN1_FUNCTIONS(KRB5_AUTHENT)
245 
246 
247 /* BEGIN ERROR CODES */
248 /* The following lines are auto generated by the script mkerr.pl. Any changes
249  * made after this point may be overwritten when the script is next run.
250  */
251 
252 #ifdef  __cplusplus
253 }
254 #endif
255 #endif
256 
257