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 #include "plarena.h" | 5 #include "plarena.h" |
6 | 6 |
7 #include "seccomon.h" | 7 #include "seccomon.h" |
8 #include "secitem.h" | 8 #include "secitem.h" |
9 #include "secport.h" | 9 #include "secport.h" |
10 #include "hasht.h" | 10 #include "hasht.h" |
(...skipping 618 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
629 cryptoMech = PK11_AlgtagToMechanism(cipherAlgorithm); | 629 cryptoMech = PK11_AlgtagToMechanism(cipherAlgorithm); |
630 if (cryptoMech == CKM_INVALID_MECHANISM) { | 630 if (cryptoMech == CKM_INVALID_MECHANISM) { |
631 goto loser; | 631 goto loser; |
632 } | 632 } |
633 keyLength = PK11_GetMaxKeyLength(cryptoMech); | 633 keyLength = PK11_GetMaxKeyLength(cryptoMech); |
634 } | 634 } |
635 if (keyLength == 0) { | 635 if (keyLength == 0) { |
636 goto loser; | 636 goto loser; |
637 } | 637 } |
638 } | 638 } |
639 » /* currently only SEC_OID_HMAC_SHA1 is defined */ | 639 » /* currently SEC_OID_HMAC_SHA1 is the default */ |
640 if (prfAlg == SEC_OID_UNKNOWN) { | 640 if (prfAlg == SEC_OID_UNKNOWN) { |
641 prfAlg = SEC_OID_HMAC_SHA1; | 641 prfAlg = SEC_OID_HMAC_SHA1; |
642 } | 642 } |
643 | 643 |
644 /* build the PKCS5v2 cipher algorithm id */ | 644 /* build the PKCS5v2 cipher algorithm id */ |
645 cipherParams = pk11_GenerateNewParamWithKeyLen( | 645 cipherParams = pk11_GenerateNewParamWithKeyLen( |
646 PK11_AlgtagToMechanism(cipherAlgorithm), keyLength); | 646 PK11_AlgtagToMechanism(cipherAlgorithm), keyLength); |
647 if (!cipherParams) { | 647 if (!cipherParams) { |
648 goto loser; | 648 goto loser; |
649 } | 649 } |
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
798 } | 798 } |
799 paramData = (unsigned char *)pbeV2_params; | 799 paramData = (unsigned char *)pbeV2_params; |
800 paramLen = sizeof(CK_PKCS5_PBKD2_PARAMS); | 800 paramLen = sizeof(CK_PKCS5_PBKD2_PARAMS); |
801 | 801 |
802 /* set the prf */ | 802 /* set the prf */ |
803 prfAlgTag = SEC_OID_HMAC_SHA1; | 803 prfAlgTag = SEC_OID_HMAC_SHA1; |
804 if (p5_param.pPrfAlgId && | 804 if (p5_param.pPrfAlgId && |
805 p5_param.pPrfAlgId->algorithm.data != 0) { | 805 p5_param.pPrfAlgId->algorithm.data != 0) { |
806 prfAlgTag = SECOID_GetAlgorithmTag(p5_param.pPrfAlgId); | 806 prfAlgTag = SECOID_GetAlgorithmTag(p5_param.pPrfAlgId); |
807 } | 807 } |
808 » if (prfAlgTag == SEC_OID_HMAC_SHA1) { | 808 switch (prfAlgTag) { |
809 » pbeV2_params->prf = CKP_PKCS5_PBKD2_HMAC_SHA1; | 809 case SEC_OID_HMAC_SHA1: |
810 » } else { | 810 pbeV2_params->prf = CKP_PKCS5_PBKD2_HMAC_SHA1; |
811 » /* only SHA1_HMAC is currently supported by PKCS #11 */ | 811 break; |
812 » PORT_SetError(SEC_ERROR_INVALID_ALGORITHM); | 812 case SEC_OID_HMAC_SHA224: |
813 » goto loser; | 813 pbeV2_params->prf = CKP_PKCS5_PBKD2_HMAC_SHA224; |
814 » } | 814 break; |
| 815 case SEC_OID_HMAC_SHA256: |
| 816 pbeV2_params->prf = CKP_PKCS5_PBKD2_HMAC_SHA256; |
| 817 break; |
| 818 case SEC_OID_HMAC_SHA384: |
| 819 pbeV2_params->prf = CKP_PKCS5_PBKD2_HMAC_SHA384; |
| 820 break; |
| 821 case SEC_OID_HMAC_SHA512: |
| 822 pbeV2_params->prf = CKP_PKCS5_PBKD2_HMAC_SHA512; |
| 823 break; |
| 824 default: |
| 825 PORT_SetError(SEC_ERROR_INVALID_ALGORITHM); |
| 826 goto loser; |
| 827 } |
815 | 828 |
816 /* probably should fetch these from the prfAlgid */ | 829 /* probably should fetch these from the prfAlgid */ |
817 pbeV2_params->pPrfData = NULL; | 830 pbeV2_params->pPrfData = NULL; |
818 pbeV2_params->ulPrfDataLen = 0; | 831 pbeV2_params->ulPrfDataLen = 0; |
819 pbeV2_params->saltSource = CKZ_SALT_SPECIFIED; | 832 pbeV2_params->saltSource = CKZ_SALT_SPECIFIED; |
820 pSalt = ((CK_CHAR_PTR) pbeV2_params)+sizeof(CK_PKCS5_PBKD2_PARAMS); | 833 pSalt = ((CK_CHAR_PTR) pbeV2_params)+sizeof(CK_PKCS5_PBKD2_PARAMS); |
821 PORT_Memcpy(pSalt, salt->data, salt->len); | 834 PORT_Memcpy(pSalt, salt->data, salt->len); |
822 pbeV2_params->pSaltSourceData = pSalt; | 835 pbeV2_params->pSaltSourceData = pSalt; |
823 pbeV2_params->ulSaltSourceDataLen = salt->len; | 836 pbeV2_params->ulSaltSourceDataLen = salt->len; |
824 pbeV2_params->iterations = iterations; | 837 pbeV2_params->iterations = iterations; |
(...skipping 598 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1423 * | 1436 * |
1424 * This function returns both the mechanism and the parameter for the mechanism. | 1437 * This function returns both the mechanism and the parameter for the mechanism. |
1425 * The caller is responsible for freeing the parameter. | 1438 * The caller is responsible for freeing the parameter. |
1426 */ | 1439 */ |
1427 CK_MECHANISM_TYPE | 1440 CK_MECHANISM_TYPE |
1428 PK11_GetPBECryptoMechanism(SECAlgorithmID *algid, SECItem **param, | 1441 PK11_GetPBECryptoMechanism(SECAlgorithmID *algid, SECItem **param, |
1429 SECItem *pbe_pwd) | 1442 SECItem *pbe_pwd) |
1430 { | 1443 { |
1431 return pk11_GetPBECryptoMechanism(algid, param, pbe_pwd, PR_FALSE); | 1444 return pk11_GetPBECryptoMechanism(algid, param, pbe_pwd, PR_FALSE); |
1432 } | 1445 } |
OLD | NEW |