1109998Smarkm/* krb5_asn.h */
2280304Sjkim/*
3280304Sjkim * Written by Vern Staats <staatsvr@asc.hpc.mil> for the OpenSSL project, **
4280304Sjkim * using ocsp/{*.h,*asn*.c} as a starting point
5280304Sjkim */
6109998Smarkm
7109998Smarkm/* ====================================================================
8109998Smarkm * Copyright (c) 1998-2000 The OpenSSL Project.  All rights reserved.
9109998Smarkm *
10109998Smarkm * Redistribution and use in source and binary forms, with or without
11109998Smarkm * modification, are permitted provided that the following conditions
12109998Smarkm * are met:
13109998Smarkm *
14109998Smarkm * 1. Redistributions of source code must retain the above copyright
15280304Sjkim *    notice, this list of conditions and the following disclaimer.
16109998Smarkm *
17109998Smarkm * 2. Redistributions in binary form must reproduce the above copyright
18109998Smarkm *    notice, this list of conditions and the following disclaimer in
19109998Smarkm *    the documentation and/or other materials provided with the
20109998Smarkm *    distribution.
21109998Smarkm *
22109998Smarkm * 3. All advertising materials mentioning features or use of this
23109998Smarkm *    software must display the following acknowledgment:
24109998Smarkm *    "This product includes software developed by the OpenSSL Project
25109998Smarkm *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
26109998Smarkm *
27109998Smarkm * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
28109998Smarkm *    endorse or promote products derived from this software without
29109998Smarkm *    prior written permission. For written permission, please contact
30109998Smarkm *    openssl-core@openssl.org.
31109998Smarkm *
32109998Smarkm * 5. Products derived from this software may not be called "OpenSSL"
33109998Smarkm *    nor may "OpenSSL" appear in their names without prior written
34109998Smarkm *    permission of the OpenSSL Project.
35109998Smarkm *
36109998Smarkm * 6. Redistributions of any form whatsoever must retain the following
37109998Smarkm *    acknowledgment:
38109998Smarkm *    "This product includes software developed by the OpenSSL Project
39109998Smarkm *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
40109998Smarkm *
41109998Smarkm * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
42109998Smarkm * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43109998Smarkm * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
44109998Smarkm * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
45109998Smarkm * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
46109998Smarkm * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
47109998Smarkm * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
48109998Smarkm * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
49109998Smarkm * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
50109998Smarkm * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
51109998Smarkm * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
52109998Smarkm * OF THE POSSIBILITY OF SUCH DAMAGE.
53109998Smarkm * ====================================================================
54109998Smarkm *
55109998Smarkm * This product includes cryptographic software written by Eric Young
56109998Smarkm * (eay@cryptsoft.com).  This product includes software written by Tim
57109998Smarkm * Hudson (tjh@cryptsoft.com).
58109998Smarkm *
59109998Smarkm */
60109998Smarkm
61109998Smarkm#ifndef HEADER_KRB5_ASN_H
62280304Sjkim# define HEADER_KRB5_ASN_H
63109998Smarkm
64109998Smarkm/*
65280304Sjkim * #include <krb5.h>
66280304Sjkim */
67280304Sjkim# include <openssl/safestack.h>
68109998Smarkm
69109998Smarkm#ifdef  __cplusplus
70109998Smarkmextern "C" {
71109998Smarkm#endif
72109998Smarkm
73280304Sjkim/*
74280304Sjkim * ASN.1 from Kerberos RFC 1510
75280304Sjkim */
76109998Smarkm
77280304Sjkim/*-     EncryptedData ::=   SEQUENCE {
78280304Sjkim *              etype[0]                      INTEGER, -- EncryptionType
79280304Sjkim *              kvno[1]                       INTEGER OPTIONAL,
80280304Sjkim *              cipher[2]                     OCTET STRING -- ciphertext
81280304Sjkim *      }
82280304Sjkim */
83280304Sjkimtypedef struct krb5_encdata_st {
84280304Sjkim    ASN1_INTEGER *etype;
85280304Sjkim    ASN1_INTEGER *kvno;
86280304Sjkim    ASN1_OCTET_STRING *cipher;
87280304Sjkim} KRB5_ENCDATA;
88109998Smarkm
89109998SmarkmDECLARE_STACK_OF(KRB5_ENCDATA)
90109998Smarkm
91280304Sjkim/*-     PrincipalName ::=   SEQUENCE {
92280304Sjkim *              name-type[0]                  INTEGER,
93280304Sjkim *              name-string[1]                SEQUENCE OF GeneralString
94280304Sjkim *      }
95280304Sjkim */
96280304Sjkimtypedef struct krb5_princname_st {
97280304Sjkim    ASN1_INTEGER *nametype;
98280304Sjkim    STACK_OF(ASN1_GENERALSTRING) *namestring;
99280304Sjkim} KRB5_PRINCNAME;
100109998Smarkm
101109998SmarkmDECLARE_STACK_OF(KRB5_PRINCNAME)
102109998Smarkm
103280304Sjkim/*-     Ticket ::=      [APPLICATION 1] SEQUENCE {
104280304Sjkim *              tkt-vno[0]                    INTEGER,
105280304Sjkim *              realm[1]                      Realm,
106280304Sjkim *              sname[2]                      PrincipalName,
107280304Sjkim *              enc-part[3]                   EncryptedData
108280304Sjkim *      }
109280304Sjkim */
110280304Sjkimtypedef struct krb5_tktbody_st {
111280304Sjkim    ASN1_INTEGER *tktvno;
112280304Sjkim    ASN1_GENERALSTRING *realm;
113280304Sjkim    KRB5_PRINCNAME *sname;
114280304Sjkim    KRB5_ENCDATA *encdata;
115280304Sjkim} KRB5_TKTBODY;
116109998Smarkm
117109998Smarkmtypedef STACK_OF(KRB5_TKTBODY) KRB5_TICKET;
118109998SmarkmDECLARE_STACK_OF(KRB5_TKTBODY)
119109998Smarkm
120280304Sjkim/*-     AP-REQ ::=      [APPLICATION 14] SEQUENCE {
121280304Sjkim *              pvno[0]                       INTEGER,
122280304Sjkim *              msg-type[1]                   INTEGER,
123280304Sjkim *              ap-options[2]                 APOptions,
124280304Sjkim *              ticket[3]                     Ticket,
125280304Sjkim *              authenticator[4]              EncryptedData
126280304Sjkim *      }
127280304Sjkim *
128280304Sjkim *      APOptions ::=   BIT STRING {
129280304Sjkim *              reserved(0), use-session-key(1), mutual-required(2) }
130280304Sjkim */
131280304Sjkimtypedef struct krb5_ap_req_st {
132280304Sjkim    ASN1_INTEGER *pvno;
133280304Sjkim    ASN1_INTEGER *msgtype;
134280304Sjkim    ASN1_BIT_STRING *apoptions;
135280304Sjkim    KRB5_TICKET *ticket;
136280304Sjkim    KRB5_ENCDATA *authenticator;
137280304Sjkim} KRB5_APREQBODY;
138109998Smarkm
139109998Smarkmtypedef STACK_OF(KRB5_APREQBODY) KRB5_APREQ;
140109998SmarkmDECLARE_STACK_OF(KRB5_APREQBODY)
141109998Smarkm
142280304Sjkim/*      Authenticator Stuff     */
143109998Smarkm
144280304Sjkim/*-     Checksum ::=   SEQUENCE {
145280304Sjkim *              cksumtype[0]                  INTEGER,
146280304Sjkim *              checksum[1]                   OCTET STRING
147280304Sjkim *      }
148280304Sjkim */
149280304Sjkimtypedef struct krb5_checksum_st {
150280304Sjkim    ASN1_INTEGER *ctype;
151280304Sjkim    ASN1_OCTET_STRING *checksum;
152280304Sjkim} KRB5_CHECKSUM;
153109998Smarkm
154109998SmarkmDECLARE_STACK_OF(KRB5_CHECKSUM)
155109998Smarkm
156280304Sjkim/*-     EncryptionKey ::=   SEQUENCE {
157280304Sjkim *              keytype[0]                    INTEGER,
158280304Sjkim *              keyvalue[1]                   OCTET STRING
159280304Sjkim *      }
160280304Sjkim */
161280304Sjkimtypedef struct krb5_encryptionkey_st {
162280304Sjkim    ASN1_INTEGER *ktype;
163280304Sjkim    ASN1_OCTET_STRING *keyvalue;
164280304Sjkim} KRB5_ENCKEY;
165109998Smarkm
166109998SmarkmDECLARE_STACK_OF(KRB5_ENCKEY)
167109998Smarkm
168280304Sjkim/*-     AuthorizationData ::=   SEQUENCE OF SEQUENCE {
169280304Sjkim *              ad-type[0]                    INTEGER,
170280304Sjkim *              ad-data[1]                    OCTET STRING
171280304Sjkim *      }
172280304Sjkim */
173280304Sjkimtypedef struct krb5_authorization_st {
174280304Sjkim    ASN1_INTEGER *adtype;
175280304Sjkim    ASN1_OCTET_STRING *addata;
176280304Sjkim} KRB5_AUTHDATA;
177109998Smarkm
178109998SmarkmDECLARE_STACK_OF(KRB5_AUTHDATA)
179109998Smarkm
180280304Sjkim/*-     -- Unencrypted authenticator
181280304Sjkim *      Authenticator ::=    [APPLICATION 2] SEQUENCE    {
182280304Sjkim *              authenticator-vno[0]          INTEGER,
183280304Sjkim *              crealm[1]                     Realm,
184280304Sjkim *              cname[2]                      PrincipalName,
185280304Sjkim *              cksum[3]                      Checksum OPTIONAL,
186280304Sjkim *              cusec[4]                      INTEGER,
187280304Sjkim *              ctime[5]                      KerberosTime,
188280304Sjkim *              subkey[6]                     EncryptionKey OPTIONAL,
189280304Sjkim *              seq-number[7]                 INTEGER OPTIONAL,
190280304Sjkim *              authorization-data[8]         AuthorizationData OPTIONAL
191280304Sjkim *      }
192280304Sjkim */
193280304Sjkimtypedef struct krb5_authenticator_st {
194280304Sjkim    ASN1_INTEGER *avno;
195280304Sjkim    ASN1_GENERALSTRING *crealm;
196280304Sjkim    KRB5_PRINCNAME *cname;
197280304Sjkim    KRB5_CHECKSUM *cksum;
198280304Sjkim    ASN1_INTEGER *cusec;
199280304Sjkim    ASN1_GENERALIZEDTIME *ctime;
200280304Sjkim    KRB5_ENCKEY *subkey;
201280304Sjkim    ASN1_INTEGER *seqnum;
202280304Sjkim    KRB5_AUTHDATA *authorization;
203280304Sjkim} KRB5_AUTHENTBODY;
204109998Smarkm
205109998Smarkmtypedef STACK_OF(KRB5_AUTHENTBODY) KRB5_AUTHENT;
206109998SmarkmDECLARE_STACK_OF(KRB5_AUTHENTBODY)
207109998Smarkm
208280304Sjkim/*-  DECLARE_ASN1_FUNCTIONS(type) = DECLARE_ASN1_FUNCTIONS_name(type, type) =
209280304Sjkim *      type *name##_new(void);
210280304Sjkim *      void name##_free(type *a);
211280304Sjkim *      DECLARE_ASN1_ENCODE_FUNCTIONS(type, name, name) =
212280304Sjkim *       DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name) =
213280304Sjkim *        type *d2i_##name(type **a, const unsigned char **in, long len);
214280304Sjkim *        int i2d_##name(type *a, unsigned char **out);
215280304Sjkim *        DECLARE_ASN1_ITEM(itname) = OPENSSL_EXTERN const ASN1_ITEM itname##_it
216280304Sjkim */
217109998Smarkm
218109998SmarkmDECLARE_ASN1_FUNCTIONS(KRB5_ENCDATA)
219109998SmarkmDECLARE_ASN1_FUNCTIONS(KRB5_PRINCNAME)
220109998SmarkmDECLARE_ASN1_FUNCTIONS(KRB5_TKTBODY)
221109998SmarkmDECLARE_ASN1_FUNCTIONS(KRB5_APREQBODY)
222109998SmarkmDECLARE_ASN1_FUNCTIONS(KRB5_TICKET)
223109998SmarkmDECLARE_ASN1_FUNCTIONS(KRB5_APREQ)
224109998Smarkm
225109998SmarkmDECLARE_ASN1_FUNCTIONS(KRB5_CHECKSUM)
226109998SmarkmDECLARE_ASN1_FUNCTIONS(KRB5_ENCKEY)
227109998SmarkmDECLARE_ASN1_FUNCTIONS(KRB5_AUTHDATA)
228109998SmarkmDECLARE_ASN1_FUNCTIONS(KRB5_AUTHENTBODY)
229109998SmarkmDECLARE_ASN1_FUNCTIONS(KRB5_AUTHENT)
230109998Smarkm
231109998Smarkm/* BEGIN ERROR CODES */
232280304Sjkim/*
233280304Sjkim * The following lines are auto generated by the script mkerr.pl. Any changes
234109998Smarkm * made after this point may be overwritten when the script is next run.
235109998Smarkm */
236109998Smarkm
237109998Smarkm#ifdef  __cplusplus
238109998Smarkm}
239109998Smarkm#endif
240109998Smarkm#endif
241