@@ -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,56 @@ 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+ vEncryptedDataParted.resize (oldSize+ulEncryptedPartLen);
916+ CK_BYTE dummy;
917+ const CK_BYTE_PTR pEncryptedPart ( ulEncryptedPartLen>0 ? &vEncryptedDataParted.at (oldSize) : &dummy );
918+ CPPUNIT_ASSERT_EQUAL ( (CK_RV)CKR_OK, CRYPTOKI_F_PTR ( C_EncryptUpdate (hSession,(CK_BYTE_PTR)&(*i),lPartLen,pEncryptedPart,&ulEncryptedPartLen) ) );
919+ vEncryptedDataParted.resize (oldSize+ulEncryptedPartLen);
920+ }
921+ {
922+ CK_ULONG ulLastEncryptedPartLen;
923+ const CK_RV rv ( CRYPTOKI_F_PTR ( C_EncryptFinal (hSession,NULL_PTR,&ulLastEncryptedPartLen) ) );
924+ if ( isSizeOK ) {
925+ CPPUNIT_ASSERT_EQUAL ( (CK_RV)CKR_OK, rv );
926+ const size_t oldSize ( vEncryptedDataParted.size () );
927+ CK_BYTE dummy;
928+ vEncryptedDataParted.resize (oldSize+ulLastEncryptedPartLen);
929+ const CK_BYTE_PTR pLastEncryptedPart ( ulLastEncryptedPartLen>0 ? &vEncryptedDataParted.at (oldSize) : &dummy );
930+ CPPUNIT_ASSERT_EQUAL ( (CK_RV)CKR_OK, CRYPTOKI_F_PTR ( C_EncryptFinal (hSession,pLastEncryptedPart,&ulLastEncryptedPartLen) ) );
931+ vEncryptedDataParted.resize (oldSize+ulLastEncryptedPartLen);
932+ } else {
933+ CPPUNIT_ASSERT_EQUAL_MESSAGE (" C_EncryptFinal should fail with C_CKR_DATA_LEN_RANGE" , (CK_RV)CKR_DATA_LEN_RANGE, rv);
934+ vEncryptedDataParted = vData;
935+ }
936+ }
937+ }
903938 }
904939 }
905940
906941 // Single-part decryption
907- CPPUNIT_ASSERT_EQUAL ( (CK_RV)CKR_OK, CRYPTOKI_F_PTR ( C_DecryptInit (hSession,pMechanism,hKey) ) );
908-
909- {
942+ rv = CRYPTOKI_F_PTR ( C_DecryptInit (hSession,pMechanism,hKey) );
943+ CPPUNIT_ASSERT_EQUAL ( (CK_BBOOL) CK_FALSE, (CK_BBOOL) ((rv != CKR_OK) && (oldMechs == CK_FALSE)) );
944+ if (oldMechs == CK_FALSE) {
910945 CK_ULONG ulDataLen;
911946 const CK_RV rv ( CRYPTOKI_F_PTR ( C_Decrypt (hSession,&vEncryptedData.front (),vEncryptedData.size (),NULL_PTR,&ulDataLen) ) );
912947 if ( isSizeOK ) {
@@ -921,8 +956,9 @@ void SymmetricAlgorithmTests::encryptDecrypt(
921956 }
922957
923958 // Multi-part decryption
924- CPPUNIT_ASSERT_EQUAL ( (CK_RV)CKR_OK, CRYPTOKI_F_PTR ( C_DecryptInit (hSession,pMechanism,hKey) ) );
925- {
959+ rv = CRYPTOKI_F_PTR ( C_DecryptInit (hSession,pMechanism,hKey) );
960+ CPPUNIT_ASSERT_EQUAL ( (CK_BBOOL) CK_FALSE, (CK_BBOOL) ((rv != CKR_OK) && (oldMechs == CK_FALSE)) );
961+ if (oldMechs == CK_FALSE) {
926962 std::vector<CK_BYTE> vDecryptedData;
927963 CK_BYTE dummy;
928964 CK_ULONG ulPartLen = 0 ;
@@ -1707,44 +1743,47 @@ void SymmetricAlgorithmTests::testDesEncryptDecrypt()
17071743
17081744 // Generate all combinations of session/token keys.
17091745 rv = generateDesKey (hSessionRW,IN_SESSION,IS_PUBLIC,hKey);
1710- CPPUNIT_ASSERT (rv == CKR_OK);
17111746
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 );
1747+ if (rv == CKR_OK) {
1748+ encryptDecrypt ({CKM_DES_CBC_PAD,NULL_PTR,0 },blockSize,hSessionRO,hKey,blockSize*NR_OF_BLOCKS_IN_TEST-1 );
1749+ encryptDecrypt ({CKM_DES_CBC_PAD,NULL_PTR,0 },blockSize,hSessionRO,hKey,blockSize*NR_OF_BLOCKS_IN_TEST+1 );
1750+ encryptDecrypt ({CKM_DES_CBC_PAD,NULL_PTR,0 },blockSize,hSessionRO,hKey,blockSize*NR_OF_BLOCKS_IN_TEST);
1751+ encryptDecrypt ({CKM_DES_CBC,NULL_PTR,0 },blockSize,hSessionRO,hKey,blockSize*NR_OF_BLOCKS_IN_TEST);
1752+ encryptDecrypt ({CKM_DES_CBC,NULL_PTR,0 },blockSize,hSessionRO,hKey,blockSize*NR_OF_BLOCKS_IN_TEST+1 , false );
1753+ encryptDecrypt ({CKM_DES_ECB,NULL_PTR,0 },blockSize,hSessionRO,hKey,blockSize*NR_OF_BLOCKS_IN_TEST);
1754+ encryptDecrypt ({CKM_DES_ECB,NULL_PTR,0 },blockSize,hSessionRO,hKey,blockSize*NR_OF_BLOCKS_IN_TEST+1 , false );
1755+ }
17191756
17201757 CK_OBJECT_HANDLE hKey2 = CK_INVALID_HANDLE;
17211758
17221759 // Generate all combinations of session/token keys.
17231760 rv = generateDes2Key (hSessionRW,IN_SESSION,IS_PUBLIC,hKey2);
1724- CPPUNIT_ASSERT (rv == CKR_OK);
17251761
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 );
1762+ if (rv == CKR_OK) {
1763+ encryptDecrypt ({CKM_DES3_CBC_PAD,NULL_PTR,0 },blockSize,hSessionRO,hKey2,blockSize*NR_OF_BLOCKS_IN_TEST-1 );
1764+ encryptDecrypt ({CKM_DES3_CBC_PAD,NULL_PTR,0 },blockSize,hSessionRO,hKey2,blockSize*NR_OF_BLOCKS_IN_TEST+1 );
1765+ encryptDecrypt ({CKM_DES3_CBC_PAD,NULL_PTR,0 },blockSize,hSessionRO,hKey2,blockSize*NR_OF_BLOCKS_IN_TEST);
1766+ encryptDecrypt ({CKM_DES3_CBC,NULL_PTR,0 },blockSize,hSessionRO,hKey2,blockSize*NR_OF_BLOCKS_IN_TEST);
1767+ encryptDecrypt ({CKM_DES3_CBC,NULL_PTR,0 },blockSize,hSessionRO,hKey2,blockSize*NR_OF_BLOCKS_IN_TEST+1 , false );
1768+ encryptDecrypt ({CKM_DES3_ECB,NULL_PTR,0 },blockSize,hSessionRO,hKey2,blockSize*NR_OF_BLOCKS_IN_TEST);
1769+ encryptDecrypt ({CKM_DES3_ECB,NULL_PTR,0 },blockSize,hSessionRO,hKey2,blockSize*NR_OF_BLOCKS_IN_TEST+1 , false );
1770+ }
17331771#endif
17341772
17351773 CK_OBJECT_HANDLE hKey3 = CK_INVALID_HANDLE;
17361774
17371775 // Generate all combinations of session/token keys.
17381776 rv = generateDes3Key (hSessionRW,IN_SESSION,IS_PUBLIC,hKey3);
1739- CPPUNIT_ASSERT (rv == CKR_OK);
17401777
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 );
1778+ if (rv == CKR_OK) {
1779+ encryptDecrypt ({CKM_DES3_CBC_PAD,NULL_PTR,0 },blockSize,hSessionRO,hKey3,blockSize*NR_OF_BLOCKS_IN_TEST-1 );
1780+ encryptDecrypt ({CKM_DES3_CBC_PAD,NULL_PTR,0 },blockSize,hSessionRO,hKey3,blockSize*NR_OF_BLOCKS_IN_TEST+1 );
1781+ encryptDecrypt ({CKM_DES3_CBC_PAD,NULL_PTR,0 },blockSize,hSessionRO,hKey3,blockSize*NR_OF_BLOCKS_IN_TEST);
1782+ encryptDecrypt ({CKM_DES3_CBC,NULL_PTR,0 },blockSize,hSessionRO,hKey3,blockSize*NR_OF_BLOCKS_IN_TEST);
1783+ encryptDecrypt ({CKM_DES3_CBC,NULL_PTR,0 },blockSize,hSessionRO,hKey3,blockSize*NR_OF_BLOCKS_IN_TEST+1 , false );
1784+ encryptDecrypt ({CKM_DES3_ECB,NULL_PTR,0 },blockSize,hSessionRO,hKey3,blockSize*NR_OF_BLOCKS_IN_TEST);
1785+ encryptDecrypt ({CKM_DES3_ECB,NULL_PTR,0 },blockSize,hSessionRO,hKey3,blockSize*NR_OF_BLOCKS_IN_TEST+1 , false );
1786+ }
17481787}
17491788
17501789void SymmetricAlgorithmTests::testDesWrapUnwrap ()
0 commit comments