Home | History | Annotate | Download | only in krb5
      1 /* krb5_asn.c */
      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  * Copyright (c) 2000 The OpenSSL Project.  All rights reserved.
      7  *
      8  * Redistribution and use in source and binary forms, with or without
      9  * modification, are permitted provided that the following conditions
     10  * are met:
     11  *
     12  * 1. Redistributions of source code must retain the above copyright
     13  *    notice, this list of conditions and the following disclaimer.
     14  *
     15  * 2. Redistributions in binary form must reproduce the above copyright
     16  *    notice, this list of conditions and the following disclaimer in
     17  *    the documentation and/or other materials provided with the
     18  *    distribution.
     19  *
     20  * 3. All advertising materials mentioning features or use of this
     21  *    software must display the following acknowledgment:
     22  *    "This product includes software developed by the OpenSSL Project
     23  *    for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
     24  *
     25  * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
     26  *    endorse or promote products derived from this software without
     27  *    prior written permission. For written permission, please contact
     28  *    licensing (at) OpenSSL.org.
     29  *
     30  * 5. Products derived from this software may not be called "OpenSSL"
     31  *    nor may "OpenSSL" appear in their names without prior written
     32  *    permission of the OpenSSL Project.
     33  *
     34  * 6. Redistributions of any form whatsoever must retain the following
     35  *    acknowledgment:
     36  *    "This product includes software developed by the OpenSSL Project
     37  *    for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
     38  *
     39  * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
     40  * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     41  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     42  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
     43  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     44  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
     45  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
     46  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     47  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
     48  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     49  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
     50  * OF THE POSSIBILITY OF SUCH DAMAGE.
     51  * ====================================================================
     52  *
     53  * This product includes cryptographic software written by Eric Young
     54  * (eay (at) cryptsoft.com).  This product includes software written by Tim
     55  * Hudson (tjh (at) cryptsoft.com).
     56  *
     57  */
     58 #include <openssl/asn1.h>
     59 #include <openssl/asn1t.h>
     60 #include <openssl/krb5_asn.h>
     61 
     62 
     63 ASN1_SEQUENCE(KRB5_ENCDATA) = {
     64 	ASN1_EXP(KRB5_ENCDATA, etype,		ASN1_INTEGER,	  0),
     65 	ASN1_EXP_OPT(KRB5_ENCDATA, kvno,	ASN1_INTEGER,	  1),
     66 	ASN1_EXP(KRB5_ENCDATA, cipher,		ASN1_OCTET_STRING,2)
     67 } ASN1_SEQUENCE_END(KRB5_ENCDATA)
     68 
     69 IMPLEMENT_ASN1_FUNCTIONS(KRB5_ENCDATA)
     70 
     71 
     72 ASN1_SEQUENCE(KRB5_PRINCNAME) = {
     73 	ASN1_EXP(KRB5_PRINCNAME, nametype,	ASN1_INTEGER,	  0),
     74 	ASN1_EXP_SEQUENCE_OF(KRB5_PRINCNAME, namestring, ASN1_GENERALSTRING, 1)
     75 } ASN1_SEQUENCE_END(KRB5_PRINCNAME)
     76 
     77 IMPLEMENT_ASN1_FUNCTIONS(KRB5_PRINCNAME)
     78 
     79 
     80 /* [APPLICATION 1] = 0x61 */
     81 ASN1_SEQUENCE(KRB5_TKTBODY) = {
     82 	ASN1_EXP(KRB5_TKTBODY, tktvno,		ASN1_INTEGER,	  0),
     83 	ASN1_EXP(KRB5_TKTBODY, realm, 		ASN1_GENERALSTRING, 1),
     84 	ASN1_EXP(KRB5_TKTBODY, sname,		KRB5_PRINCNAME,	  2),
     85 	ASN1_EXP(KRB5_TKTBODY, encdata,		KRB5_ENCDATA,	  3)
     86 } ASN1_SEQUENCE_END(KRB5_TKTBODY)
     87 
     88 IMPLEMENT_ASN1_FUNCTIONS(KRB5_TKTBODY)
     89 
     90 
     91 ASN1_ITEM_TEMPLATE(KRB5_TICKET) =
     92 	ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_EXPTAG|ASN1_TFLG_APPLICATION, 1,
     93 			KRB5_TICKET, KRB5_TKTBODY)
     94 ASN1_ITEM_TEMPLATE_END(KRB5_TICKET)
     95 
     96 IMPLEMENT_ASN1_FUNCTIONS(KRB5_TICKET)
     97 
     98 
     99 /* [APPLICATION 14] = 0x6e */
    100 ASN1_SEQUENCE(KRB5_APREQBODY) = {
    101 	ASN1_EXP(KRB5_APREQBODY, pvno,		ASN1_INTEGER,	  0),
    102 	ASN1_EXP(KRB5_APREQBODY, msgtype,	ASN1_INTEGER,	  1),
    103 	ASN1_EXP(KRB5_APREQBODY, apoptions,	ASN1_BIT_STRING,  2),
    104 	ASN1_EXP(KRB5_APREQBODY, ticket, 	KRB5_TICKET,	  3),
    105 	ASN1_EXP(KRB5_APREQBODY, authenticator,	KRB5_ENCDATA,	  4),
    106 } ASN1_SEQUENCE_END(KRB5_APREQBODY)
    107 
    108 IMPLEMENT_ASN1_FUNCTIONS(KRB5_APREQBODY)
    109 
    110 ASN1_ITEM_TEMPLATE(KRB5_APREQ) =
    111 	ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_EXPTAG|ASN1_TFLG_APPLICATION, 14,
    112 			KRB5_APREQ, KRB5_APREQBODY)
    113 ASN1_ITEM_TEMPLATE_END(KRB5_APREQ)
    114 
    115 IMPLEMENT_ASN1_FUNCTIONS(KRB5_APREQ)
    116 
    117 
    118 /*  Authenticator stuff 	*/
    119 
    120 ASN1_SEQUENCE(KRB5_CHECKSUM) = {
    121 	ASN1_EXP(KRB5_CHECKSUM, ctype,		ASN1_INTEGER,	  0),
    122 	ASN1_EXP(KRB5_CHECKSUM, checksum,	ASN1_OCTET_STRING,1)
    123 } ASN1_SEQUENCE_END(KRB5_CHECKSUM)
    124 
    125 IMPLEMENT_ASN1_FUNCTIONS(KRB5_CHECKSUM)
    126 
    127 
    128 ASN1_SEQUENCE(KRB5_ENCKEY) = {
    129 	ASN1_EXP(KRB5_ENCKEY,	ktype,		ASN1_INTEGER,	  0),
    130 	ASN1_EXP(KRB5_ENCKEY,	keyvalue,	ASN1_OCTET_STRING,1)
    131 } ASN1_SEQUENCE_END(KRB5_ENCKEY)
    132 
    133 IMPLEMENT_ASN1_FUNCTIONS(KRB5_ENCKEY)
    134 
    135 
    136 /* SEQ OF SEQ; see ASN1_EXP_SEQUENCE_OF_OPT() below */
    137 ASN1_SEQUENCE(KRB5_AUTHDATA) = {
    138 	ASN1_EXP(KRB5_AUTHDATA,	adtype,		ASN1_INTEGER,	  0),
    139 	ASN1_EXP(KRB5_AUTHDATA,	addata, 	ASN1_OCTET_STRING,1)
    140 } ASN1_SEQUENCE_END(KRB5_AUTHDATA)
    141 
    142 IMPLEMENT_ASN1_FUNCTIONS(KRB5_AUTHDATA)
    143 
    144 
    145 /* [APPLICATION 2] = 0x62 */
    146 ASN1_SEQUENCE(KRB5_AUTHENTBODY) = {
    147 	ASN1_EXP(KRB5_AUTHENTBODY,	avno,	ASN1_INTEGER,	  0),
    148 	ASN1_EXP(KRB5_AUTHENTBODY,	crealm,	ASN1_GENERALSTRING, 1),
    149 	ASN1_EXP(KRB5_AUTHENTBODY,	cname,	KRB5_PRINCNAME,	  2),
    150 	ASN1_EXP_OPT(KRB5_AUTHENTBODY,	cksum,	KRB5_CHECKSUM,	  3),
    151 	ASN1_EXP(KRB5_AUTHENTBODY,	cusec,	ASN1_INTEGER,	  4),
    152 	ASN1_EXP(KRB5_AUTHENTBODY,	ctime,	ASN1_GENERALIZEDTIME, 5),
    153 	ASN1_EXP_OPT(KRB5_AUTHENTBODY,	subkey,	KRB5_ENCKEY,	  6),
    154 	ASN1_EXP_OPT(KRB5_AUTHENTBODY,	seqnum,	ASN1_INTEGER,	  7),
    155 	ASN1_EXP_SEQUENCE_OF_OPT
    156 		    (KRB5_AUTHENTBODY,	authorization,	KRB5_AUTHDATA, 8),
    157 } ASN1_SEQUENCE_END(KRB5_AUTHENTBODY)
    158 
    159 IMPLEMENT_ASN1_FUNCTIONS(KRB5_AUTHENTBODY)
    160 
    161 ASN1_ITEM_TEMPLATE(KRB5_AUTHENT) =
    162 	ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_EXPTAG|ASN1_TFLG_APPLICATION, 2,
    163 			KRB5_AUTHENT, KRB5_AUTHENTBODY)
    164 ASN1_ITEM_TEMPLATE_END(KRB5_AUTHENT)
    165 
    166 IMPLEMENT_ASN1_FUNCTIONS(KRB5_AUTHENT)
    167 
    168