OLD | NEW |
1 /* This Source Code Form is subject to the terms of the Mozilla Public | 1 /* This Source Code Form is subject to the terms of the Mozilla Public |
2 * License, v. 2.0. If a copy of the MPL was not distributed with this | 2 * License, v. 2.0. If a copy of the MPL was not distributed with this |
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ | 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
4 /* | 4 /* |
5 * This file implements PKCS 11 on top of our existing security modules | 5 * This file implements PKCS 11 on top of our existing security modules |
6 * | 6 * |
7 * For more information about PKCS 11 See PKCS 11 Token Inteface Standard. | 7 * For more information about PKCS 11 See PKCS 11 Token Inteface Standard. |
8 * This implementation has two slots: | 8 * This implementation has two slots: |
9 * slot 1 is our generic crypto support. It does not require login. | 9 * slot 1 is our generic crypto support. It does not require login. |
10 * It supports Public Key ops, and all they bulk ciphers and hashes. | 10 * It supports Public Key ops, and all they bulk ciphers and hashes. |
(...skipping 286 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
297 {CKM_DSA_SHA1, {DSA_MIN_P_BITS, DSA_MAX_P_BITS, | 297 {CKM_DSA_SHA1, {DSA_MIN_P_BITS, DSA_MAX_P_BITS, |
298 CKF_SN_VR}, PR_TRUE}, | 298 CKF_SN_VR}, PR_TRUE}, |
299 /* -------------------- Diffie Hellman Operations --------------------- */ | 299 /* -------------------- Diffie Hellman Operations --------------------- */ |
300 /* no diffie hellman yet */ | 300 /* no diffie hellman yet */ |
301 {CKM_DH_PKCS_KEY_PAIR_GEN, {DH_MIN_P_BITS, DH_MAX_P_BITS, | 301 {CKM_DH_PKCS_KEY_PAIR_GEN, {DH_MIN_P_BITS, DH_MAX_P_BITS, |
302 CKF_GENERATE_KEY_PAIR}, PR_TRUE}, | 302 CKF_GENERATE_KEY_PAIR}, PR_TRUE}, |
303 {CKM_DH_PKCS_DERIVE, {DH_MIN_P_BITS, DH_MAX_P_BITS, | 303 {CKM_DH_PKCS_DERIVE, {DH_MIN_P_BITS, DH_MAX_P_BITS, |
304 CKF_DERIVE}, PR_TRUE}, | 304 CKF_DERIVE}, PR_TRUE}, |
305 #ifdef NSS_ENABLE_ECC | 305 #ifdef NSS_ENABLE_ECC |
306 /* -------------------- Elliptic Curve Operations --------------------- */ | 306 /* -------------------- Elliptic Curve Operations --------------------- */ |
307 {CKM_EC_KEY_PAIR_GEN, {112, 571, CKF_GENERATE_KEY_PAIR|CKF_EC_BPNU}, P
R_TRUE}, | 307 {CKM_EC_KEY_PAIR_GEN, {EC_MIN_KEY, EC_MAX_KEY, |
308 {CKM_ECDH1_DERIVE, {112, 571, CKF_DERIVE|CKF_EC_BPNU}, PR_TRUE}, | 308 » » » » CKF_GENERATE_KEY_PAIR|CKF_EC_BPNU}, PR_TRUE}, |
309 {CKM_ECDSA, {112, 571, CKF_SN_VR|CKF_EC_BPNU}, PR_TRUE}, | 309 {CKM_ECDH1_DERIVE, {EC_MIN_KEY, EC_MAX_KEY, |
310 {CKM_ECDSA_SHA1, {112, 571, CKF_SN_VR|CKF_EC_BPNU}, PR_TRUE}, | 310 » » » » CKF_DERIVE|CKF_EC_BPNU}, PR_TRUE}, |
| 311 {CKM_ECDSA, {EC_MIN_KEY, EC_MAX_KEY, |
| 312 » » » » CKF_SN_VR|CKF_EC_BPNU}, PR_TRUE}, |
| 313 {CKM_ECDSA_SHA1, {EC_MIN_KEY, EC_MAX_KEY, |
| 314 » » » » CKF_SN_VR|CKF_EC_BPNU}, PR_TRUE}, |
311 #endif /* NSS_ENABLE_ECC */ | 315 #endif /* NSS_ENABLE_ECC */ |
312 /* ------------------------- RC2 Operations --------------------------- */ | 316 /* ------------------------- RC2 Operations --------------------------- */ |
313 {CKM_RC2_KEY_GEN, {1, 128, CKF_GENERATE}, PR_TRUE}, | 317 {CKM_RC2_KEY_GEN, {1, 128, CKF_GENERATE}, PR_TRUE}, |
314 {CKM_RC2_ECB, {1, 128, CKF_EN_DE_WR_UN}, PR_TRUE}, | 318 {CKM_RC2_ECB, {1, 128, CKF_EN_DE_WR_UN}, PR_TRUE}, |
315 {CKM_RC2_CBC, {1, 128, CKF_EN_DE_WR_UN}, PR_TRUE}, | 319 {CKM_RC2_CBC, {1, 128, CKF_EN_DE_WR_UN}, PR_TRUE}, |
316 {CKM_RC2_MAC, {1, 128, CKF_SN_VR}, PR_TRUE}, | 320 {CKM_RC2_MAC, {1, 128, CKF_SN_VR}, PR_TRUE}, |
317 {CKM_RC2_MAC_GENERAL, {1, 128, CKF_SN_VR}, PR_TRUE}, | 321 {CKM_RC2_MAC_GENERAL, {1, 128, CKF_SN_VR}, PR_TRUE}, |
318 {CKM_RC2_CBC_PAD, {1, 128, CKF_EN_DE_WR_UN}, PR_TRUE}, | 322 {CKM_RC2_CBC_PAD, {1, 128, CKF_EN_DE_WR_UN}, PR_TRUE}, |
319 /* ------------------------- RC4 Operations --------------------------- */ | 323 /* ------------------------- RC4 Operations --------------------------- */ |
320 {CKM_RC4_KEY_GEN, {1, 256, CKF_GENERATE}, PR_FALSE}, | 324 {CKM_RC4_KEY_GEN, {1, 256, CKF_GENERATE}, PR_FALSE}, |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
380 {CKM_SHA256, {0, 0, CKF_DIGEST}, PR_FALSE}, | 384 {CKM_SHA256, {0, 0, CKF_DIGEST}, PR_FALSE}, |
381 {CKM_SHA256_HMAC, {1, 128, CKF_SN_VR}, PR_TRUE}, | 385 {CKM_SHA256_HMAC, {1, 128, CKF_SN_VR}, PR_TRUE}, |
382 {CKM_SHA256_HMAC_GENERAL, {1, 128, CKF_SN_VR}, PR_TRUE}, | 386 {CKM_SHA256_HMAC_GENERAL, {1, 128, CKF_SN_VR}, PR_TRUE}, |
383 {CKM_SHA384, {0, 0, CKF_DIGEST}, PR_FALSE}, | 387 {CKM_SHA384, {0, 0, CKF_DIGEST}, PR_FALSE}, |
384 {CKM_SHA384_HMAC, {1, 128, CKF_SN_VR}, PR_TRUE}, | 388 {CKM_SHA384_HMAC, {1, 128, CKF_SN_VR}, PR_TRUE}, |
385 {CKM_SHA384_HMAC_GENERAL, {1, 128, CKF_SN_VR}, PR_TRUE}, | 389 {CKM_SHA384_HMAC_GENERAL, {1, 128, CKF_SN_VR}, PR_TRUE}, |
386 {CKM_SHA512, {0, 0, CKF_DIGEST}, PR_FALSE}, | 390 {CKM_SHA512, {0, 0, CKF_DIGEST}, PR_FALSE}, |
387 {CKM_SHA512_HMAC, {1, 128, CKF_SN_VR}, PR_TRUE}, | 391 {CKM_SHA512_HMAC, {1, 128, CKF_SN_VR}, PR_TRUE}, |
388 {CKM_SHA512_HMAC_GENERAL, {1, 128, CKF_SN_VR}, PR_TRUE}, | 392 {CKM_SHA512_HMAC_GENERAL, {1, 128, CKF_SN_VR}, PR_TRUE}, |
389 {CKM_TLS_PRF_GENERAL, {0, 512, CKF_SN_VR}, PR_FALSE}, | 393 {CKM_TLS_PRF_GENERAL, {0, 512, CKF_SN_VR}, PR_FALSE}, |
| 394 {CKM_NSS_TLS_PRF_GENERAL_SHA256, |
| 395 {0, 512, CKF_SN_VR}, PR_FALSE}, |
390 /* ------------------------- HKDF Operations -------------------------- */ | 396 /* ------------------------- HKDF Operations -------------------------- */ |
391 {CKM_NSS_HKDF_SHA1, {1, 128, CKF_DERIVE}, PR_TRUE}, | 397 {CKM_NSS_HKDF_SHA1, {1, 128, CKF_DERIVE}, PR_TRUE}, |
392 {CKM_NSS_HKDF_SHA256, {1, 128, CKF_DERIVE}, PR_TRUE}, | 398 {CKM_NSS_HKDF_SHA256, {1, 128, CKF_DERIVE}, PR_TRUE}, |
393 {CKM_NSS_HKDF_SHA384, {1, 128, CKF_DERIVE}, PR_TRUE}, | 399 {CKM_NSS_HKDF_SHA384, {1, 128, CKF_DERIVE}, PR_TRUE}, |
394 {CKM_NSS_HKDF_SHA512, {1, 128, CKF_DERIVE}, PR_TRUE}, | 400 {CKM_NSS_HKDF_SHA512, {1, 128, CKF_DERIVE}, PR_TRUE}, |
395 /* ------------------------- CAST Operations --------------------------- */ | 401 /* ------------------------- CAST Operations --------------------------- */ |
396 #ifdef NSS_SOFTOKEN_DOES_CAST | 402 #ifdef NSS_SOFTOKEN_DOES_CAST |
397 /* Cast operations are not supported ( yet? ) */ | 403 /* Cast operations are not supported ( yet? ) */ |
398 {CKM_CAST_KEY_GEN, {1, 8, CKF_GENERATE}, PR_TRUE}, | 404 {CKM_CAST_KEY_GEN, {1, 8, CKF_GENERATE}, PR_TRUE}, |
399 {CKM_CAST_ECB, {1, 8, CKF_EN_DE_WR_UN}, PR_TRUE}, | 405 {CKM_CAST_ECB, {1, 8, CKF_EN_DE_WR_UN}, PR_TRUE}, |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
447 {CKM_SSL3_MD5_MAC, { 0, 16, CKF_DERIVE}, PR_FALSE}, | 453 {CKM_SSL3_MD5_MAC, { 0, 16, CKF_DERIVE}, PR_FALSE}, |
448 {CKM_SSL3_SHA1_MAC, { 0, 20, CKF_DERIVE}, PR_FALSE}, | 454 {CKM_SSL3_SHA1_MAC, { 0, 20, CKF_DERIVE}, PR_FALSE}, |
449 {CKM_MD5_KEY_DERIVATION, { 0, 16, CKF_DERIVE}, PR_FALSE}, | 455 {CKM_MD5_KEY_DERIVATION, { 0, 16, CKF_DERIVE}, PR_FALSE}, |
450 {CKM_MD2_KEY_DERIVATION, { 0, 16, CKF_DERIVE}, PR_FALSE}, | 456 {CKM_MD2_KEY_DERIVATION, { 0, 16, CKF_DERIVE}, PR_FALSE}, |
451 {CKM_SHA1_KEY_DERIVATION, { 0, 20, CKF_DERIVE}, PR_FALSE}, | 457 {CKM_SHA1_KEY_DERIVATION, { 0, 20, CKF_DERIVE}, PR_FALSE}, |
452 {CKM_SHA224_KEY_DERIVATION, { 0, 28, CKF_DERIVE}, PR_FALSE}, | 458 {CKM_SHA224_KEY_DERIVATION, { 0, 28, CKF_DERIVE}, PR_FALSE}, |
453 {CKM_SHA256_KEY_DERIVATION, { 0, 32, CKF_DERIVE}, PR_FALSE}, | 459 {CKM_SHA256_KEY_DERIVATION, { 0, 32, CKF_DERIVE}, PR_FALSE}, |
454 {CKM_SHA384_KEY_DERIVATION, { 0, 48, CKF_DERIVE}, PR_FALSE}, | 460 {CKM_SHA384_KEY_DERIVATION, { 0, 48, CKF_DERIVE}, PR_FALSE}, |
455 {CKM_SHA512_KEY_DERIVATION, { 0, 64, CKF_DERIVE}, PR_FALSE}, | 461 {CKM_SHA512_KEY_DERIVATION, { 0, 64, CKF_DERIVE}, PR_FALSE}, |
456 {CKM_TLS_MASTER_KEY_DERIVE, {48, 48, CKF_DERIVE}, PR_FALSE}, | 462 {CKM_TLS_MASTER_KEY_DERIVE, {48, 48, CKF_DERIVE}, PR_FALSE}, |
| 463 {CKM_NSS_TLS_MASTER_KEY_DERIVE_SHA256, |
| 464 {48, 48, CKF_DERIVE}, PR_FALSE}, |
457 {CKM_TLS_MASTER_KEY_DERIVE_DH, {8, 128, CKF_DERIVE}, PR_FALSE}, | 465 {CKM_TLS_MASTER_KEY_DERIVE_DH, {8, 128, CKF_DERIVE}, PR_FALSE}, |
| 466 {CKM_NSS_TLS_MASTER_KEY_DERIVE_DH_SHA256, |
| 467 {8, 128, CKF_DERIVE}, PR_FALSE}, |
458 {CKM_TLS_KEY_AND_MAC_DERIVE, {48, 48, CKF_DERIVE}, PR_FALSE}, | 468 {CKM_TLS_KEY_AND_MAC_DERIVE, {48, 48, CKF_DERIVE}, PR_FALSE}, |
| 469 {CKM_NSS_TLS_KEY_AND_MAC_DERIVE_SHA256, |
| 470 {48, 48, CKF_DERIVE}, PR_FALSE}, |
459 /* ---------------------- PBE Key Derivations ------------------------ */ | 471 /* ---------------------- PBE Key Derivations ------------------------ */ |
460 {CKM_PBE_MD2_DES_CBC, {8, 8, CKF_DERIVE}, PR_TRUE}, | 472 {CKM_PBE_MD2_DES_CBC, {8, 8, CKF_DERIVE}, PR_TRUE}, |
461 {CKM_PBE_MD5_DES_CBC, {8, 8, CKF_DERIVE}, PR_TRUE}, | 473 {CKM_PBE_MD5_DES_CBC, {8, 8, CKF_DERIVE}, PR_TRUE}, |
462 /* ------------------ NETSCAPE PBE Key Derivations ------------------- */ | 474 /* ------------------ NETSCAPE PBE Key Derivations ------------------- */ |
463 {CKM_NETSCAPE_PBE_SHA1_DES_CBC, { 8, 8, CKF_GENERATE}, PR_TRUE}, | 475 {CKM_NETSCAPE_PBE_SHA1_DES_CBC, { 8, 8, CKF_GENERATE}, PR_TRUE}, |
464 {CKM_NETSCAPE_PBE_SHA1_FAULTY_3DES_CBC, {24,24, CKF_GENERATE}, PR_TRUE}, | 476 {CKM_NETSCAPE_PBE_SHA1_FAULTY_3DES_CBC, {24,24, CKF_GENERATE}, PR_TRUE}, |
465 {CKM_PBE_SHA1_DES3_EDE_CBC, {24,24, CKF_GENERATE}, PR_TRUE}, | 477 {CKM_PBE_SHA1_DES3_EDE_CBC, {24,24, CKF_GENERATE}, PR_TRUE}, |
466 {CKM_PBE_SHA1_DES2_EDE_CBC, {24,24, CKF_GENERATE}, PR_TRUE}, | 478 {CKM_PBE_SHA1_DES2_EDE_CBC, {24,24, CKF_GENERATE}, PR_TRUE}, |
467 {CKM_PBE_SHA1_RC2_40_CBC, {40,40, CKF_GENERATE}, PR_TRUE}, | 479 {CKM_PBE_SHA1_RC2_40_CBC, {40,40, CKF_GENERATE}, PR_TRUE}, |
468 {CKM_PBE_SHA1_RC2_128_CBC, {128,128, CKF_GENERATE}, PR_TRUE}, | 480 {CKM_PBE_SHA1_RC2_128_CBC, {128,128, CKF_GENERATE}, PR_TRUE}, |
(...skipping 1418 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1887 | 1899 |
1888 if (sftk_hasAttribute(object, CKA_NETSCAPE_DB)) { | 1900 if (sftk_hasAttribute(object, CKA_NETSCAPE_DB)) { |
1889 crv = sftk_Attribute2SSecItem(arena, &privKey->u.ec.publicValue, | 1901 crv = sftk_Attribute2SSecItem(arena, &privKey->u.ec.publicValue, |
1890 object, CKA_NETSCAPE_DB); | 1902 object, CKA_NETSCAPE_DB); |
1891 if (crv != CKR_OK) break; | 1903 if (crv != CKR_OK) break; |
1892 /* privKey was zero'd so public value is already set to NULL, 0 | 1904 /* privKey was zero'd so public value is already set to NULL, 0 |
1893 * if we don't set it explicitly */ | 1905 * if we don't set it explicitly */ |
1894 } | 1906 } |
1895 rv = DER_SetUInteger(privKey->arena, &privKey->u.ec.version, | 1907 rv = DER_SetUInteger(privKey->arena, &privKey->u.ec.version, |
1896 NSSLOWKEY_EC_PRIVATE_KEY_VERSION); | 1908 NSSLOWKEY_EC_PRIVATE_KEY_VERSION); |
1897 » if (rv != SECSuccess) crv = CKR_HOST_MEMORY; | 1909 » if (rv != SECSuccess) { |
| 1910 » crv = CKR_HOST_MEMORY; |
| 1911 » /* The following ifdef is needed for Linux arm distros and |
| 1912 » * Android as gcc 4.6 has a bug when targeting arm (but not |
| 1913 » * thumb). The bug has been fixed in gcc 4.7. |
| 1914 » * http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56561 |
| 1915 » */ |
| 1916 #if defined (__arm__) && !defined(__thumb__) && defined (__GNUC__) |
| 1917 » *crvp = CKR_HOST_MEMORY; |
| 1918 » break; |
| 1919 #endif |
| 1920 » } |
1898 break; | 1921 break; |
1899 #endif /* NSS_ENABLE_ECC */ | 1922 #endif /* NSS_ENABLE_ECC */ |
1900 | 1923 |
1901 default: | 1924 default: |
1902 crv = CKR_KEY_TYPE_INCONSISTENT; | 1925 crv = CKR_KEY_TYPE_INCONSISTENT; |
1903 break; | 1926 break; |
1904 } | 1927 } |
1905 if (crv == CKR_OK && itemTemplateCount != 0) { | 1928 if (crv == CKR_OK && itemTemplateCount != 0) { |
1906 PORT_Assert(itemTemplateCount > 0); | 1929 PORT_Assert(itemTemplateCount > 0); |
1907 PORT_Assert(itemTemplateCount <= SFTK_MAX_ITEM_TEMPLATE); | 1930 PORT_Assert(itemTemplateCount <= SFTK_MAX_ITEM_TEMPLATE); |
(...skipping 2791 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4699 | 4722 |
4700 | 4723 |
4701 CK_RV NSC_WaitForSlotEvent(CK_FLAGS flags, CK_SLOT_ID_PTR pSlot, | 4724 CK_RV NSC_WaitForSlotEvent(CK_FLAGS flags, CK_SLOT_ID_PTR pSlot, |
4702 CK_VOID_PTR pReserved) | 4725 CK_VOID_PTR pReserved) |
4703 { | 4726 { |
4704 CHECK_FORK(); | 4727 CHECK_FORK(); |
4705 | 4728 |
4706 return CKR_FUNCTION_NOT_SUPPORTED; | 4729 return CKR_FUNCTION_NOT_SUPPORTED; |
4707 } | 4730 } |
4708 | 4731 |
OLD | NEW |