Home | History | Annotate | Download | only in crypto
      1 /*
      2  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
      3  * Use is subject to license terms.
      4  */
      5 
      6 
      7 /*
      8  * Copyright (C) 1998 by the FundsXpress, INC.
      9  *
     10  * All rights reserved.
     11  *
     12  * Export of this software from the United States of America may require
     13  * a specific license from the United States Government.  It is the
     14  * responsibility of any person or organization contemplating export to
     15  * obtain such a license before exporting.
     16  *
     17  * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
     18  * distribute this software and its documentation for any purpose and
     19  * without fee is hereby granted, provided that the above copyright
     20  * notice appear in all copies and that both that copyright notice and
     21  * this permission notice appear in supporting documentation, and that
     22  * the name of FundsXpress. not be used in advertising or publicity pertaining
     23  * to distribution of the software without specific, written prior
     24  * permission.  FundsXpress makes no representations about the suitability of
     25  * this software for any purpose.  It is provided "as is" without express
     26  * or implied warranty.
     27  *
     28  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
     29  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
     30  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
     31  */
     32 
     33 #include "k5-int.h"
     34 #include "hash_provider.h"
     35 #include "keyhash_provider.h"
     36 #include "cksumtypes.h"
     37 
     38 const struct krb5_cksumtypes krb5_cksumtypes_list[] = {
     39     { CKSUMTYPE_CRC32, KRB5_CKSUMFLAG_NOT_COLL_PROOF,
     40       "crc32", "CRC-32",
     41       NULL, NULL, &krb5int_hash_crc32, 0,
     42 #ifdef _KERNEL
     43       NULL,
     44       CRYPTO_MECH_INVALID
     45 #endif /* _KERNEL */
     46 },
     47 
     48     { CKSUMTYPE_DESCBC, 0,
     49       "des-cbc", "DES cbc mode",
     50       ENCTYPE_DES_CBC_CRC, &krb5int_keyhash_descbc,
     51       NULL,  NULL,
     52 #ifdef _KERNEL
     53       NULL,
     54       CRYPTO_MECH_INVALID
     55 #endif /* _KERNEL */
     56 },
     57 
     58     { CKSUMTYPE_RSA_MD5, 0,
     59       "md5", "RSA-MD5",
     60       NULL, NULL, &krb5int_hash_md5, 0,
     61 #ifdef _KERNEL
     62       SUN_CKM_MD5,
     63       CRYPTO_MECH_INVALID
     64 #endif /* _KERNEL */
     65 },
     66     { CKSUMTYPE_RSA_MD5_DES, 0,
     67       "md5-des", "RSA-MD5 with DES cbc mode",
     68       ENCTYPE_DES_CBC_CRC, &krb5int_keyhash_md5des,
     69       NULL, NULL,
     70 #ifdef _KERNEL
     71       SUN_CKM_MD5,
     72       CRYPTO_MECH_INVALID
     73 #endif /* _KERNEL */
     74 },
     75 
     76     { CKSUMTYPE_NIST_SHA, 0,
     77       "sha", "NIST-SHA",
     78       NULL, NULL, &krb5int_hash_sha1, 0,
     79 #ifdef _KERNEL
     80       SUN_CKM_SHA1,
     81       CRYPTO_MECH_INVALID
     82 #endif /* _KERNEL */
     83 },
     84 
     85     { CKSUMTYPE_HMAC_SHA1_DES3, KRB5_CKSUMFLAG_DERIVE,
     86       "hmac-sha1-des3", "HMAC-SHA1 DES3 key",
     87       NULL, NULL, &krb5int_hash_sha1, 0,
     88 #ifdef _KERNEL
     89       SUN_CKM_SHA1_HMAC,
     90       CRYPTO_MECH_INVALID
     91 #endif /* _KERNEL */
     92  },
     93     { CKSUMTYPE_HMAC_SHA1_DES3, KRB5_CKSUMFLAG_DERIVE,
     94       "hmac-sha1-des3-kd", "HMAC-SHA1 DES3 key", /* alias */
     95       NULL, NULL, &krb5int_hash_sha1, 0,
     96 #ifdef _KERNEL
     97       SUN_CKM_SHA1_HMAC,
     98       CRYPTO_MECH_INVALID
     99 #endif /* _KERNEL */
    100 },
    101     { CKSUMTYPE_HMAC_MD5_ARCFOUR, 0,
    102       "hmac-md5-rc4", "Microsoft HMAC MD5 (RC4 key)",
    103       ENCTYPE_ARCFOUR_HMAC, &krb5int_keyhash_hmac_md5,
    104       NULL, 0,
    105 #ifdef _KERNEL
    106       SUN_CKM_MD5,
    107       CRYPTO_MECH_INVALID
    108 #endif /* _KERNEL */
    109     },
    110     { CKSUMTYPE_HMAC_MD5_ARCFOUR, 0,
    111       "hmac-md5-enc", "Microsoft HMAC MD5 (RC4 key)",  /*Heimdal alias*/
    112       ENCTYPE_ARCFOUR_HMAC, &krb5int_keyhash_hmac_md5,
    113       NULL, 0,
    114 #ifdef _KERNEL
    115       SUN_CKM_MD5,
    116       CRYPTO_MECH_INVALID
    117 #endif /* _KERNEL */
    118     },
    119     { CKSUMTYPE_HMAC_MD5_ARCFOUR, 0,
    120       "hmac-md5-earcfour", "Microsoft HMAC MD5 (RC4 key)",  /* alias*/
    121       ENCTYPE_ARCFOUR_HMAC, &krb5int_keyhash_hmac_md5,
    122       NULL, 0,
    123 #ifdef _KERNEL
    124       SUN_CKM_MD5,
    125       CRYPTO_MECH_INVALID
    126 #endif /* _KERNEL */
    127     },
    128 
    129     { CKSUMTYPE_HMAC_SHA1_96_AES128, KRB5_CKSUMFLAG_DERIVE,
    130       "hmac-sha1-96-aes128", "HMAC-SHA1 AES128 key",
    131 	NULL, NULL, &krb5int_hash_sha1, 12,
    132 #ifdef _KERNEL
    133       SUN_CKM_SHA1_HMAC,
    134       CRYPTO_MECH_INVALID
    135 #endif /* _KERNEL */
    136     },
    137     { CKSUMTYPE_HMAC_SHA1_96_AES256, KRB5_CKSUMFLAG_DERIVE,
    138       "hmac-sha1-96-aes256", "HMAC-SHA1 AES256 key",
    139 	0, NULL, &krb5int_hash_sha1, 12,
    140 #ifdef _KERNEL
    141       SUN_CKM_SHA1_HMAC,
    142       CRYPTO_MECH_INVALID
    143 #endif /* _KERNEL */
    144     }
    145 
    146 };
    147 
    148 const int krb5_cksumtypes_length =
    149 sizeof(krb5_cksumtypes_list)/sizeof(struct krb5_cksumtypes);
    150 
    151 /* Solaris Kerberos */
    152 #ifdef _KERNEL
    153 void
    154 setup_kef_cksumtypes()
    155 {
    156 	int i;
    157 	struct krb5_cksumtypes *ck;
    158 
    159 	for (i=0; i<krb5_cksumtypes_length; i++) {
    160 		ck = (struct krb5_cksumtypes *)&krb5_cksumtypes_list[i];
    161 		if (ck != NULL &&
    162 		    ck->mt_c_name != NULL &&
    163 		    ck->kef_cksum_mt == CRYPTO_MECH_INVALID) {
    164 
    165 			ck->kef_cksum_mt = crypto_mech2id(ck->mt_c_name);
    166 			KRB5_LOG1(KRB5_INFO, "setup_kef_cksumtypes() - "
    167 				"%s ==> %ld",
    168 				ck->mt_c_name, (ulong_t)ck->kef_cksum_mt);
    169 		}
    170 	}
    171 }
    172 #endif /* _KERNEL */
    173