diff options
Diffstat (limited to 'SoftHSMv2/src/lib/test')
-rw-r--r-- | SoftHSMv2/src/lib/test/DeriveTests.cpp | 126 | ||||
-rw-r--r-- | SoftHSMv2/src/lib/test/DeriveTests.h | 15 | ||||
-rw-r--r-- | SoftHSMv2/src/lib/test/Makefile.am | 12 | ||||
-rw-r--r-- | SoftHSMv2/src/lib/test/SignVerifyTests.cpp | 110 | ||||
-rw-r--r-- | SoftHSMv2/src/lib/test/SignVerifyTests.h | 9 | ||||
-rw-r--r-- | SoftHSMv2/src/lib/test/SymmetricAlgorithmTests.cpp | 49 | ||||
-rw-r--r-- | SoftHSMv2/src/lib/test/SymmetricAlgorithmTests.h | 3 | ||||
-rw-r--r-- | SoftHSMv2/src/lib/test/TestsNoPINInitBase.cpp | 4 | ||||
-rw-r--r-- | SoftHSMv2/src/lib/test/softhsm2-alt.conf.win32 | 6 | ||||
-rw-r--r-- | SoftHSMv2/src/lib/test/softhsm2.conf.win32 | 6 |
10 files changed, 312 insertions, 28 deletions
diff --git a/SoftHSMv2/src/lib/test/DeriveTests.cpp b/SoftHSMv2/src/lib/test/DeriveTests.cpp index 588d0b9..eb8aba5 100644 --- a/SoftHSMv2/src/lib/test/DeriveTests.cpp +++ b/SoftHSMv2/src/lib/test/DeriveTests.cpp @@ -145,6 +145,53 @@ CK_RV DeriveTests::generateEcKeyPair(const char* curve, CK_SESSION_HANDLE hSessi } #endif +#ifdef WITH_EDDSA +CK_RV DeriveTests::generateEdKeyPair(const char* curve, CK_SESSION_HANDLE hSession, CK_BBOOL bTokenPuk, CK_BBOOL bPrivatePuk, CK_BBOOL bTokenPrk, CK_BBOOL bPrivatePrk, CK_OBJECT_HANDLE &hPuk, CK_OBJECT_HANDLE &hPrk) +{ + CK_MECHANISM mechanism = { CKM_EC_EDWARDS_KEY_PAIR_GEN, NULL_PTR, 0 }; + CK_KEY_TYPE keyType = CKK_EC_EDWARDS; + CK_BYTE oidX25519[] = { 0x06, 0x03, 0x2B, 0x65, 0x6E }; + CK_BYTE oidX448[] = { 0x06, 0x03, 0x2B, 0x65, 0x6F }; + CK_BBOOL bTrue = CK_TRUE; + CK_ATTRIBUTE pukAttribs[] = { + { CKA_EC_PARAMS, NULL, 0 }, + { CKA_KEY_TYPE, &keyType, sizeof(keyType) }, + { CKA_TOKEN, &bTokenPuk, sizeof(bTokenPuk) }, + { CKA_PRIVATE, &bPrivatePuk, sizeof(bPrivatePuk) } + }; + CK_ATTRIBUTE prkAttribs[] = { + { CKA_KEY_TYPE, &keyType, sizeof(keyType) }, + { CKA_TOKEN, &bTokenPrk, sizeof(bTokenPrk) }, + { CKA_PRIVATE, &bPrivatePrk, sizeof(bPrivatePrk) }, + { CKA_SENSITIVE, &bTrue, sizeof(bTrue) }, + { CKA_DERIVE, &bTrue, sizeof(bTrue) } + }; + + /* Select the curve */ + if (strcmp(curve, "X25519") == 0) + { + pukAttribs[0].pValue = oidX25519; + pukAttribs[0].ulValueLen = sizeof(oidX25519); + } + else if (strcmp(curve, "X448") == 0) + { + pukAttribs[0].pValue = oidX448; + pukAttribs[0].ulValueLen = sizeof(oidX448); + } + else + { + return CKR_GENERAL_ERROR; + } + + hPuk = CK_INVALID_HANDLE; + hPrk = CK_INVALID_HANDLE; + return CRYPTOKI_F_PTR( C_GenerateKeyPair(hSession, &mechanism, + pukAttribs, sizeof(pukAttribs)/sizeof(CK_ATTRIBUTE), + prkAttribs, sizeof(prkAttribs)/sizeof(CK_ATTRIBUTE), + &hPuk, &hPrk) ); +} +#endif + CK_RV DeriveTests::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 }; @@ -254,7 +301,7 @@ void DeriveTests::dhDerive(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hPublicK CPPUNIT_ASSERT(rv == CKR_OK); } -#ifdef WITH_ECC +#if defined(WITH_ECC) || defined(WITH_EDDSA) void DeriveTests::ecdhDerive(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hPublicKey, CK_OBJECT_HANDLE hPrivateKey, CK_OBJECT_HANDLE &hKey, bool useRaw) { CK_ATTRIBUTE valAttrib = { CKA_EC_POINT, NULL_PTR, 0 }; @@ -423,7 +470,7 @@ void DeriveTests::testDhDerive() } #ifdef WITH_ECC -void DeriveTests::testEcdhDerive() +void DeriveTests::testEcdsaDerive() { CK_RV rv; CK_SESSION_HANDLE hSessionRO; @@ -497,6 +544,81 @@ void DeriveTests::testEcdhDerive() } #endif +#ifdef WITH_EDDSA +void DeriveTests::testEddsaDerive() +{ + CK_RV rv; + CK_SESSION_HANDLE hSessionRO; + CK_SESSION_HANDLE hSessionRW; + + // Just make sure that we finalize any previous tests + CRYPTOKI_F_PTR( C_Finalize(NULL_PTR) ); + + // Open read-only session on when the token is not initialized should fail + rv = CRYPTOKI_F_PTR( C_OpenSession(m_initializedTokenSlotID, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSessionRO) ); + CPPUNIT_ASSERT(rv == CKR_CRYPTOKI_NOT_INITIALIZED); + + // Initialize the library and start the test. + rv = CRYPTOKI_F_PTR( C_Initialize(NULL_PTR) ); + CPPUNIT_ASSERT(rv == CKR_OK); + + // Open read-only session + rv = CRYPTOKI_F_PTR( C_OpenSession(m_initializedTokenSlotID, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSessionRO) ); + 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, &hSessionRW) ); + CPPUNIT_ASSERT(rv == CKR_OK); + + // Login USER into the sessions so we can create a private objects + rv = CRYPTOKI_F_PTR( C_Login(hSessionRO,CKU_USER,m_userPin1,m_userPin1Length) ); + CPPUNIT_ASSERT(rv == CKR_OK); + + // Public Session keys + CK_OBJECT_HANDLE hPuk1 = CK_INVALID_HANDLE; + CK_OBJECT_HANDLE hPrk1 = CK_INVALID_HANDLE; + CK_OBJECT_HANDLE hPuk2 = CK_INVALID_HANDLE; + CK_OBJECT_HANDLE hPrk2 = CK_INVALID_HANDLE; + + rv = generateEdKeyPair("X25519",hSessionRW,IN_SESSION,IS_PUBLIC,IN_SESSION,IS_PUBLIC,hPuk1,hPrk1); + CPPUNIT_ASSERT(rv == CKR_OK); + rv = generateEdKeyPair("X25519",hSessionRW,IN_SESSION,IS_PUBLIC,IN_SESSION,IS_PUBLIC,hPuk2,hPrk2); + CPPUNIT_ASSERT(rv == CKR_OK); + CK_OBJECT_HANDLE hKey1 = CK_INVALID_HANDLE; + ecdhDerive(hSessionRW,hPuk1,hPrk2,hKey1,true); + CK_OBJECT_HANDLE hKey2 = CK_INVALID_HANDLE; + ecdhDerive(hSessionRW,hPuk2,hPrk1,hKey2,false); + CPPUNIT_ASSERT(compareSecret(hSessionRW,hKey1,hKey2)); + + // Private Session Keys + rv = generateEdKeyPair("X25519",hSessionRW,IN_SESSION,IS_PRIVATE,IN_SESSION,IS_PRIVATE,hPuk1,hPrk1); + CPPUNIT_ASSERT(rv == CKR_OK); + rv = generateEdKeyPair("X25519",hSessionRW,IN_SESSION,IS_PRIVATE,IN_SESSION,IS_PRIVATE,hPuk2,hPrk2); + CPPUNIT_ASSERT(rv == CKR_OK); + ecdhDerive(hSessionRW,hPuk1,hPrk2,hKey1,true); + ecdhDerive(hSessionRW,hPuk2,hPrk1,hKey2,false); + CPPUNIT_ASSERT(compareSecret(hSessionRW,hKey1,hKey2)); + + // Public Token Keys + rv = generateEdKeyPair("X25519",hSessionRW,ON_TOKEN,IS_PUBLIC,ON_TOKEN,IS_PUBLIC,hPuk1,hPrk1); + CPPUNIT_ASSERT(rv == CKR_OK); + rv = generateEdKeyPair("X25519",hSessionRW,ON_TOKEN,IS_PUBLIC,ON_TOKEN,IS_PUBLIC,hPuk2,hPrk2); + CPPUNIT_ASSERT(rv == CKR_OK); + ecdhDerive(hSessionRW,hPuk1,hPrk2,hKey1,true); + ecdhDerive(hSessionRW,hPuk2,hPrk1,hKey2,false); + CPPUNIT_ASSERT(compareSecret(hSessionRW,hKey1,hKey2)); + + // Private Token Keys + rv = generateEdKeyPair("X25519",hSessionRW,ON_TOKEN,IS_PRIVATE,ON_TOKEN,IS_PRIVATE,hPuk1,hPrk1); + CPPUNIT_ASSERT(rv == CKR_OK); + rv = generateEdKeyPair("X25519",hSessionRW,ON_TOKEN,IS_PRIVATE,ON_TOKEN,IS_PRIVATE,hPuk2,hPrk2); + CPPUNIT_ASSERT(rv == CKR_OK); + ecdhDerive(hSessionRW,hPuk1,hPrk2,hKey1,true); + ecdhDerive(hSessionRW,hPuk2,hPrk1,hKey2,false); + CPPUNIT_ASSERT(compareSecret(hSessionRW,hKey1,hKey2)); +} +#endif + void DeriveTests::symDerive(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hKey, CK_OBJECT_HANDLE &hDerive, CK_MECHANISM_TYPE mechType, CK_KEY_TYPE keyType) { CK_RV rv; diff --git a/SoftHSMv2/src/lib/test/DeriveTests.h b/SoftHSMv2/src/lib/test/DeriveTests.h index 5b2aef5..a6a94f0 100644 --- a/SoftHSMv2/src/lib/test/DeriveTests.h +++ b/SoftHSMv2/src/lib/test/DeriveTests.h @@ -41,7 +41,10 @@ class DeriveTests : public TestsBase CPPUNIT_TEST_SUITE(DeriveTests); CPPUNIT_TEST(testDhDerive); #ifdef WITH_ECC - CPPUNIT_TEST(testEcdhDerive); + CPPUNIT_TEST(testEcdsaDerive); +#endif +#ifdef WITH_EDDSA + CPPUNIT_TEST(testEddsaDerive); #endif CPPUNIT_TEST(testSymDerive); CPPUNIT_TEST_SUITE_END(); @@ -49,7 +52,10 @@ class DeriveTests : public TestsBase public: void testDhDerive(); #ifdef WITH_ECC - void testEcdhDerive(); + void testEcdsaDerive(); +#endif +#ifdef WITH_EDDSA + void testEddsaDerive(); #endif void testSymDerive(); @@ -64,8 +70,13 @@ protected: void dhDerive(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hPublicKey, CK_OBJECT_HANDLE hPrivateKey, CK_OBJECT_HANDLE &hKey); #ifdef WITH_ECC CK_RV generateEcKeyPair(const char* curve, CK_SESSION_HANDLE hSession, CK_BBOOL bTokenPuk, CK_BBOOL bPrivatePuk, CK_BBOOL bTokenPrk, CK_BBOOL bPrivatePrk, CK_OBJECT_HANDLE &hPuk, CK_OBJECT_HANDLE &hPrk); +#endif +#if defined(WITH_ECC) || defined(WITH_EDDSA) void ecdhDerive(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hPublicKey, CK_OBJECT_HANDLE hPrivateKey, CK_OBJECT_HANDLE &hKey, bool useRaw); #endif +#ifdef WITH_EDDSA + CK_RV generateEdKeyPair(const char* curve, CK_SESSION_HANDLE hSession, CK_BBOOL bTokenPuk, CK_BBOOL bPrivatePuk, CK_BBOOL bTokenPrk, CK_BBOOL bPrivatePrk, CK_OBJECT_HANDLE &hPuk, CK_OBJECT_HANDLE &hPrk); +#endif bool compareSecret(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hKey1, CK_OBJECT_HANDLE hKey2); void symDerive(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hKey, CK_OBJECT_HANDLE &hDerive, CK_MECHANISM_TYPE mechType, CK_KEY_TYPE keyType); }; diff --git a/SoftHSMv2/src/lib/test/Makefile.am b/SoftHSMv2/src/lib/test/Makefile.am index 3723399..657f187 100644 --- a/SoftHSMv2/src/lib/test/Makefile.am +++ b/SoftHSMv2/src/lib/test/Makefile.am @@ -5,12 +5,9 @@ AM_CPPFLAGS = -I$(srcdir)/.. \ -I$(srcdir)/../pkcs11 \ @CPPUNIT_CFLAGS@ -check_PROGRAMS = p11test - AUTOMAKE_OPTIONS = subdir-objects -p11test_SOURCES = p11test.cpp \ - SymmetricAlgorithmTests.cpp \ +p11test_SOURCES = SymmetricAlgorithmTests.cpp \ DigestTests.cpp \ InitTests.cpp \ InfoTests.cpp \ @@ -28,11 +25,10 @@ p11test_SOURCES = p11test.cpp \ ../common/log.cpp \ ../common/osmutex.cpp -p11test_LDADD = ../libsofthsm2.la +p11test_LDADD = ../libsofthsm2.la p11test_LDFLAGS = @CRYPTO_LIBS@ @CPPUNIT_LIBS@ -no-install -pthread -static -TESTS = p11test - -EXTRA_DIST = $(srcdir)/*.h \ +EXTRA_DIST = $(srcdir)/CMakeLists.txt \ + $(srcdir)/*.h \ $(srcdir)/tokens/dummy.in diff --git a/SoftHSMv2/src/lib/test/SignVerifyTests.cpp b/SoftHSMv2/src/lib/test/SignVerifyTests.cpp index 06dbf95..c68ed08 100644 --- a/SoftHSMv2/src/lib/test/SignVerifyTests.cpp +++ b/SoftHSMv2/src/lib/test/SignVerifyTests.cpp @@ -165,6 +165,61 @@ CK_RV SignVerifyTests::generateEC(const char* curve, CK_SESSION_HANDLE hSession, } #endif +#ifdef WITH_EDDSA +CK_RV SignVerifyTests::generateED(const char* curve, CK_SESSION_HANDLE hSession, CK_BBOOL bTokenPuk, CK_BBOOL bPrivatePuk, CK_BBOOL bTokenPrk, CK_BBOOL bPrivatePrk, CK_OBJECT_HANDLE &hPuk, CK_OBJECT_HANDLE &hPrk) +{ + CK_MECHANISM mechanism = { CKM_EC_EDWARDS_KEY_PAIR_GEN, NULL_PTR, 0 }; + CK_KEY_TYPE keyType = CKK_EC_EDWARDS; + CK_BYTE oidEd25519[] = { 0x06, 0x03, 0x2B, 0x65, 0x70 }; + CK_BYTE label[] = { 0x12, 0x34 }; // dummy + CK_BYTE id[] = { 123 } ; // dummy + CK_BBOOL bFalse = CK_FALSE; + CK_BBOOL bTrue = CK_TRUE; + + CK_ATTRIBUTE pukAttribs[] = { + { CKA_EC_PARAMS, NULL, 0 }, + { CKA_LABEL, &label[0], sizeof(label) }, + { CKA_ID, &id[0], sizeof(id) }, + { CKA_KEY_TYPE, &keyType, sizeof(keyType) }, + { CKA_VERIFY, &bTrue, sizeof(bTrue) }, + { CKA_ENCRYPT, &bFalse, sizeof(bFalse) }, + { CKA_WRAP, &bFalse, sizeof(bFalse) }, + { CKA_TOKEN, &bTokenPuk, sizeof(bTokenPuk) }, + { CKA_PRIVATE, &bPrivatePuk, sizeof(bPrivatePuk) } + }; + CK_ATTRIBUTE prkAttribs[] = { + { CKA_LABEL, &label[0], sizeof(label) }, + { CKA_ID, &id[0], sizeof(id) }, + { CKA_KEY_TYPE, &keyType, sizeof(keyType) }, + { CKA_SIGN, &bTrue, sizeof(bTrue) }, + { CKA_DECRYPT, &bFalse, sizeof(bFalse) }, + { CKA_UNWRAP, &bFalse, sizeof(bFalse) }, + { CKA_SENSITIVE, &bTrue, sizeof(bTrue) }, + { CKA_TOKEN, &bTokenPrk, sizeof(bTokenPrk) }, + { CKA_PRIVATE, &bPrivatePrk, sizeof(bPrivatePrk) }, + { CKA_EXTRACTABLE, &bFalse, sizeof(bFalse) } + }; + + /* Select the curve */ + if (strcmp(curve, "Ed25519") == 0) + { + pukAttribs[0].pValue = oidEd25519; + pukAttribs[0].ulValueLen = sizeof(oidEd25519); + } + else + { + return CKR_GENERAL_ERROR; + } + + hPuk = CK_INVALID_HANDLE; + hPrk = CK_INVALID_HANDLE; + return CRYPTOKI_F_PTR( C_GenerateKeyPair(hSession, &mechanism, + pukAttribs, sizeof(pukAttribs)/sizeof(CK_ATTRIBUTE), + prkAttribs, sizeof(prkAttribs)/sizeof(CK_ATTRIBUTE), + &hPuk, &hPrk) ); +} +#endif + void SignVerifyTests::signVerifySingle(CK_MECHANISM_TYPE mechanismType, CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hPublicKey, CK_OBJECT_HANDLE hPrivateKey, CK_VOID_PTR param /* = NULL_PTR */, CK_ULONG paramLen /* = 0 */) { CK_RV rv; @@ -480,6 +535,61 @@ void SignVerifyTests::testEcSignVerify() } #endif +#ifdef WITH_EDDSA +void SignVerifyTests::testEdSignVerify() +{ + CK_RV rv; + CK_SESSION_HANDLE hSessionRO; + CK_SESSION_HANDLE hSessionRW; + + // Just make sure that we finalize any previous tests + CRYPTOKI_F_PTR( C_Finalize(NULL_PTR) ); + + // Open read-only session on when the token is not initialized should fail + rv = CRYPTOKI_F_PTR( C_OpenSession(m_initializedTokenSlotID, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSessionRO) ); + CPPUNIT_ASSERT(rv == CKR_CRYPTOKI_NOT_INITIALIZED); + + // Initialize the library and start the test. + rv = CRYPTOKI_F_PTR( C_Initialize(NULL_PTR) ); + CPPUNIT_ASSERT(rv == CKR_OK); + + // Open read-only session + rv = CRYPTOKI_F_PTR( C_OpenSession(m_initializedTokenSlotID, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSessionRO) ); + 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, &hSessionRW) ); + CPPUNIT_ASSERT(rv == CKR_OK); + + // Login USER into the sessions so we can create a private objects + rv = CRYPTOKI_F_PTR( C_Login(hSessionRO,CKU_USER,m_userPin1,m_userPin1Length) ); + CPPUNIT_ASSERT(rv==CKR_OK); + + CK_OBJECT_HANDLE hPuk = CK_INVALID_HANDLE; + CK_OBJECT_HANDLE hPrk = CK_INVALID_HANDLE; + + // Public Session keys + rv = generateED("Ed25519", hSessionRW,IN_SESSION,IS_PUBLIC,IN_SESSION,IS_PUBLIC,hPuk,hPrk); + CPPUNIT_ASSERT(rv == CKR_OK); + signVerifySingle(CKM_EDDSA, hSessionRO, hPuk,hPrk); + + // Private Session Keys + rv = generateED("Ed25519", hSessionRW,IN_SESSION,IS_PRIVATE,IN_SESSION,IS_PRIVATE,hPuk,hPrk); + CPPUNIT_ASSERT(rv == CKR_OK); + signVerifySingle(CKM_EDDSA, hSessionRO, hPuk,hPrk); + + // Public Token Keys + rv = generateED("Ed25519", hSessionRW,ON_TOKEN,IS_PUBLIC,ON_TOKEN,IS_PUBLIC,hPuk,hPrk); + CPPUNIT_ASSERT(rv == CKR_OK); + signVerifySingle(CKM_EDDSA, hSessionRO, hPuk,hPrk); + + // Private Token Keys + rv = generateED("Ed25519", hSessionRW,ON_TOKEN,IS_PRIVATE,ON_TOKEN,IS_PRIVATE,hPuk,hPrk); + CPPUNIT_ASSERT(rv == CKR_OK); + signVerifySingle(CKM_EDDSA, hSessionRO, hPuk,hPrk); +} +#endif + CK_RV SignVerifyTests::generateKey(CK_SESSION_HANDLE hSession, CK_KEY_TYPE keyType, CK_BBOOL bToken, CK_BBOOL bPrivate, CK_OBJECT_HANDLE &hKey) { #ifndef WITH_BOTAN diff --git a/SoftHSMv2/src/lib/test/SignVerifyTests.h b/SoftHSMv2/src/lib/test/SignVerifyTests.h index a251218..6c99564 100644 --- a/SoftHSMv2/src/lib/test/SignVerifyTests.h +++ b/SoftHSMv2/src/lib/test/SignVerifyTests.h @@ -45,6 +45,9 @@ class SignVerifyTests : public TestsBase #ifdef WITH_ECC CPPUNIT_TEST(testEcSignVerify); #endif +#ifdef WITH_EDDSA + CPPUNIT_TEST(testEdSignVerify); +#endif CPPUNIT_TEST(testMacSignVerify); CPPUNIT_TEST_SUITE_END(); @@ -53,6 +56,9 @@ public: #ifdef WITH_ECC void testEcSignVerify(); #endif +#ifdef WITH_EDDSA + void testEdSignVerify(); +#endif void testMacSignVerify(); protected: @@ -60,6 +66,9 @@ protected: #ifdef WITH_ECC CK_RV generateEC(const char* curve, CK_SESSION_HANDLE hSession, CK_BBOOL bTokenPuk, CK_BBOOL bPrivatePuk, CK_BBOOL bTokenPrk, CK_BBOOL bPrivatePrk, CK_OBJECT_HANDLE &hPuk, CK_OBJECT_HANDLE &hPrk); #endif +#ifdef WITH_EDDSA + CK_RV generateED(const char* curve, CK_SESSION_HANDLE hSession, CK_BBOOL bTokenPuk, CK_BBOOL bPrivatePuk, CK_BBOOL bTokenPrk, CK_BBOOL bPrivatePrk, CK_OBJECT_HANDLE &hPuk, CK_OBJECT_HANDLE &hPrk); +#endif void signVerifySingle(CK_MECHANISM_TYPE mechanismType, CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hPublicKey, CK_OBJECT_HANDLE hPrivateKey, CK_VOID_PTR param = NULL_PTR, CK_ULONG paramLen = 0); void signVerifySingleData(size_t dataSize, CK_MECHANISM_TYPE mechanismType, CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hPublicKey, CK_OBJECT_HANDLE hPrivateKey, CK_VOID_PTR param = NULL_PTR, CK_ULONG paramLen = 0); void signVerifyMulti(CK_MECHANISM_TYPE mechanismType, CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hPublicKey, CK_OBJECT_HANDLE hPrivateKey, CK_VOID_PTR param = NULL_PTR, CK_ULONG paramLen = 0); diff --git a/SoftHSMv2/src/lib/test/SymmetricAlgorithmTests.cpp b/SoftHSMv2/src/lib/test/SymmetricAlgorithmTests.cpp index bbc340c..1965a35 100644 --- a/SoftHSMv2/src/lib/test/SymmetricAlgorithmTests.cpp +++ b/SoftHSMv2/src/lib/test/SymmetricAlgorithmTests.cpp @@ -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); +} diff --git a/SoftHSMv2/src/lib/test/SymmetricAlgorithmTests.h b/SoftHSMv2/src/lib/test/SymmetricAlgorithmTests.h index 76191d9..19c3529 100644 --- a/SoftHSMv2/src/lib/test/SymmetricAlgorithmTests.h +++ b/SoftHSMv2/src/lib/test/SymmetricAlgorithmTests.h @@ -48,6 +48,7 @@ class SymmetricAlgorithmTests : public TestsBase CPPUNIT_TEST(testNonModifiableDesKeyGeneration); CPPUNIT_TEST(testCheckValue); CPPUNIT_TEST(testAesCtrOverflow); + CPPUNIT_TEST(testGenericKey); CPPUNIT_TEST_SUITE_END(); public: @@ -58,8 +59,10 @@ public: void testNonModifiableDesKeyGeneration(); void testCheckValue(); void testAesCtrOverflow(); + void testGenericKey(); protected: + CK_RV generateGenericKey(CK_SESSION_HANDLE hSession, CK_BBOOL bToken, CK_BBOOL bPrivate, CK_OBJECT_HANDLE &hKey); CK_RV generateAesKey(CK_SESSION_HANDLE hSession, CK_BBOOL bToken, CK_BBOOL bPrivate, CK_OBJECT_HANDLE &hKey); #ifndef WITH_FIPS CK_RV generateDesKey(CK_SESSION_HANDLE hSession, CK_BBOOL bToken, CK_BBOOL bPrivate, CK_OBJECT_HANDLE &hKey); diff --git a/SoftHSMv2/src/lib/test/TestsNoPINInitBase.cpp b/SoftHSMv2/src/lib/test/TestsNoPINInitBase.cpp index f5bb066..3ca514b 100644 --- a/SoftHSMv2/src/lib/test/TestsNoPINInitBase.cpp +++ b/SoftHSMv2/src/lib/test/TestsNoPINInitBase.cpp @@ -151,10 +151,6 @@ TestsNoPINInitBase::~TestsNoPINInitBase() { #endif // _WIN32 } -void softHSMLog(const int, const char*, const char*, const int, const char*, ...) -{ - -} #else TestsNoPINInitBase::~TestsNoPINInitBase() {} #endif // P11M diff --git a/SoftHSMv2/src/lib/test/softhsm2-alt.conf.win32 b/SoftHSMv2/src/lib/test/softhsm2-alt.conf.win32 deleted file mode 100644 index 68cb2ec..0000000 --- a/SoftHSMv2/src/lib/test/softhsm2-alt.conf.win32 +++ /dev/null @@ -1,6 +0,0 @@ -# SoftHSM v2 configuration file - -directories.tokendir = .\tokens -objectstore.backend = file -log.level = INFO -slots.removable = true diff --git a/SoftHSMv2/src/lib/test/softhsm2.conf.win32 b/SoftHSMv2/src/lib/test/softhsm2.conf.win32 deleted file mode 100644 index a877d1f..0000000 --- a/SoftHSMv2/src/lib/test/softhsm2.conf.win32 +++ /dev/null @@ -1,6 +0,0 @@ -# SoftHSM v2 configuration file - -directories.tokendir = .\tokens -objectstore.backend = file -log.level = INFO -slots.removable = false |