Home | History | Annotate | Download | only in openssl
      1 /* krb5_asn.h */
      2 /* Written by Vern Staats <staatsvr (at) 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 (at) 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 (at) cryptsoft.com).  This product includes software written by Tim
     56  * Hudson (tjh (at) 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