Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(7)

Side by Side Diff: nss/lib/softoken/pkcs11c.c

Issue 13898013: Update NSS to NSS_3_15_BETA2. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/deps/third_party/nss/
Patch Set: Update NSS versions and tag in README.chromium Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 2229 matching lines...) Expand 10 before | Expand all | Expand 10 after
2240 2240
2241 case CKM_SSL3_MD5_MAC: 2241 case CKM_SSL3_MD5_MAC:
2242 crv = sftk_doSSLMACInit(context,SEC_OID_MD5,key, 2242 crv = sftk_doSSLMACInit(context,SEC_OID_MD5,key,
2243 *(CK_ULONG *)pMechanism->pParameter); 2243 *(CK_ULONG *)pMechanism->pParameter);
2244 break; 2244 break;
2245 case CKM_SSL3_SHA1_MAC: 2245 case CKM_SSL3_SHA1_MAC:
2246 crv = sftk_doSSLMACInit(context,SEC_OID_SHA1,key, 2246 crv = sftk_doSSLMACInit(context,SEC_OID_SHA1,key,
2247 *(CK_ULONG *)pMechanism->pParameter); 2247 *(CK_ULONG *)pMechanism->pParameter);
2248 break; 2248 break;
2249 case CKM_TLS_PRF_GENERAL: 2249 case CKM_TLS_PRF_GENERAL:
2250 » crv = sftk_TLSPRFInit(context, key, key_type); 2250 » crv = sftk_TLSPRFInit(context, key, key_type, HASH_AlgNULL);
2251 » break;
2252 case CKM_NSS_TLS_PRF_GENERAL_SHA256:
2253 » crv = sftk_TLSPRFInit(context, key, key_type, HASH_AlgSHA256);
2251 break; 2254 break;
2252 2255
2253 case CKM_NSS_HMAC_CONSTANT_TIME: { 2256 case CKM_NSS_HMAC_CONSTANT_TIME: {
2254 sftk_MACConstantTimeCtx *ctx = 2257 sftk_MACConstantTimeCtx *ctx =
2255 sftk_HMACConstantTime_New(pMechanism,key); 2258 sftk_HMACConstantTime_New(pMechanism,key);
2256 CK_ULONG *intpointer; 2259 CK_ULONG *intpointer;
2257 2260
2258 if (ctx == NULL) { 2261 if (ctx == NULL) {
2259 crv = CKR_ARGUMENTS_BAD; 2262 crv = CKR_ARGUMENTS_BAD;
2260 break; 2263 break;
(...skipping 535 matching lines...) Expand 10 before | Expand all | Expand 10 after
2796 2799
2797 case CKM_SSL3_MD5_MAC: 2800 case CKM_SSL3_MD5_MAC:
2798 crv = sftk_doSSLMACInit(context,SEC_OID_MD5,key, 2801 crv = sftk_doSSLMACInit(context,SEC_OID_MD5,key,
2799 *(CK_ULONG *)pMechanism->pParameter); 2802 *(CK_ULONG *)pMechanism->pParameter);
2800 break; 2803 break;
2801 case CKM_SSL3_SHA1_MAC: 2804 case CKM_SSL3_SHA1_MAC:
2802 crv = sftk_doSSLMACInit(context,SEC_OID_SHA1,key, 2805 crv = sftk_doSSLMACInit(context,SEC_OID_SHA1,key,
2803 *(CK_ULONG *)pMechanism->pParameter); 2806 *(CK_ULONG *)pMechanism->pParameter);
2804 break; 2807 break;
2805 case CKM_TLS_PRF_GENERAL: 2808 case CKM_TLS_PRF_GENERAL:
2806 » crv = sftk_TLSPRFInit(context, key, key_type); 2809 » crv = sftk_TLSPRFInit(context, key, key_type, HASH_AlgNULL);
2810 » break;
2811 case CKM_NSS_TLS_PRF_GENERAL_SHA256:
2812 » crv = sftk_TLSPRFInit(context, key, key_type, HASH_AlgSHA256);
2807 break; 2813 break;
2808 2814
2809 default: 2815 default:
2810 crv = CKR_MECHANISM_INVALID; 2816 crv = CKR_MECHANISM_INVALID;
2811 break; 2817 break;
2812 } 2818 }
2813 2819
2814 if (crv != CKR_OK) { 2820 if (crv != CKR_OK) {
2815 if (info) PORT_Free(info); 2821 if (info) PORT_Free(info);
2816 sftk_FreeContext(context); 2822 sftk_FreeContext(context);
(...skipping 2647 matching lines...) Expand 10 before | Expand all | Expand 10 after
5464 CK_ULONG macSize; 5470 CK_ULONG macSize;
5465 CK_ULONG tmpKeySize; 5471 CK_ULONG tmpKeySize;
5466 CK_ULONG IVSize; 5472 CK_ULONG IVSize;
5467 CK_ULONG keySize = 0; 5473 CK_ULONG keySize = 0;
5468 CK_RV crv = CKR_OK; 5474 CK_RV crv = CKR_OK;
5469 CK_BBOOL cktrue = CK_TRUE; 5475 CK_BBOOL cktrue = CK_TRUE;
5470 CK_KEY_TYPE keyType = CKK_GENERIC_SECRET; 5476 CK_KEY_TYPE keyType = CKK_GENERIC_SECRET;
5471 CK_OBJECT_CLASS classType = CKO_SECRET_KEY; 5477 CK_OBJECT_CLASS classType = CKO_SECRET_KEY;
5472 CK_KEY_DERIVATION_STRING_DATA *stringPtr; 5478 CK_KEY_DERIVATION_STRING_DATA *stringPtr;
5473 PRBool isTLS = PR_FALSE; 5479 PRBool isTLS = PR_FALSE;
5480 PRBool isSHA256 = PR_FALSE;
5474 PRBool isDH = PR_FALSE; 5481 PRBool isDH = PR_FALSE;
5475 SECStatus rv; 5482 SECStatus rv;
5476 int i; 5483 int i;
5477 unsigned int outLen; 5484 unsigned int outLen;
5478 unsigned char sha_out[SHA1_LENGTH]; 5485 unsigned char sha_out[SHA1_LENGTH];
5479 unsigned char key_block[NUM_MIXERS * MD5_LENGTH]; 5486 unsigned char key_block[NUM_MIXERS * MD5_LENGTH];
5480 unsigned char key_block2[MD5_LENGTH]; 5487 unsigned char key_block2[MD5_LENGTH];
5481 PRBool isFIPS; 5488 PRBool isFIPS;
5482 HASH_HashType hashType; 5489 HASH_HashType hashType;
5483 PRBool extractValue = PR_TRUE; 5490 PRBool extractValue = PR_TRUE;
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
5563 sftk_FreeObject(key); 5570 sftk_FreeObject(key);
5564 sftk_FreeObject(sourceKey); 5571 sftk_FreeObject(sourceKey);
5565 return CKR_KEY_HANDLE_INVALID; 5572 return CKR_KEY_HANDLE_INVALID;
5566 } 5573 }
5567 } 5574 }
5568 5575
5569 switch (pMechanism->mechanism) { 5576 switch (pMechanism->mechanism) {
5570 /* 5577 /*
5571 * generate the master secret 5578 * generate the master secret
5572 */ 5579 */
5580 case CKM_NSS_TLS_MASTER_KEY_DERIVE_SHA256:
5581 case CKM_NSS_TLS_MASTER_KEY_DERIVE_DH_SHA256:
5582 isSHA256 = PR_TRUE;
5583 /* fall thru */
5573 case CKM_TLS_MASTER_KEY_DERIVE: 5584 case CKM_TLS_MASTER_KEY_DERIVE:
5574 case CKM_TLS_MASTER_KEY_DERIVE_DH: 5585 case CKM_TLS_MASTER_KEY_DERIVE_DH:
5575 isTLS = PR_TRUE; 5586 isTLS = PR_TRUE;
5576 /* fall thru */ 5587 /* fall thru */
5577 case CKM_SSL3_MASTER_KEY_DERIVE: 5588 case CKM_SSL3_MASTER_KEY_DERIVE:
5578 case CKM_SSL3_MASTER_KEY_DERIVE_DH: 5589 case CKM_SSL3_MASTER_KEY_DERIVE_DH:
5579 { 5590 {
5580 CK_SSL3_MASTER_KEY_DERIVE_PARAMS *ssl3_master; 5591 CK_SSL3_MASTER_KEY_DERIVE_PARAMS *ssl3_master;
5581 SSL3RSAPreMasterSecret * rsa_pms; 5592 SSL3RSAPreMasterSecret * rsa_pms;
5582 unsigned char crsrdata[SSL3_RANDOM_LENGTH * 2]; 5593 unsigned char crsrdata[SSL3_RANDOM_LENGTH * 2];
5583 5594
5584 if ((pMechanism->mechanism == CKM_SSL3_MASTER_KEY_DERIVE_DH) || 5595 if ((pMechanism->mechanism == CKM_SSL3_MASTER_KEY_DERIVE_DH) ||
5585 (pMechanism->mechanism == CKM_TLS_MASTER_KEY_DERIVE_DH)) 5596 (pMechanism->mechanism == CKM_TLS_MASTER_KEY_DERIVE_DH) ||
5597 (pMechanism->mechanism == CKM_NSS_TLS_MASTER_KEY_DERIVE_DH_SHA256))
5586 isDH = PR_TRUE; 5598 isDH = PR_TRUE;
5587 5599
5588 /* first do the consistancy checks */ 5600 /* first do the consistancy checks */
5589 if (!isDH && (att->attrib.ulValueLen != SSL3_PMS_LENGTH)) { 5601 if (!isDH && (att->attrib.ulValueLen != SSL3_PMS_LENGTH)) {
5590 crv = CKR_KEY_TYPE_INCONSISTENT; 5602 crv = CKR_KEY_TYPE_INCONSISTENT;
5591 break; 5603 break;
5592 } 5604 }
5593 att2 = sftk_FindAttribute(sourceKey,CKA_KEY_TYPE); 5605 att2 = sftk_FindAttribute(sourceKey,CKA_KEY_TYPE);
5594 if ((att2 == NULL) || (*(CK_KEY_TYPE *)att2->attrib.pValue != 5606 if ((att2 == NULL) || (*(CK_KEY_TYPE *)att2->attrib.pValue !=
5595 CKK_GENERIC_SECRET)) { 5607 CKK_GENERIC_SECRET)) {
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
5643 SECItem master = { siBuffer, NULL, 0 }; 5655 SECItem master = { siBuffer, NULL, 0 };
5644 SECItem pms = { siBuffer, NULL, 0 }; 5656 SECItem pms = { siBuffer, NULL, 0 };
5645 5657
5646 crsr.data = crsrdata; 5658 crsr.data = crsrdata;
5647 crsr.len = sizeof crsrdata; 5659 crsr.len = sizeof crsrdata;
5648 master.data = key_block; 5660 master.data = key_block;
5649 master.len = SSL3_MASTER_SECRET_LENGTH; 5661 master.len = SSL3_MASTER_SECRET_LENGTH;
5650 pms.data = (unsigned char*)att->attrib.pValue; 5662 pms.data = (unsigned char*)att->attrib.pValue;
5651 pms.len = att->attrib.ulValueLen; 5663 pms.len = att->attrib.ulValueLen;
5652 5664
5653 » status = TLS_PRF(&pms, "master secret", &crsr, &master, isFIPS); 5665 » if (isSHA256) {
5666 » » status = TLS_P_hash(HASH_AlgSHA256, &pms, "master secret",
5667 » » » » &crsr, &master, isFIPS);
5668 » } else {
5669 » » status = TLS_PRF(&pms, "master secret", &crsr, &master, isFIPS);
5670 » }
5654 if (status != SECSuccess) { 5671 if (status != SECSuccess) {
5655 crv = CKR_FUNCTION_FAILED; 5672 crv = CKR_FUNCTION_FAILED;
5656 break; 5673 break;
5657 } 5674 }
5658 } else { 5675 } else {
5659 /* now allocate the hash contexts */ 5676 /* now allocate the hash contexts */
5660 md5 = MD5_NewContext(); 5677 md5 = MD5_NewContext();
5661 if (md5 == NULL) { 5678 if (md5 == NULL) {
5662 crv = CKR_HOST_MEMORY; 5679 crv = CKR_HOST_MEMORY;
5663 break; 5680 break;
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
5702 if (crv != CKR_OK) break; 5719 if (crv != CKR_OK) break;
5703 crv = sftk_forceAttribute(key,CKA_VERIFY,&cktrue,sizeof(CK_BBOOL)); 5720 crv = sftk_forceAttribute(key,CKA_VERIFY,&cktrue,sizeof(CK_BBOOL));
5704 if (crv != CKR_OK) break; 5721 if (crv != CKR_OK) break;
5705 /* While we're here, we might as well force this, too. */ 5722 /* While we're here, we might as well force this, too. */
5706 crv = sftk_forceAttribute(key,CKA_DERIVE,&cktrue,sizeof(CK_BBOOL)); 5723 crv = sftk_forceAttribute(key,CKA_DERIVE,&cktrue,sizeof(CK_BBOOL));
5707 if (crv != CKR_OK) break; 5724 if (crv != CKR_OK) break;
5708 } 5725 }
5709 break; 5726 break;
5710 } 5727 }
5711 5728
5729 case CKM_NSS_TLS_KEY_AND_MAC_DERIVE_SHA256:
5730 isSHA256 = PR_TRUE;
5731 /* fall thru */
5712 case CKM_TLS_KEY_AND_MAC_DERIVE: 5732 case CKM_TLS_KEY_AND_MAC_DERIVE:
5713 isTLS = PR_TRUE; 5733 isTLS = PR_TRUE;
5714 /* fall thru */ 5734 /* fall thru */
5715 case CKM_SSL3_KEY_AND_MAC_DERIVE: 5735 case CKM_SSL3_KEY_AND_MAC_DERIVE:
5716 { 5736 {
5717 CK_SSL3_KEY_MAT_PARAMS *ssl3_keys; 5737 CK_SSL3_KEY_MAT_PARAMS *ssl3_keys;
5718 CK_SSL3_KEY_MAT_OUT * ssl3_keys_out; 5738 CK_SSL3_KEY_MAT_OUT * ssl3_keys_out;
5719 CK_ULONG effKeySize; 5739 CK_ULONG effKeySize;
5720 unsigned int block_needed; 5740 unsigned int block_needed;
5721 unsigned char srcrdata[SSL3_RANDOM_LENGTH * 2]; 5741 unsigned char srcrdata[SSL3_RANDOM_LENGTH * 2];
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
5793 SECItem keyblk = { siBuffer, NULL, 0 }; 5813 SECItem keyblk = { siBuffer, NULL, 0 };
5794 SECItem master = { siBuffer, NULL, 0 }; 5814 SECItem master = { siBuffer, NULL, 0 };
5795 5815
5796 srcr.data = srcrdata; 5816 srcr.data = srcrdata;
5797 srcr.len = sizeof srcrdata; 5817 srcr.len = sizeof srcrdata;
5798 keyblk.data = key_block; 5818 keyblk.data = key_block;
5799 keyblk.len = block_needed; 5819 keyblk.len = block_needed;
5800 master.data = (unsigned char*)att->attrib.pValue; 5820 master.data = (unsigned char*)att->attrib.pValue;
5801 master.len = att->attrib.ulValueLen; 5821 master.len = att->attrib.ulValueLen;
5802 5822
5803 » status = TLS_PRF(&master, "key expansion", &srcr, &keyblk, 5823 » if (isSHA256) {
5804 » » » isFIPS); 5824 » » status = TLS_P_hash(HASH_AlgSHA256, &master, "key expansion",
5825 » » » » &srcr, &keyblk, isFIPS);
5826 » } else {
5827 » » status = TLS_PRF(&master, "key expansion", &srcr, &keyblk,
5828 » » » » isFIPS);
5829 » }
5805 if (status != SECSuccess) { 5830 if (status != SECSuccess) {
5806 goto key_and_mac_derive_fail; 5831 goto key_and_mac_derive_fail;
5807 } 5832 }
5808 } else { 5833 } else {
5809 unsigned int block_bytes = 0; 5834 unsigned int block_bytes = 0;
5810 /* key_block = 5835 /* key_block =
5811 * MD5(master_secret + SHA('A' + master_secret + 5836 * MD5(master_secret + SHA('A' + master_secret +
5812 * ServerHello.random + ClientHello.random)) + 5837 * ServerHello.random + ClientHello.random)) +
5813 * MD5(master_secret + SHA('BB' + master_secret + 5838 * MD5(master_secret + SHA('BB' + master_secret +
5814 * ServerHello.random + ClientHello.random)) + 5839 * ServerHello.random + ClientHello.random)) +
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
5951 ** MD5(ServerHello.random + ClientHello.random); 5976 ** MD5(ServerHello.random + ClientHello.random);
5952 */ 5977 */
5953 MD5_Begin(md5); 5978 MD5_Begin(md5);
5954 MD5_Update(md5, srcrdata, sizeof srcrdata); 5979 MD5_Update(md5, srcrdata, sizeof srcrdata);
5955 MD5_End(md5, key_block2, &outLen, MD5_LENGTH); 5980 MD5_End(md5, key_block2, &outLen, MD5_LENGTH);
5956 PORT_Memcpy(ssl3_keys_out->pIVServer, key_block2, IVSize); 5981 PORT_Memcpy(ssl3_keys_out->pIVServer, key_block2, IVSize);
5957 5982
5958 } else { 5983 } else {
5959 5984
5960 /* 5985 /*
5961 » » ** Generate TLS Export write keys and IVs. 5986 » » ** Generate TLS 1.0 Export write keys and IVs.
5962 */ 5987 */
5963 SECStatus status; 5988 SECStatus status;
5964 SECItem secret = { siBuffer, NULL, 0 }; 5989 SECItem secret = { siBuffer, NULL, 0 };
5965 SECItem crsr = { siBuffer, NULL, 0 }; 5990 SECItem crsr = { siBuffer, NULL, 0 };
5966 SECItem keyblk = { siBuffer, NULL, 0 }; 5991 SECItem keyblk = { siBuffer, NULL, 0 };
5967 5992
5968 /* 5993 /*
5969 ** client_write_key[CipherSpec.key_material] 5994 ** client_write_key[CipherSpec.key_material]
5970 ** final_client_write_key = PRF(client_write_key, 5995 ** final_client_write_key = PRF(client_write_key,
5971 ** "client write key", 5996 ** "client write key",
(...skipping 950 matching lines...) Expand 10 before | Expand all | Expand 10 after
6922 att = sftk_FindAttribute(key,CKA_VALUE); 6947 att = sftk_FindAttribute(key,CKA_VALUE);
6923 sftk_FreeObject(key); 6948 sftk_FreeObject(key);
6924 if (!att) { 6949 if (!att) {
6925 return CKR_KEY_HANDLE_INVALID; 6950 return CKR_KEY_HANDLE_INVALID;
6926 } 6951 }
6927 crv = NSC_DigestUpdate(hSession,(CK_BYTE_PTR)att->attrib.pValue, 6952 crv = NSC_DigestUpdate(hSession,(CK_BYTE_PTR)att->attrib.pValue,
6928 att->attrib.ulValueLen); 6953 att->attrib.ulValueLen);
6929 sftk_FreeAttribute(att); 6954 sftk_FreeAttribute(att);
6930 return crv; 6955 return crv;
6931 } 6956 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698