@@ -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
@@ -233,6 +235,8 @@ void SymmetricAlgorithmTests::encryptDecrypt(
233235 case CKM_DES_CBC_PAD:
234236 case CKM_DES3_CBC:
235237 case CKM_DES3_CBC_PAD:
238+ oldMechs = CK_TRUE;
239+ /* fall-through */
236240 case CKM_AES_CBC:
237241 case CKM_AES_CBC_PAD:
238242 pMechanism->pParameter = (CK_VOID_PTR)&vData.front ();
@@ -246,12 +250,18 @@ void SymmetricAlgorithmTests::encryptDecrypt(
246250 pMechanism->pParameter = &gcmParams;
247251 pMechanism->ulParameterLen = sizeof (gcmParams);
248252 break ;
253+ case CKM_DES_ECB:
254+ case CKM_DES3_ECB:
255+ oldMechs = CK_TRUE;
256+ break ;
249257 default :
250258 break ;
251259 }
252260
253261 // Single-part encryption
254- CPPUNIT_ASSERT_EQUAL ( (CK_RV)CKR_OK, CRYPTOKI_F_PTR ( C_EncryptInit (hSession,pMechanism,hKey) ) );
262+ rv = CRYPTOKI_F_PTR ( C_EncryptInit (hSession,pMechanism,hKey) );
263+ CPPUNIT_ASSERT_EQUAL ( (CK_BBOOL) CK_FALSE, (CK_BBOOL) ((rv != CKR_OK) && (oldMechs == CK_FALSE)) );
264+ if (oldMechs == CK_FALSE)
255265 {
256266 CK_ULONG ulEncryptedDataLen;
257267 const CK_RV rv ( CRYPTOKI_F_PTR ( C_Encrypt (hSession,(CK_BYTE_PTR)&vData.front (),messageSize,NULL_PTR,&ulEncryptedDataLen) ) );
@@ -267,40 +277,42 @@ void SymmetricAlgorithmTests::encryptDecrypt(
267277 }
268278
269279 // 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 );
280+ rv = CRYPTOKI_F_PTR ( C_EncryptInit (hSession,pMechanism,hKey) );
281+ CPPUNIT_ASSERT_EQUAL ( (CK_BBOOL) CK_FALSE, (CK_BBOOL) ((rv != CKR_OK) && (oldMechs == CK_FALSE)) );
282+ if (oldMechs == CK_FALSE) {
283+ for ( std::vector<CK_BYTE>::const_iterator i (vData.begin ()); i<vData.end (); i+=partSize.getCurrent () ) {
284+ const CK_ULONG lPartLen ( i+partSize.getNext ()<vData.end () ? partSize.getCurrent () : vData.end ()-i );
285+ CK_ULONG ulEncryptedPartLen;
286+ CPPUNIT_ASSERT_EQUAL ( (CK_RV)CKR_OK, CRYPTOKI_F_PTR ( C_EncryptUpdate (hSession,(CK_BYTE_PTR)&(*i),lPartLen,NULL_PTR,&ulEncryptedPartLen) ) );
288287 const size_t oldSize ( vEncryptedDataParted.size () );
288+ vEncryptedDataParted.resize (oldSize+ulEncryptedPartLen);
289289 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;
290+ const CK_BYTE_PTR pEncryptedPart ( ulEncryptedPartLen>0 ? &vEncryptedDataParted.at (oldSize) : &dummy );
291+ CPPUNIT_ASSERT_EQUAL ( (CK_RV)CKR_OK, CRYPTOKI_F_PTR ( C_EncryptUpdate (hSession,(CK_BYTE_PTR)&(*i),lPartLen,pEncryptedPart,&ulEncryptedPartLen) ) );
292+ vEncryptedDataParted.resize (oldSize+ulEncryptedPartLen);
293+ }
294+ {
295+ CK_ULONG ulLastEncryptedPartLen;
296+ const CK_RV rv ( CRYPTOKI_F_PTR ( C_EncryptFinal (hSession,NULL_PTR,&ulLastEncryptedPartLen) ) );
297+ if ( isSizeOK ) {
298+ CPPUNIT_ASSERT_EQUAL ( (CK_RV)CKR_OK, rv );
299+ const size_t oldSize ( vEncryptedDataParted.size () );
300+ CK_BYTE dummy;
301+ vEncryptedDataParted.resize (oldSize+ulLastEncryptedPartLen);
302+ const CK_BYTE_PTR pLastEncryptedPart ( ulLastEncryptedPartLen>0 ? &vEncryptedDataParted.at (oldSize) : &dummy );
303+ CPPUNIT_ASSERT_EQUAL ( (CK_RV)CKR_OK, CRYPTOKI_F_PTR ( C_EncryptFinal (hSession,pLastEncryptedPart,&ulLastEncryptedPartLen) ) );
304+ vEncryptedDataParted.resize (oldSize+ulLastEncryptedPartLen);
305+ } else {
306+ CPPUNIT_ASSERT_EQUAL_MESSAGE (" C_EncryptFinal should fail with C_CKR_DATA_LEN_RANGE" , (CK_RV)CKR_DATA_LEN_RANGE, rv);
307+ vEncryptedDataParted = vData;
308+ }
297309 }
298310 }
299311
300312 // Single-part decryption
301- CPPUNIT_ASSERT_EQUAL ( (CK_RV)CKR_OK, CRYPTOKI_F_PTR ( C_DecryptInit (hSession,pMechanism,hKey) ) );
302-
303- {
313+ rv = CRYPTOKI_F_PTR ( C_DecryptInit (hSession,pMechanism,hKey) );
314+ CPPUNIT_ASSERT_EQUAL ( (CK_BBOOL) CK_FALSE, (CK_BBOOL) ((rv != CKR_OK) && (oldMechs == CK_FALSE)) );
315+ if (oldMechs == CK_FALSE) {
304316 CK_ULONG ulDataLen;
305317 const CK_RV rv ( CRYPTOKI_F_PTR ( C_Decrypt (hSession,&vEncryptedData.front (),vEncryptedData.size (),NULL_PTR,&ulDataLen) ) );
306318 if ( isSizeOK ) {
@@ -315,8 +327,9 @@ void SymmetricAlgorithmTests::encryptDecrypt(
315327 }
316328
317329 // Multi-part decryption
318- CPPUNIT_ASSERT_EQUAL ( (CK_RV)CKR_OK, CRYPTOKI_F_PTR ( C_DecryptInit (hSession,pMechanism,hKey) ) );
319- {
330+ rv = CRYPTOKI_F_PTR ( C_DecryptInit (hSession,pMechanism,hKey) );
331+ CPPUNIT_ASSERT_EQUAL ( (CK_BBOOL) CK_FALSE, (CK_BBOOL) ((rv != CKR_OK) && (oldMechs == CK_FALSE)) );
332+ if (oldMechs == CK_FALSE) {
320333 std::vector<CK_BYTE> vDecryptedData;
321334 CK_BYTE dummy;
322335 for ( std::vector<CK_BYTE>::iterator i (vEncryptedDataParted.begin ()); i<vEncryptedDataParted.end (); i+=partSize.getCurrent ()) {
@@ -977,44 +990,44 @@ void SymmetricAlgorithmTests::testDesEncryptDecrypt()
977990
978991 // Generate all combinations of session/token keys.
979992 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 );
993+ if (rv == CKR_OK) {
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+ 1 );
996+ encryptDecrypt (CKM_DES_CBC_PAD,blockSize,hSessionRO,hKey,blockSize*NR_OF_BLOCKS_IN_TEST);
997+ encryptDecrypt (CKM_DES_CBC ,blockSize,hSessionRO,hKey,blockSize*NR_OF_BLOCKS_IN_TEST);
998+ encryptDecrypt (CKM_DES_CBC,blockSize,hSessionRO,hKey,blockSize*NR_OF_BLOCKS_IN_TEST+ 1 , false );
999+ encryptDecrypt (CKM_DES_ECB ,blockSize,hSessionRO,hKey,blockSize*NR_OF_BLOCKS_IN_TEST);
1000+ encryptDecrypt (CKM_DES_ECB,blockSize,hSessionRO,hKey,blockSize*NR_OF_BLOCKS_IN_TEST+ 1 , false );
1001+ }
9891002
9901003 CK_OBJECT_HANDLE hKey2 = CK_INVALID_HANDLE;
9911004
9921005 // Generate all combinations of session/token keys.
9931006 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 );
1007+ if (rv == CKR_OK) {
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+ 1 );
1010+ encryptDecrypt (CKM_DES3_CBC_PAD,blockSize,hSessionRO,hKey2,blockSize*NR_OF_BLOCKS_IN_TEST);
1011+ encryptDecrypt (CKM_DES3_CBC ,blockSize,hSessionRO,hKey2,blockSize*NR_OF_BLOCKS_IN_TEST);
1012+ encryptDecrypt (CKM_DES3_CBC,blockSize,hSessionRO,hKey2,blockSize*NR_OF_BLOCKS_IN_TEST+ 1 , false );
1013+ encryptDecrypt (CKM_DES3_ECB ,blockSize,hSessionRO,hKey2,blockSize*NR_OF_BLOCKS_IN_TEST);
1014+ encryptDecrypt (CKM_DES3_ECB,blockSize,hSessionRO,hKey2,blockSize*NR_OF_BLOCKS_IN_TEST+ 1 , false );
1015+ }
10031016#endif
10041017
10051018 CK_OBJECT_HANDLE hKey3 = CK_INVALID_HANDLE;
10061019
10071020 // Generate all combinations of session/token keys.
10081021 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 );
1022+ if (rv == CKR_OK) {
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+ 1 );
1025+ encryptDecrypt (CKM_DES3_CBC_PAD,blockSize,hSessionRO,hKey3,blockSize*NR_OF_BLOCKS_IN_TEST);
1026+ encryptDecrypt (CKM_DES3_CBC ,blockSize,hSessionRO,hKey3,blockSize*NR_OF_BLOCKS_IN_TEST);
1027+ encryptDecrypt (CKM_DES3_CBC,blockSize,hSessionRO,hKey3,blockSize*NR_OF_BLOCKS_IN_TEST+ 1 , false );
1028+ encryptDecrypt (CKM_DES3_ECB ,blockSize,hSessionRO,hKey3,blockSize*NR_OF_BLOCKS_IN_TEST);
1029+ encryptDecrypt (CKM_DES3_ECB,blockSize,hSessionRO,hKey3,blockSize*NR_OF_BLOCKS_IN_TEST+ 1 , false );
1030+ }
10181031}
10191032
10201033void SymmetricAlgorithmTests::testNullTemplate ()
0 commit comments