@@ -847,6 +847,8 @@ void SymmetricAlgorithmTests::encryptDecrypt(
847847 std::vector<CK_BYTE> vEncryptedData;
848848 std::vector<CK_BYTE> vEncryptedDataParted;
849849 PartSize partSize (blockSize, &vData);
850+ CK_BBOOL oldMechs = CK_FALSE;
851+ CK_RV rv = CKR_OK;
850852
851853 CPPUNIT_ASSERT_EQUAL ( (CK_RV)CKR_OK, CRYPTOKI_F_PTR ( C_GenerateRandom (hSession, (CK_BYTE_PTR)&vData.front (), messageSize) ) );
852854
@@ -856,8 +858,25 @@ void SymmetricAlgorithmTests::encryptDecrypt(
856858 pMechanism->ulParameterLen = blockSize;
857859 }
858860
861+ switch (pMechanism->mechanism )
862+ {
863+ case CKM_DES_CBC:
864+ case CKM_DES_CBC_PAD:
865+ case CKM_DES3_CBC:
866+ case CKM_DES3_CBC_PAD:
867+ case CKM_DES_ECB:
868+ case CKM_DES3_ECB:
869+ oldMechs = CK_TRUE;
870+ /* fall-through */
871+ break ;
872+ default :
873+ break ;
874+ }
875+
859876 // Single-part encryption
860- CPPUNIT_ASSERT_EQUAL ( (CK_RV)CKR_OK, CRYPTOKI_F_PTR ( C_EncryptInit (hSession,pMechanism,hKey) ) );
877+ rv = CRYPTOKI_F_PTR ( C_EncryptInit (hSession,pMechanism,hKey) );
878+ CPPUNIT_ASSERT_EQUAL ( (CK_BBOOL) CK_FALSE, (CK_BBOOL) ((rv != CKR_OK) && (oldMechs == CK_FALSE)) );
879+ if (oldMechs == CK_FALSE)
861880 {
862881 CK_ULONG ulEncryptedDataLen;
863882 const CK_RV rv ( CRYPTOKI_F_PTR ( C_Encrypt (hSession,(CK_BYTE_PTR)&vData.front (),messageSize,NULL_PTR,&ulEncryptedDataLen) ) );
@@ -873,40 +892,43 @@ void SymmetricAlgorithmTests::encryptDecrypt(
873892 }
874893
875894 // Multi-part encryption
876- CPPUNIT_ASSERT_EQUAL ( (CK_RV)CKR_OK, CRYPTOKI_F_PTR ( C_EncryptInit (hSession,pMechanism,hKey) ) );
895+ rv = CRYPTOKI_F_PTR ( C_EncryptInit (hSession,pMechanism,hKey) );
896+ CPPUNIT_ASSERT_EQUAL ( (CK_BBOOL) CK_FALSE, (CK_BBOOL) ((rv != CKR_OK) && (oldMechs == CK_FALSE)) );
877897 CK_ULONG lPartLen = 0 ;
878- for ( std::vector<CK_BYTE>::const_iterator i (vData.begin ()); i<vData.end (); i+= lPartLen) {
879- lPartLen = ( i<vData.end ()-partSize.getNext () ? partSize.getCurrent () : vData.end ()-i );
880- CK_ULONG ulEncryptedPartLen;
881- CPPUNIT_ASSERT_EQUAL ( (CK_RV)CKR_OK, CRYPTOKI_F_PTR ( C_EncryptUpdate (hSession,(CK_BYTE_PTR)&(*i),lPartLen,NULL_PTR,&ulEncryptedPartLen) ) );
882- const size_t oldSize ( vEncryptedDataParted.size () );
883- vEncryptedDataParted.resize (oldSize+ulEncryptedPartLen);
884- CK_BYTE dummy;
885- const CK_BYTE_PTR pEncryptedPart ( ulEncryptedPartLen>0 ? &vEncryptedDataParted.at (oldSize) : &dummy );
886- CPPUNIT_ASSERT_EQUAL ( (CK_RV)CKR_OK, CRYPTOKI_F_PTR ( C_EncryptUpdate (hSession,(CK_BYTE_PTR)&(*i),lPartLen,pEncryptedPart,&ulEncryptedPartLen) ) );
887- vEncryptedDataParted.resize (oldSize+ulEncryptedPartLen);
888- }
889- {
890- CK_ULONG ulLastEncryptedPartLen;
891- const CK_RV rv ( CRYPTOKI_F_PTR ( C_EncryptFinal (hSession,NULL_PTR,&ulLastEncryptedPartLen) ) );
892- if ( isSizeOK ) {
893- CPPUNIT_ASSERT_EQUAL ( (CK_RV)CKR_OK, rv );
898+ if (oldMechs == CK_FALSE) {
899+ for ( std::vector<CK_BYTE>::const_iterator i (vData.begin ()); i<vData.end (); i+= lPartLen) {
900+ lPartLen = ( i<vData.end ()-partSize.getNext () ? partSize.getCurrent () : vData.end ()-i );
901+ CK_ULONG ulEncryptedPartLen;
902+ CPPUNIT_ASSERT_EQUAL ( (CK_RV)CKR_OK, CRYPTOKI_F_PTR ( C_EncryptUpdate (hSession,(CK_BYTE_PTR)&(*i),lPartLen,NULL_PTR,&ulEncryptedPartLen) ) );
894903 const size_t oldSize ( vEncryptedDataParted.size () );
904+ vEncryptedDataParted.resize (oldSize+ulEncryptedPartLen);
895905 CK_BYTE dummy;
896- vEncryptedDataParted.resize (oldSize+ulLastEncryptedPartLen);
897- const CK_BYTE_PTR pLastEncryptedPart ( ulLastEncryptedPartLen>0 ? &vEncryptedDataParted.at (oldSize) : &dummy );
898- CPPUNIT_ASSERT_EQUAL ( (CK_RV)CKR_OK, CRYPTOKI_F_PTR ( C_EncryptFinal (hSession,pLastEncryptedPart,&ulLastEncryptedPartLen) ) );
899- vEncryptedDataParted.resize (oldSize+ulLastEncryptedPartLen);
900- } else {
901- CPPUNIT_ASSERT_EQUAL_MESSAGE (" C_EncryptFinal should fail with C_CKR_DATA_LEN_RANGE" , (CK_RV)CKR_DATA_LEN_RANGE, rv);
902- vEncryptedDataParted = vData;
906+ const CK_BYTE_PTR pEncryptedPart ( ulEncryptedPartLen>0 ? &vEncryptedDataParted.at (oldSize) : &dummy );
907+ CPPUNIT_ASSERT_EQUAL ( (CK_RV)CKR_OK, CRYPTOKI_F_PTR ( C_EncryptUpdate (hSession,(CK_BYTE_PTR)&(*i),lPartLen,pEncryptedPart,&ulEncryptedPartLen) ) );
908+ vEncryptedDataParted.resize (oldSize+ulEncryptedPartLen);
909+ {
910+ CK_ULONG ulLastEncryptedPartLen;
911+ const CK_RV rv ( CRYPTOKI_F_PTR ( C_EncryptFinal (hSession,NULL_PTR,&ulLastEncryptedPartLen) ) );
912+ if ( isSizeOK ) {
913+ CPPUNIT_ASSERT_EQUAL ( (CK_RV)CKR_OK, rv );
914+ const size_t oldSize ( vEncryptedDataParted.size () );
915+ CK_BYTE dummy;
916+ vEncryptedDataParted.resize (oldSize+ulLastEncryptedPartLen);
917+ const CK_BYTE_PTR pLastEncryptedPart ( ulLastEncryptedPartLen>0 ? &vEncryptedDataParted.at (oldSize) : &dummy );
918+ CPPUNIT_ASSERT_EQUAL ( (CK_RV)CKR_OK, CRYPTOKI_F_PTR ( C_EncryptFinal (hSession,pLastEncryptedPart,&ulLastEncryptedPartLen) ) );
919+ vEncryptedDataParted.resize (oldSize+ulLastEncryptedPartLen);
920+ } else {
921+ CPPUNIT_ASSERT_EQUAL_MESSAGE (" C_EncryptFinal should fail with C_CKR_DATA_LEN_RANGE" , (CK_RV)CKR_DATA_LEN_RANGE, rv);
922+ vEncryptedDataParted = vData;
923+ }
924+ }
903925 }
904926 }
905927
906928 // Single-part decryption
907- CPPUNIT_ASSERT_EQUAL ( (CK_RV)CKR_OK, CRYPTOKI_F_PTR ( C_DecryptInit (hSession,pMechanism,hKey) ) );
908-
909- {
929+ rv = CRYPTOKI_F_PTR ( C_DecryptInit (hSession,pMechanism,hKey) );
930+ CPPUNIT_ASSERT_EQUAL ( (CK_BBOOL) CK_FALSE, (CK_BBOOL) ((rv != CKR_OK) && (oldMechs == CK_FALSE)) );
931+ if (oldMechs == CK_FALSE) {
910932 CK_ULONG ulDataLen;
911933 const CK_RV rv ( CRYPTOKI_F_PTR ( C_Decrypt (hSession,&vEncryptedData.front (),vEncryptedData.size (),NULL_PTR,&ulDataLen) ) );
912934 if ( isSizeOK ) {
@@ -921,8 +943,9 @@ void SymmetricAlgorithmTests::encryptDecrypt(
921943 }
922944
923945 // Multi-part decryption
924- CPPUNIT_ASSERT_EQUAL ( (CK_RV)CKR_OK, CRYPTOKI_F_PTR ( C_DecryptInit (hSession,pMechanism,hKey) ) );
925- {
946+ rv = CRYPTOKI_F_PTR ( C_DecryptInit (hSession,pMechanism,hKey) );
947+ CPPUNIT_ASSERT_EQUAL ( (CK_BBOOL) CK_FALSE, (CK_BBOOL) ((rv != CKR_OK) && (oldMechs == CK_FALSE)) );
948+ if (oldMechs == CK_FALSE) {
926949 std::vector<CK_BYTE> vDecryptedData;
927950 CK_BYTE dummy;
928951 CK_ULONG ulPartLen = 0 ;
@@ -1707,44 +1730,47 @@ void SymmetricAlgorithmTests::testDesEncryptDecrypt()
17071730
17081731 // Generate all combinations of session/token keys.
17091732 rv = generateDesKey (hSessionRW,IN_SESSION,IS_PUBLIC,hKey);
1710- CPPUNIT_ASSERT (rv == CKR_OK);
17111733
1712- encryptDecrypt ({CKM_DES_CBC_PAD,NULL_PTR,0 },blockSize,hSessionRO,hKey,blockSize*NR_OF_BLOCKS_IN_TEST-1 );
1713- encryptDecrypt ({CKM_DES_CBC_PAD,NULL_PTR,0 },blockSize,hSessionRO,hKey,blockSize*NR_OF_BLOCKS_IN_TEST+1 );
1714- encryptDecrypt ({CKM_DES_CBC_PAD,NULL_PTR,0 },blockSize,hSessionRO,hKey,blockSize*NR_OF_BLOCKS_IN_TEST);
1715- encryptDecrypt ({CKM_DES_CBC,NULL_PTR,0 },blockSize,hSessionRO,hKey,blockSize*NR_OF_BLOCKS_IN_TEST);
1716- encryptDecrypt ({CKM_DES_CBC,NULL_PTR,0 },blockSize,hSessionRO,hKey,blockSize*NR_OF_BLOCKS_IN_TEST+1 , false );
1717- encryptDecrypt ({CKM_DES_ECB,NULL_PTR,0 },blockSize,hSessionRO,hKey,blockSize*NR_OF_BLOCKS_IN_TEST);
1718- encryptDecrypt ({CKM_DES_ECB,NULL_PTR,0 },blockSize,hSessionRO,hKey,blockSize*NR_OF_BLOCKS_IN_TEST+1 , false );
1734+ if (rv == CKR_OK) {
1735+ encryptDecrypt ({CKM_DES_CBC_PAD,NULL_PTR,0 },blockSize,hSessionRO,hKey,blockSize*NR_OF_BLOCKS_IN_TEST-1 );
1736+ encryptDecrypt ({CKM_DES_CBC_PAD,NULL_PTR,0 },blockSize,hSessionRO,hKey,blockSize*NR_OF_BLOCKS_IN_TEST+1 );
1737+ encryptDecrypt ({CKM_DES_CBC_PAD,NULL_PTR,0 },blockSize,hSessionRO,hKey,blockSize*NR_OF_BLOCKS_IN_TEST);
1738+ encryptDecrypt ({CKM_DES_CBC,NULL_PTR,0 },blockSize,hSessionRO,hKey,blockSize*NR_OF_BLOCKS_IN_TEST);
1739+ encryptDecrypt ({CKM_DES_CBC,NULL_PTR,0 },blockSize,hSessionRO,hKey,blockSize*NR_OF_BLOCKS_IN_TEST+1 , false );
1740+ encryptDecrypt ({CKM_DES_ECB,NULL_PTR,0 },blockSize,hSessionRO,hKey,blockSize*NR_OF_BLOCKS_IN_TEST);
1741+ encryptDecrypt ({CKM_DES_ECB,NULL_PTR,0 },blockSize,hSessionRO,hKey,blockSize*NR_OF_BLOCKS_IN_TEST+1 , false );
1742+ }
17191743
17201744 CK_OBJECT_HANDLE hKey2 = CK_INVALID_HANDLE;
17211745
17221746 // Generate all combinations of session/token keys.
17231747 rv = generateDes2Key (hSessionRW,IN_SESSION,IS_PUBLIC,hKey2);
1724- CPPUNIT_ASSERT (rv == CKR_OK);
17251748
1726- encryptDecrypt ({CKM_DES3_CBC_PAD,NULL_PTR,0 },blockSize,hSessionRO,hKey2,blockSize*NR_OF_BLOCKS_IN_TEST-1 );
1727- encryptDecrypt ({CKM_DES3_CBC_PAD,NULL_PTR,0 },blockSize,hSessionRO,hKey2,blockSize*NR_OF_BLOCKS_IN_TEST+1 );
1728- encryptDecrypt ({CKM_DES3_CBC_PAD,NULL_PTR,0 },blockSize,hSessionRO,hKey2,blockSize*NR_OF_BLOCKS_IN_TEST);
1729- encryptDecrypt ({CKM_DES3_CBC,NULL_PTR,0 },blockSize,hSessionRO,hKey2,blockSize*NR_OF_BLOCKS_IN_TEST);
1730- encryptDecrypt ({CKM_DES3_CBC,NULL_PTR,0 },blockSize,hSessionRO,hKey2,blockSize*NR_OF_BLOCKS_IN_TEST+1 , false );
1731- encryptDecrypt ({CKM_DES3_ECB,NULL_PTR,0 },blockSize,hSessionRO,hKey2,blockSize*NR_OF_BLOCKS_IN_TEST);
1732- encryptDecrypt ({CKM_DES3_ECB,NULL_PTR,0 },blockSize,hSessionRO,hKey2,blockSize*NR_OF_BLOCKS_IN_TEST+1 , false );
1749+ if (rv == CKR_OK) {
1750+ encryptDecrypt ({CKM_DES3_CBC_PAD,NULL_PTR,0 },blockSize,hSessionRO,hKey2,blockSize*NR_OF_BLOCKS_IN_TEST-1 );
1751+ encryptDecrypt ({CKM_DES3_CBC_PAD,NULL_PTR,0 },blockSize,hSessionRO,hKey2,blockSize*NR_OF_BLOCKS_IN_TEST+1 );
1752+ encryptDecrypt ({CKM_DES3_CBC_PAD,NULL_PTR,0 },blockSize,hSessionRO,hKey2,blockSize*NR_OF_BLOCKS_IN_TEST);
1753+ encryptDecrypt ({CKM_DES3_CBC,NULL_PTR,0 },blockSize,hSessionRO,hKey2,blockSize*NR_OF_BLOCKS_IN_TEST);
1754+ encryptDecrypt ({CKM_DES3_CBC,NULL_PTR,0 },blockSize,hSessionRO,hKey2,blockSize*NR_OF_BLOCKS_IN_TEST+1 , false );
1755+ encryptDecrypt ({CKM_DES3_ECB,NULL_PTR,0 },blockSize,hSessionRO,hKey2,blockSize*NR_OF_BLOCKS_IN_TEST);
1756+ encryptDecrypt ({CKM_DES3_ECB,NULL_PTR,0 },blockSize,hSessionRO,hKey2,blockSize*NR_OF_BLOCKS_IN_TEST+1 , false );
1757+ }
17331758#endif
17341759
17351760 CK_OBJECT_HANDLE hKey3 = CK_INVALID_HANDLE;
17361761
17371762 // Generate all combinations of session/token keys.
17381763 rv = generateDes3Key (hSessionRW,IN_SESSION,IS_PUBLIC,hKey3);
1739- CPPUNIT_ASSERT (rv == CKR_OK);
17401764
1741- encryptDecrypt ({CKM_DES3_CBC_PAD,NULL_PTR,0 },blockSize,hSessionRO,hKey3,blockSize*NR_OF_BLOCKS_IN_TEST-1 );
1742- encryptDecrypt ({CKM_DES3_CBC_PAD,NULL_PTR,0 },blockSize,hSessionRO,hKey3,blockSize*NR_OF_BLOCKS_IN_TEST+1 );
1743- encryptDecrypt ({CKM_DES3_CBC_PAD,NULL_PTR,0 },blockSize,hSessionRO,hKey3,blockSize*NR_OF_BLOCKS_IN_TEST);
1744- encryptDecrypt ({CKM_DES3_CBC,NULL_PTR,0 },blockSize,hSessionRO,hKey3,blockSize*NR_OF_BLOCKS_IN_TEST);
1745- encryptDecrypt ({CKM_DES3_CBC,NULL_PTR,0 },blockSize,hSessionRO,hKey3,blockSize*NR_OF_BLOCKS_IN_TEST+1 , false );
1746- encryptDecrypt ({CKM_DES3_ECB,NULL_PTR,0 },blockSize,hSessionRO,hKey3,blockSize*NR_OF_BLOCKS_IN_TEST);
1747- encryptDecrypt ({CKM_DES3_ECB,NULL_PTR,0 },blockSize,hSessionRO,hKey3,blockSize*NR_OF_BLOCKS_IN_TEST+1 , false );
1765+ if (rv == CKR_OK) {
1766+ encryptDecrypt ({CKM_DES3_CBC_PAD,NULL_PTR,0 },blockSize,hSessionRO,hKey3,blockSize*NR_OF_BLOCKS_IN_TEST-1 );
1767+ encryptDecrypt ({CKM_DES3_CBC_PAD,NULL_PTR,0 },blockSize,hSessionRO,hKey3,blockSize*NR_OF_BLOCKS_IN_TEST+1 );
1768+ encryptDecrypt ({CKM_DES3_CBC_PAD,NULL_PTR,0 },blockSize,hSessionRO,hKey3,blockSize*NR_OF_BLOCKS_IN_TEST);
1769+ encryptDecrypt ({CKM_DES3_CBC,NULL_PTR,0 },blockSize,hSessionRO,hKey3,blockSize*NR_OF_BLOCKS_IN_TEST);
1770+ encryptDecrypt ({CKM_DES3_CBC,NULL_PTR,0 },blockSize,hSessionRO,hKey3,blockSize*NR_OF_BLOCKS_IN_TEST+1 , false );
1771+ encryptDecrypt ({CKM_DES3_ECB,NULL_PTR,0 },blockSize,hSessionRO,hKey3,blockSize*NR_OF_BLOCKS_IN_TEST);
1772+ encryptDecrypt ({CKM_DES3_ECB,NULL_PTR,0 },blockSize,hSessionRO,hKey3,blockSize*NR_OF_BLOCKS_IN_TEST+1 , false );
1773+ }
17481774}
17491775
17501776void SymmetricAlgorithmTests::testDesWrapUnwrap ()
0 commit comments