1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License, Version 1.0 only 6 * (the "License"). You may not use this file except in compliance 7 * with the License. 8 * 9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10 * or http://www.opensolaris.org/os/licensing. 11 * See the License for the specific language governing permissions 12 * and limitations under the License. 13 * 14 * When distributing Covered Code, include this CDDL HEADER in each 15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16 * If applicable, add the following below this CDDL HEADER, with the 17 * fields enclosed by brackets "[]" replaced with your own identifying 18 * information: Portions Copyright [yyyy] [name of copyright owner] 19 * 20 * CDDL HEADER END 21 */ 22 /* 23 * Copyright 2005 Sun Microsystems, Inc. All rights reserved. 24 * Use is subject to license terms. 25 */ 26 27 #pragma ident "%Z%%M% %I% %E% SMI" 28 29 #include <cryptoutil.h> 30 31 /* 32 * Get the key type for the given mechanism 33 * 34 * All mechanisms in PKCS #11 v2.20 are listed here. 35 */ 36 CK_RV 37 pkcs11_mech2keytype(CK_MECHANISM_TYPE mech_type, CK_KEY_TYPE *ktype) 38 { 39 40 CK_RV rv = CKR_OK; 41 42 switch (mech_type) { 43 44 case CKM_RSA_PKCS_KEY_PAIR_GEN: 45 case CKM_RSA_PKCS: 46 case CKM_RSA_9796: 47 case CKM_RSA_X_509: 48 case CKM_MD2_RSA_PKCS: 49 case CKM_MD5_RSA_PKCS: 50 case CKM_SHA1_RSA_PKCS: 51 case CKM_SHA256_RSA_PKCS: 52 case CKM_SHA384_RSA_PKCS: 53 case CKM_SHA512_RSA_PKCS: 54 case CKM_SHA256_RSA_PKCS_PSS: 55 case CKM_SHA384_RSA_PKCS_PSS: 56 case CKM_SHA512_RSA_PKCS_PSS: 57 case CKM_RIPEMD128_RSA_PKCS: 58 case CKM_RIPEMD160_RSA_PKCS: 59 case CKM_RSA_PKCS_OAEP: 60 case CKM_RSA_X9_31_KEY_PAIR_GEN: 61 case CKM_RSA_X9_31: 62 case CKM_SHA1_RSA_X9_31: 63 case CKM_RSA_PKCS_PSS: 64 case CKM_SHA1_RSA_PKCS_PSS: 65 case CKM_DH_PKCS_PARAMETER_GEN: 66 *ktype = CKK_RSA; 67 break; 68 69 case CKM_DSA_KEY_PAIR_GEN: 70 case CKM_DSA: 71 case CKM_DSA_SHA1: 72 case CKM_DSA_PARAMETER_GEN: 73 case CKM_FORTEZZA_TIMESTAMP: 74 *ktype = CKK_DSA; 75 break; 76 77 case CKM_DH_PKCS_KEY_PAIR_GEN: 78 case CKM_DH_PKCS_DERIVE: 79 *ktype = CKK_DH; 80 break; 81 82 case CKM_ECDSA: 83 case CKM_ECDSA_SHA1: 84 case CKM_EC_KEY_PAIR_GEN: 85 case CKM_ECDH1_DERIVE: 86 case CKM_ECDH1_COFACTOR_DERIVE: 87 case CKM_ECMQV_DERIVE: 88 *ktype = CKK_EC; 89 break; 90 91 case CKM_X9_42_DH_KEY_PAIR_GEN: 92 case CKM_X9_42_DH_DERIVE: 93 case CKM_X9_42_DH_HYBRID_DERIVE: 94 case CKM_X9_42_MQV_DERIVE: 95 case CKM_X9_42_DH_PARAMETER_GEN: 96 *ktype = CKK_X9_42_DH; 97 break; 98 99 case CKM_KEA_KEY_PAIR_GEN: 100 case CKM_KEA_KEY_DERIVE: 101 *ktype = CKK_KEA; 102 break; 103 104 case CKM_MD2: 105 case CKM_MD2_HMAC: 106 case CKM_MD2_HMAC_GENERAL: 107 case CKM_MD5: 108 case CKM_MD5_HMAC: 109 case CKM_MD5_HMAC_GENERAL: 110 case CKM_SHA_1: 111 case CKM_SHA_1_HMAC: 112 case CKM_SHA_1_HMAC_GENERAL: 113 case CKM_SHA256: 114 case CKM_SHA256_HMAC: 115 case CKM_SHA256_HMAC_GENERAL: 116 case CKM_SHA384: 117 case CKM_SHA384_HMAC: 118 case CKM_SHA384_HMAC_GENERAL: 119 case CKM_SHA512: 120 case CKM_SHA512_HMAC: 121 case CKM_SHA512_HMAC_GENERAL: 122 case CKM_GENERIC_SECRET_KEY_GEN: 123 case CKM_FASTHASH: 124 case CKM_PKCS5_PBKD2: 125 case CKM_PBA_SHA1_WITH_SHA1_HMAC: 126 case CKM_SSL3_MD5_MAC: 127 case CKM_SSL3_SHA1_MAC: 128 case CKM_SSL3_PRE_MASTER_KEY_GEN: 129 case CKM_SSL3_MASTER_KEY_DERIVE: 130 case CKM_SSL3_KEY_AND_MAC_DERIVE: 131 case CKM_SSL3_MASTER_KEY_DERIVE_DH: 132 case CKM_TLS_PRE_MASTER_KEY_GEN: 133 case CKM_TLS_MASTER_KEY_DERIVE: 134 case CKM_TLS_KEY_AND_MAC_DERIVE: 135 case CKM_TLS_MASTER_KEY_DERIVE_DH: 136 case CKM_TLS_PRF: 137 case CKM_WTLS_PRE_MASTER_KEY_GEN: 138 case CKM_WTLS_MASTER_KEY_DERIVE: 139 case CKM_WTLS_MASTER_KEY_DERIVE_DH_ECC: 140 case CKM_WTLS_PRF: 141 case CKM_WTLS_SERVER_KEY_AND_MAC_DERIVE: 142 case CKM_WTLS_CLIENT_KEY_AND_MAC_DERIVE: 143 case CKM_CONCATENATE_BASE_AND_KEY: 144 case CKM_CONCATENATE_BASE_AND_DATA: 145 case CKM_CONCATENATE_DATA_AND_BASE: 146 case CKM_XOR_BASE_AND_DATA: 147 case CKM_EXTRACT_KEY_FROM_KEY: 148 case CKM_RIPEMD128: 149 case CKM_RIPEMD128_HMAC: 150 case CKM_RIPEMD128_HMAC_GENERAL: 151 case CKM_RIPEMD160: 152 case CKM_RIPEMD160_HMAC: 153 case CKM_RIPEMD160_HMAC_GENERAL: 154 case CKM_SHA1_KEY_DERIVATION: 155 case CKM_SHA256_KEY_DERIVATION: 156 case CKM_SHA384_KEY_DERIVATION: 157 case CKM_SHA512_KEY_DERIVATION: 158 case CKM_MD5_KEY_DERIVATION: 159 case CKM_MD2_KEY_DERIVATION: 160 /* not sure the following 2 should be CKK_DES or not */ 161 case CKM_KEY_WRAP_LYNKS: /* wrap/unwrap secret key w/ DES key */ 162 case CKM_KEY_WRAP_SET_OAEP: /* wrap/unwarp DES key w/ RSA key */ 163 *ktype = CKK_GENERIC_SECRET; 164 break; 165 166 case CKM_RC2_KEY_GEN: 167 case CKM_RC2_ECB: 168 case CKM_RC2_CBC: 169 case CKM_RC2_MAC: 170 case CKM_RC2_MAC_GENERAL: 171 case CKM_RC2_CBC_PAD: 172 case CKM_PBE_SHA1_RC2_128_CBC: 173 case CKM_PBE_SHA1_RC2_40_CBC: 174 *ktype = CKK_RC2; 175 break; 176 177 case CKM_RC4_KEY_GEN: 178 case CKM_RC4: 179 case CKM_PBE_SHA1_RC4_128: 180 case CKM_PBE_SHA1_RC4_40: 181 *ktype = CKK_RC4; 182 break; 183 184 case CKM_DES_KEY_GEN: 185 case CKM_DES_ECB: 186 case CKM_DES_CBC: 187 case CKM_DES_MAC: 188 case CKM_DES_MAC_GENERAL: 189 case CKM_DES_CBC_PAD: 190 case CKM_PBE_MD2_DES_CBC: 191 case CKM_PBE_MD5_DES_CBC: 192 case CKM_DES_OFB64: 193 case CKM_DES_OFB8: 194 case CKM_DES_CFB64: 195 case CKM_DES_CFB8: 196 case CKM_DES_ECB_ENCRYPT_DATA: 197 case CKM_DES_CBC_ENCRYPT_DATA: 198 *ktype = CKK_DES; 199 break; 200 201 case CKM_DES2_KEY_GEN: 202 case CKM_PBE_SHA1_DES2_EDE_CBC: 203 *ktype = CKK_DES2; 204 break; 205 206 case CKM_DES3_KEY_GEN: 207 case CKM_DES3_ECB: 208 case CKM_DES3_CBC: 209 case CKM_DES3_MAC: 210 case CKM_DES3_MAC_GENERAL: 211 case CKM_DES3_CBC_PAD: 212 case CKM_PBE_SHA1_DES3_EDE_CBC: 213 case CKM_DES3_ECB_ENCRYPT_DATA: 214 case CKM_DES3_CBC_ENCRYPT_DATA: 215 *ktype = CKK_DES3; 216 break; 217 218 case CKM_CAST_KEY_GEN: 219 case CKM_CAST_ECB: 220 case CKM_CAST_CBC: 221 case CKM_CAST_MAC: 222 case CKM_CAST_MAC_GENERAL: 223 case CKM_CAST_CBC_PAD: 224 case CKM_PBE_MD5_CAST_CBC: 225 *ktype = CKK_CAST; 226 break; 227 228 case CKM_CAST3_KEY_GEN: 229 case CKM_CAST3_ECB: 230 case CKM_CAST3_CBC: 231 case CKM_CAST3_MAC: 232 case CKM_CAST3_MAC_GENERAL: 233 case CKM_CAST3_CBC_PAD: 234 case CKM_PBE_MD5_CAST3_CBC: 235 *ktype = CKK_CAST3; 236 break; 237 238 case CKM_CAST128_KEY_GEN: 239 case CKM_CAST128_ECB: 240 case CKM_CAST128_CBC: 241 case CKM_CAST128_MAC: 242 case CKM_CAST128_MAC_GENERAL: 243 case CKM_CAST128_CBC_PAD: 244 case CKM_PBE_MD5_CAST128_CBC: 245 case CKM_PBE_SHA1_CAST128_CBC: 246 *ktype = CKK_CAST128; 247 break; 248 249 case CKM_RC5_KEY_GEN: 250 case CKM_RC5_ECB: 251 case CKM_RC5_CBC: 252 case CKM_RC5_MAC: 253 case CKM_RC5_MAC_GENERAL: 254 case CKM_RC5_CBC_PAD: 255 *ktype = CKK_RC5; 256 break; 257 258 case CKM_IDEA_KEY_GEN: 259 case CKM_IDEA_ECB: 260 case CKM_IDEA_CBC: 261 case CKM_IDEA_MAC: 262 case CKM_IDEA_MAC_GENERAL: 263 case CKM_IDEA_CBC_PAD: 264 *ktype = CKK_IDEA; 265 break; 266 267 case CKM_SKIPJACK_KEY_GEN: 268 case CKM_SKIPJACK_ECB64: 269 case CKM_SKIPJACK_CBC64: 270 case CKM_SKIPJACK_OFB64: 271 case CKM_SKIPJACK_CFB64: 272 case CKM_SKIPJACK_CFB32: 273 case CKM_SKIPJACK_CFB16: 274 case CKM_SKIPJACK_CFB8: 275 case CKM_SKIPJACK_WRAP: 276 case CKM_SKIPJACK_PRIVATE_WRAP: 277 case CKM_SKIPJACK_RELAYX: 278 *ktype = CKK_SKIPJACK; 279 break; 280 281 case CKM_BATON_KEY_GEN: 282 case CKM_BATON_ECB128: 283 case CKM_BATON_ECB96: 284 case CKM_BATON_CBC128: 285 case CKM_BATON_COUNTER: 286 case CKM_BATON_SHUFFLE: 287 case CKM_BATON_WRAP: 288 *ktype = CKK_BATON; 289 break; 290 291 case CKM_JUNIPER_KEY_GEN: 292 case CKM_JUNIPER_ECB128: 293 case CKM_JUNIPER_CBC128: 294 case CKM_JUNIPER_COUNTER: 295 case CKM_JUNIPER_SHUFFLE: 296 case CKM_JUNIPER_WRAP: 297 *ktype = CKK_JUNIPER; 298 break; 299 300 case CKM_CDMF_KEY_GEN: 301 case CKM_CDMF_ECB: 302 case CKM_CDMF_CBC: 303 case CKM_CDMF_MAC: 304 case CKM_CDMF_MAC_GENERAL: 305 case CKM_CDMF_CBC_PAD: 306 *ktype = CKK_CDMF; 307 break; 308 309 case CKM_AES_KEY_GEN: 310 case CKM_AES_ECB: 311 case CKM_AES_CBC: 312 case CKM_AES_MAC: 313 case CKM_AES_MAC_GENERAL: 314 case CKM_AES_CBC_PAD: 315 case CKM_AES_ECB_ENCRYPT_DATA: 316 case CKM_AES_CBC_ENCRYPT_DATA: 317 *ktype = CKK_AES; 318 break; 319 320 case CKM_BLOWFISH_KEY_GEN: 321 case CKM_BLOWFISH_CBC: 322 *ktype = CKK_BLOWFISH; 323 break; 324 325 case CKM_TWOFISH_KEY_GEN: 326 case CKM_TWOFISH_CBC: 327 *ktype = CKK_TWOFISH; 328 break; 329 330 default: 331 rv = CKR_MECHANISM_INVALID; 332 break; 333 } 334 335 return (rv); 336 } 337