Skip to content

Commit

Permalink
Merge pull request #122 from bellgrim/SOFTHSM-121
Browse files Browse the repository at this point in the history
SOFTHSM-121: Test cases for C_DecryptUpdate/C_DecryptFinal
  • Loading branch information
jschlyter committed May 18, 2015
2 parents 63dedce + a7b4af4 commit 5a0e163
Show file tree
Hide file tree
Showing 2 changed files with 106 additions and 0 deletions.
4 changes: 4 additions & 0 deletions NEWS
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@ NEWS for SoftHSM -- History of user visible changes

SoftHSM develop

* SOFTHSM-121: Test cases for C_DecryptUpdate/C_DecryptFinal.
* Support C_DecryptUpdate/C_DecryptFinal for symmetric algorithms.
(Patch from Thomas Calderon)

Bugfixes:
* SOFTHSM-120: Segfault after renaming variables.

Expand Down
102 changes: 102 additions & 0 deletions src/lib/test/SymmetricAlgorithmTests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -179,6 +179,9 @@ void SymmetricAlgorithmTests::aesEncryptDecrypt(CK_MECHANISM_TYPE mechanismType,
CK_ULONG ulCipherTextMultiPartLen;
CK_BYTE recoveredText[300];
CK_ULONG ulRecoveredTextLen;
CK_BYTE recoveredTextMulti[300];
CK_ULONG ulRecoveredTextMultiLen;
CK_ULONG ulRecoveredTextMultiPartLen;
CK_RV rv;

rv = C_GenerateRandom(hSession, plainText, sizeof(plainText));
Expand Down Expand Up @@ -261,6 +264,37 @@ void SymmetricAlgorithmTests::aesEncryptDecrypt(CK_MECHANISM_TYPE mechanismType,
CPPUNIT_ASSERT(ulRecoveredTextLen==sizeof(plainText));

CPPUNIT_ASSERT(memcmp(plainText, recoveredText, sizeof(plainText)) == 0);

// Multi-part decryption
rv = C_DecryptInit(hSession,&mechanism,hKey);
CPPUNIT_ASSERT(rv==CKR_OK);

// Test invalid cipher text size
if (mechanismType == CKM_AES_ECB ||
mechanismType == CKM_AES_CBC)
{
ulRecoveredTextMultiLen = sizeof(recoveredTextMulti);
rv = C_DecryptUpdate(hSession,cipherText,ulCipherTextLen/2-1,recoveredTextMulti,&ulRecoveredTextMultiLen);
CPPUNIT_ASSERT(rv==CKR_DATA_LEN_RANGE);
rv = C_DecryptInit(hSession,&mechanism,hKey);
CPPUNIT_ASSERT(rv==CKR_OK);
}

ulRecoveredTextMultiLen = sizeof(recoveredTextMulti);
rv = C_DecryptUpdate(hSession,cipherText,ulCipherTextLen/2,recoveredTextMulti,&ulRecoveredTextMultiLen);
CPPUNIT_ASSERT(rv==CKR_OK);

ulRecoveredTextMultiPartLen = sizeof(recoveredTextMulti) - ulRecoveredTextMultiLen;
rv = C_DecryptUpdate(hSession,cipherText+ulCipherTextLen/2,ulCipherTextLen/2,recoveredTextMulti+ulRecoveredTextMultiLen,&ulRecoveredTextMultiPartLen);
CPPUNIT_ASSERT(rv==CKR_OK);
ulRecoveredTextMultiLen += ulRecoveredTextMultiPartLen;

ulRecoveredTextMultiPartLen = sizeof(recoveredTextMulti) - ulRecoveredTextMultiLen;
rv = C_DecryptFinal(hSession,recoveredTextMulti+ulRecoveredTextMultiLen,&ulRecoveredTextMultiPartLen);
CPPUNIT_ASSERT(rv==CKR_OK);
ulRecoveredTextMultiLen += ulRecoveredTextMultiPartLen;
CPPUNIT_ASSERT(ulRecoveredTextLen==ulRecoveredTextMultiLen);
CPPUNIT_ASSERT(memcmp(recoveredText, recoveredTextMulti, ulRecoveredTextLen) == 0);
}

#ifndef WITH_FIPS
Expand All @@ -276,6 +310,9 @@ void SymmetricAlgorithmTests::desEncryptDecrypt(CK_MECHANISM_TYPE mechanismType,
CK_ULONG ulCipherTextMultiPartLen;
CK_BYTE recoveredText[300];
CK_ULONG ulRecoveredTextLen;
CK_BYTE recoveredTextMulti[300];
CK_ULONG ulRecoveredTextMultiLen;
CK_ULONG ulRecoveredTextMultiPartLen;
CK_RV rv;

rv = C_GenerateRandom(hSession, plainText, sizeof(plainText));
Expand Down Expand Up @@ -358,6 +395,37 @@ void SymmetricAlgorithmTests::desEncryptDecrypt(CK_MECHANISM_TYPE mechanismType,
CPPUNIT_ASSERT(ulRecoveredTextLen==sizeof(plainText));

CPPUNIT_ASSERT(memcmp(plainText, recoveredText, sizeof(plainText)) == 0);

// Multi-part decryption
rv = C_DecryptInit(hSession,&mechanism,hKey);
CPPUNIT_ASSERT(rv==CKR_OK);

// Test invalid cipher text size
if (mechanismType == CKM_DES_ECB ||
mechanismType == CKM_DES_CBC)
{
ulRecoveredTextMultiLen = sizeof(recoveredTextMulti);
rv = C_DecryptUpdate(hSession,cipherText,ulCipherTextLen/2-1,recoveredTextMulti,&ulRecoveredTextMultiLen);
CPPUNIT_ASSERT(rv==CKR_DATA_LEN_RANGE);
rv = C_DecryptInit(hSession,&mechanism,hKey);
CPPUNIT_ASSERT(rv==CKR_OK);
}

ulRecoveredTextMultiLen = sizeof(recoveredTextMulti);
rv = C_DecryptUpdate(hSession,cipherText,ulCipherTextLen/2,recoveredTextMulti,&ulRecoveredTextMultiLen);
CPPUNIT_ASSERT(rv==CKR_OK);

ulRecoveredTextMultiPartLen = sizeof(recoveredTextMulti) - ulRecoveredTextMultiLen;
rv = C_DecryptUpdate(hSession,cipherText+ulCipherTextLen/2,ulCipherTextLen/2,recoveredTextMulti+ulRecoveredTextMultiLen,&ulRecoveredTextMultiPartLen);
CPPUNIT_ASSERT(rv==CKR_OK);
ulRecoveredTextMultiLen += ulRecoveredTextMultiPartLen;

ulRecoveredTextMultiPartLen = sizeof(recoveredTextMulti) - ulRecoveredTextMultiLen;
rv = C_DecryptFinal(hSession,recoveredTextMulti+ulRecoveredTextMultiLen,&ulRecoveredTextMultiPartLen);
CPPUNIT_ASSERT(rv==CKR_OK);
ulRecoveredTextMultiLen += ulRecoveredTextMultiPartLen;
CPPUNIT_ASSERT(ulRecoveredTextLen==ulRecoveredTextMultiLen);
CPPUNIT_ASSERT(memcmp(recoveredText, recoveredTextMulti, ulRecoveredTextLen) == 0);
}
#endif

Expand All @@ -373,6 +441,9 @@ void SymmetricAlgorithmTests::des3EncryptDecrypt(CK_MECHANISM_TYPE mechanismType
CK_ULONG ulCipherTextMultiPartLen;
CK_BYTE recoveredText[300];
CK_ULONG ulRecoveredTextLen;
CK_BYTE recoveredTextMulti[300];
CK_ULONG ulRecoveredTextMultiLen;
CK_ULONG ulRecoveredTextMultiPartLen;
CK_RV rv;

rv = C_GenerateRandom(hSession, plainText, sizeof(plainText));
Expand Down Expand Up @@ -455,6 +526,37 @@ void SymmetricAlgorithmTests::des3EncryptDecrypt(CK_MECHANISM_TYPE mechanismType
CPPUNIT_ASSERT(ulRecoveredTextLen==sizeof(plainText));

CPPUNIT_ASSERT(memcmp(plainText, recoveredText, sizeof(plainText)) == 0);

// Multi-part decryption
rv = C_DecryptInit(hSession,&mechanism,hKey);
CPPUNIT_ASSERT(rv==CKR_OK);

// Test invalid cipher text size
if (mechanismType == CKM_DES3_ECB ||
mechanismType == CKM_DES3_CBC)
{
ulRecoveredTextMultiLen = sizeof(recoveredTextMulti);
rv = C_DecryptUpdate(hSession,cipherText,ulCipherTextLen/2-1,recoveredTextMulti,&ulRecoveredTextMultiLen);
CPPUNIT_ASSERT(rv==CKR_DATA_LEN_RANGE);
rv = C_DecryptInit(hSession,&mechanism,hKey);
CPPUNIT_ASSERT(rv==CKR_OK);
}

ulRecoveredTextMultiLen = sizeof(recoveredTextMulti);
rv = C_DecryptUpdate(hSession,cipherText,ulCipherTextLen/2,recoveredTextMulti,&ulRecoveredTextMultiLen);
CPPUNIT_ASSERT(rv==CKR_OK);

ulRecoveredTextMultiPartLen = sizeof(recoveredTextMulti) - ulRecoveredTextMultiLen;
rv = C_DecryptUpdate(hSession,cipherText+ulCipherTextLen/2,ulCipherTextLen/2,recoveredTextMulti+ulRecoveredTextMultiLen,&ulRecoveredTextMultiPartLen);
CPPUNIT_ASSERT(rv==CKR_OK);
ulRecoveredTextMultiLen += ulRecoveredTextMultiPartLen;

ulRecoveredTextMultiPartLen = sizeof(recoveredTextMulti) - ulRecoveredTextMultiLen;
rv = C_DecryptFinal(hSession,recoveredTextMulti+ulRecoveredTextMultiLen,&ulRecoveredTextMultiPartLen);
CPPUNIT_ASSERT(rv==CKR_OK);
ulRecoveredTextMultiLen += ulRecoveredTextMultiPartLen;
CPPUNIT_ASSERT(ulRecoveredTextLen==ulRecoveredTextMultiLen);
CPPUNIT_ASSERT(memcmp(recoveredText, recoveredTextMulti, ulRecoveredTextLen) == 0);
}

#ifdef HAVE_AES_KEY_WRAP_PAD
Expand Down

0 comments on commit 5a0e163

Please sign in to comment.