@@ -847,6 +847,8 @@ void SymmetricAlgorithmTests::encryptDecrypt(
847
847
std::vector<CK_BYTE> vEncryptedData;
848
848
std::vector<CK_BYTE> vEncryptedDataParted;
849
849
PartSize partSize (blockSize, &vData);
850
+ CK_BBOOL oldMechs = CK_FALSE;
851
+ CK_RV rv = CKR_OK;
850
852
851
853
CPPUNIT_ASSERT_EQUAL ( (CK_RV)CKR_OK, CRYPTOKI_F_PTR ( C_GenerateRandom (hSession, (CK_BYTE_PTR)&vData.front (), messageSize) ) );
852
854
@@ -856,8 +858,25 @@ void SymmetricAlgorithmTests::encryptDecrypt(
856
858
pMechanism->ulParameterLen = blockSize;
857
859
}
858
860
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
+
859
876
// 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)
861
880
{
862
881
CK_ULONG ulEncryptedDataLen;
863
882
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(
873
892
}
874
893
875
894
// 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)) );
877
897
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) ) );
894
903
const size_t oldSize ( vEncryptedDataParted.size () );
904
+ vEncryptedDataParted.resize (oldSize+ulEncryptedPartLen);
895
905
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
+ }
903
938
}
904
939
}
905
940
906
941
// 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) {
910
945
CK_ULONG ulDataLen;
911
946
const CK_RV rv ( CRYPTOKI_F_PTR ( C_Decrypt (hSession,&vEncryptedData.front (),vEncryptedData.size (),NULL_PTR,&ulDataLen) ) );
912
947
if ( isSizeOK ) {
@@ -921,8 +956,9 @@ void SymmetricAlgorithmTests::encryptDecrypt(
921
956
}
922
957
923
958
// 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) {
926
962
std::vector<CK_BYTE> vDecryptedData;
927
963
CK_BYTE dummy;
928
964
CK_ULONG ulPartLen = 0 ;
@@ -1707,44 +1743,47 @@ void SymmetricAlgorithmTests::testDesEncryptDecrypt()
1707
1743
1708
1744
// Generate all combinations of session/token keys.
1709
1745
rv = generateDesKey (hSessionRW,IN_SESSION,IS_PUBLIC,hKey);
1710
- CPPUNIT_ASSERT (rv == CKR_OK);
1711
1746
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
+ }
1719
1756
1720
1757
CK_OBJECT_HANDLE hKey2 = CK_INVALID_HANDLE;
1721
1758
1722
1759
// Generate all combinations of session/token keys.
1723
1760
rv = generateDes2Key (hSessionRW,IN_SESSION,IS_PUBLIC,hKey2);
1724
- CPPUNIT_ASSERT (rv == CKR_OK);
1725
1761
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
+ }
1733
1771
#endif
1734
1772
1735
1773
CK_OBJECT_HANDLE hKey3 = CK_INVALID_HANDLE;
1736
1774
1737
1775
// Generate all combinations of session/token keys.
1738
1776
rv = generateDes3Key (hSessionRW,IN_SESSION,IS_PUBLIC,hKey3);
1739
- CPPUNIT_ASSERT (rv == CKR_OK);
1740
1777
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
+ }
1748
1787
}
1749
1788
1750
1789
void SymmetricAlgorithmTests::testDesWrapUnwrap ()
0 commit comments