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