Update SoftHSM v2.0 to the latest version
[aaf/sshsm.git] / SoftHSMv2 / src / lib / test / SymmetricAlgorithmTests.cpp
index bbc340c..1965a35 100644 (file)
@@ -49,6 +49,28 @@ const CK_BBOOL IS_PUBLIC = CK_FALSE;
 
 CPPUNIT_TEST_SUITE_REGISTRATION(SymmetricAlgorithmTests);
 
+CK_RV SymmetricAlgorithmTests::generateGenericKey(CK_SESSION_HANDLE hSession, CK_BBOOL bToken, CK_BBOOL bPrivate, CK_OBJECT_HANDLE &hKey)
+{
+       CK_MECHANISM mechanism = { CKM_GENERIC_SECRET_KEY_GEN, NULL_PTR, 0 };
+       CK_ULONG bytes = 16;
+       // CK_BBOOL bFalse = CK_FALSE;
+       CK_BBOOL bTrue = CK_TRUE;
+       CK_ATTRIBUTE keyAttribs[] = {
+               { CKA_TOKEN, &bToken, sizeof(bToken) },
+               { CKA_PRIVATE, &bPrivate, sizeof(bPrivate) },
+               { CKA_ENCRYPT, &bTrue, sizeof(bTrue) },
+               { CKA_DECRYPT, &bTrue, sizeof(bTrue) },
+               { CKA_WRAP, &bTrue, sizeof(bTrue) },
+               { CKA_UNWRAP, &bTrue, sizeof(bTrue) },
+               { CKA_VALUE_LEN, &bytes, sizeof(bytes) },
+       };
+
+       hKey = CK_INVALID_HANDLE;
+       return CRYPTOKI_F_PTR( C_GenerateKey(hSession, &mechanism,
+                            keyAttribs, sizeof(keyAttribs)/sizeof(CK_ATTRIBUTE),
+                            &hKey) );
+}
+
 CK_RV SymmetricAlgorithmTests::generateAesKey(CK_SESSION_HANDLE hSession, CK_BBOOL bToken, CK_BBOOL bPrivate, CK_OBJECT_HANDLE &hKey)
 {
        CK_MECHANISM mechanism = { CKM_AES_KEY_GEN, NULL_PTR, 0 };
@@ -1145,3 +1167,30 @@ void SymmetricAlgorithmTests::testAesCtrOverflow()
        rv = CRYPTOKI_F_PTR( C_DecryptUpdate(hSession,&vEncryptedData.front(),1,NULL_PTR,&ulDataPartLen) );
        CPPUNIT_ASSERT_EQUAL( (CK_RV)CKR_ENCRYPTED_DATA_LEN_RANGE, rv );
 }
+
+void SymmetricAlgorithmTests::testGenericKey()
+{
+       CK_RV rv;
+       CK_SESSION_HANDLE hSession;
+
+       // Just make sure that we finalize any previous tests
+       CRYPTOKI_F_PTR( C_Finalize(NULL_PTR) );
+
+       // Initialize the library and start the test.
+       rv = CRYPTOKI_F_PTR( C_Initialize(NULL_PTR) );
+       CPPUNIT_ASSERT(rv == CKR_OK);
+
+       // Open read-write session
+       rv = CRYPTOKI_F_PTR( C_OpenSession(m_initializedTokenSlotID, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSession) );
+       CPPUNIT_ASSERT(rv == CKR_OK);
+
+       // Login USER into the session so we can create a private objects
+       rv = CRYPTOKI_F_PTR( C_Login(hSession,CKU_USER,m_userPin1,m_userPin1Length) );
+       CPPUNIT_ASSERT(rv==CKR_OK);
+
+       CK_OBJECT_HANDLE hKey = CK_INVALID_HANDLE;
+
+       // Generate a session key.
+       rv = generateGenericKey(hSession,IN_SESSION,IS_PUBLIC,hKey);
+       CPPUNIT_ASSERT(rv == CKR_OK);
+}