@@ -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,43 @@ 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
+ 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
+ }
903
925
}
904
926
}
905
927
906
928
// 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) {
910
932
CK_ULONG ulDataLen;
911
933
const CK_RV rv ( CRYPTOKI_F_PTR ( C_Decrypt (hSession,&vEncryptedData.front (),vEncryptedData.size (),NULL_PTR,&ulDataLen) ) );
912
934
if ( isSizeOK ) {
@@ -921,8 +943,9 @@ void SymmetricAlgorithmTests::encryptDecrypt(
921
943
}
922
944
923
945
// 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) {
926
949
std::vector<CK_BYTE> vDecryptedData;
927
950
CK_BYTE dummy;
928
951
CK_ULONG ulPartLen = 0 ;
@@ -1707,44 +1730,47 @@ void SymmetricAlgorithmTests::testDesEncryptDecrypt()
1707
1730
1708
1731
// Generate all combinations of session/token keys.
1709
1732
rv = generateDesKey (hSessionRW,IN_SESSION,IS_PUBLIC,hKey);
1710
- CPPUNIT_ASSERT (rv == CKR_OK);
1711
1733
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
+ }
1719
1743
1720
1744
CK_OBJECT_HANDLE hKey2 = CK_INVALID_HANDLE;
1721
1745
1722
1746
// Generate all combinations of session/token keys.
1723
1747
rv = generateDes2Key (hSessionRW,IN_SESSION,IS_PUBLIC,hKey2);
1724
- CPPUNIT_ASSERT (rv == CKR_OK);
1725
1748
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
+ }
1733
1758
#endif
1734
1759
1735
1760
CK_OBJECT_HANDLE hKey3 = CK_INVALID_HANDLE;
1736
1761
1737
1762
// Generate all combinations of session/token keys.
1738
1763
rv = generateDes3Key (hSessionRW,IN_SESSION,IS_PUBLIC,hKey3);
1739
- CPPUNIT_ASSERT (rv == CKR_OK);
1740
1764
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
+ }
1748
1774
}
1749
1775
1750
1776
void SymmetricAlgorithmTests::testDesWrapUnwrap ()
0 commit comments