@@ -195,6 +195,8 @@ void SymmetricAlgorithmTests::encryptDecrypt(
195195 std::vector<CK_BYTE> vEncryptedData;
196196 std::vector<CK_BYTE> vEncryptedDataParted;
197197 PartSize partSize (blockSize, &vData);
198+ CK_BBOOL oldMechs = CK_FALSE;
199+ CK_RV rv = CKR_OK;
198200
199201 CPPUNIT_ASSERT_EQUAL ( (CK_RV)CKR_OK, CRYPTOKI_F_PTR ( C_GenerateRandom (hSession, (CK_BYTE_PTR)&vData.front (), messageSize) ) );
200202
@@ -231,6 +233,8 @@ void SymmetricAlgorithmTests::encryptDecrypt(
231233 {
232234 case CKM_DES_CBC:
233235 case CKM_DES_CBC_PAD:
236+ oldMechs = CK_TRUE;
237+ /* fall-through */
234238 case CKM_DES3_CBC:
235239 case CKM_DES3_CBC_PAD:
236240 case CKM_AES_CBC:
@@ -246,12 +250,17 @@ void SymmetricAlgorithmTests::encryptDecrypt(
246250 pMechanism->pParameter = &gcmParams;
247251 pMechanism->ulParameterLen = sizeof (gcmParams);
248252 break ;
253+ case CKM_DES_ECB:
254+ oldMechs = CK_TRUE;
255+ break ;
249256 default :
250257 break ;
251258 }
252259
253260 // Single-part encryption
254- CPPUNIT_ASSERT_EQUAL ( (CK_RV)CKR_OK, CRYPTOKI_F_PTR ( C_EncryptInit (hSession,pMechanism,hKey) ) );
261+ rv = CRYPTOKI_F_PTR ( C_EncryptInit (hSession,pMechanism,hKey) );
262+ CPPUNIT_ASSERT_EQUAL ( (CK_BBOOL) CK_FALSE, (CK_BBOOL) ((rv != CKR_OK) && (oldMechs == CK_FALSE)) );
263+ if (oldMechs == CK_FALSE)
255264 {
256265 CK_ULONG ulEncryptedDataLen;
257266 const CK_RV rv ( CRYPTOKI_F_PTR ( C_Encrypt (hSession,(CK_BYTE_PTR)&vData.front (),messageSize,NULL_PTR,&ulEncryptedDataLen) ) );
@@ -267,40 +276,42 @@ void SymmetricAlgorithmTests::encryptDecrypt(
267276 }
268277
269278 // Multi-part encryption
270- CPPUNIT_ASSERT_EQUAL ( (CK_RV)CKR_OK, CRYPTOKI_F_PTR ( C_EncryptInit (hSession,pMechanism,hKey) ) );
271-
272- for ( std::vector<CK_BYTE>::const_iterator i (vData.begin ()); i<vData.end (); i+=partSize.getCurrent () ) {
273- const CK_ULONG lPartLen ( i+partSize.getNext ()<vData.end () ? partSize.getCurrent () : vData.end ()-i );
274- CK_ULONG ulEncryptedPartLen;
275- CPPUNIT_ASSERT_EQUAL ( (CK_RV)CKR_OK, CRYPTOKI_F_PTR ( C_EncryptUpdate (hSession,(CK_BYTE_PTR)&(*i),lPartLen,NULL_PTR,&ulEncryptedPartLen) ) );
276- const size_t oldSize ( vEncryptedDataParted.size () );
277- vEncryptedDataParted.resize (oldSize+ulEncryptedPartLen);
278- CK_BYTE dummy;
279- const CK_BYTE_PTR pEncryptedPart ( ulEncryptedPartLen>0 ? &vEncryptedDataParted.at (oldSize) : &dummy );
280- CPPUNIT_ASSERT_EQUAL ( (CK_RV)CKR_OK, CRYPTOKI_F_PTR ( C_EncryptUpdate (hSession,(CK_BYTE_PTR)&(*i),lPartLen,pEncryptedPart,&ulEncryptedPartLen) ) );
281- vEncryptedDataParted.resize (oldSize+ulEncryptedPartLen);
282- }
283- {
284- CK_ULONG ulLastEncryptedPartLen;
285- const CK_RV rv ( CRYPTOKI_F_PTR ( C_EncryptFinal (hSession,NULL_PTR,&ulLastEncryptedPartLen) ) );
286- if ( isSizeOK ) {
287- CPPUNIT_ASSERT_EQUAL ( (CK_RV)CKR_OK, rv );
279+ rv = CRYPTOKI_F_PTR ( C_EncryptInit (hSession,pMechanism,hKey) );
280+ CPPUNIT_ASSERT_EQUAL ( (CK_BBOOL) CK_FALSE, (CK_BBOOL) ((rv != CKR_OK) && (oldMechs == CK_FALSE)) );
281+ if (oldMechs == CK_FALSE) {
282+ for ( std::vector<CK_BYTE>::const_iterator i (vData.begin ()); i<vData.end (); i+=partSize.getCurrent () ) {
283+ const CK_ULONG lPartLen ( i+partSize.getNext ()<vData.end () ? partSize.getCurrent () : vData.end ()-i );
284+ CK_ULONG ulEncryptedPartLen;
285+ CPPUNIT_ASSERT_EQUAL ( (CK_RV)CKR_OK, CRYPTOKI_F_PTR ( C_EncryptUpdate (hSession,(CK_BYTE_PTR)&(*i),lPartLen,NULL_PTR,&ulEncryptedPartLen) ) );
288286 const size_t oldSize ( vEncryptedDataParted.size () );
287+ vEncryptedDataParted.resize (oldSize+ulEncryptedPartLen);
289288 CK_BYTE dummy;
290- vEncryptedDataParted.resize (oldSize+ulLastEncryptedPartLen);
291- const CK_BYTE_PTR pLastEncryptedPart ( ulLastEncryptedPartLen>0 ? &vEncryptedDataParted.at (oldSize) : &dummy );
292- CPPUNIT_ASSERT_EQUAL ( (CK_RV)CKR_OK, CRYPTOKI_F_PTR ( C_EncryptFinal (hSession,pLastEncryptedPart,&ulLastEncryptedPartLen) ) );
293- vEncryptedDataParted.resize (oldSize+ulLastEncryptedPartLen);
294- } else {
295- CPPUNIT_ASSERT_EQUAL_MESSAGE (" C_EncryptFinal should fail with C_CKR_DATA_LEN_RANGE" , (CK_RV)CKR_DATA_LEN_RANGE, rv);
296- vEncryptedDataParted = vData;
289+ const CK_BYTE_PTR pEncryptedPart ( ulEncryptedPartLen>0 ? &vEncryptedDataParted.at (oldSize) : &dummy );
290+ CPPUNIT_ASSERT_EQUAL ( (CK_RV)CKR_OK, CRYPTOKI_F_PTR ( C_EncryptUpdate (hSession,(CK_BYTE_PTR)&(*i),lPartLen,pEncryptedPart,&ulEncryptedPartLen) ) );
291+ vEncryptedDataParted.resize (oldSize+ulEncryptedPartLen);
292+ }
293+ {
294+ CK_ULONG ulLastEncryptedPartLen;
295+ const CK_RV rv ( CRYPTOKI_F_PTR ( C_EncryptFinal (hSession,NULL_PTR,&ulLastEncryptedPartLen) ) );
296+ if ( isSizeOK ) {
297+ CPPUNIT_ASSERT_EQUAL ( (CK_RV)CKR_OK, rv );
298+ const size_t oldSize ( vEncryptedDataParted.size () );
299+ CK_BYTE dummy;
300+ vEncryptedDataParted.resize (oldSize+ulLastEncryptedPartLen);
301+ const CK_BYTE_PTR pLastEncryptedPart ( ulLastEncryptedPartLen>0 ? &vEncryptedDataParted.at (oldSize) : &dummy );
302+ CPPUNIT_ASSERT_EQUAL ( (CK_RV)CKR_OK, CRYPTOKI_F_PTR ( C_EncryptFinal (hSession,pLastEncryptedPart,&ulLastEncryptedPartLen) ) );
303+ vEncryptedDataParted.resize (oldSize+ulLastEncryptedPartLen);
304+ } else {
305+ CPPUNIT_ASSERT_EQUAL_MESSAGE (" C_EncryptFinal should fail with C_CKR_DATA_LEN_RANGE" , (CK_RV)CKR_DATA_LEN_RANGE, rv);
306+ vEncryptedDataParted = vData;
307+ }
297308 }
298309 }
299310
300311 // Single-part decryption
301- CPPUNIT_ASSERT_EQUAL ( (CK_RV)CKR_OK, CRYPTOKI_F_PTR ( C_DecryptInit (hSession,pMechanism,hKey) ) );
302-
303- {
312+ rv = CRYPTOKI_F_PTR ( C_DecryptInit (hSession,pMechanism,hKey) );
313+ CPPUNIT_ASSERT_EQUAL ( (CK_BBOOL) CK_FALSE, (CK_BBOOL) ((rv != CKR_OK) && (oldMechs == CK_FALSE)) );
314+ if (oldMechs == CK_FALSE) {
304315 CK_ULONG ulDataLen;
305316 const CK_RV rv ( CRYPTOKI_F_PTR ( C_Decrypt (hSession,&vEncryptedData.front (),vEncryptedData.size (),NULL_PTR,&ulDataLen) ) );
306317 if ( isSizeOK ) {
@@ -315,8 +326,9 @@ void SymmetricAlgorithmTests::encryptDecrypt(
315326 }
316327
317328 // Multi-part decryption
318- CPPUNIT_ASSERT_EQUAL ( (CK_RV)CKR_OK, CRYPTOKI_F_PTR ( C_DecryptInit (hSession,pMechanism,hKey) ) );
319- {
329+ rv = CRYPTOKI_F_PTR ( C_DecryptInit (hSession,pMechanism,hKey) );
330+ CPPUNIT_ASSERT_EQUAL ( (CK_BBOOL) CK_FALSE, (CK_BBOOL) ((rv != CKR_OK) && (oldMechs == CK_FALSE)) );
331+ if (oldMechs == CK_FALSE) {
320332 std::vector<CK_BYTE> vDecryptedData;
321333 CK_BYTE dummy;
322334 for ( std::vector<CK_BYTE>::iterator i (vEncryptedDataParted.begin ()); i<vEncryptedDataParted.end (); i+=partSize.getCurrent ()) {
@@ -977,44 +989,44 @@ void SymmetricAlgorithmTests::testDesEncryptDecrypt()
977989
978990 // Generate all combinations of session/token keys.
979991 rv = generateDesKey (hSessionRW,IN_SESSION,IS_PUBLIC,hKey);
980- CPPUNIT_ASSERT (rv == CKR_OK);
981-
982- encryptDecrypt (CKM_DES_CBC_PAD,blockSize,hSessionRO,hKey,blockSize*NR_OF_BLOCKS_IN_TEST- 1 );
983- encryptDecrypt (CKM_DES_CBC_PAD,blockSize,hSessionRO,hKey,blockSize*NR_OF_BLOCKS_IN_TEST+ 1 );
984- encryptDecrypt (CKM_DES_CBC_PAD ,blockSize,hSessionRO,hKey,blockSize*NR_OF_BLOCKS_IN_TEST);
985- encryptDecrypt (CKM_DES_CBC,blockSize,hSessionRO,hKey,blockSize*NR_OF_BLOCKS_IN_TEST);
986- encryptDecrypt (CKM_DES_CBC ,blockSize,hSessionRO,hKey,blockSize*NR_OF_BLOCKS_IN_TEST+ 1 , false );
987- encryptDecrypt (CKM_DES_ECB,blockSize,hSessionRO,hKey,blockSize*NR_OF_BLOCKS_IN_TEST);
988- encryptDecrypt (CKM_DES_ECB,blockSize,hSessionRO,hKey,blockSize*NR_OF_BLOCKS_IN_TEST+ 1 , false );
992+ if (rv == CKR_OK) {
993+ encryptDecrypt (CKM_DES_CBC_PAD,blockSize,hSessionRO,hKey,blockSize*NR_OF_BLOCKS_IN_TEST- 1 );
994+ encryptDecrypt (CKM_DES_CBC_PAD,blockSize,hSessionRO,hKey,blockSize*NR_OF_BLOCKS_IN_TEST+ 1 );
995+ encryptDecrypt (CKM_DES_CBC_PAD,blockSize,hSessionRO,hKey,blockSize*NR_OF_BLOCKS_IN_TEST);
996+ encryptDecrypt (CKM_DES_CBC ,blockSize,hSessionRO,hKey,blockSize*NR_OF_BLOCKS_IN_TEST);
997+ encryptDecrypt (CKM_DES_CBC,blockSize,hSessionRO,hKey,blockSize*NR_OF_BLOCKS_IN_TEST+ 1 , false );
998+ encryptDecrypt (CKM_DES_ECB ,blockSize,hSessionRO,hKey,blockSize*NR_OF_BLOCKS_IN_TEST);
999+ encryptDecrypt (CKM_DES_ECB,blockSize,hSessionRO,hKey,blockSize*NR_OF_BLOCKS_IN_TEST+ 1 , false );
1000+ }
9891001
9901002 CK_OBJECT_HANDLE hKey2 = CK_INVALID_HANDLE;
9911003
9921004 // Generate all combinations of session/token keys.
9931005 rv = generateDes2Key (hSessionRW,IN_SESSION,IS_PUBLIC,hKey2);
994- CPPUNIT_ASSERT (rv == CKR_OK);
995-
996- encryptDecrypt (CKM_DES3_CBC_PAD,blockSize,hSessionRO,hKey2,blockSize*NR_OF_BLOCKS_IN_TEST- 1 );
997- encryptDecrypt (CKM_DES3_CBC_PAD,blockSize,hSessionRO,hKey2,blockSize*NR_OF_BLOCKS_IN_TEST+ 1 );
998- encryptDecrypt (CKM_DES3_CBC_PAD ,blockSize,hSessionRO,hKey2,blockSize*NR_OF_BLOCKS_IN_TEST);
999- encryptDecrypt (CKM_DES3_CBC,blockSize,hSessionRO,hKey2,blockSize*NR_OF_BLOCKS_IN_TEST);
1000- encryptDecrypt (CKM_DES3_CBC ,blockSize,hSessionRO,hKey2,blockSize*NR_OF_BLOCKS_IN_TEST+ 1 , false );
1001- encryptDecrypt (CKM_DES3_ECB,blockSize,hSessionRO,hKey2,blockSize*NR_OF_BLOCKS_IN_TEST);
1002- encryptDecrypt (CKM_DES3_ECB,blockSize,hSessionRO,hKey2,blockSize*NR_OF_BLOCKS_IN_TEST+ 1 , false );
1006+ if (rv == CKR_OK) {
1007+ encryptDecrypt (CKM_DES3_CBC_PAD,blockSize,hSessionRO,hKey2,blockSize*NR_OF_BLOCKS_IN_TEST- 1 );
1008+ encryptDecrypt (CKM_DES3_CBC_PAD,blockSize,hSessionRO,hKey2,blockSize*NR_OF_BLOCKS_IN_TEST+ 1 );
1009+ encryptDecrypt (CKM_DES3_CBC_PAD,blockSize,hSessionRO,hKey2,blockSize*NR_OF_BLOCKS_IN_TEST);
1010+ encryptDecrypt (CKM_DES3_CBC ,blockSize,hSessionRO,hKey2,blockSize*NR_OF_BLOCKS_IN_TEST);
1011+ encryptDecrypt (CKM_DES3_CBC,blockSize,hSessionRO,hKey2,blockSize*NR_OF_BLOCKS_IN_TEST+ 1 , false );
1012+ encryptDecrypt (CKM_DES3_ECB ,blockSize,hSessionRO,hKey2,blockSize*NR_OF_BLOCKS_IN_TEST);
1013+ encryptDecrypt (CKM_DES3_ECB,blockSize,hSessionRO,hKey2,blockSize*NR_OF_BLOCKS_IN_TEST+ 1 , false );
1014+ }
10031015#endif
10041016
10051017 CK_OBJECT_HANDLE hKey3 = CK_INVALID_HANDLE;
10061018
10071019 // Generate all combinations of session/token keys.
10081020 rv = generateDes3Key (hSessionRW,IN_SESSION,IS_PUBLIC,hKey3);
1009- CPPUNIT_ASSERT (rv == CKR_OK);
1010-
1011- encryptDecrypt (CKM_DES3_CBC_PAD,blockSize,hSessionRO,hKey3,blockSize*NR_OF_BLOCKS_IN_TEST- 1 );
1012- encryptDecrypt (CKM_DES3_CBC_PAD,blockSize,hSessionRO,hKey3,blockSize*NR_OF_BLOCKS_IN_TEST+ 1 );
1013- encryptDecrypt (CKM_DES3_CBC_PAD ,blockSize,hSessionRO,hKey3,blockSize*NR_OF_BLOCKS_IN_TEST);
1014- encryptDecrypt (CKM_DES3_CBC,blockSize,hSessionRO,hKey3,blockSize*NR_OF_BLOCKS_IN_TEST);
1015- encryptDecrypt (CKM_DES3_CBC ,blockSize,hSessionRO,hKey3,blockSize*NR_OF_BLOCKS_IN_TEST+ 1 , false );
1016- encryptDecrypt (CKM_DES3_ECB,blockSize,hSessionRO,hKey3,blockSize*NR_OF_BLOCKS_IN_TEST);
1017- encryptDecrypt (CKM_DES3_ECB,blockSize,hSessionRO,hKey3,blockSize*NR_OF_BLOCKS_IN_TEST+ 1 , false );
1021+ if (rv == CKR_OK) {
1022+ encryptDecrypt (CKM_DES3_CBC_PAD,blockSize,hSessionRO,hKey3,blockSize*NR_OF_BLOCKS_IN_TEST- 1 );
1023+ encryptDecrypt (CKM_DES3_CBC_PAD,blockSize,hSessionRO,hKey3,blockSize*NR_OF_BLOCKS_IN_TEST+ 1 );
1024+ encryptDecrypt (CKM_DES3_CBC_PAD,blockSize,hSessionRO,hKey3,blockSize*NR_OF_BLOCKS_IN_TEST);
1025+ encryptDecrypt (CKM_DES3_CBC ,blockSize,hSessionRO,hKey3,blockSize*NR_OF_BLOCKS_IN_TEST);
1026+ encryptDecrypt (CKM_DES3_CBC,blockSize,hSessionRO,hKey3,blockSize*NR_OF_BLOCKS_IN_TEST+ 1 , false );
1027+ encryptDecrypt (CKM_DES3_ECB ,blockSize,hSessionRO,hKey3,blockSize*NR_OF_BLOCKS_IN_TEST);
1028+ encryptDecrypt (CKM_DES3_ECB,blockSize,hSessionRO,hKey3,blockSize*NR_OF_BLOCKS_IN_TEST+ 1 , false );
1029+ }
10181030}
10191031
10201032void SymmetricAlgorithmTests::testNullTemplate ()
0 commit comments