mechkeytype.c revision 7c478bd95313f5f23a4c958a745db2134aa03244
/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License, Version 1.0 only
* (the "License"). You may not use this file except in compliance
* with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* or http://www.opensolaris.org/os/licensing.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright 2003 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#pragma ident "%Z%%M% %I% %E% SMI"
#include <cryptoutil.h>
/*
* Get the key type for the given mechanism
*
* All mechanisms in PKCS #11 v2.11 are listed here.
*/
CK_RV
pkcs11_mech2keytype(CK_MECHANISM_TYPE mech_type, CK_KEY_TYPE *ktype)
{
CK_RV rv = CKR_OK;
switch (mech_type) {
case CKM_RSA_PKCS_KEY_PAIR_GEN:
case CKM_RSA_PKCS:
case CKM_RSA_9796:
case CKM_RSA_X_509:
case CKM_MD2_RSA_PKCS:
case CKM_MD5_RSA_PKCS:
case CKM_SHA1_RSA_PKCS:
case CKM_RIPEMD128_RSA_PKCS:
case CKM_RIPEMD160_RSA_PKCS:
case CKM_RSA_PKCS_OAEP:
case CKM_RSA_X9_31_KEY_PAIR_GEN:
case CKM_RSA_X9_31:
case CKM_SHA1_RSA_X9_31:
case CKM_RSA_PKCS_PSS:
case CKM_SHA1_RSA_PKCS_PSS:
case CKM_DH_PKCS_PARAMETER_GEN:
*ktype = CKK_RSA;
break;
case CKM_DSA_KEY_PAIR_GEN:
case CKM_DSA:
case CKM_DSA_SHA1:
case CKM_DSA_PARAMETER_GEN:
case CKM_FORTEZZA_TIMESTAMP:
*ktype = CKK_DSA;
break;
case CKM_DH_PKCS_KEY_PAIR_GEN:
case CKM_DH_PKCS_DERIVE:
*ktype = CKK_DH;
break;
case CKM_ECDSA:
case CKM_ECDSA_SHA1:
case CKM_EC_KEY_PAIR_GEN:
case CKM_ECDH1_DERIVE:
case CKM_ECDH1_COFACTOR_DERIVE:
case CKM_ECMQV_DERIVE:
*ktype = CKK_EC;
break;
case CKM_X9_42_DH_KEY_PAIR_GEN:
case CKM_X9_42_DH_DERIVE:
case CKM_X9_42_DH_HYBRID_DERIVE:
case CKM_X9_42_MQV_DERIVE:
case CKM_X9_42_DH_PARAMETER_GEN:
*ktype = CKK_X9_42_DH;
break;
case CKM_KEA_KEY_PAIR_GEN:
case CKM_KEA_KEY_DERIVE:
*ktype = CKK_KEA;
break;
case CKM_MD2:
case CKM_MD2_HMAC:
case CKM_MD2_HMAC_GENERAL:
case CKM_MD5:
case CKM_MD5_HMAC:
case CKM_MD5_HMAC_GENERAL:
case CKM_SHA_1:
case CKM_SHA_1_HMAC:
case CKM_SHA_1_HMAC_GENERAL:
case CKM_GENERIC_SECRET_KEY_GEN:
case CKM_FASTHASH:
case CKM_PKCS5_PBKD2:
case CKM_PBA_SHA1_WITH_SHA1_HMAC:
case CKM_SSL3_MD5_MAC:
case CKM_SSL3_SHA1_MAC:
case CKM_SSL3_PRE_MASTER_KEY_GEN:
case CKM_SSL3_MASTER_KEY_DERIVE:
case CKM_SSL3_KEY_AND_MAC_DERIVE:
case CKM_SSL3_MASTER_KEY_DERIVE_DH:
case CKM_TLS_PRE_MASTER_KEY_GEN:
case CKM_TLS_MASTER_KEY_DERIVE:
case CKM_TLS_KEY_AND_MAC_DERIVE:
case CKM_TLS_MASTER_KEY_DERIVE_DH:
case CKM_CONCATENATE_BASE_AND_KEY:
case CKM_CONCATENATE_BASE_AND_DATA:
case CKM_CONCATENATE_DATA_AND_BASE:
case CKM_XOR_BASE_AND_DATA:
case CKM_EXTRACT_KEY_FROM_KEY:
case CKM_RIPEMD128:
case CKM_RIPEMD128_HMAC:
case CKM_RIPEMD128_HMAC_GENERAL:
case CKM_RIPEMD160:
case CKM_RIPEMD160_HMAC:
case CKM_RIPEMD160_HMAC_GENERAL:
case CKM_SHA1_KEY_DERIVATION:
case CKM_MD5_KEY_DERIVATION:
case CKM_MD2_KEY_DERIVATION:
/* not sure the following 2 should be CKK_DES or not */
case CKM_KEY_WRAP_LYNKS: /* wrap/unwrap secret key w/ DES key */
case CKM_KEY_WRAP_SET_OAEP: /* wrap/unwarp DES key w/ RSA key */
*ktype = CKK_GENERIC_SECRET;
break;
case CKM_RC2_KEY_GEN:
case CKM_RC2_ECB:
case CKM_RC2_CBC:
case CKM_RC2_MAC:
case CKM_RC2_MAC_GENERAL:
case CKM_RC2_CBC_PAD:
case CKM_PBE_SHA1_RC2_128_CBC:
case CKM_PBE_SHA1_RC2_40_CBC:
*ktype = CKK_RC2;
break;
case CKM_RC4_KEY_GEN:
case CKM_RC4:
case CKM_PBE_SHA1_RC4_128:
case CKM_PBE_SHA1_RC4_40:
*ktype = CKK_RC4;
break;
case CKM_DES_KEY_GEN:
case CKM_DES_ECB:
case CKM_DES_CBC:
case CKM_DES_MAC:
case CKM_DES_MAC_GENERAL:
case CKM_DES_CBC_PAD:
case CKM_PBE_MD2_DES_CBC:
case CKM_PBE_MD5_DES_CBC:
*ktype = CKK_DES;
break;
case CKM_DES2_KEY_GEN:
case CKM_PBE_SHA1_DES2_EDE_CBC:
*ktype = CKK_DES2;
break;
case CKM_DES3_KEY_GEN:
case CKM_DES3_ECB:
case CKM_DES3_CBC:
case CKM_DES3_MAC:
case CKM_DES3_MAC_GENERAL:
case CKM_DES3_CBC_PAD:
case CKM_PBE_SHA1_DES3_EDE_CBC:
*ktype = CKK_DES3;
break;
case CKM_CAST_KEY_GEN:
case CKM_CAST_ECB:
case CKM_CAST_CBC:
case CKM_CAST_MAC:
case CKM_CAST_MAC_GENERAL:
case CKM_CAST_CBC_PAD:
case CKM_PBE_MD5_CAST_CBC:
*ktype = CKK_CAST;
break;
case CKM_CAST3_KEY_GEN:
case CKM_CAST3_ECB:
case CKM_CAST3_CBC:
case CKM_CAST3_MAC:
case CKM_CAST3_MAC_GENERAL:
case CKM_CAST3_CBC_PAD:
case CKM_PBE_MD5_CAST3_CBC:
*ktype = CKK_CAST3;
break;
case CKM_CAST128_KEY_GEN:
case CKM_CAST128_ECB:
case CKM_CAST128_CBC:
case CKM_CAST128_MAC:
case CKM_CAST128_MAC_GENERAL:
case CKM_CAST128_CBC_PAD:
case CKM_PBE_MD5_CAST128_CBC:
case CKM_PBE_SHA1_CAST128_CBC:
*ktype = CKK_CAST128;
break;
case CKM_RC5_KEY_GEN:
case CKM_RC5_ECB:
case CKM_RC5_CBC:
case CKM_RC5_MAC:
case CKM_RC5_MAC_GENERAL:
case CKM_RC5_CBC_PAD:
*ktype = CKK_RC5;
break;
case CKM_IDEA_KEY_GEN:
case CKM_IDEA_ECB:
case CKM_IDEA_CBC:
case CKM_IDEA_MAC:
case CKM_IDEA_MAC_GENERAL:
case CKM_IDEA_CBC_PAD:
*ktype = CKK_IDEA;
break;
case CKM_SKIPJACK_KEY_GEN:
case CKM_SKIPJACK_ECB64:
case CKM_SKIPJACK_CBC64:
case CKM_SKIPJACK_OFB64:
case CKM_SKIPJACK_CFB64:
case CKM_SKIPJACK_CFB32:
case CKM_SKIPJACK_CFB16:
case CKM_SKIPJACK_CFB8:
case CKM_SKIPJACK_WRAP:
case CKM_SKIPJACK_PRIVATE_WRAP:
case CKM_SKIPJACK_RELAYX:
*ktype = CKK_SKIPJACK;
break;
case CKM_BATON_KEY_GEN:
case CKM_BATON_ECB128:
case CKM_BATON_ECB96:
case CKM_BATON_CBC128:
case CKM_BATON_COUNTER:
case CKM_BATON_SHUFFLE:
case CKM_BATON_WRAP:
*ktype = CKK_BATON;
break;
case CKM_JUNIPER_KEY_GEN:
case CKM_JUNIPER_ECB128:
case CKM_JUNIPER_CBC128:
case CKM_JUNIPER_COUNTER:
case CKM_JUNIPER_SHUFFLE:
case CKM_JUNIPER_WRAP:
*ktype = CKK_JUNIPER;
break;
case CKM_CDMF_KEY_GEN:
case CKM_CDMF_ECB:
case CKM_CDMF_CBC:
case CKM_CDMF_MAC:
case CKM_CDMF_MAC_GENERAL:
case CKM_CDMF_CBC_PAD:
*ktype = CKK_CDMF;
break;
case CKM_AES_KEY_GEN:
case CKM_AES_ECB:
case CKM_AES_CBC:
case CKM_AES_MAC:
case CKM_AES_MAC_GENERAL:
case CKM_AES_CBC_PAD:
*ktype = CKK_AES;
break;
default:
rv = CKR_MECHANISM_INVALID;
break;
}
return (rv);
}