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
69extern "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*/
82typedef	struct	krb5_encdata_st
83	{
84	ASN1_INTEGER			*etype;
85	ASN1_INTEGER			*kvno;
86	ASN1_OCTET_STRING		*cipher;
87	}	KRB5_ENCDATA;
88
89DECLARE_STACK_OF(KRB5_ENCDATA)
90
91/*	PrincipalName ::=   SEQUENCE {
92**		name-type[0]                  INTEGER,
93**		name-string[1]                SEQUENCE OF GeneralString
94**	}
95*/
96typedef	struct	krb5_princname_st
97	{
98	ASN1_INTEGER			*nametype;
99	STACK_OF(ASN1_GENERALSTRING)	*namestring;
100	}	KRB5_PRINCNAME;
101
102DECLARE_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*/
112typedef	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
120typedef STACK_OF(KRB5_TKTBODY) KRB5_TICKET;
121DECLARE_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*/
135typedef	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
144typedef STACK_OF(KRB5_APREQBODY) KRB5_APREQ;
145DECLARE_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*/
156typedef	struct	krb5_checksum_st
157	{
158	ASN1_INTEGER			*ctype;
159	ASN1_OCTET_STRING		*checksum;
160	}	KRB5_CHECKSUM;
161
162DECLARE_STACK_OF(KRB5_CHECKSUM)
163
164
165/*	EncryptionKey ::=   SEQUENCE {
166**		keytype[0]                    INTEGER,
167**		keyvalue[1]                   OCTET STRING
168**	}
169*/
170typedef struct  krb5_encryptionkey_st
171	{
172	ASN1_INTEGER			*ktype;
173	ASN1_OCTET_STRING		*keyvalue;
174	}	KRB5_ENCKEY;
175
176DECLARE_STACK_OF(KRB5_ENCKEY)
177
178
179/*	AuthorizationData ::=   SEQUENCE OF SEQUENCE {
180**		ad-type[0]                    INTEGER,
181**              ad-data[1]                    OCTET STRING
182**	}
183*/
184typedef struct	krb5_authorization_st
185	{
186	ASN1_INTEGER			*adtype;
187	ASN1_OCTET_STRING		*addata;
188	}	KRB5_AUTHDATA;
189
190DECLARE_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*/
206typedef 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
219typedef STACK_OF(KRB5_AUTHENTBODY) KRB5_AUTHENT;
220DECLARE_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
233DECLARE_ASN1_FUNCTIONS(KRB5_ENCDATA)
234DECLARE_ASN1_FUNCTIONS(KRB5_PRINCNAME)
235DECLARE_ASN1_FUNCTIONS(KRB5_TKTBODY)
236DECLARE_ASN1_FUNCTIONS(KRB5_APREQBODY)
237DECLARE_ASN1_FUNCTIONS(KRB5_TICKET)
238DECLARE_ASN1_FUNCTIONS(KRB5_APREQ)
239
240DECLARE_ASN1_FUNCTIONS(KRB5_CHECKSUM)
241DECLARE_ASN1_FUNCTIONS(KRB5_ENCKEY)
242DECLARE_ASN1_FUNCTIONS(KRB5_AUTHDATA)
243DECLARE_ASN1_FUNCTIONS(KRB5_AUTHENTBODY)
244DECLARE_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