diff --git a/src/lib/session_mgr/SessionManager.cpp b/src/lib/session_mgr/SessionManager.cpp index 65442c82b..b66521075 100644 --- a/src/lib/session_mgr/SessionManager.cpp +++ b/src/lib/session_mgr/SessionManager.cpp @@ -129,7 +129,7 @@ CK_RV SessionManager::closeSession(CK_SESSION_HANDLE hSession) // Check if this is the last session on the token bool lastSession = true; - CK_ULONG slotID = sessions[sessionID]->getSlot()->getSlotID(); + const CK_SLOT_ID slotID( sessions[sessionID]->getSlot()->getSlotID() ); for (size_t i = 0; i < sessions.size(); i++) { if (sessions[i] == NULL) continue; @@ -167,7 +167,7 @@ CK_RV SessionManager::closeAllSessions(Slot* slot) if (token == NULL) return CKR_TOKEN_NOT_PRESENT; // Close all sessions on this slot - CK_ULONG slotID = slot->getSlotID(); + const CK_SLOT_ID slotID( slot->getSlotID() ); for (std::vector::iterator i = sessions.begin(); i != sessions.end(); i++) { if (*i == NULL) continue; @@ -210,7 +210,7 @@ Session* SessionManager::getSession(CK_SESSION_HANDLE hSession) return sessions[hSession - 1]; } -bool SessionManager::haveSession(size_t slotID) +bool SessionManager::haveSession(CK_SLOT_ID slotID) { // Lock access to the vector MutexLocker lock(sessionsMutex); @@ -228,7 +228,7 @@ bool SessionManager::haveSession(size_t slotID) return false; } -bool SessionManager::haveROSession(size_t slotID) +bool SessionManager::haveROSession(CK_SLOT_ID slotID) { // Lock access to the vector MutexLocker lock(sessionsMutex); diff --git a/src/lib/session_mgr/SessionManager.h b/src/lib/session_mgr/SessionManager.h index 33856873b..9d5551420 100644 --- a/src/lib/session_mgr/SessionManager.h +++ b/src/lib/session_mgr/SessionManager.h @@ -53,8 +53,8 @@ class SessionManager CK_RV closeAllSessions(Slot* slot); CK_RV getSessionInfo(CK_SESSION_HANDLE hSession, CK_SESSION_INFO_PTR pInfo); Session* getSession(CK_SESSION_HANDLE hSession); - bool haveSession(size_t slotID); - bool haveROSession(size_t slotID); + bool haveSession(CK_SLOT_ID slotID); + bool haveROSession(CK_SLOT_ID slotID); private: // The sessions diff --git a/src/lib/slot_mgr/Slot.cpp b/src/lib/slot_mgr/Slot.cpp index 0d663189d..fea260b8c 100644 --- a/src/lib/slot_mgr/Slot.cpp +++ b/src/lib/slot_mgr/Slot.cpp @@ -37,9 +37,10 @@ #include "Token.h" #include #include +#include // Constructor -Slot::Slot(ObjectStore* inObjectStore, size_t inSlotID, ObjectStoreToken* inToken /* = NULL */) +Slot::Slot(ObjectStore* inObjectStore, CK_SLOT_ID inSlotID, ObjectStoreToken* inToken /* = NULL */) { objectStore = inObjectStore; slotID = inSlotID; @@ -80,15 +81,16 @@ CK_RV Slot::getSlotInfo(CK_SLOT_INFO_PTR info) return CKR_ARGUMENTS_BAD; } - char description[65]; - char mfgID[33]; + std::ostringstream osDescription; + osDescription << "SoftHSM slot ID 0x" << std::hex << slotID; + const std::string sDescription(osDescription.str()); - snprintf(description, 65, "SoftHSM slot %d", (int) slotID); + char mfgID[33]; snprintf(mfgID, 33, "SoftHSM project"); memset(info->slotDescription, ' ', 64); memset(info->manufacturerID, ' ', 32); - memcpy(info->slotDescription, description, strlen(description)); + memcpy(info->slotDescription, sDescription.data(), sDescription.size()); memcpy(info->manufacturerID, mfgID, strlen(mfgID)); info->flags = CKF_TOKEN_PRESENT; @@ -102,7 +104,7 @@ CK_RV Slot::getSlotInfo(CK_SLOT_INFO_PTR info) } // Get the slot ID -size_t Slot::getSlotID() +CK_SLOT_ID Slot::getSlotID() { return slotID; } diff --git a/src/lib/slot_mgr/Slot.h b/src/lib/slot_mgr/Slot.h index ffacbbe0f..6ab07c65a 100644 --- a/src/lib/slot_mgr/Slot.h +++ b/src/lib/slot_mgr/Slot.h @@ -46,7 +46,7 @@ class Slot { public: // Constructor - Slot(ObjectStore* inObjectStore, size_t inSlotID, ObjectStoreToken *inToken = NULL); + Slot(ObjectStore* inObjectStore, CK_SLOT_ID inSlotID, ObjectStoreToken *inToken = NULL); // Destructor virtual ~Slot(); @@ -61,7 +61,7 @@ class Slot CK_RV getSlotInfo(CK_SLOT_INFO_PTR info); // Get the slot ID - size_t getSlotID(); + CK_SLOT_ID getSlotID(); // Is a token present? bool isTokenPresent(); @@ -74,7 +74,7 @@ class Slot Token* token; // The slot ID - size_t slotID; + CK_SLOT_ID slotID; }; #endif // !_SOFTHSM_V2_SLOT_H diff --git a/src/lib/slot_mgr/SlotManager.cpp b/src/lib/slot_mgr/SlotManager.cpp index c63a759e5..93cd77eb7 100644 --- a/src/lib/slot_mgr/SlotManager.cpp +++ b/src/lib/slot_mgr/SlotManager.cpp @@ -36,50 +36,74 @@ #include "config.h" #include "log.h" #include "SlotManager.h" +#include +#include +#include +#include +typedef std::pair SlotMapElement; +typedef std::pair InsertResult; // Constructor -SlotManager::SlotManager(ObjectStore* objectStore) +SlotManager::SlotManager(ObjectStore*const objectStore) { // Add a slot for each token that already exists for (size_t i = 0; i < objectStore->getTokenCount(); i++) { - Slot* newSlot = new Slot(objectStore, i, objectStore->getToken(i)); - slots.push_back(newSlot); + ObjectStoreToken*const pToken(objectStore->getToken(i)); + ByteString bs; + pToken->getTokenSerial(bs); + const std::string s((const char*)bs.const_byte_str(), (const char*)bs.const_byte_str()+bs.size()); + std::istringstream iss(s); + CK_SLOT_ID l; + // parse serial string that is expected to have only hex digits. + iss >> std::hex >> l; + // mask for 31 bits. + // this since sunpkcs11 java wrapper is parsing the slot ID to a java int that needs to be positive. + // java int is 32 bit and the the sign bit is removed. + const CK_SLOT_ID mask( ((CK_SLOT_ID)1<<31)-1 ); + const CK_SLOT_ID slotID(mask&l); + insertToken(objectStore, slotID, pToken); } // Add an empty slot - slots.push_back(new Slot(objectStore, objectStore->getTokenCount())); + insertToken(objectStore, objectStore->getTokenCount(), NULL); +} + +void SlotManager::insertToken(ObjectStore*const objectStore, const CK_SLOT_ID slotID, ObjectStoreToken*const pToken) { + Slot*const newSlot( new Slot(objectStore, slotID, pToken) ); + const InsertResult result( slots.insert(SlotMapElement(slotID, newSlot)) ); + assert(result.second);// fails if there is already a token on this slot } // Destructor SlotManager::~SlotManager() { - std::vector toDelete = slots; + SlotMap toDelete = slots; slots.clear(); - for (std::vector::iterator i = toDelete.begin(); i != toDelete.end(); i++) + for (SlotMap::iterator i = toDelete.begin(); i != toDelete.end(); i++) { - delete *i; + delete i->second; } } // Get the slot list CK_RV SlotManager::getSlotList(ObjectStore* objectStore, CK_BBOOL tokenPresent, CK_SLOT_ID_PTR pSlotList, CK_ULONG_PTR pulCount) { - CK_ULONG size = 0; + size_t size( 0 ); if (pulCount == NULL) return CKR_ARGUMENTS_BAD; // Calculate the size of the list bool uninitialized = false; - for (std::vector::iterator i = slots.begin(); i != slots.end(); i++) + for (SlotMap::iterator i = slots.begin(); i != slots.end(); i++) { - if ((tokenPresent == CK_FALSE) || (*i)->isTokenPresent()) + if ((tokenPresent == CK_FALSE) || i->second->isTokenPresent()) { size++; } - if ((*i)->getToken() != NULL && (*i)->getToken()->isInitialized() == false) + if (i->second->getToken() != NULL && i->second->getToken()->isInitialized() == false) { uninitialized = true; } @@ -91,7 +115,7 @@ CK_RV SlotManager::getSlotList(ObjectStore* objectStore, CK_BBOOL tokenPresent, // Always have an uninitialized token if (uninitialized == false) { - slots.push_back(new Slot(objectStore, objectStore->getTokenCount())); + insertToken(objectStore, objectStore->getTokenCount(), NULL); size++; } @@ -108,23 +132,30 @@ CK_RV SlotManager::getSlotList(ObjectStore* objectStore, CK_BBOOL tokenPresent, return CKR_BUFFER_TOO_SMALL; } - size = 0; + size_t startIx( 0 ); + size_t endIx( size-1 ); - for (std::vector::iterator i = slots.begin(); i != slots.end(); i++) + for (SlotMap::iterator i = slots.begin(); i != slots.end(); i++) { - if ((tokenPresent == CK_FALSE) || (*i)->isTokenPresent()) - { - pSlotList[size++] = (CK_ULONG)(*i)->getSlotID(); + if ((tokenPresent == CK_TRUE) && !i->second->isTokenPresent()) + {// only show token if present on slot. But this slot has no token so we continue + continue; + } + // put uninitialized last. After all initialized or slots without tokens. + if ( i->second->isTokenPresent() && !i->second->getToken()->isInitialized() ) { + pSlotList[endIx--] = i->second->getSlotID(); + } else { + pSlotList[startIx++] = i->second->getSlotID(); } } - + assert(startIx==endIx+1); *pulCount = size; return CKR_OK; } // Get the slots -std::vector SlotManager::getSlots() +SlotMap SlotManager::getSlots() { return slots; } @@ -132,13 +163,9 @@ std::vector SlotManager::getSlots() // Get one slot Slot* SlotManager::getSlot(CK_SLOT_ID slotID) { - for (std::vector::iterator i = slots.begin(); i != slots.end(); i++) - { - if ((*i)->getSlotID() == slotID) - { - return *i; - } + try { + return slots.at(slotID); + } catch( const std::out_of_range &oor) { + return NULL_PTR; } - - return NULL; } diff --git a/src/lib/slot_mgr/SlotManager.h b/src/lib/slot_mgr/SlotManager.h index a833eb6d3..04f51c0d1 100644 --- a/src/lib/slot_mgr/SlotManager.h +++ b/src/lib/slot_mgr/SlotManager.h @@ -41,7 +41,8 @@ #include "ObjectStore.h" #include "Slot.h" #include -#include +#include +typedef std::map SlotMap; class SlotManager { @@ -53,7 +54,7 @@ class SlotManager virtual ~SlotManager(); // Get the slots - std::vector getSlots(); + SlotMap getSlots(); // Get the slot list CK_RV getSlotList(ObjectStore* objectStore, CK_BBOOL tokenPresent, CK_SLOT_ID_PTR pSlotList, CK_ULONG_PTR pulCount); @@ -61,8 +62,9 @@ class SlotManager // Get one slot Slot* getSlot(CK_SLOT_ID slotID); private: + void insertToken(ObjectStore* objectStore, CK_SLOT_ID slotID, ObjectStoreToken* pToken); // The slots - std::vector slots; + SlotMap slots; }; #endif // !_SOFTHSM_V2_SLOTMANAGER_H diff --git a/src/lib/slot_mgr/test/SlotManagerTests.cpp b/src/lib/slot_mgr/test/SlotManagerTests.cpp index 344277969..c5f6687b7 100644 --- a/src/lib/slot_mgr/test/SlotManagerTests.cpp +++ b/src/lib/slot_mgr/test/SlotManagerTests.cpp @@ -86,20 +86,20 @@ void SlotManagerTests::testNoExistingTokens() CPPUNIT_ASSERT(slotManager.getSlotList(&store, CK_TRUE, testList, &ulCount) == CKR_OK); CPPUNIT_ASSERT(ulCount == 1); - CPPUNIT_ASSERT(slotManager.getSlots()[0]->getSlotID() == testList[0]); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[0]]->getSlotID() == testList[0]); // Retrieve slot information about the first slot CK_SLOT_INFO slotInfo; - CPPUNIT_ASSERT(slotManager.getSlots()[0]->getSlotInfo(&slotInfo) == CKR_OK); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[0]]->getSlotInfo(&slotInfo) == CKR_OK); CPPUNIT_ASSERT((slotInfo.flags & CKF_TOKEN_PRESENT) == CKF_TOKEN_PRESENT); // Retrieve token information about the token in the first slot CK_TOKEN_INFO tokenInfo; - CPPUNIT_ASSERT(slotManager.getSlots()[0]->getToken() != NULL); - CPPUNIT_ASSERT(slotManager.getSlots()[0]->getToken()->getTokenInfo(&tokenInfo) == CKR_OK); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[0]]->getToken() != NULL); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[0]]->getToken()->getTokenInfo(&tokenInfo) == CKR_OK); CPPUNIT_ASSERT((tokenInfo.flags & CKF_TOKEN_INITIALIZED) != CKF_TOKEN_INITIALIZED); } @@ -136,48 +136,48 @@ void SlotManagerTests::testExistingTokens() CPPUNIT_ASSERT(slotManager.getSlotList(&store, CK_TRUE, testList, &ulCount) == CKR_OK); CPPUNIT_ASSERT(ulCount == 3); - CPPUNIT_ASSERT(slotManager.getSlots()[0]->getSlotID() == testList[0]); - CPPUNIT_ASSERT(slotManager.getSlots()[1]->getSlotID() == testList[1]); - CPPUNIT_ASSERT(slotManager.getSlots()[2]->getSlotID() == testList[2]); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[0]]->getSlotID() == testList[0]); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[1]]->getSlotID() == testList[1]); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[2]]->getSlotID() == testList[2]); // Retrieve slot information about the first slot CK_SLOT_INFO slotInfo; - CPPUNIT_ASSERT(slotManager.getSlots()[0]->getSlotInfo(&slotInfo) == CKR_OK); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[0]]->getSlotInfo(&slotInfo) == CKR_OK); CPPUNIT_ASSERT((slotInfo.flags & CKF_TOKEN_PRESENT) == CKF_TOKEN_PRESENT); // Retrieve token information about the token in the first slot CK_TOKEN_INFO tokenInfo; - CPPUNIT_ASSERT(slotManager.getSlots()[0]->getToken() != NULL); - CPPUNIT_ASSERT(slotManager.getSlots()[0]->getToken()->getTokenInfo(&tokenInfo) == CKR_OK); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[0]]->getToken() != NULL); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[0]]->getToken()->getTokenInfo(&tokenInfo) == CKR_OK); CPPUNIT_ASSERT((tokenInfo.flags & CKF_TOKEN_INITIALIZED) == CKF_TOKEN_INITIALIZED); CPPUNIT_ASSERT(!memcmp(tokenInfo.label, &label1[0], label1.size()) || !memcmp(tokenInfo.label, &label2[0], label2.size())); // Retrieve slot information about the second slot - CPPUNIT_ASSERT(slotManager.getSlots()[1]->getSlotInfo(&slotInfo) == CKR_OK); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[1]]->getSlotInfo(&slotInfo) == CKR_OK); CPPUNIT_ASSERT((slotInfo.flags & CKF_TOKEN_PRESENT) == CKF_TOKEN_PRESENT); // Retrieve token information about the token in the second slot - CPPUNIT_ASSERT(slotManager.getSlots()[1]->getToken() != NULL); - CPPUNIT_ASSERT(slotManager.getSlots()[1]->getToken()->getTokenInfo(&tokenInfo) == CKR_OK); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[1]]->getToken() != NULL); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[1]]->getToken()->getTokenInfo(&tokenInfo) == CKR_OK); CPPUNIT_ASSERT((tokenInfo.flags & CKF_TOKEN_INITIALIZED) == CKF_TOKEN_INITIALIZED); CPPUNIT_ASSERT(!memcmp(tokenInfo.label, &label1[0], label1.size()) || !memcmp(tokenInfo.label, &label2[0], label2.size())); // Retrieve slot information about the third slot - CPPUNIT_ASSERT(slotManager.getSlots()[2]->getSlotInfo(&slotInfo) == CKR_OK); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[2]]->getSlotInfo(&slotInfo) == CKR_OK); CPPUNIT_ASSERT((slotInfo.flags & CKF_TOKEN_PRESENT) == CKF_TOKEN_PRESENT); // Retrieve token information about the token in the third slot - CPPUNIT_ASSERT(slotManager.getSlots()[2]->getToken() != NULL); - CPPUNIT_ASSERT(slotManager.getSlots()[2]->getToken()->getTokenInfo(&tokenInfo) == CKR_OK); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[2]]->getToken() != NULL); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[2]]->getToken()->getTokenInfo(&tokenInfo) == CKR_OK); CPPUNIT_ASSERT((tokenInfo.flags & CKF_TOKEN_INITIALIZED) != CKF_TOKEN_INITIALIZED); } @@ -208,20 +208,20 @@ void SlotManagerTests::testInitialiseTokenInLastSlot() CPPUNIT_ASSERT(slotManager.getSlotList(&store, CK_TRUE, testList, &ulCount) == CKR_OK); CPPUNIT_ASSERT(ulCount == 1); - CPPUNIT_ASSERT(slotManager.getSlots()[0]->getSlotID() == testList[0]); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[0]]->getSlotID() == testList[0]); // Retrieve slot information about the first slot CK_SLOT_INFO slotInfo; - CPPUNIT_ASSERT(slotManager.getSlots()[0]->getSlotInfo(&slotInfo) == CKR_OK); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[0]]->getSlotInfo(&slotInfo) == CKR_OK); CPPUNIT_ASSERT((slotInfo.flags & CKF_TOKEN_PRESENT) == CKF_TOKEN_PRESENT); // Retrieve token information about the token in the first slot CK_TOKEN_INFO tokenInfo; - CPPUNIT_ASSERT(slotManager.getSlots()[0]->getToken() != NULL); - CPPUNIT_ASSERT(slotManager.getSlots()[0]->getToken()->getTokenInfo(&tokenInfo) == CKR_OK); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[0]]->getToken() != NULL); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[0]]->getToken()->getTokenInfo(&tokenInfo) == CKR_OK); CPPUNIT_ASSERT((tokenInfo.flags & CKF_TOKEN_INITIALIZED) != CKF_TOKEN_INITIALIZED); @@ -229,16 +229,16 @@ void SlotManagerTests::testInitialiseTokenInLastSlot() ByteString soPIN((unsigned char*)"1234", 4); CK_UTF8CHAR label[33] = "My test token "; - CPPUNIT_ASSERT(slotManager.getSlots()[0]->initToken(soPIN, label) == CKR_OK); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[0]]->initToken(soPIN, label) == CKR_OK); // Retrieve slot information about the first slot - CPPUNIT_ASSERT(slotManager.getSlots()[0]->getSlotInfo(&slotInfo) == CKR_OK); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[0]]->getSlotInfo(&slotInfo) == CKR_OK); CPPUNIT_ASSERT((slotInfo.flags & CKF_TOKEN_PRESENT) == CKF_TOKEN_PRESENT); // Retrieve token information about the token in the first slot - CPPUNIT_ASSERT(slotManager.getSlots()[0]->getToken() != NULL); - CPPUNIT_ASSERT(slotManager.getSlots()[0]->getToken()->getTokenInfo(&tokenInfo) == CKR_OK); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[0]]->getToken() != NULL); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[0]]->getToken()->getTokenInfo(&tokenInfo) == CKR_OK); CPPUNIT_ASSERT((tokenInfo.flags & CKF_TOKEN_INITIALIZED) == CKF_TOKEN_INITIALIZED); CPPUNIT_ASSERT(!memcmp(tokenInfo.label, label, 32)); @@ -265,21 +265,21 @@ void SlotManagerTests::testInitialiseTokenInLastSlot() CPPUNIT_ASSERT(slotManager.getSlotList(&store, CK_TRUE, testList, &ulCount) == CKR_OK); CPPUNIT_ASSERT(ulCount == 2); - CPPUNIT_ASSERT(slotManager.getSlots()[0]->getSlotID() == testList[0]); - CPPUNIT_ASSERT(slotManager.getSlots()[1]->getSlotID() == testList[1]); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[0]]->getSlotID() == testList[0]); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[1]]->getSlotID() == testList[1]); // Retrieve slot information about the first slot CK_SLOT_INFO slotInfo; - CPPUNIT_ASSERT(slotManager.getSlots()[0]->getSlotInfo(&slotInfo) == CKR_OK); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[0]]->getSlotInfo(&slotInfo) == CKR_OK); CPPUNIT_ASSERT((slotInfo.flags & CKF_TOKEN_PRESENT) == CKF_TOKEN_PRESENT); // Retrieve token information about the token in the first slot CK_TOKEN_INFO tokenInfo; - CPPUNIT_ASSERT(slotManager.getSlots()[0]->getToken() != NULL); - CPPUNIT_ASSERT(slotManager.getSlots()[0]->getToken()->getTokenInfo(&tokenInfo) == CKR_OK); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[0]]->getToken() != NULL); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[0]]->getToken()->getTokenInfo(&tokenInfo) == CKR_OK); CPPUNIT_ASSERT((tokenInfo.flags & CKF_TOKEN_INITIALIZED) == CKF_TOKEN_INITIALIZED); @@ -287,13 +287,13 @@ void SlotManagerTests::testInitialiseTokenInLastSlot() CPPUNIT_ASSERT(!memcmp(tokenInfo.label, label, 32)); // Retrieve slot information about the second slot - CPPUNIT_ASSERT(slotManager.getSlots()[1]->getSlotInfo(&slotInfo) == CKR_OK); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[1]]->getSlotInfo(&slotInfo) == CKR_OK); CPPUNIT_ASSERT((slotInfo.flags & CKF_TOKEN_PRESENT) == CKF_TOKEN_PRESENT); // Retrieve token information about the token in the second slot - CPPUNIT_ASSERT(slotManager.getSlots()[1]->getToken() != NULL); - CPPUNIT_ASSERT(slotManager.getSlots()[1]->getToken()->getTokenInfo(&tokenInfo) == CKR_OK); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[1]]->getToken() != NULL); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[1]]->getToken()->getTokenInfo(&tokenInfo) == CKR_OK); CPPUNIT_ASSERT((tokenInfo.flags & CKF_TOKEN_INITIALIZED) != CKF_TOKEN_INITIALIZED); } @@ -330,48 +330,48 @@ void SlotManagerTests::testReinitialiseExistingToken() CPPUNIT_ASSERT(slotManager.getSlotList(&store, CK_TRUE, testList, &ulCount) == CKR_OK); CPPUNIT_ASSERT(ulCount == 3); - CPPUNIT_ASSERT(slotManager.getSlots()[0]->getSlotID() == testList[0]); - CPPUNIT_ASSERT(slotManager.getSlots()[1]->getSlotID() == testList[1]); - CPPUNIT_ASSERT(slotManager.getSlots()[2]->getSlotID() == testList[2]); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[0]]->getSlotID() == testList[0]); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[1]]->getSlotID() == testList[1]); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[2]]->getSlotID() == testList[2]); // Retrieve slot information about the first slot CK_SLOT_INFO slotInfo; - CPPUNIT_ASSERT(slotManager.getSlots()[0]->getSlotInfo(&slotInfo) == CKR_OK); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[0]]->getSlotInfo(&slotInfo) == CKR_OK); CPPUNIT_ASSERT((slotInfo.flags & CKF_TOKEN_PRESENT) == CKF_TOKEN_PRESENT); // Retrieve token information about the token in the first slot CK_TOKEN_INFO tokenInfo; - CPPUNIT_ASSERT(slotManager.getSlots()[0]->getToken() != NULL); - CPPUNIT_ASSERT(slotManager.getSlots()[0]->getToken()->getTokenInfo(&tokenInfo) == CKR_OK); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[0]]->getToken() != NULL); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[0]]->getToken()->getTokenInfo(&tokenInfo) == CKR_OK); CPPUNIT_ASSERT((tokenInfo.flags & CKF_TOKEN_INITIALIZED) == CKF_TOKEN_INITIALIZED); CPPUNIT_ASSERT(!memcmp(tokenInfo.label, &label1[0], label1.size()) || !memcmp(tokenInfo.label, &label2[0], label2.size())); // Retrieve slot information about the second slot - CPPUNIT_ASSERT(slotManager.getSlots()[1]->getSlotInfo(&slotInfo) == CKR_OK); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[1]]->getSlotInfo(&slotInfo) == CKR_OK); CPPUNIT_ASSERT((slotInfo.flags & CKF_TOKEN_PRESENT) == CKF_TOKEN_PRESENT); // Retrieve token information about the token in the second slot - CPPUNIT_ASSERT(slotManager.getSlots()[1]->getToken() != NULL); - CPPUNIT_ASSERT(slotManager.getSlots()[1]->getToken()->getTokenInfo(&tokenInfo) == CKR_OK); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[1]]->getToken() != NULL); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[1]]->getToken()->getTokenInfo(&tokenInfo) == CKR_OK); CPPUNIT_ASSERT((tokenInfo.flags & CKF_TOKEN_INITIALIZED) == CKF_TOKEN_INITIALIZED); CPPUNIT_ASSERT(!memcmp(tokenInfo.label, &label1[0], label1.size()) || !memcmp(tokenInfo.label, &label2[0], label2.size())); // Retrieve slot information about the third slot - CPPUNIT_ASSERT(slotManager.getSlots()[2]->getSlotInfo(&slotInfo) == CKR_OK); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[2]]->getSlotInfo(&slotInfo) == CKR_OK); CPPUNIT_ASSERT((slotInfo.flags & CKF_TOKEN_PRESENT) == CKF_TOKEN_PRESENT); // Retrieve token information about the token in the third slot - CPPUNIT_ASSERT(slotManager.getSlots()[2]->getToken() != NULL); - CPPUNIT_ASSERT(slotManager.getSlots()[2]->getToken()->getTokenInfo(&tokenInfo) == CKR_OK); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[2]]->getToken() != NULL); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[2]]->getToken()->getTokenInfo(&tokenInfo) == CKR_OK); CPPUNIT_ASSERT((tokenInfo.flags & CKF_TOKEN_INITIALIZED) != CKF_TOKEN_INITIALIZED); @@ -379,16 +379,16 @@ void SlotManagerTests::testReinitialiseExistingToken() ByteString soPIN((unsigned char*)"1234", 4); CK_UTF8CHAR label[33] = "My test token "; - CPPUNIT_ASSERT(slotManager.getSlots()[1]->initToken(soPIN, label) == CKR_OK); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[1]]->initToken(soPIN, label) == CKR_OK); // Retrieve slot information about the first slot - CPPUNIT_ASSERT(slotManager.getSlots()[1]->getSlotInfo(&slotInfo) == CKR_OK); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[1]]->getSlotInfo(&slotInfo) == CKR_OK); CPPUNIT_ASSERT((slotInfo.flags & CKF_TOKEN_PRESENT) == CKF_TOKEN_PRESENT); // Retrieve token information about the token in the first slot - CPPUNIT_ASSERT(slotManager.getSlots()[1]->getToken() != NULL); - CPPUNIT_ASSERT(slotManager.getSlots()[1]->getToken()->getTokenInfo(&tokenInfo) == CKR_OK); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[1]]->getToken() != NULL); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[1]]->getToken()->getTokenInfo(&tokenInfo) == CKR_OK); CPPUNIT_ASSERT((tokenInfo.flags & CKF_TOKEN_INITIALIZED) == CKF_TOKEN_INITIALIZED); CPPUNIT_ASSERT(!memcmp(tokenInfo.label, label, 32)); @@ -421,7 +421,7 @@ void SlotManagerTests::testUninitialisedToken() // Initialise the token in the first slot ByteString soPIN((unsigned char*)"1234", 4); CK_UTF8CHAR label[33] = "My test token "; - CPPUNIT_ASSERT(slotManager.getSlots()[0]->initToken(soPIN, label) == CKR_OK); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[0]]->initToken(soPIN, label) == CKR_OK); // Check if a new slot is added ulCount = 10; @@ -437,17 +437,21 @@ void SlotManagerTests::testUninitialisedToken() CPPUNIT_ASSERT(slotManager.getSlotList(&store, CK_TRUE, NULL_PTR, &ulCount) == CKR_OK); CPPUNIT_ASSERT(ulCount == 2); + // get new list + CPPUNIT_ASSERT(slotManager.getSlotList(&store, CK_TRUE, testList, &ulCount) == CKR_OK); + CPPUNIT_ASSERT(ulCount == 2); + // Retrieve token information about the tokens CK_TOKEN_INFO tokenInfo; - CPPUNIT_ASSERT(slotManager.getSlots()[0]->getToken() != NULL); - CPPUNIT_ASSERT(slotManager.getSlots()[0]->getToken()->getTokenInfo(&tokenInfo) == CKR_OK); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[0]]->getToken() != NULL); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[0]]->getToken()->getTokenInfo(&tokenInfo) == CKR_OK); CPPUNIT_ASSERT((tokenInfo.flags & CKF_TOKEN_INITIALIZED) == CKF_TOKEN_INITIALIZED); - CPPUNIT_ASSERT(slotManager.getSlots()[1]->getToken() != NULL); - CPPUNIT_ASSERT(slotManager.getSlots()[1]->getToken()->getTokenInfo(&tokenInfo) == CKR_OK); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[1]]->getToken() != NULL); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[1]]->getToken()->getTokenInfo(&tokenInfo) == CKR_OK); CPPUNIT_ASSERT((tokenInfo.flags & CKF_TOKEN_INITIALIZED) != CKF_TOKEN_INITIALIZED); // Initialise the token in the second slot - CPPUNIT_ASSERT(slotManager.getSlots()[1]->initToken(soPIN, label) == CKR_OK); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[1]]->initToken(soPIN, label) == CKR_OK); // Check if a new slot is added ulCount = 10; @@ -463,15 +467,19 @@ void SlotManagerTests::testUninitialisedToken() CPPUNIT_ASSERT(slotManager.getSlotList(&store, CK_TRUE, NULL_PTR, &ulCount) == CKR_OK); CPPUNIT_ASSERT(ulCount == 3); + // get new list + CPPUNIT_ASSERT(slotManager.getSlotList(&store, CK_TRUE, testList, &ulCount) == CKR_OK); + CPPUNIT_ASSERT(ulCount == 3); + // Retrieve token information about the tokens - CPPUNIT_ASSERT(slotManager.getSlots()[0]->getToken() != NULL); - CPPUNIT_ASSERT(slotManager.getSlots()[0]->getToken()->getTokenInfo(&tokenInfo) == CKR_OK); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[0]]->getToken() != NULL); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[0]]->getToken()->getTokenInfo(&tokenInfo) == CKR_OK); CPPUNIT_ASSERT((tokenInfo.flags & CKF_TOKEN_INITIALIZED) == CKF_TOKEN_INITIALIZED); - CPPUNIT_ASSERT(slotManager.getSlots()[1]->getToken() != NULL); - CPPUNIT_ASSERT(slotManager.getSlots()[1]->getToken()->getTokenInfo(&tokenInfo) == CKR_OK); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[1]]->getToken() != NULL); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[1]]->getToken()->getTokenInfo(&tokenInfo) == CKR_OK); CPPUNIT_ASSERT((tokenInfo.flags & CKF_TOKEN_INITIALIZED) == CKF_TOKEN_INITIALIZED); - CPPUNIT_ASSERT(slotManager.getSlots()[2]->getToken() != NULL); - CPPUNIT_ASSERT(slotManager.getSlots()[2]->getToken()->getTokenInfo(&tokenInfo) == CKR_OK); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[2]]->getToken() != NULL); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[2]]->getToken()->getTokenInfo(&tokenInfo) == CKR_OK); CPPUNIT_ASSERT((tokenInfo.flags & CKF_TOKEN_INITIALIZED) != CKF_TOKEN_INITIALIZED); } diff --git a/src/lib/test/AsymEncryptDecryptTests.cpp b/src/lib/test/AsymEncryptDecryptTests.cpp index 543e2f455..7ce5f415c 100644 --- a/src/lib/test/AsymEncryptDecryptTests.cpp +++ b/src/lib/test/AsymEncryptDecryptTests.cpp @@ -34,9 +34,7 @@ #include #include #include -#include #include "AsymEncryptDecryptTests.h" -#include "testconfig.h" // CKA_TOKEN const CK_BBOOL ON_TOKEN = CK_TRUE; @@ -49,51 +47,6 @@ const CK_BBOOL IS_PUBLIC = CK_FALSE; CPPUNIT_TEST_SUITE_REGISTRATION(AsymEncryptDecryptTests); -void AsymEncryptDecryptTests::setUp() -{ -// printf("\nObjectTests\n"); - -#ifndef _WIN32 - setenv("SOFTHSM2_CONF", "./softhsm2.conf", 1); -#else - setenv("SOFTHSM2_CONF", ".\\softhsm2.conf", 1); -#endif - - CK_RV rv; - CK_UTF8CHAR pin[] = SLOT_0_USER1_PIN; - CK_ULONG pinLength = sizeof(pin) - 1; - CK_UTF8CHAR sopin[] = SLOT_0_SO1_PIN; - CK_ULONG sopinLength = sizeof(sopin) - 1; - CK_SESSION_HANDLE hSession; - - CK_UTF8CHAR label[32]; - memset(label, ' ', 32); - memcpy(label, "token1", strlen("token1")); - - // (Re)initialize the token - rv = C_Initialize(NULL_PTR); - CPPUNIT_ASSERT(rv == CKR_OK); - rv = C_InitToken(SLOT_INIT_TOKEN, sopin,sopinLength, label); - CPPUNIT_ASSERT(rv == CKR_OK); - - // Open session - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSession); - CPPUNIT_ASSERT(rv == CKR_OK); - - // Login SO - rv = C_Login(hSession,CKU_SO, sopin, sopinLength); - CPPUNIT_ASSERT(rv == CKR_OK); - - // Initialize the user pin - rv = C_InitPIN(hSession, pin, pinLength); - CPPUNIT_ASSERT(rv == CKR_OK); -} - -void AsymEncryptDecryptTests::tearDown() -{ - C_Finalize(NULL_PTR); -} - CK_RV AsymEncryptDecryptTests::generateRsaKeyPair(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_RSA_PKCS_KEY_PAIR_GEN, NULL_PTR, 0 }; @@ -213,8 +166,6 @@ void AsymEncryptDecryptTests::rsaOAEPParams(CK_SESSION_HANDLE hSession, CK_OBJEC void AsymEncryptDecryptTests::testRsaEncryptDecrypt() { CK_RV rv; - CK_UTF8CHAR pin[] = SLOT_0_USER1_PIN; - CK_ULONG pinLength = sizeof(pin) - 1; CK_SESSION_HANDLE hSessionRO; CK_SESSION_HANDLE hSessionRW; @@ -222,7 +173,7 @@ void AsymEncryptDecryptTests::testRsaEncryptDecrypt() C_Finalize(NULL_PTR); // Open read-only session on when the token is not initialized should fail - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSessionRO); + rv = 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. @@ -230,15 +181,15 @@ void AsymEncryptDecryptTests::testRsaEncryptDecrypt() CPPUNIT_ASSERT(rv == CKR_OK); // Open read-only session - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSessionRO); + rv = C_OpenSession(m_initializedTokenSlotID, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSessionRO); CPPUNIT_ASSERT(rv == CKR_OK); // Open read-write session - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSessionRW); + rv = 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 = C_Login(hSessionRO,CKU_USER,pin,pinLength); + rv = C_Login(hSessionRO,CKU_USER,m_userPin1,m_userPin1Length); CPPUNIT_ASSERT(rv==CKR_OK); CK_OBJECT_HANDLE hPublicKey = CK_INVALID_HANDLE; diff --git a/src/lib/test/AsymEncryptDecryptTests.h b/src/lib/test/AsymEncryptDecryptTests.h index 41607e1cb..0b8db0405 100644 --- a/src/lib/test/AsymEncryptDecryptTests.h +++ b/src/lib/test/AsymEncryptDecryptTests.h @@ -34,10 +34,10 @@ #ifndef _SOFTHSM_V2_ASYMENCRYPTDECRYPTTESTS_H #define _SOFTHSM_V2_ASYMENCRYPTDECRYPTTESTS_H +#include "TestsBase.h" #include -#include "cryptoki.h" -class AsymEncryptDecryptTests : public CppUnit::TestFixture +class AsymEncryptDecryptTests : public TestsBase { CPPUNIT_TEST_SUITE(AsymEncryptDecryptTests); CPPUNIT_TEST(testRsaEncryptDecrypt); @@ -46,9 +46,6 @@ class AsymEncryptDecryptTests : public CppUnit::TestFixture public: void testRsaEncryptDecrypt(); - void setUp(); - void tearDown(); - protected: CK_RV generateRsaKeyPair(CK_SESSION_HANDLE hSession, CK_BBOOL bTokenPuk, CK_BBOOL bPrivatePuk, CK_BBOOL bTokenPrk, CK_BBOOL bPrivatePrk, CK_OBJECT_HANDLE &hPuk, CK_OBJECT_HANDLE &hPrk); void rsaEncryptDecrypt(CK_MECHANISM_TYPE mechanismType, CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hPublicKey, CK_OBJECT_HANDLE hPrivateKey); diff --git a/src/lib/test/AsymWrapUnwrapTests.cpp b/src/lib/test/AsymWrapUnwrapTests.cpp index b745948be..8fe94863f 100644 --- a/src/lib/test/AsymWrapUnwrapTests.cpp +++ b/src/lib/test/AsymWrapUnwrapTests.cpp @@ -34,9 +34,7 @@ #include #include #include -#include #include "AsymWrapUnwrapTests.h" -#include "testconfig.h" // CKA_TOKEN const CK_BBOOL ON_TOKEN = CK_TRUE; @@ -49,51 +47,6 @@ const CK_BBOOL IS_PUBLIC = CK_FALSE; CPPUNIT_TEST_SUITE_REGISTRATION(AsymWrapUnwrapTests); -void AsymWrapUnwrapTests::setUp() -{ -// printf("\nObjectTests\n"); - -#ifndef _WIN32 - setenv("SOFTHSM2_CONF", "./softhsm2.conf", 1); -#else - setenv("SOFTHSM2_CONF", ".\\softhsm2.conf", 1); -#endif - - CK_RV rv; - CK_UTF8CHAR pin[] = SLOT_0_USER1_PIN; - CK_ULONG pinLength = sizeof(pin) - 1; - CK_UTF8CHAR sopin[] = SLOT_0_SO1_PIN; - CK_ULONG sopinLength = sizeof(sopin) - 1; - CK_SESSION_HANDLE hSession; - - CK_UTF8CHAR label[32]; - memset(label, ' ', 32); - memcpy(label, "token1", strlen("token1")); - - // (Re)initialize the token - rv = C_Initialize(NULL_PTR); - CPPUNIT_ASSERT(rv == CKR_OK); - rv = C_InitToken(SLOT_INIT_TOKEN, sopin,sopinLength, label); - CPPUNIT_ASSERT(rv == CKR_OK); - - // Open session - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSession); - CPPUNIT_ASSERT(rv == CKR_OK); - - // Login SO - rv = C_Login(hSession,CKU_SO, sopin, sopinLength); - CPPUNIT_ASSERT(rv == CKR_OK); - - // Initialize the user pin - rv = C_InitPIN(hSession, pin, pinLength); - CPPUNIT_ASSERT(rv == CKR_OK); -} - -void AsymWrapUnwrapTests::tearDown() -{ - C_Finalize(NULL_PTR); -} - // Generate throw-away (session) symmetric key CK_RV AsymWrapUnwrapTests::generateAesKey(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE &hKey) { @@ -200,7 +153,7 @@ void AsymWrapUnwrapTests::rsaWrapUnwrap(CK_MECHANISM_TYPE mechanismType, CK_SESS ulSymValueLen = valueTemplate[0].ulValueLen; // CKM_RSA_PKCS Wrap/Unwrap support - rv = C_GetMechanismInfo(SLOT_INIT_TOKEN, CKM_RSA_PKCS, &mechInfo); + rv = C_GetMechanismInfo(m_initializedTokenSlotID, CKM_RSA_PKCS, &mechInfo); CPPUNIT_ASSERT(rv==CKR_OK); CPPUNIT_ASSERT(mechInfo.flags&CKF_WRAP); CPPUNIT_ASSERT(mechInfo.flags&CKF_UNWRAP); @@ -237,8 +190,6 @@ void AsymWrapUnwrapTests::rsaWrapUnwrap(CK_MECHANISM_TYPE mechanismType, CK_SESS void AsymWrapUnwrapTests::testRsaWrapUnwrap() { CK_RV rv; - CK_UTF8CHAR pin[] = SLOT_0_USER1_PIN; - CK_ULONG pinLength = sizeof(pin) - 1; CK_SESSION_HANDLE hSessionRO; CK_SESSION_HANDLE hSessionRW; @@ -246,7 +197,7 @@ void AsymWrapUnwrapTests::testRsaWrapUnwrap() C_Finalize(NULL_PTR); // Open read-only session on when the token is not initialized should fail - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSessionRO); + rv = 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. @@ -254,15 +205,15 @@ void AsymWrapUnwrapTests::testRsaWrapUnwrap() CPPUNIT_ASSERT(rv == CKR_OK); // Open read-only session - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSessionRO); + rv = C_OpenSession(m_initializedTokenSlotID, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSessionRO); CPPUNIT_ASSERT(rv == CKR_OK); // Open read-write session - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSessionRW); + rv = 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 = C_Login(hSessionRO,CKU_USER,pin,pinLength); + rv = C_Login(hSessionRO,CKU_USER,m_userPin1,m_userPin1Length); CPPUNIT_ASSERT(rv==CKR_OK); CK_OBJECT_HANDLE hPublicKey = CK_INVALID_HANDLE; diff --git a/src/lib/test/AsymWrapUnwrapTests.h b/src/lib/test/AsymWrapUnwrapTests.h index ddbb67029..97f69408b 100644 --- a/src/lib/test/AsymWrapUnwrapTests.h +++ b/src/lib/test/AsymWrapUnwrapTests.h @@ -34,10 +34,10 @@ #ifndef _SOFTHSM_V2_ASYMWRAPUNWRAPTESTS_H #define _SOFTHSM_V2_ASYMWRAPUNWRAPTESTS_H +#include "TestsBase.h" #include -#include "cryptoki.h" -class AsymWrapUnwrapTests : public CppUnit::TestFixture +class AsymWrapUnwrapTests : public TestsBase { CPPUNIT_TEST_SUITE(AsymWrapUnwrapTests); CPPUNIT_TEST(testRsaWrapUnwrap); @@ -46,9 +46,6 @@ class AsymWrapUnwrapTests : public CppUnit::TestFixture public: void testRsaWrapUnwrap(); - void setUp(); - void tearDown(); - protected: CK_RV generateAesKey(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE &hKey); CK_RV generateRsaKeyPair(CK_SESSION_HANDLE hSession, CK_BBOOL bTokenPuk, CK_BBOOL bPrivatePuk, CK_BBOOL bTokenPrk, CK_BBOOL bPrivatePrk, CK_OBJECT_HANDLE &hPuk, CK_OBJECT_HANDLE &hPrk); diff --git a/src/lib/test/DeriveTests.cpp b/src/lib/test/DeriveTests.cpp index 37006f935..0fa6d27c2 100644 --- a/src/lib/test/DeriveTests.cpp +++ b/src/lib/test/DeriveTests.cpp @@ -35,9 +35,7 @@ #include #include #include -#include #include "DeriveTests.h" -#include "testconfig.h" // CKA_TOKEN const CK_BBOOL ON_TOKEN = CK_TRUE; @@ -50,51 +48,6 @@ const CK_BBOOL IS_PUBLIC = CK_FALSE; CPPUNIT_TEST_SUITE_REGISTRATION(DeriveTests); -void DeriveTests::setUp() -{ -// printf("\nDeriveTests\n"); - -#ifndef _WIN32 - setenv("SOFTHSM2_CONF", "./softhsm2.conf", 1); -#else - setenv("SOFTHSM2_CONF", ".\\softhsm2.conf", 1); -#endif - - CK_RV rv; - CK_UTF8CHAR pin[] = SLOT_0_USER1_PIN; - CK_ULONG pinLength = sizeof(pin) - 1; - CK_UTF8CHAR sopin[] = SLOT_0_SO1_PIN; - CK_ULONG sopinLength = sizeof(sopin) - 1; - CK_SESSION_HANDLE hSession; - - CK_UTF8CHAR label[32]; - memset(label, ' ', 32); - memcpy(label, "token1", strlen("token1")); - - // (Re)initialize the token - rv = C_Initialize(NULL_PTR); - CPPUNIT_ASSERT(rv == CKR_OK); - rv = C_InitToken(SLOT_INIT_TOKEN, sopin,sopinLength, label); - CPPUNIT_ASSERT(rv == CKR_OK); - - // Open session - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSession); - CPPUNIT_ASSERT(rv == CKR_OK); - - // Login SO - rv = C_Login(hSession,CKU_SO, sopin, sopinLength); - CPPUNIT_ASSERT(rv == CKR_OK); - - // Initialize the user pin - rv = C_InitPIN(hSession, pin, pinLength); - CPPUNIT_ASSERT(rv == CKR_OK); -} - -void DeriveTests::tearDown() -{ - C_Finalize(NULL_PTR); -} - CK_RV DeriveTests::generateDhKeyPair(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_DH_PKCS_KEY_PAIR_GEN, NULL_PTR, 0 }; @@ -281,8 +234,6 @@ bool DeriveTests::compareSecret(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hKe void DeriveTests::testDhDerive() { CK_RV rv; - CK_UTF8CHAR pin[] = SLOT_0_USER1_PIN; - CK_ULONG pinLength = sizeof(pin) - 1; CK_SESSION_HANDLE hSessionRO; CK_SESSION_HANDLE hSessionRW; @@ -290,7 +241,7 @@ void DeriveTests::testDhDerive() C_Finalize(NULL_PTR); // Open read-only session on when the token is not initialized should fail - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSessionRO); + rv = 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. @@ -298,15 +249,15 @@ void DeriveTests::testDhDerive() CPPUNIT_ASSERT(rv == CKR_OK); // Open read-only session - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSessionRO); + rv = C_OpenSession(m_initializedTokenSlotID, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSessionRO); CPPUNIT_ASSERT(rv == CKR_OK); // Open read-write session - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSessionRW); + rv = 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 = C_Login(hSessionRO,CKU_USER,pin,pinLength); + rv = C_Login(hSessionRO,CKU_USER,m_userPin1,m_userPin1Length); CPPUNIT_ASSERT(rv == CKR_OK); // Public Session keys @@ -487,8 +438,6 @@ void DeriveTests::symDerive(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hKey, C void DeriveTests::testSymDerive() { CK_RV rv; - CK_UTF8CHAR pin[] = SLOT_0_USER1_PIN; - CK_ULONG pinLength = sizeof(pin) - 1; CK_SESSION_HANDLE hSessionRO; CK_SESSION_HANDLE hSessionRW; @@ -496,7 +445,7 @@ void DeriveTests::testSymDerive() C_Finalize(NULL_PTR); // Open read-only session on when the token is not initialized should fail - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSessionRO); + rv = 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. @@ -504,15 +453,15 @@ void DeriveTests::testSymDerive() CPPUNIT_ASSERT(rv == CKR_OK); // Open read-only session - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSessionRO); + rv = C_OpenSession(m_initializedTokenSlotID, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSessionRO); CPPUNIT_ASSERT(rv == CKR_OK); // Open read-write session - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSessionRW); + rv = 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 private objects - rv = C_Login(hSessionRO,CKU_USER,pin,pinLength); + rv = C_Login(hSessionRO,CKU_USER,m_userPin1,m_userPin1Length); CPPUNIT_ASSERT(rv == CKR_OK); // Generate base key diff --git a/src/lib/test/DeriveTests.h b/src/lib/test/DeriveTests.h index 680e2e81a..d7c169be6 100644 --- a/src/lib/test/DeriveTests.h +++ b/src/lib/test/DeriveTests.h @@ -33,10 +33,10 @@ #ifndef _SOFTHSM_V2_DERIVETESTS_H #define _SOFTHSM_V2_DERIVETESTS_H +#include "TestsBase.h" #include -#include "cryptoki.h" -class DeriveTests : public CppUnit::TestFixture +class DeriveTests : public TestsBase { CPPUNIT_TEST_SUITE(DeriveTests); CPPUNIT_TEST(testDhDerive); @@ -47,9 +47,6 @@ class DeriveTests : public CppUnit::TestFixture void testDhDerive(); void testSymDerive(); - void setUp(); - void tearDown(); - protected: CK_RV generateDhKeyPair(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_RV generateAesKey(CK_SESSION_HANDLE hSession, CK_BBOOL bToken, CK_BBOOL bPrivate, CK_OBJECT_HANDLE &hKey); diff --git a/src/lib/test/DigestTests.cpp b/src/lib/test/DigestTests.cpp index f9027a2f4..412d755ad 100644 --- a/src/lib/test/DigestTests.cpp +++ b/src/lib/test/DigestTests.cpp @@ -33,41 +33,10 @@ #include #include #include -#include #include "DigestTests.h" -#include "testconfig.h" CPPUNIT_TEST_SUITE_REGISTRATION(DigestTests); -void DigestTests::setUp() -{ -// printf("\nDigestTests\n"); - -#ifndef _WIN32 - setenv("SOFTHSM2_CONF", "./softhsm2.conf", 1); -#else - setenv("SOFTHSM2_CONF", ".\\softhsm2.conf", 1); -#endif - - CK_UTF8CHAR pin[] = SLOT_0_SO1_PIN; - CK_ULONG pinLength = sizeof(pin) - 1; - CK_UTF8CHAR label[32]; - memset(label, ' ', 32); - memcpy(label, "token1", strlen("token1")); - - // (Re)initialize the token - CK_RV rv = C_Initialize(NULL_PTR); - CPPUNIT_ASSERT(rv == CKR_OK); - rv = C_InitToken(SLOT_INIT_TOKEN, pin, pinLength, label); - CPPUNIT_ASSERT(rv == CKR_OK); - C_Finalize(NULL_PTR); -} - -void DigestTests::tearDown() -{ - C_Finalize(NULL_PTR); -} - void DigestTests::testDigestInit() { CK_RV rv; @@ -85,7 +54,7 @@ void DigestTests::testDigestInit() rv = C_Initialize(NULL_PTR); CPPUNIT_ASSERT(rv == CKR_OK); - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSession); + rv = C_OpenSession(m_initializedTokenSlotID, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSession); CPPUNIT_ASSERT(rv == CKR_OK); rv = C_DigestInit(hSession, NULL_PTR); @@ -125,7 +94,7 @@ void DigestTests::testDigest() rv = C_Initialize(NULL_PTR); CPPUNIT_ASSERT(rv == CKR_OK); - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSession); + rv = C_OpenSession(m_initializedTokenSlotID, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSession); CPPUNIT_ASSERT(rv == CKR_OK); rv = C_Digest(CK_INVALID_HANDLE, data, sizeof(data)-1, NULL_PTR, &digestLen); @@ -178,7 +147,7 @@ void DigestTests::testDigestUpdate() rv = C_Initialize(NULL_PTR); CPPUNIT_ASSERT(rv == CKR_OK); - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSession); + rv = C_OpenSession(m_initializedTokenSlotID, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSession); CPPUNIT_ASSERT(rv == CKR_OK); rv = C_DigestUpdate(CK_INVALID_HANDLE, data, sizeof(data)-1); @@ -215,7 +184,7 @@ void DigestTests::testDigestKey() rv = C_Initialize(NULL_PTR); CPPUNIT_ASSERT(rv == CKR_OK); - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSession); + rv = C_OpenSession(m_initializedTokenSlotID, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSession); CPPUNIT_ASSERT(rv == CKR_OK); // Create the generic secret key to digest @@ -275,7 +244,7 @@ void DigestTests::testDigestFinal() rv = C_Initialize(NULL_PTR); CPPUNIT_ASSERT(rv == CKR_OK); - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSession); + rv = C_OpenSession(m_initializedTokenSlotID, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSession); CPPUNIT_ASSERT(rv == CKR_OK); rv = C_DigestFinal(CK_INVALID_HANDLE, NULL_PTR, &digestLen); @@ -337,7 +306,7 @@ void DigestTests::testDigestAll() rv = C_Initialize(NULL_PTR); CPPUNIT_ASSERT(rv == CKR_OK); - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSession); + rv = C_OpenSession(m_initializedTokenSlotID, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSession); CPPUNIT_ASSERT(rv == CKR_OK); for (unsigned int i = 0; i < sizeof(mechanisms)/sizeof(CK_MECHANISM); i++) diff --git a/src/lib/test/DigestTests.h b/src/lib/test/DigestTests.h index a1c68fb86..e724a391e 100644 --- a/src/lib/test/DigestTests.h +++ b/src/lib/test/DigestTests.h @@ -33,10 +33,10 @@ #ifndef _SOFTHSM_V2_DIGESTTESTS_H #define _SOFTHSM_V2_DIGESTTESTS_H +#include "TestsNoPINInitBase.h" #include -#include "cryptoki.h" -class DigestTests : public CppUnit::TestFixture +class DigestTests : public TestsNoPINInitBase { CPPUNIT_TEST_SUITE(DigestTests); CPPUNIT_TEST(testDigestInit); @@ -54,9 +54,6 @@ class DigestTests : public CppUnit::TestFixture void testDigestKey(); void testDigestFinal(); void testDigestAll(); - - void setUp(); - void tearDown(); }; #endif // !_SOFTHSM_V2_DIGESTTESTS_H diff --git a/src/lib/test/InfoTests.cpp b/src/lib/test/InfoTests.cpp index e2dac9320..c8e68176e 100644 --- a/src/lib/test/InfoTests.cpp +++ b/src/lib/test/InfoTests.cpp @@ -34,42 +34,10 @@ #include #include #include -#include #include "InfoTests.h" -#include "testconfig.h" CPPUNIT_TEST_SUITE_REGISTRATION(InfoTests); -void InfoTests::setUp() -{ -// printf("\nInfoTests\n"); - -#ifndef _WIN32 - setenv("SOFTHSM2_CONF", "./softhsm2.conf", 1); -#else - setenv("SOFTHSM2_CONF", ".\\softhsm2.conf", 1); -#endif - - CK_UTF8CHAR pin[] = SLOT_0_SO1_PIN; - CK_ULONG pinLength = sizeof(pin) - 1; - CK_UTF8CHAR label[32]; - memset(label, ' ', 32); - memcpy(label, "token1", strlen("token1")); - - // (Re)initialize the token - CK_RV rv = C_Initialize(NULL_PTR); - CPPUNIT_ASSERT(rv == CKR_OK); - rv = C_InitToken(SLOT_INIT_TOKEN, pin, pinLength, label); - CPPUNIT_ASSERT(rv == CKR_OK); - C_Finalize(NULL_PTR); -} - -void InfoTests::tearDown() -{ - // Just make sure that we finalize any previous failed tests - C_Finalize(NULL_PTR); -} - void InfoTests::testGetInfo() { CK_RV rv; @@ -164,19 +132,19 @@ void InfoTests::testGetSlotInfo() // Just make sure that we finalize any previous failed tests C_Finalize(NULL_PTR); - rv = C_GetSlotInfo(SLOT_NO_INIT_TOKEN, &slotInfo); + rv = C_GetSlotInfo(m_notInitializedTokenSlotID, &slotInfo); CPPUNIT_ASSERT(rv == CKR_CRYPTOKI_NOT_INITIALIZED); rv = C_Initialize(NULL_PTR); CPPUNIT_ASSERT(rv == CKR_OK); - rv = C_GetSlotInfo(SLOT_NO_INIT_TOKEN, NULL_PTR); + rv = C_GetSlotInfo(m_notInitializedTokenSlotID, NULL_PTR); CPPUNIT_ASSERT(rv == CKR_ARGUMENTS_BAD); - rv = C_GetSlotInfo(SLOT_INVALID, &slotInfo); + rv = C_GetSlotInfo(m_invalidSlotID, &slotInfo); CPPUNIT_ASSERT(rv == CKR_SLOT_ID_INVALID); - rv = C_GetSlotInfo(SLOT_NO_INIT_TOKEN, &slotInfo); + rv = C_GetSlotInfo(m_notInitializedTokenSlotID, &slotInfo); CPPUNIT_ASSERT(rv == CKR_OK); CPPUNIT_ASSERT((slotInfo.flags & CKF_TOKEN_PRESENT ) == CKF_TOKEN_PRESENT); CPPUNIT_ASSERT((slotInfo.flags & CKF_REMOVABLE_DEVICE ) == 0); @@ -198,8 +166,6 @@ void InfoTests::testGetSlotInfoAlt() setenv("SOFTHSM2_CONF", ".\\softhsm2-alt.conf", 1); #endif - CK_UTF8CHAR pin[] = SLOT_0_SO1_PIN; - CK_ULONG pinLength = sizeof(pin) - 1; CK_UTF8CHAR label[32]; memset(label, ' ', 32); memcpy(label, "token1", strlen("token1")); @@ -207,28 +173,33 @@ void InfoTests::testGetSlotInfoAlt() // (Re)initialize the token rv = C_Initialize(NULL_PTR); CPPUNIT_ASSERT(rv == CKR_OK); - rv = C_InitToken(SLOT_INIT_TOKEN, pin, pinLength, label); + rv = C_InitToken(m_initializedTokenSlotID, m_soPin1, m_soPin1Length, label); CPPUNIT_ASSERT(rv == CKR_OK); C_Finalize(NULL_PTR); - rv = C_GetSlotInfo(SLOT_NO_INIT_TOKEN, &slotInfo); + rv = C_GetSlotInfo(m_notInitializedTokenSlotID, &slotInfo); CPPUNIT_ASSERT(rv == CKR_CRYPTOKI_NOT_INITIALIZED); rv = C_Initialize(NULL_PTR); CPPUNIT_ASSERT(rv == CKR_OK); - rv = C_GetSlotInfo(SLOT_NO_INIT_TOKEN, NULL_PTR); + rv = C_GetSlotInfo(m_notInitializedTokenSlotID, NULL_PTR); CPPUNIT_ASSERT(rv == CKR_ARGUMENTS_BAD); - rv = C_GetSlotInfo(SLOT_INVALID, &slotInfo); + rv = C_GetSlotInfo(m_invalidSlotID, &slotInfo); CPPUNIT_ASSERT(rv == CKR_SLOT_ID_INVALID); - rv = C_GetSlotInfo(SLOT_NO_INIT_TOKEN, &slotInfo); + rv = C_GetSlotInfo(m_notInitializedTokenSlotID, &slotInfo); CPPUNIT_ASSERT(rv == CKR_OK); CPPUNIT_ASSERT((slotInfo.flags & CKF_TOKEN_PRESENT ) == CKF_TOKEN_PRESENT); CPPUNIT_ASSERT((slotInfo.flags & CKF_REMOVABLE_DEVICE ) == CKF_REMOVABLE_DEVICE); C_Finalize(NULL_PTR); +#ifndef _WIN32 + setenv("SOFTHSM2_CONF", "./softhsm2.conf", 1); +#else + setenv("SOFTHSM2_CONF", ".\\softhsm2.conf", 1); +#endif } @@ -240,24 +211,24 @@ void InfoTests::testGetTokenInfo() // Just make sure that we finalize any previous failed tests C_Finalize(NULL_PTR); - rv = C_GetTokenInfo(SLOT_NO_INIT_TOKEN, &tokenInfo); + rv = C_GetTokenInfo(m_notInitializedTokenSlotID, &tokenInfo); CPPUNIT_ASSERT(rv == CKR_CRYPTOKI_NOT_INITIALIZED); rv = C_Initialize(NULL_PTR); CPPUNIT_ASSERT(rv == CKR_OK); - rv = C_GetTokenInfo(SLOT_NO_INIT_TOKEN, NULL_PTR); + rv = C_GetTokenInfo(m_notInitializedTokenSlotID, NULL_PTR); CPPUNIT_ASSERT(rv == CKR_ARGUMENTS_BAD); - rv = C_GetTokenInfo(SLOT_INVALID, &tokenInfo); + rv = C_GetTokenInfo(m_invalidSlotID, &tokenInfo); CPPUNIT_ASSERT(rv == CKR_SLOT_ID_INVALID); - rv = C_GetTokenInfo(SLOT_NO_INIT_TOKEN, &tokenInfo); + rv = C_GetTokenInfo(m_notInitializedTokenSlotID, &tokenInfo); CPPUNIT_ASSERT(rv == CKR_OK); CPPUNIT_ASSERT((tokenInfo.flags & CKF_TOKEN_INITIALIZED) == 0); - rv = C_GetTokenInfo(SLOT_INIT_TOKEN, &tokenInfo); + rv = C_GetTokenInfo(m_initializedTokenSlotID, &tokenInfo); CPPUNIT_ASSERT(rv == CKR_OK); CPPUNIT_ASSERT((tokenInfo.flags & CKF_TOKEN_INITIALIZED) == CKF_TOKEN_INITIALIZED); @@ -274,30 +245,30 @@ void InfoTests::testGetMechanismList() // Just make sure that we finalize any previous failed tests C_Finalize(NULL_PTR); - rv = C_GetMechanismList(SLOT_INIT_TOKEN, NULL_PTR, &ulMechCount); + rv = C_GetMechanismList(m_initializedTokenSlotID, NULL_PTR, &ulMechCount); CPPUNIT_ASSERT(rv == CKR_CRYPTOKI_NOT_INITIALIZED); rv = C_Initialize(NULL_PTR); CPPUNIT_ASSERT(rv == CKR_OK); - rv = C_GetMechanismList(SLOT_INIT_TOKEN, NULL_PTR, NULL_PTR); + rv = C_GetMechanismList(m_initializedTokenSlotID, NULL_PTR, NULL_PTR); CPPUNIT_ASSERT(rv == CKR_ARGUMENTS_BAD); - rv = C_GetMechanismList(SLOT_INVALID, NULL_PTR, &ulMechCount); + rv = C_GetMechanismList(m_invalidSlotID, NULL_PTR, &ulMechCount); CPPUNIT_ASSERT(rv == CKR_SLOT_ID_INVALID); // Get the size of the buffer - rv = C_GetMechanismList(SLOT_INIT_TOKEN, NULL_PTR, &ulMechCount); + rv = C_GetMechanismList(m_initializedTokenSlotID, NULL_PTR, &ulMechCount); CPPUNIT_ASSERT(rv == CKR_OK); pMechanismList = (CK_MECHANISM_TYPE_PTR)malloc(ulMechCount * sizeof(CK_MECHANISM_TYPE_PTR)); // Check if we have a too small buffer ulMechCount = 0; - rv = C_GetMechanismList(SLOT_INIT_TOKEN, pMechanismList, &ulMechCount); + rv = C_GetMechanismList(m_initializedTokenSlotID, pMechanismList, &ulMechCount); CPPUNIT_ASSERT(rv == CKR_BUFFER_TOO_SMALL); // Get the mechanism list - rv = C_GetMechanismList(SLOT_INIT_TOKEN, pMechanismList, &ulMechCount); + rv = C_GetMechanismList(m_initializedTokenSlotID, pMechanismList, &ulMechCount); CPPUNIT_ASSERT(rv == CKR_OK); free(pMechanismList); @@ -314,32 +285,32 @@ void InfoTests::testGetMechanismInfo() // Just make sure that we finalize any previous failed tests C_Finalize(NULL_PTR); - rv = C_GetMechanismInfo(SLOT_INIT_TOKEN, CKM_RSA_PKCS, &info); + rv = C_GetMechanismInfo(m_initializedTokenSlotID, CKM_RSA_PKCS, &info); CPPUNIT_ASSERT(rv == CKR_CRYPTOKI_NOT_INITIALIZED); rv = C_Initialize(NULL_PTR); CPPUNIT_ASSERT(rv == CKR_OK); // Get the mechanism list - rv = C_GetMechanismList(SLOT_INIT_TOKEN, NULL_PTR, &ulMechCount); + rv = C_GetMechanismList(m_initializedTokenSlotID, NULL_PTR, &ulMechCount); CPPUNIT_ASSERT(rv == CKR_OK); CPPUNIT_ASSERT(ulMechCount != 0); pMechanismList = (CK_MECHANISM_TYPE_PTR)malloc(ulMechCount * sizeof(CK_MECHANISM_TYPE_PTR)); - rv = C_GetMechanismList(SLOT_INIT_TOKEN, pMechanismList, &ulMechCount); + rv = C_GetMechanismList(m_initializedTokenSlotID, pMechanismList, &ulMechCount); CPPUNIT_ASSERT(rv == CKR_OK); - rv = C_GetMechanismInfo(SLOT_INIT_TOKEN, pMechanismList[0], NULL_PTR); + rv = C_GetMechanismInfo(m_initializedTokenSlotID, pMechanismList[0], NULL_PTR); CPPUNIT_ASSERT(rv == CKR_ARGUMENTS_BAD); - rv = C_GetMechanismInfo(SLOT_INVALID, pMechanismList[0], &info); + rv = C_GetMechanismInfo(m_invalidSlotID, pMechanismList[0], &info); CPPUNIT_ASSERT(rv == CKR_SLOT_ID_INVALID); - rv = C_GetMechanismInfo(SLOT_INIT_TOKEN, CKM_VENDOR_DEFINED, &info); + rv = C_GetMechanismInfo(m_initializedTokenSlotID, CKM_VENDOR_DEFINED, &info); CPPUNIT_ASSERT(rv == CKR_MECHANISM_INVALID); for (unsigned int i = 0; i < ulMechCount; i++) { - rv = C_GetMechanismInfo(SLOT_INIT_TOKEN, pMechanismList[i], &info); + rv = C_GetMechanismInfo(m_initializedTokenSlotID, pMechanismList[i], &info); CPPUNIT_ASSERT(rv == CKR_OK); } diff --git a/src/lib/test/InfoTests.h b/src/lib/test/InfoTests.h index 6c6401dca..4acf77062 100644 --- a/src/lib/test/InfoTests.h +++ b/src/lib/test/InfoTests.h @@ -34,10 +34,10 @@ #ifndef _SOFTHSM_V2_INFOTESTS_H #define _SOFTHSM_V2_INFOTESTS_H +#include "TestsNoPINInitBase.h" #include -#include "cryptoki.h" -class InfoTests : public CppUnit::TestFixture +class InfoTests : public TestsNoPINInitBase { CPPUNIT_TEST_SUITE(InfoTests); CPPUNIT_TEST(testGetInfo); @@ -59,9 +59,6 @@ class InfoTests : public CppUnit::TestFixture void testGetMechanismList(); void testGetMechanismInfo(); void testGetSlotInfoAlt(); - - void setUp(); - void tearDown(); }; #endif // !_SOFTHSM_V2_INFOTESTS_H diff --git a/src/lib/test/Makefile.am b/src/lib/test/Makefile.am index cbdf18be1..d31c407cb 100644 --- a/src/lib/test/Makefile.am +++ b/src/lib/test/Makefile.am @@ -23,6 +23,8 @@ p11test_SOURCES = p11test.cpp \ SignVerifyTests.cpp \ AsymEncryptDecryptTests.cpp \ AsymWrapUnwrapTests.cpp \ + TestsBase.cpp \ + TestsNoPINInitBase.cpp \ ../common/osmutex.cpp p11test_LDADD = ../libsofthsm2.la diff --git a/src/lib/test/ObjectTests.cpp b/src/lib/test/ObjectTests.cpp index 2c1c31a5e..9fc7117ba 100644 --- a/src/lib/test/ObjectTests.cpp +++ b/src/lib/test/ObjectTests.cpp @@ -71,9 +71,7 @@ #include #include #include -#include #include "ObjectTests.h" -#include "testconfig.h" // Common object attributes const CK_BBOOL CKA_TOKEN_DEFAULT = CK_FALSE; @@ -98,51 +96,6 @@ const CK_BBOOL IS_PUBLIC = CK_FALSE; CPPUNIT_TEST_SUITE_REGISTRATION(ObjectTests); -void ObjectTests::setUp() -{ -// printf("\nObjectTests\n"); - -#ifndef _WIN32 - setenv("SOFTHSM2_CONF", "./softhsm2.conf", 1); -#else - setenv("SOFTHSM2_CONF", ".\\softhsm2.conf", 1); -#endif - - CK_RV rv; - CK_UTF8CHAR pin[] = SLOT_0_USER1_PIN; - CK_ULONG pinLength = sizeof(pin) - 1; - CK_UTF8CHAR sopin[] = SLOT_0_SO1_PIN; - CK_ULONG sopinLength = sizeof(sopin) - 1; - CK_SESSION_HANDLE hSession; - - CK_UTF8CHAR label[32]; - memset(label, ' ', 32); - memcpy(label, "token1", strlen("token1")); - - // (Re)initialize the token - rv = C_Initialize(NULL_PTR); - CPPUNIT_ASSERT(rv == CKR_OK); - rv = C_InitToken(SLOT_INIT_TOKEN, sopin,sopinLength, label); - CPPUNIT_ASSERT(rv == CKR_OK); - - // Open session - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSession); - CPPUNIT_ASSERT(rv == CKR_OK); - - // Login SO - rv = C_Login(hSession,CKU_SO, sopin, sopinLength); - CPPUNIT_ASSERT(rv == CKR_OK); - - // Initialize the user pin - rv = C_InitPIN(hSession, pin, pinLength); - CPPUNIT_ASSERT(rv == CKR_OK); -} - -void ObjectTests::tearDown() -{ - C_Finalize(NULL_PTR); -} - void ObjectTests::checkCommonObjectAttributes(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hObject, CK_OBJECT_CLASS objClass) { CK_RV rv; @@ -695,10 +648,6 @@ void ObjectTests::testCreateObject() // d. If key object is secret or a private key then both CKA_ALWAYS_SENSITIVE == CK_FALSE and CKA_NEVER_EXTRACTABLE == CKA_FALSE. CK_RV rv; - CK_UTF8CHAR pin[] = SLOT_0_USER1_PIN; - CK_ULONG pinLength = sizeof(pin) - 1; - CK_UTF8CHAR sopin[] = SLOT_0_SO1_PIN; - CK_ULONG sopinLength = sizeof(sopin) - 1; CK_SESSION_HANDLE hSession; CK_OBJECT_HANDLE hObject; @@ -738,7 +687,7 @@ void ObjectTests::testCreateObject() ///////////////////////////////// // Open read-only session and don't login - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSession); + rv = C_OpenSession(m_initializedTokenSlotID, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSession); CPPUNIT_ASSERT(rv == CKR_OK); // We should be allowed to create public session objects @@ -763,7 +712,7 @@ void ObjectTests::testCreateObject() ///////////////////////////////// // Login USER into the read-only session - rv = C_Login(hSession,CKU_USER,pin,pinLength); + rv = C_Login(hSession,CKU_USER,m_userPin1,m_userPin1Length); CPPUNIT_ASSERT(rv==CKR_OK); // We should be allowed to create public session objects @@ -793,7 +742,7 @@ void ObjectTests::testCreateObject() ///////////////////////////////// // Open as read-write session but don't login. - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSession); + rv = C_OpenSession(m_initializedTokenSlotID, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSession); CPPUNIT_ASSERT(rv == CKR_OK); // We should be allowed to create public session objects @@ -825,11 +774,11 @@ void ObjectTests::testCreateObject() ///////////////////////////////// // Open as read-write session - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSession); + rv = C_OpenSession(m_initializedTokenSlotID, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSession); CPPUNIT_ASSERT(rv == CKR_OK); // Login to the read-write session - rv = C_Login(hSession,CKU_USER,pin,pinLength); + rv = C_Login(hSession,CKU_USER,m_userPin1,m_userPin1Length); CPPUNIT_ASSERT(rv==CKR_OK); // We should always be allowed to create public session objects @@ -865,11 +814,11 @@ void ObjectTests::testCreateObject() ///////////////////////////////// // Open as read-write session - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSession); + rv = C_OpenSession(m_initializedTokenSlotID, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSession); CPPUNIT_ASSERT(rv == CKR_OK); // Login to the read-write session - rv = C_Login(hSession,CKU_SO,sopin,sopinLength); + rv = C_Login(hSession,CKU_SO,m_soPin1,m_soPin1Length); CPPUNIT_ASSERT(rv==CKR_OK); // We should always be allowed to create public session objects @@ -901,11 +850,11 @@ void ObjectTests::testCreateObject() ///////////////////////////////// // Open as read-write session - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSession); + rv = C_OpenSession(m_initializedTokenSlotID, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSession); CPPUNIT_ASSERT(rv == CKR_OK); // Login to the read-write session - rv = C_Login(hSession,CKU_USER,pin,pinLength); + rv = C_Login(hSession,CKU_USER,m_userPin1,m_userPin1Length); CPPUNIT_ASSERT(rv==CKR_OK); // Create a secret object @@ -935,8 +884,6 @@ void ObjectTests::testCopyObject() // printf("\ntestCopyObject\n"); CK_RV rv; - CK_UTF8CHAR pin[] = SLOT_0_USER1_PIN; - CK_ULONG pinLength = sizeof(pin) - 1; CK_SESSION_HANDLE hSession; CK_OBJECT_HANDLE hObject; CK_OBJECT_HANDLE hObject1; @@ -948,7 +895,7 @@ void ObjectTests::testCopyObject() CPPUNIT_ASSERT(rv == CKR_OK); // Open read-only session and don't login - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSession); + rv = C_OpenSession(m_initializedTokenSlotID, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSession); CPPUNIT_ASSERT(rv == CKR_OK); // Get a public session object @@ -998,11 +945,11 @@ void ObjectTests::testCopyObject() CPPUNIT_ASSERT(rv == CKR_OK); // Create a read-write session - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSession); + rv = C_OpenSession(m_initializedTokenSlotID, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSession); CPPUNIT_ASSERT(rv == CKR_OK); // Login USER into the sessions so we can create a private object - rv = C_Login(hSession, CKU_USER, pin, pinLength); + rv = C_Login(hSession, CKU_USER, m_userPin1, m_userPin1Length); CPPUNIT_ASSERT(rv == CKR_OK); // Get a public session object @@ -1060,8 +1007,6 @@ void ObjectTests::testDestroyObject() // Only public objects can be created unless the normal user is logged in. CK_RV rv; - CK_UTF8CHAR pin[] = SLOT_0_USER1_PIN; - CK_ULONG pinLength = sizeof(pin) - 1; CK_SESSION_HANDLE hSessionRO; CK_SESSION_HANDLE hSessionRW; CK_OBJECT_HANDLE hObjectSessionPublic; @@ -1073,7 +1018,7 @@ void ObjectTests::testDestroyObject() C_Finalize(NULL_PTR); // Open read-only session on when the token is not initialized should fail - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSessionRO); + rv = 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. @@ -1085,7 +1030,7 @@ void ObjectTests::testDestroyObject() CPPUNIT_ASSERT(rv == CKR_SESSION_HANDLE_INVALID); // Create a read-only session. - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSessionRO); + rv = C_OpenSession(m_initializedTokenSlotID, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSessionRO); CPPUNIT_ASSERT(rv == CKR_OK); // Trying to destroy an invalid object in a read-only session @@ -1093,7 +1038,7 @@ void ObjectTests::testDestroyObject() CPPUNIT_ASSERT(rv == CKR_OBJECT_HANDLE_INVALID); // Create a read-write session - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSessionRW); + rv = C_OpenSession(m_initializedTokenSlotID, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSessionRW); CPPUNIT_ASSERT(rv == CKR_OK); // Trying to destroy an invalid object in a read-write session @@ -1101,7 +1046,7 @@ void ObjectTests::testDestroyObject() CPPUNIT_ASSERT(rv == CKR_OBJECT_HANDLE_INVALID); // Login USER into the sessions so we can create a private objects - rv = C_Login(hSessionRO,CKU_USER,pin,pinLength); + rv = C_Login(hSessionRO,CKU_USER,m_userPin1,m_userPin1Length); CPPUNIT_ASSERT(rv==CKR_OK); // Create all permutations of session/token, public/private objects @@ -1127,7 +1072,7 @@ void ObjectTests::testDestroyObject() CPPUNIT_ASSERT(rv==CKR_OK); // Login USER into the sessions so we can destroy private objects - rv = C_Login(hSessionRO,CKU_USER,pin,pinLength); + rv = C_Login(hSessionRO,CKU_USER,m_userPin1,m_userPin1Length); CPPUNIT_ASSERT(rv==CKR_OK); // We should be able to destroy the public session object from a read-only session. @@ -1165,7 +1110,7 @@ void ObjectTests::testGetObjectSize() C_Finalize(NULL_PTR); // Open read-only session on when the token is not initialized should fail - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSession); + rv = C_OpenSession(m_initializedTokenSlotID, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSession); CPPUNIT_ASSERT(rv == CKR_CRYPTOKI_NOT_INITIALIZED); // Initialize the library and start the test. @@ -1173,7 +1118,7 @@ void ObjectTests::testGetObjectSize() CPPUNIT_ASSERT(rv == CKR_OK); // Open a session - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSession); + rv = C_OpenSession(m_initializedTokenSlotID, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSession); CPPUNIT_ASSERT(rv == CKR_OK); // Get an object @@ -1202,7 +1147,7 @@ void ObjectTests::testGetAttributeValue() C_Finalize(NULL_PTR); // Open read-only session on when the token is not initialized should fail - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSessionRO); + rv = 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. @@ -1210,11 +1155,11 @@ void ObjectTests::testGetAttributeValue() CPPUNIT_ASSERT(rv == CKR_OK); // Open read-only session - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSessionRO); + rv = C_OpenSession(m_initializedTokenSlotID, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSessionRO); CPPUNIT_ASSERT(rv == CKR_OK); // Open read-write - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSessionRW); + rv = C_OpenSession(m_initializedTokenSlotID, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSessionRW); CPPUNIT_ASSERT(rv == CKR_OK); // Try to destroy an invalid object using an invalid session @@ -1293,8 +1238,6 @@ void ObjectTests::testSetAttributeValue() CK_RV rv; - CK_UTF8CHAR pin[] = SLOT_0_USER1_PIN; - CK_ULONG pinLength = sizeof(pin) - 1; CK_SESSION_HANDLE hSessionRO; CK_SESSION_HANDLE hSessionRW; CK_OBJECT_HANDLE hObjectSessionPublic; @@ -1306,7 +1249,7 @@ void ObjectTests::testSetAttributeValue() C_Finalize(NULL_PTR); // Open read-only session on when the token is not initialized should fail - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSessionRO); + rv = 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. @@ -1314,15 +1257,15 @@ void ObjectTests::testSetAttributeValue() CPPUNIT_ASSERT(rv == CKR_OK); // Open read-only session - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSessionRO); + rv = C_OpenSession(m_initializedTokenSlotID, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSessionRO); CPPUNIT_ASSERT(rv == CKR_OK); // Open read-write session - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSessionRW); + rv = 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 = C_Login(hSessionRO,CKU_USER,pin,pinLength); + rv = C_Login(hSessionRO,CKU_USER,m_userPin1,m_userPin1Length); CPPUNIT_ASSERT(rv==CKR_OK); // Create all permutations of session/token, public/private objects @@ -1380,8 +1323,6 @@ void ObjectTests::testSetAttributeValue() void ObjectTests::testFindObjects() { CK_RV rv; - CK_UTF8CHAR pin[] = SLOT_0_USER1_PIN; - CK_ULONG pinLength = sizeof(pin) - 1; CK_SESSION_HANDLE hSessionRO; CK_SESSION_HANDLE hSessionRW; CK_OBJECT_HANDLE hObjectSessionPublic; @@ -1393,7 +1334,7 @@ void ObjectTests::testFindObjects() C_Finalize(NULL_PTR); // Open read-only session on when the token is not initialized should fail - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSessionRO); + rv = 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. @@ -1401,15 +1342,15 @@ void ObjectTests::testFindObjects() CPPUNIT_ASSERT(rv == CKR_OK); // Open read-only session - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSessionRO); + rv = C_OpenSession(m_initializedTokenSlotID, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSessionRO); CPPUNIT_ASSERT(rv == CKR_OK); // Open read-write session - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSessionRW); + rv = 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 = C_Login(hSessionRO,CKU_USER,pin,pinLength); + rv = C_Login(hSessionRO,CKU_USER,m_userPin1,m_userPin1Length); CPPUNIT_ASSERT(rv==CKR_OK); // Create all permutations of session/token, public/private objects @@ -1471,7 +1412,7 @@ void ObjectTests::testFindObjects() rv = C_FindObjectsFinal(hSessionRW); // Login USER into the sessions so we can gain access to private objects - rv = C_Login(hSessionRW,CKU_USER,pin,pinLength); + rv = C_Login(hSessionRW,CKU_USER,m_userPin1,m_userPin1Length); CPPUNIT_ASSERT(rv==CKR_OK); // Now find just the public token object as public session object should be gone now. @@ -1487,8 +1428,6 @@ void ObjectTests::testFindObjects() void ObjectTests::testGenerateKeys() { CK_RV rv; - CK_UTF8CHAR pin[] = SLOT_0_USER1_PIN; - CK_ULONG pinLength = sizeof(pin) - 1; CK_SESSION_HANDLE hSessionRO; CK_SESSION_HANDLE hSessionRW; @@ -1496,7 +1435,7 @@ void ObjectTests::testGenerateKeys() C_Finalize(NULL_PTR); // Open read-only session on when the token is not initialized should fail - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSessionRO); + rv = 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. @@ -1504,15 +1443,15 @@ void ObjectTests::testGenerateKeys() CPPUNIT_ASSERT(rv == CKR_OK); // Open read-only session - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSessionRO); + rv = C_OpenSession(m_initializedTokenSlotID, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSessionRO); CPPUNIT_ASSERT(rv == CKR_OK); // Open read-write session - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSessionRW); + rv = 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 = C_Login(hSessionRO,CKU_USER,pin,pinLength); + rv = C_Login(hSessionRO,CKU_USER,m_userPin1,m_userPin1Length); CPPUNIT_ASSERT(rv==CKR_OK); CK_OBJECT_HANDLE hPuk = CK_INVALID_HANDLE; @@ -1559,8 +1498,6 @@ void ObjectTests::testGenerateKeys() void ObjectTests::testCreateCertificates() { CK_RV rv; - CK_UTF8CHAR pin[] = SLOT_0_USER1_PIN; - CK_ULONG pinLength = sizeof(pin) - 1; CK_SESSION_HANDLE hSession; // Just make sure that we finalize any previous tests @@ -1571,11 +1508,11 @@ void ObjectTests::testCreateCertificates() CPPUNIT_ASSERT(rv == CKR_OK); // Open read-write session - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSession); + rv = C_OpenSession(m_initializedTokenSlotID, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSession); CPPUNIT_ASSERT(rv == CKR_OK); // Login USER into the sessions so we can create a private objects - rv = C_Login(hSession,CKU_USER,pin,pinLength); + rv = C_Login(hSession,CKU_USER,m_userPin1,m_userPin1Length); CPPUNIT_ASSERT(rv==CKR_OK); CK_OBJECT_HANDLE hObject = CK_INVALID_HANDLE; @@ -1597,8 +1534,6 @@ void ObjectTests::testCreateCertificates() void ObjectTests::testDefaultDataAttributes() { CK_RV rv; - CK_UTF8CHAR pin[] = SLOT_0_USER1_PIN; - CK_ULONG pinLength = sizeof(pin) - 1; CK_SESSION_HANDLE hSession; CK_OBJECT_HANDLE hObject = CK_INVALID_HANDLE; @@ -1616,11 +1551,11 @@ void ObjectTests::testDefaultDataAttributes() CPPUNIT_ASSERT(rv == CKR_OK); // Open read-write session - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSession); + rv = C_OpenSession(m_initializedTokenSlotID, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSession); CPPUNIT_ASSERT(rv == CKR_OK); // Login USER into the sessions so we can create a private objects - rv = C_Login(hSession, CKU_USER, pin, pinLength); + rv = C_Login(hSession, CKU_USER, m_userPin1, m_userPin1Length); CPPUNIT_ASSERT(rv == CKR_OK); // Create minimal data object @@ -1636,8 +1571,6 @@ void ObjectTests::testDefaultDataAttributes() void ObjectTests::testDefaultX509CertAttributes() { CK_RV rv; - CK_UTF8CHAR pin[] = SLOT_0_USER1_PIN; - CK_ULONG pinLength = sizeof(pin) - 1; CK_SESSION_HANDLE hSession; CK_OBJECT_HANDLE hObject = CK_INVALID_HANDLE; @@ -1663,11 +1596,11 @@ void ObjectTests::testDefaultX509CertAttributes() CPPUNIT_ASSERT(rv == CKR_OK); // Open read-write session - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSession); + rv = C_OpenSession(m_initializedTokenSlotID, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSession); CPPUNIT_ASSERT(rv == CKR_OK); // Login USER into the sessions so we can create a private objects - rv = C_Login(hSession, CKU_USER, pin, pinLength); + rv = C_Login(hSession, CKU_USER, m_userPin1, m_userPin1Length); CPPUNIT_ASSERT(rv == CKR_OK); // Create minimal X509 certificate @@ -1685,8 +1618,6 @@ void ObjectTests::testDefaultX509CertAttributes() void ObjectTests::testDefaultRSAPubAttributes() { CK_RV rv; - CK_UTF8CHAR pin[] = SLOT_0_USER1_PIN; - CK_ULONG pinLength = sizeof(pin) - 1; CK_SESSION_HANDLE hSession; CK_OBJECT_HANDLE hObject = CK_INVALID_HANDLE; @@ -1717,11 +1648,11 @@ void ObjectTests::testDefaultRSAPubAttributes() CPPUNIT_ASSERT(rv == CKR_OK); // Open read-write session - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSession); + rv = C_OpenSession(m_initializedTokenSlotID, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSession); CPPUNIT_ASSERT(rv == CKR_OK); // Login USER into the sessions so we can create a private objects - rv = C_Login(hSession, CKU_USER, pin, pinLength); + rv = C_Login(hSession, CKU_USER, m_userPin1, m_userPin1Length); CPPUNIT_ASSERT(rv == CKR_OK); // Create minimal RSA public key object @@ -1740,8 +1671,6 @@ void ObjectTests::testDefaultRSAPubAttributes() void ObjectTests::testDefaultRSAPrivAttributes() { CK_RV rv; - CK_UTF8CHAR pin[] = SLOT_0_USER1_PIN; - CK_ULONG pinLength = sizeof(pin) - 1; CK_SESSION_HANDLE hSession; CK_OBJECT_HANDLE hObject = CK_INVALID_HANDLE; @@ -1783,11 +1712,11 @@ void ObjectTests::testDefaultRSAPrivAttributes() CPPUNIT_ASSERT(rv == CKR_OK); // Open read-write session - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSession); + rv = C_OpenSession(m_initializedTokenSlotID, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSession); CPPUNIT_ASSERT(rv == CKR_OK); // Login USER into the sessions so we can create a private objects - rv = C_Login(hSession, CKU_USER, pin, pinLength); + rv = C_Login(hSession, CKU_USER, m_userPin1, m_userPin1Length); CPPUNIT_ASSERT(rv == CKR_OK); // Create minimal RSA public key object @@ -1806,8 +1735,6 @@ void ObjectTests::testDefaultRSAPrivAttributes() void ObjectTests::testAlwaysNeverAttribute() { CK_RV rv; - CK_UTF8CHAR pin[] = SLOT_0_USER1_PIN; - CK_ULONG pinLength = sizeof(pin) - 1; CK_SESSION_HANDLE hSession; CK_OBJECT_HANDLE hPuk = CK_INVALID_HANDLE; CK_OBJECT_HANDLE hPrk = CK_INVALID_HANDLE; @@ -1838,11 +1765,11 @@ void ObjectTests::testAlwaysNeverAttribute() CPPUNIT_ASSERT(rv == CKR_OK); // Open read-write session - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSession); + rv = C_OpenSession(m_initializedTokenSlotID, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSession); CPPUNIT_ASSERT(rv == CKR_OK); // Login USER into the sessions so we can create a private objects - rv = C_Login(hSession, CKU_USER, pin, pinLength); + rv = C_Login(hSession, CKU_USER, m_userPin1, m_userPin1Length); CPPUNIT_ASSERT(rv == CKR_OK); // Create object @@ -1875,8 +1802,6 @@ void ObjectTests::testAlwaysNeverAttribute() void ObjectTests::testSensitiveAttributes() { CK_RV rv; - CK_UTF8CHAR pin[] = SLOT_0_USER1_PIN; - CK_ULONG pinLength = sizeof(pin) - 1; CK_SESSION_HANDLE hSession; CK_OBJECT_HANDLE hPuk = CK_INVALID_HANDLE; CK_OBJECT_HANDLE hPrk = CK_INVALID_HANDLE; @@ -1910,11 +1835,11 @@ void ObjectTests::testSensitiveAttributes() CPPUNIT_ASSERT(rv == CKR_OK); // Open read-write session - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSession); + rv = C_OpenSession(m_initializedTokenSlotID, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSession); CPPUNIT_ASSERT(rv == CKR_OK); // Login USER into the sessions so we can create a private objects - rv = C_Login(hSession, CKU_USER, pin, pinLength); + rv = C_Login(hSession, CKU_USER, m_userPin1, m_userPin1Length); CPPUNIT_ASSERT(rv == CKR_OK); // Create object @@ -1944,8 +1869,6 @@ void ObjectTests::testSensitiveAttributes() void ObjectTests::testGetInvalidAttribute() { CK_RV rv; - CK_UTF8CHAR pin[] = SLOT_0_USER1_PIN; - CK_ULONG pinLength = sizeof(pin) - 1; CK_SESSION_HANDLE hSession; CK_OBJECT_HANDLE hObject = CK_INVALID_HANDLE; @@ -1967,11 +1890,11 @@ void ObjectTests::testGetInvalidAttribute() CPPUNIT_ASSERT(rv == CKR_OK); // Open read-write session - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSession); + rv = C_OpenSession(m_initializedTokenSlotID, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSession); CPPUNIT_ASSERT(rv == CKR_OK); // Login USER into the sessions so we can create a private objects - rv = C_Login(hSession, CKU_USER, pin, pinLength); + rv = C_Login(hSession, CKU_USER, m_userPin1, m_userPin1Length); CPPUNIT_ASSERT(rv == CKR_OK); // Create minimal data object @@ -1986,8 +1909,6 @@ void ObjectTests::testGetInvalidAttribute() void ObjectTests::testArrayAttribute() { CK_RV rv; - CK_UTF8CHAR pin[] = SLOT_0_USER1_PIN; - CK_ULONG pinLength = sizeof(pin) - 1; CK_SESSION_HANDLE hSession; CK_OBJECT_HANDLE hObject = CK_INVALID_HANDLE; CK_BYTE pE[] = { 0x01, 0x00, 0x01 }; @@ -2025,11 +1946,11 @@ void ObjectTests::testArrayAttribute() CPPUNIT_ASSERT(rv == CKR_OK); // Open read-write session - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSession); + rv = C_OpenSession(m_initializedTokenSlotID, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSession); CPPUNIT_ASSERT(rv == CKR_OK); // Login USER into the sessions so we can create a private objects - rv = C_Login(hSession, CKU_USER, pin, pinLength); + rv = C_Login(hSession, CKU_USER, m_userPin1, m_userPin1Length); CPPUNIT_ASSERT(rv == CKR_OK); // Create minimal RSA public key object @@ -2092,8 +2013,6 @@ void ObjectTests::testArrayAttribute() void ObjectTests::testCreateSecretKey() { CK_RV rv; - CK_UTF8CHAR pin[] = SLOT_0_USER1_PIN; - CK_ULONG pinLength = sizeof(pin) - 1; CK_SESSION_HANDLE hSession; // Just make sure that we finalize any previous tests @@ -2104,11 +2023,11 @@ void ObjectTests::testCreateSecretKey() CPPUNIT_ASSERT(rv == CKR_OK); // Open read-write session - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSession); + rv = C_OpenSession(m_initializedTokenSlotID, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSession); CPPUNIT_ASSERT(rv == CKR_OK); // Login USER into the sessions so we can create a private objects - rv = C_Login(hSession,CKU_USER,pin,pinLength); + rv = C_Login(hSession,CKU_USER,m_userPin1,m_userPin1Length); CPPUNIT_ASSERT(rv==CKR_OK); CK_BYTE genericKey[] = { diff --git a/src/lib/test/ObjectTests.h b/src/lib/test/ObjectTests.h index b97f94013..e577ef51c 100644 --- a/src/lib/test/ObjectTests.h +++ b/src/lib/test/ObjectTests.h @@ -35,10 +35,10 @@ #ifndef _SOFTHSM_V2_OBJECTTESTS_H #define _SOFTHSM_V2_OBJECTTESTS_H +#include "TestsBase.h" #include -#include "cryptoki.h" -class ObjectTests : public CppUnit::TestFixture +class ObjectTests : public TestsBase { CPPUNIT_TEST_SUITE(ObjectTests); CPPUNIT_TEST(testCreateObject); @@ -81,9 +81,6 @@ class ObjectTests : public CppUnit::TestFixture void testArrayAttribute(); void testCreateSecretKey(); - void setUp(); - void tearDown(); - protected: void checkCommonObjectAttributes ( CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hObject, diff --git a/src/lib/test/RandomTests.cpp b/src/lib/test/RandomTests.cpp index a4646d093..649e78733 100644 --- a/src/lib/test/RandomTests.cpp +++ b/src/lib/test/RandomTests.cpp @@ -33,41 +33,10 @@ #include #include #include -#include #include "RandomTests.h" -#include "testconfig.h" CPPUNIT_TEST_SUITE_REGISTRATION(RandomTests); -void RandomTests::setUp() -{ -// printf("\nRandomTests\n"); - -#ifndef _WIN32 - setenv("SOFTHSM2_CONF", "./softhsm2.conf", 1); -#else - setenv("SOFTHSM2_CONF", ".\\softhsm2.conf", 1); -#endif - - CK_UTF8CHAR pin[] = SLOT_0_SO1_PIN; - CK_ULONG pinLength = sizeof(pin) - 1; - CK_UTF8CHAR label[32]; - memset(label, ' ', 32); - memcpy(label, "token1", strlen("token1")); - - // (Re)initialize the token - CK_RV rv = C_Initialize(NULL_PTR); - CPPUNIT_ASSERT(rv == CKR_OK); - rv = C_InitToken(SLOT_INIT_TOKEN, pin, pinLength, label); - CPPUNIT_ASSERT(rv == CKR_OK); - C_Finalize(NULL_PTR); -} - -void RandomTests::tearDown() -{ - C_Finalize(NULL_PTR); -} - void RandomTests::testSeedRandom() { CK_RV rv; @@ -83,7 +52,7 @@ void RandomTests::testSeedRandom() rv = C_Initialize(NULL_PTR); CPPUNIT_ASSERT(rv == CKR_OK); - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSession); + rv = C_OpenSession(m_initializedTokenSlotID, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSession); CPPUNIT_ASSERT(rv == CKR_OK); rv = C_SeedRandom(hSession, NULL_PTR, sizeof(seed)); @@ -111,7 +80,7 @@ void RandomTests::testGenerateRandom() rv = C_Initialize(NULL_PTR); CPPUNIT_ASSERT(rv == CKR_OK); - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSession); + rv = C_OpenSession(m_initializedTokenSlotID, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSession); CPPUNIT_ASSERT(rv == CKR_OK); rv = C_GenerateRandom(hSession, NULL_PTR, 40); diff --git a/src/lib/test/RandomTests.h b/src/lib/test/RandomTests.h index bd0af12b7..4b7b0624f 100644 --- a/src/lib/test/RandomTests.h +++ b/src/lib/test/RandomTests.h @@ -33,10 +33,10 @@ #ifndef _SOFTHSM_V2_RANDOMTESTS_H #define _SOFTHSM_V2_RANDOMTESTS_H +#include "TestsNoPINInitBase.h" #include -#include "cryptoki.h" -class RandomTests : public CppUnit::TestFixture +class RandomTests : public TestsNoPINInitBase { CPPUNIT_TEST_SUITE(RandomTests); CPPUNIT_TEST(testSeedRandom); @@ -46,9 +46,6 @@ class RandomTests : public CppUnit::TestFixture public: void testSeedRandom(); void testGenerateRandom(); - - void setUp(); - void tearDown(); }; #endif // !_SOFTHSM_V2_RANDOMTESTS_H diff --git a/src/lib/test/SessionTests.cpp b/src/lib/test/SessionTests.cpp index d2c56ac8d..39d53f151 100644 --- a/src/lib/test/SessionTests.cpp +++ b/src/lib/test/SessionTests.cpp @@ -34,41 +34,10 @@ #include #include #include -#include #include "SessionTests.h" -#include "testconfig.h" CPPUNIT_TEST_SUITE_REGISTRATION(SessionTests); -void SessionTests::setUp() -{ -// printf("\nSessionTests\n"); - -#ifndef _WIN32 - setenv("SOFTHSM2_CONF", "./softhsm2.conf", 1); -#else - setenv("SOFTHSM2_CONF", ".\\softhsm2.conf", 1); -#endif - - CK_UTF8CHAR pin[] = SLOT_0_SO1_PIN; - CK_ULONG pinLength = sizeof(pin) - 1; - CK_UTF8CHAR label[32]; - memset(label, ' ', 32); - memcpy(label, "token1", strlen("token1")); - - // (Re)initialize the token - CK_RV rv = C_Initialize(NULL_PTR); - CPPUNIT_ASSERT(rv == CKR_OK); - rv = C_InitToken(SLOT_INIT_TOKEN, pin, pinLength, label); - CPPUNIT_ASSERT(rv == CKR_OK); - C_Finalize(NULL_PTR); -} - -void SessionTests::tearDown() -{ - C_Finalize(NULL_PTR); -} - void SessionTests::testOpenSession() { CK_RV rv; @@ -77,25 +46,25 @@ void SessionTests::testOpenSession() // Just make sure that we finalize any previous tests C_Finalize(NULL_PTR); - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSession); + rv = C_OpenSession(m_initializedTokenSlotID, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSession); CPPUNIT_ASSERT(rv == CKR_CRYPTOKI_NOT_INITIALIZED); rv = C_Initialize(NULL_PTR); CPPUNIT_ASSERT(rv == CKR_OK); - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, NULL_PTR); + rv = C_OpenSession(m_initializedTokenSlotID, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, NULL_PTR); CPPUNIT_ASSERT(rv == CKR_ARGUMENTS_BAD); - rv = C_OpenSession(SLOT_INVALID, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSession); + rv = C_OpenSession(m_invalidSlotID, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSession); CPPUNIT_ASSERT(rv == CKR_SLOT_ID_INVALID); - rv = C_OpenSession(SLOT_NO_INIT_TOKEN, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSession); + rv = C_OpenSession(m_notInitializedTokenSlotID, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSession); CPPUNIT_ASSERT(rv == CKR_TOKEN_NOT_RECOGNIZED); - rv = C_OpenSession(SLOT_INIT_TOKEN, 0, NULL_PTR, NULL_PTR, &hSession); + rv = C_OpenSession(m_initializedTokenSlotID, 0, NULL_PTR, NULL_PTR, &hSession); CPPUNIT_ASSERT(rv == CKR_SESSION_PARALLEL_NOT_SUPPORTED); - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSession); + rv = C_OpenSession(m_initializedTokenSlotID, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSession); CPPUNIT_ASSERT(rv == CKR_OK); rv = C_CloseSession(hSession); @@ -116,7 +85,7 @@ void SessionTests::testCloseSession() rv = C_Initialize(NULL_PTR); CPPUNIT_ASSERT(rv == CKR_OK); - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSession); + rv = C_OpenSession(m_initializedTokenSlotID, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSession); CPPUNIT_ASSERT(rv == CKR_OK); rv = C_CloseSession(CK_INVALID_HANDLE); @@ -141,25 +110,25 @@ void SessionTests::testCloseAllSessions() // Just make sure that we finalize any previous tests C_Finalize(NULL_PTR); - rv = C_CloseAllSessions(SLOT_INIT_TOKEN); + rv = C_CloseAllSessions(m_initializedTokenSlotID); CPPUNIT_ASSERT(rv == CKR_CRYPTOKI_NOT_INITIALIZED); rv = C_Initialize(NULL_PTR); CPPUNIT_ASSERT(rv == CKR_OK); - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSession); + rv = C_OpenSession(m_initializedTokenSlotID, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSession); CPPUNIT_ASSERT(rv == CKR_OK); - rv = C_CloseAllSessions(SLOT_INVALID); + rv = C_CloseAllSessions(m_invalidSlotID); CPPUNIT_ASSERT(rv == CKR_SLOT_ID_INVALID); - rv = C_CloseAllSessions(SLOT_NO_INIT_TOKEN); + rv = C_CloseAllSessions(m_notInitializedTokenSlotID); CPPUNIT_ASSERT(rv == CKR_OK); rv = C_GetSessionInfo(hSession, &info); CPPUNIT_ASSERT(rv == CKR_OK); - rv = C_CloseAllSessions(SLOT_INIT_TOKEN); + rv = C_CloseAllSessions(m_initializedTokenSlotID); CPPUNIT_ASSERT(rv == CKR_OK); rv = C_CloseSession(hSession); @@ -181,7 +150,7 @@ void SessionTests::testGetSessionInfo() rv = C_Initialize(NULL_PTR); CPPUNIT_ASSERT(rv == CKR_OK); - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSession); + rv = C_OpenSession(m_initializedTokenSlotID, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSession); CPPUNIT_ASSERT(rv == CKR_OK); rv = C_GetSessionInfo(CK_INVALID_HANDLE, &info); diff --git a/src/lib/test/SessionTests.h b/src/lib/test/SessionTests.h index fcac52e16..c940ab024 100644 --- a/src/lib/test/SessionTests.h +++ b/src/lib/test/SessionTests.h @@ -34,10 +34,10 @@ #ifndef _SOFTHSM_V2_SESSIONTESTS_H #define _SOFTHSM_V2_SESSIONTESTS_H +#include "TestsNoPINInitBase.h" #include -#include "cryptoki.h" -class SessionTests : public CppUnit::TestFixture +class SessionTests : public TestsNoPINInitBase { CPPUNIT_TEST_SUITE(SessionTests); CPPUNIT_TEST(testOpenSession); @@ -51,9 +51,6 @@ class SessionTests : public CppUnit::TestFixture void testCloseSession(); void testCloseAllSessions(); void testGetSessionInfo(); - - void setUp(); - void tearDown(); }; #endif // !_SOFTHSM_V2_SESSIONTESTS_H diff --git a/src/lib/test/SignVerifyTests.cpp b/src/lib/test/SignVerifyTests.cpp index 332819462..0bcb25e07 100644 --- a/src/lib/test/SignVerifyTests.cpp +++ b/src/lib/test/SignVerifyTests.cpp @@ -42,9 +42,7 @@ #include #include #include -#include #include "SignVerifyTests.h" -#include "testconfig.h" // CKA_TOKEN const CK_BBOOL ON_TOKEN = CK_TRUE; @@ -57,51 +55,6 @@ const CK_BBOOL IS_PUBLIC = CK_FALSE; CPPUNIT_TEST_SUITE_REGISTRATION(SignVerifyTests); -void SignVerifyTests::setUp() -{ -// printf("\nSignVerifyTests\n"); - -#ifndef _WIN32 - setenv("SOFTHSM2_CONF", "./softhsm2.conf", 1); -#else - setenv("SOFTHSM2_CONF", ".\\softhsm2.conf", 1); -#endif - - CK_RV rv; - CK_UTF8CHAR pin[] = SLOT_0_USER1_PIN; - CK_ULONG pinLength = sizeof(pin) - 1; - CK_UTF8CHAR sopin[] = SLOT_0_SO1_PIN; - CK_ULONG sopinLength = sizeof(sopin) - 1; - CK_SESSION_HANDLE hSession; - - CK_UTF8CHAR label[32]; - memset(label, ' ', 32); - memcpy(label, "token1", strlen("token1")); - - // (Re)initialize the token - rv = C_Initialize(NULL_PTR); - CPPUNIT_ASSERT(rv == CKR_OK); - rv = C_InitToken(SLOT_INIT_TOKEN, sopin,sopinLength, label); - CPPUNIT_ASSERT(rv == CKR_OK); - - // Open session - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSession); - CPPUNIT_ASSERT(rv == CKR_OK); - - // Login SO - rv = C_Login(hSession,CKU_SO, sopin, sopinLength); - CPPUNIT_ASSERT(rv == CKR_OK); - - // Initialize the user pin - rv = C_InitPIN(hSession, pin, pinLength); - CPPUNIT_ASSERT(rv == CKR_OK); -} - -void SignVerifyTests::tearDown() -{ - C_Finalize(NULL_PTR); -} - CK_RV SignVerifyTests::generateRsaKeyPair(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_RSA_PKCS_KEY_PAIR_GEN, NULL_PTR, 0 }; @@ -204,8 +157,6 @@ void SignVerifyTests::digestRsaPkcsSignVerify(CK_MECHANISM_TYPE mechanismType, C void SignVerifyTests::testRsaSignVerify() { CK_RV rv; - CK_UTF8CHAR pin[] = SLOT_0_USER1_PIN; - CK_ULONG pinLength = sizeof(pin) - 1; CK_SESSION_HANDLE hSessionRO; CK_SESSION_HANDLE hSessionRW; CK_RSA_PKCS_PSS_PARAMS params[] = { @@ -220,7 +171,7 @@ void SignVerifyTests::testRsaSignVerify() C_Finalize(NULL_PTR); // Open read-only session on when the token is not initialized should fail - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSessionRO); + rv = 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. @@ -228,15 +179,15 @@ void SignVerifyTests::testRsaSignVerify() CPPUNIT_ASSERT(rv == CKR_OK); // Open read-only session - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSessionRO); + rv = C_OpenSession(m_initializedTokenSlotID, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSessionRO); CPPUNIT_ASSERT(rv == CKR_OK); // Open read-write session - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSessionRW); + rv = 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 = C_Login(hSessionRO,CKU_USER,pin,pinLength); + rv = C_Login(hSessionRO,CKU_USER,m_userPin1,m_userPin1Length); CPPUNIT_ASSERT(rv==CKR_OK); CK_OBJECT_HANDLE hPuk = CK_INVALID_HANDLE; @@ -404,8 +355,6 @@ void SignVerifyTests::hmacSignVerify(CK_MECHANISM_TYPE mechanismType, CK_SESSION void SignVerifyTests::testHmacSignVerify() { CK_RV rv; - CK_UTF8CHAR pin[] = SLOT_0_USER1_PIN; - CK_ULONG pinLength = sizeof(pin) - 1; CK_SESSION_HANDLE hSessionRO; CK_SESSION_HANDLE hSessionRW; @@ -413,7 +362,7 @@ void SignVerifyTests::testHmacSignVerify() C_Finalize(NULL_PTR); // Open read-only session on when the token is not initialized should fail - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSessionRO); + rv = 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. @@ -421,15 +370,15 @@ void SignVerifyTests::testHmacSignVerify() CPPUNIT_ASSERT(rv == CKR_OK); // Open read-only session - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSessionRO); + rv = C_OpenSession(m_initializedTokenSlotID, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSessionRO); CPPUNIT_ASSERT(rv == CKR_OK); // Open read-write session - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSessionRW); + rv = 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 = C_Login(hSessionRO,CKU_USER,pin,pinLength); + rv = C_Login(hSessionRO,CKU_USER,m_userPin1,m_userPin1Length); CPPUNIT_ASSERT(rv==CKR_OK); // Public Session keys diff --git a/src/lib/test/SignVerifyTests.h b/src/lib/test/SignVerifyTests.h index 7b5024861..9605eea15 100644 --- a/src/lib/test/SignVerifyTests.h +++ b/src/lib/test/SignVerifyTests.h @@ -34,10 +34,10 @@ #ifndef _SOFTHSM_V2_SIGNVERIFYTESTS_H #define _SOFTHSM_V2_SIGNVERIFYTESTS_H +#include "TestsBase.h" #include -#include "cryptoki.h" -class SignVerifyTests : public CppUnit::TestFixture +class SignVerifyTests : public TestsBase { CPPUNIT_TEST_SUITE(SignVerifyTests); CPPUNIT_TEST(testRsaSignVerify); @@ -48,9 +48,6 @@ class SignVerifyTests : public CppUnit::TestFixture void testRsaSignVerify(); void testHmacSignVerify(); - void setUp(); - void tearDown(); - protected: CK_RV generateRsaKeyPair(CK_SESSION_HANDLE hSession, CK_BBOOL bTokenPuk, CK_BBOOL bPrivatePuk, CK_BBOOL bTokenPrk, CK_BBOOL bPrivatePrk, CK_OBJECT_HANDLE &hPuk, CK_OBJECT_HANDLE &hPrk); void rsaPkcsSignVerify(CK_MECHANISM_TYPE mechanismType, CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hPublicKey, CK_OBJECT_HANDLE hPrivateKey); diff --git a/src/lib/test/SymmetricAlgorithmTests.cpp b/src/lib/test/SymmetricAlgorithmTests.cpp index da537c4f2..17e1a29bb 100644 --- a/src/lib/test/SymmetricAlgorithmTests.cpp +++ b/src/lib/test/SymmetricAlgorithmTests.cpp @@ -33,9 +33,7 @@ #include #include #include -#include #include "SymmetricAlgorithmTests.h" -#include "testconfig.h" // CKA_TOKEN const CK_BBOOL ON_TOKEN = CK_TRUE; @@ -48,47 +46,6 @@ const CK_BBOOL IS_PUBLIC = CK_FALSE; CPPUNIT_TEST_SUITE_REGISTRATION(SymmetricAlgorithmTests); -void SymmetricAlgorithmTests::setUp() -{ -// printf("\nObjectTests\n"); - - setenv("SOFTHSM2_CONF", "./softhsm2.conf", 1); - - CK_RV rv; - CK_UTF8CHAR pin[] = SLOT_0_USER1_PIN; - CK_ULONG pinLength = sizeof(pin) - 1; - CK_UTF8CHAR sopin[] = SLOT_0_SO1_PIN; - CK_ULONG sopinLength = sizeof(sopin) - 1; - CK_SESSION_HANDLE hSession; - - CK_UTF8CHAR label[32]; - memset(label, ' ', 32); - memcpy(label, "token1", strlen("token1")); - - // (Re)initialize the token - rv = C_Initialize(NULL_PTR); - CPPUNIT_ASSERT(rv == CKR_OK); - rv = C_InitToken(SLOT_INIT_TOKEN, sopin,sopinLength, label); - CPPUNIT_ASSERT(rv == CKR_OK); - - // Open session - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSession); - CPPUNIT_ASSERT(rv == CKR_OK); - - // Login SO - rv = C_Login(hSession,CKU_SO, sopin, sopinLength); - CPPUNIT_ASSERT(rv == CKR_OK); - - // Initialize the user pin - rv = C_InitPIN(hSession, pin, pinLength); - CPPUNIT_ASSERT(rv == CKR_OK); -} - -void SymmetricAlgorithmTests::tearDown() -{ - C_Finalize(NULL_PTR); -} - 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 }; @@ -777,8 +734,6 @@ void SymmetricAlgorithmTests::aesWrapUnwrap(CK_MECHANISM_TYPE mechanismType, CK_ void SymmetricAlgorithmTests::testAesEncryptDecrypt() { CK_RV rv; - CK_UTF8CHAR pin[] = SLOT_0_USER1_PIN; - CK_ULONG pinLength = sizeof(pin) - 1; // CK_UTF8CHAR sopin[] = SLOT_0_SO1_PIN; // CK_ULONG sopinLength = sizeof(sopin) - 1; CK_SESSION_HANDLE hSessionRO; @@ -788,7 +743,7 @@ void SymmetricAlgorithmTests::testAesEncryptDecrypt() C_Finalize(NULL_PTR); // Open read-only session on when the token is not initialized should fail - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSessionRO); + rv = 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. @@ -796,15 +751,15 @@ void SymmetricAlgorithmTests::testAesEncryptDecrypt() CPPUNIT_ASSERT(rv == CKR_OK); // Open read-only session - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSessionRO); + rv = C_OpenSession(m_initializedTokenSlotID, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSessionRO); CPPUNIT_ASSERT(rv == CKR_OK); // Open read-write session - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSessionRW); + rv = 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 = C_Login(hSessionRO,CKU_USER,pin,pinLength); + rv = C_Login(hSessionRO,CKU_USER,m_userPin1,m_userPin1Length); CPPUNIT_ASSERT(rv==CKR_OK); CK_OBJECT_HANDLE hKey = CK_INVALID_HANDLE; @@ -821,8 +776,6 @@ void SymmetricAlgorithmTests::testAesEncryptDecrypt() void SymmetricAlgorithmTests::testAesWrapUnwrap() { CK_RV rv; - CK_UTF8CHAR pin[] = SLOT_0_USER1_PIN; - CK_ULONG pinLength = sizeof(pin) - 1; // CK_UTF8CHAR sopin[] = SLOT_0_SO1_PIN; // CK_ULONG sopinLength = sizeof(sopin) - 1; CK_SESSION_HANDLE hSession; @@ -835,11 +788,11 @@ void SymmetricAlgorithmTests::testAesWrapUnwrap() CPPUNIT_ASSERT(rv == CKR_OK); // Open session - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSession); + rv = 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 object - rv = C_Login(hSession,CKU_USER,pin,pinLength); + rv = C_Login(hSession,CKU_USER,m_userPin1,m_userPin1Length); CPPUNIT_ASSERT(rv==CKR_OK); CK_OBJECT_HANDLE hKey = CK_INVALID_HANDLE; @@ -857,8 +810,6 @@ void SymmetricAlgorithmTests::testAesWrapUnwrap() void SymmetricAlgorithmTests::testDesEncryptDecrypt() { CK_RV rv; - CK_UTF8CHAR pin[] = SLOT_0_USER1_PIN; - CK_ULONG pinLength = sizeof(pin) - 1; // CK_UTF8CHAR sopin[] = SLOT_0_SO1_PIN; // CK_ULONG sopinLength = sizeof(sopin) - 1; CK_SESSION_HANDLE hSessionRO; @@ -868,7 +819,7 @@ void SymmetricAlgorithmTests::testDesEncryptDecrypt() C_Finalize(NULL_PTR); // Open read-only session on when the token is not initialized should fail - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSessionRO); + rv = 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. @@ -876,15 +827,15 @@ void SymmetricAlgorithmTests::testDesEncryptDecrypt() CPPUNIT_ASSERT(rv == CKR_OK); // Open read-only session - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSessionRO); + rv = C_OpenSession(m_initializedTokenSlotID, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSessionRO); CPPUNIT_ASSERT(rv == CKR_OK); // Open read-write session - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSessionRW); + rv = 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 = C_Login(hSessionRO,CKU_USER,pin,pinLength); + rv = C_Login(hSessionRO,CKU_USER,m_userPin1,m_userPin1Length); CPPUNIT_ASSERT(rv==CKR_OK); #ifndef WITH_FIPS @@ -923,8 +874,6 @@ void SymmetricAlgorithmTests::testDesEncryptDecrypt() void SymmetricAlgorithmTests::testNullTemplate() { CK_RV rv; - CK_UTF8CHAR pin[] = SLOT_0_USER1_PIN; - CK_ULONG pinLength = sizeof(pin) - 1; CK_SESSION_HANDLE hSession; CK_MECHANISM mechanism1 = { CKM_DES3_KEY_GEN, NULL_PTR, 0 }; CK_MECHANISM mechanism2 = { CKM_AES_KEY_GEN, NULL_PTR, 0 }; @@ -938,11 +887,11 @@ void SymmetricAlgorithmTests::testNullTemplate() CPPUNIT_ASSERT(rv == CKR_OK); // Open read-write session - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSession); + rv = C_OpenSession(m_initializedTokenSlotID, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSession); CPPUNIT_ASSERT(rv == CKR_OK); // Login USER into the sessions so we can create a private objects - rv = C_Login(hSession, CKU_USER, pin, pinLength); + rv = C_Login(hSession, CKU_USER, m_userPin1, m_userPin1Length); CPPUNIT_ASSERT(rv==CKR_OK); rv = C_GenerateKey(hSession, &mechanism1, NULL_PTR, 0, &hKey); @@ -958,8 +907,6 @@ void SymmetricAlgorithmTests::testNullTemplate() void SymmetricAlgorithmTests::testNonModifiableDesKeyGeneration() { CK_RV rv; - CK_UTF8CHAR pin[] = SLOT_0_USER1_PIN; - CK_ULONG pinLength = sizeof(pin) - 1; CK_SESSION_HANDLE hSession; CK_MECHANISM mechanism = { CKM_DES3_KEY_GEN, NULL_PTR, 0 }; CK_OBJECT_HANDLE hKey = CK_INVALID_HANDLE; @@ -985,11 +932,11 @@ void SymmetricAlgorithmTests::testNonModifiableDesKeyGeneration() CPPUNIT_ASSERT(rv == CKR_OK); // Open read-write session - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSession); + rv = C_OpenSession(m_initializedTokenSlotID, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSession); CPPUNIT_ASSERT(rv == CKR_OK); // Login USER into the sessions so we can create a private objects - rv = C_Login(hSession, CKU_USER, pin, pinLength); + rv = C_Login(hSession, CKU_USER, m_userPin1, m_userPin1Length); CPPUNIT_ASSERT(rv==CKR_OK); rv = C_GenerateKey(hSession, &mechanism, @@ -1040,8 +987,6 @@ void SymmetricAlgorithmTests::testNonModifiableDesKeyGeneration() void SymmetricAlgorithmTests::testCheckValue() { CK_RV rv; - CK_UTF8CHAR pin[] = SLOT_0_USER1_PIN; - CK_ULONG pinLength = sizeof(pin) - 1; CK_SESSION_HANDLE hSession; CK_MECHANISM mechanism = { CKM_AES_KEY_GEN, NULL_PTR, 0 }; CK_OBJECT_HANDLE hKey = CK_INVALID_HANDLE; @@ -1054,11 +999,11 @@ void SymmetricAlgorithmTests::testCheckValue() CPPUNIT_ASSERT(rv == CKR_OK); // Open read-write session - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSession); + rv = C_OpenSession(m_initializedTokenSlotID, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSession); CPPUNIT_ASSERT(rv == CKR_OK); // Login USER into the sessions so we can create a private objects - rv = C_Login(hSession, CKU_USER, pin, pinLength); + rv = C_Login(hSession, CKU_USER, m_userPin1, m_userPin1Length); CPPUNIT_ASSERT(rv==CKR_OK); CK_ULONG bytes = 16; diff --git a/src/lib/test/SymmetricAlgorithmTests.h b/src/lib/test/SymmetricAlgorithmTests.h index 508ea24c9..6171df403 100644 --- a/src/lib/test/SymmetricAlgorithmTests.h +++ b/src/lib/test/SymmetricAlgorithmTests.h @@ -33,10 +33,10 @@ #ifndef _SOFTHSM_V2_SYMENCRYPTDECRYPTTESTS_H #define _SOFTHSM_V2_SYMENCRYPTDECRYPTTESTS_H +#include "TestsBase.h" #include -#include "cryptoki.h" -class SymmetricAlgorithmTests : public CppUnit::TestFixture +class SymmetricAlgorithmTests : public TestsBase { CPPUNIT_TEST_SUITE(SymmetricAlgorithmTests); CPPUNIT_TEST(testAesEncryptDecrypt); @@ -56,9 +56,6 @@ class SymmetricAlgorithmTests : public CppUnit::TestFixture void testNonModifiableDesKeyGeneration(); void testCheckValue(); - void setUp(); - void tearDown(); - protected: CK_RV generateAesKey(CK_SESSION_HANDLE hSession, CK_BBOOL bToken, CK_BBOOL bPrivate, CK_OBJECT_HANDLE &hKey); #ifndef WITH_FIPS diff --git a/src/lib/test/TestsBase.cpp b/src/lib/test/TestsBase.cpp new file mode 100644 index 000000000..3c02cd440 --- /dev/null +++ b/src/lib/test/TestsBase.cpp @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2010 .SE (The Internet Infrastructure Foundation) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER + * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN + * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/***************************************************************************** + TestsBase.cpp + + Base class for test classes. + *****************************************************************************/ + +#include "TestsBase.h" +#include + +void TestsBase::setUp() { + TestsNoPINInitBase::setUp(); + + CK_SESSION_HANDLE hSession; + + // Open session + CPPUNIT_ASSERT( C_OpenSession(m_initializedTokenSlotID, CKF_SERIAL_SESSION|CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSession)==CKR_OK ); + + // Login SO + CPPUNIT_ASSERT( C_Login(hSession,CKU_SO, m_soPin1, m_soPin1Length)==CKR_OK ); + + // Initialize the user pin + CPPUNIT_ASSERT( C_InitPIN(hSession, m_userPin1, m_userPin1Length)==CKR_OK ); +} diff --git a/src/lib/test/testconfig.h b/src/lib/test/TestsBase.h similarity index 79% rename from src/lib/test/testconfig.h rename to src/lib/test/TestsBase.h index e9d13136d..6bcf89472 100644 --- a/src/lib/test/testconfig.h +++ b/src/lib/test/TestsBase.h @@ -25,24 +25,20 @@ */ /***************************************************************************** - testconfig.h + TestsBase.h - Contains parameters for the test cases + Base class for test classes. *****************************************************************************/ -#ifndef _SOFTHSM_V2_TESTCONFIG_H -#define _SOFTHSM_V2_TESTCONFIG_H +#ifndef SRC_LIB_TEST_TESTSBASE_H_ +#define SRC_LIB_TEST_TESTSBASE_H_ -// Slots -#define SLOT_INVALID 9999 -#define SLOT_INIT_TOKEN 0 -#define SLOT_NO_INIT_TOKEN 1 +#include -// PIN -#define SLOT_0_SO1_PIN "12345678" -#define SLOT_0_SO2_PIN "123456789" -#define SLOT_0_USER1_PIN "1234" -#define SLOT_0_USER2_PIN "12345" +class TestsBase : public TestsNoPINInitBase { +public: + virtual void setUp(); +}; -#endif // !_SOFTHSM_V2_TESTCONFIG_H +#endif /* SRC_LIB_TEST_TESTSBASE_H_ */ diff --git a/src/lib/test/TestsNoPINInitBase.cpp b/src/lib/test/TestsNoPINInitBase.cpp new file mode 100644 index 000000000..93bb6eef6 --- /dev/null +++ b/src/lib/test/TestsNoPINInitBase.cpp @@ -0,0 +1,95 @@ +/* + * Copyright (c) 2010 .SE (The Internet Infrastructure Foundation) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER + * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN + * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/***************************************************************************** + TestsNoPINInitBase.cpp + + Base class for test classes. Used when there is no need for user login. + *****************************************************************************/ + +#include "TestsNoPINInitBase.h" +#include +#include +#include + +static void getSlotIDs( CK_SLOT_ID*const pInitializedTokenSlotID, CK_SLOT_ID*const pFreeTokenSlotID ) { + bool hasFoundFree(false); + bool hasFoundInitialized(false); + CK_ULONG nrOfSlots; + CPPUNIT_ASSERT( C_GetSlotList(CK_TRUE, NULL_PTR, &nrOfSlots)==CKR_OK ); + std::vector slotIDs(nrOfSlots); + CPPUNIT_ASSERT( C_GetSlotList(CK_TRUE, &slotIDs.front(), &nrOfSlots)==CKR_OK ); + for ( std::vector::iterator i=slotIDs.begin(); i!=slotIDs.end(); i++ ) { + CK_TOKEN_INFO tokenInfo; + CPPUNIT_ASSERT( C_GetTokenInfo(*i, &tokenInfo)==CKR_OK ); + if ( tokenInfo.flags&CKF_TOKEN_INITIALIZED ) { + if ( !hasFoundInitialized ) { + hasFoundInitialized = true; + *pInitializedTokenSlotID = *i; + } + } else { + if ( !hasFoundFree ) { + hasFoundFree = true; + *pFreeTokenSlotID = *i; + } + } + } + if ( !hasFoundInitialized ) { + *pInitializedTokenSlotID = *pFreeTokenSlotID; + } +} + +TestsNoPINInitBase::TestsNoPINInitBase() : + m_invalidSlotID(-1), + m_initializedTokenSlotID(m_invalidSlotID), + m_notInitializedTokenSlotID(m_invalidSlotID), + m_soPin1((CK_UTF8CHAR_PTR)"12345678"), + m_soPin1Length(strlen((char*)m_soPin1)), + m_userPin1((CK_UTF8CHAR_PTR)"1234"), + m_userPin1Length(strlen((char*)m_userPin1)) {}; + +void TestsNoPINInitBase::setUp() { + CK_UTF8CHAR label[32]; + memset(label, ' ', 32); + memcpy(label, "token1", strlen("token1")); + + // initialize cryptoki + CPPUNIT_ASSERT( C_Initialize(NULL_PTR)==CKR_OK ); + // update slot IDs to initialized and not initialized token. + getSlotIDs(&m_initializedTokenSlotID, &m_notInitializedTokenSlotID); + // (Re)initialize the token + CPPUNIT_ASSERT( C_InitToken(m_initializedTokenSlotID, m_soPin1, m_soPin1Length, label)==CKR_OK ); + // Reset cryptoki to get new slot IDs. + CPPUNIT_ASSERT( C_Finalize(NULL_PTR)==CKR_OK ); + CPPUNIT_ASSERT( C_Initialize(NULL_PTR)==CKR_OK ); + // slot IDs must be updated since the ID of the initialized token has changed. + getSlotIDs(&m_initializedTokenSlotID, &m_notInitializedTokenSlotID); +} + +void TestsNoPINInitBase::tearDown() +{ + C_Finalize(NULL_PTR); +} diff --git a/src/lib/test/TestsNoPINInitBase.h b/src/lib/test/TestsNoPINInitBase.h new file mode 100644 index 000000000..d0cda0504 --- /dev/null +++ b/src/lib/test/TestsNoPINInitBase.h @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2010 .SE (The Internet Infrastructure Foundation) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER + * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN + * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/***************************************************************************** + TestsNoPINInitBase.h + + Base class for test classes. Used when there is no need for user login. + *****************************************************************************/ + +#ifndef SRC_LIB_TEST_TESTSNOPININITBASE_H_ +#define SRC_LIB_TEST_TESTSNOPININITBASE_H_ + +#include "cryptoki.h" +#include + +class TestsNoPINInitBase : public CppUnit::TestFixture { +public: + TestsNoPINInitBase(); + + virtual void setUp(); + virtual void tearDown(); +protected: + const CK_SLOT_ID m_invalidSlotID; + CK_SLOT_ID m_initializedTokenSlotID; + CK_SLOT_ID m_notInitializedTokenSlotID; + + const CK_UTF8CHAR_PTR m_soPin1; + const CK_ULONG m_soPin1Length; + + const CK_UTF8CHAR_PTR m_userPin1; + const CK_ULONG m_userPin1Length; +}; + + +#endif /* SRC_LIB_TEST_TESTSNOPININITBASE_H_ */ diff --git a/src/lib/test/TokenTests.cpp b/src/lib/test/TokenTests.cpp index 2afaa5322..795d2d2cc 100644 --- a/src/lib/test/TokenTests.cpp +++ b/src/lib/test/TokenTests.cpp @@ -33,34 +33,13 @@ #include #include #include -#include #include "TokenTests.h" -#include "testconfig.h" CPPUNIT_TEST_SUITE_REGISTRATION(TokenTests); -void TokenTests::setUp() -{ -// printf("\nTokenTests\n"); - -#ifndef _WIN32 - setenv("SOFTHSM2_CONF", "./softhsm2.conf", 1); -#else - setenv("SOFTHSM2_CONF", ".\\softhsm2.conf", 1); -#endif -} - -void TokenTests::tearDown() -{ - // Just make sure that we finalize any previous failed tests - C_Finalize(NULL_PTR); -} - void TokenTests::testInitToken() { CK_RV rv; - CK_UTF8CHAR pin[] = SLOT_0_SO1_PIN; - CK_ULONG pinLength = sizeof(pin) - 1; CK_UTF8CHAR label[32]; CK_SESSION_HANDLE hSession; @@ -70,37 +49,37 @@ void TokenTests::testInitToken() // Just make sure that we finalize any previous failed tests C_Finalize(NULL_PTR); - rv = C_InitToken(SLOT_INIT_TOKEN, pin, pinLength, label); + rv = C_InitToken(m_initializedTokenSlotID, m_soPin1, m_soPin1Length, label); CPPUNIT_ASSERT(rv == CKR_CRYPTOKI_NOT_INITIALIZED); rv = C_Initialize(NULL_PTR); CPPUNIT_ASSERT(rv == CKR_OK); - rv = C_InitToken(SLOT_INIT_TOKEN, NULL_PTR, pinLength, label); + rv = C_InitToken(m_initializedTokenSlotID, NULL_PTR, m_soPin1Length, label); CPPUNIT_ASSERT(rv == CKR_ARGUMENTS_BAD); - rv = C_InitToken(SLOT_INVALID, pin, pinLength, label); + rv = C_InitToken(m_invalidSlotID, m_soPin1, m_soPin1Length, label); CPPUNIT_ASSERT(rv == CKR_SLOT_ID_INVALID); // Initialize - rv = C_InitToken(SLOT_INIT_TOKEN, pin, pinLength, label); + rv = C_InitToken(m_initializedTokenSlotID, m_soPin1, m_soPin1Length, label); CPPUNIT_ASSERT(rv == CKR_OK); // Initialize with wrong password - rv = C_InitToken(SLOT_INIT_TOKEN, pin, pinLength - 1, label); + rv = C_InitToken(m_initializedTokenSlotID, m_soPin1, m_soPin1Length - 1, label); CPPUNIT_ASSERT(rv == CKR_PIN_INCORRECT); - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSession); + rv = C_OpenSession(m_initializedTokenSlotID, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSession); CPPUNIT_ASSERT(rv == CKR_OK); - rv = C_InitToken(SLOT_INIT_TOKEN, pin, pinLength, label); + rv = C_InitToken(m_initializedTokenSlotID, m_soPin1, m_soPin1Length, label); CPPUNIT_ASSERT(rv == CKR_SESSION_EXISTS); rv = C_CloseSession(hSession); CPPUNIT_ASSERT(rv == CKR_OK); // Re-initialize - rv = C_InitToken(SLOT_INIT_TOKEN, pin, pinLength, label); + rv = C_InitToken(m_initializedTokenSlotID, m_soPin1, m_soPin1Length, label); CPPUNIT_ASSERT(rv == CKR_OK); C_Finalize(NULL_PTR); diff --git a/src/lib/test/TokenTests.h b/src/lib/test/TokenTests.h index baa2271a5..cc08b72f0 100644 --- a/src/lib/test/TokenTests.h +++ b/src/lib/test/TokenTests.h @@ -33,10 +33,10 @@ #ifndef _SOFTHSM_V2_TOKENTESTS_H #define _SOFTHSM_V2_TOKENTESTS_H +#include "TestsNoPINInitBase.h" #include -#include "cryptoki.h" -class TokenTests : public CppUnit::TestFixture +class TokenTests : public TestsNoPINInitBase { CPPUNIT_TEST_SUITE(TokenTests); CPPUNIT_TEST(testInitToken); @@ -44,9 +44,6 @@ class TokenTests : public CppUnit::TestFixture public: void testInitToken(); - - void setUp(); - void tearDown(); }; #endif // !_SOFTHSM_V2_TOKENTESTS_H diff --git a/src/lib/test/UserTests.cpp b/src/lib/test/UserTests.cpp index 13668b901..bac3bfcc2 100644 --- a/src/lib/test/UserTests.cpp +++ b/src/lib/test/UserTests.cpp @@ -33,86 +33,46 @@ #include #include #include -#include #include "UserTests.h" -#include "testconfig.h" CPPUNIT_TEST_SUITE_REGISTRATION(UserTests); -void UserTests::setUp() -{ -// printf("\nUserTests\n"); - -#ifndef _WIN32 - setenv("SOFTHSM2_CONF", "./softhsm2.conf", 1); -#else - setenv("SOFTHSM2_CONF", ".\\softhsm2.conf", 1); -#endif - - CK_UTF8CHAR pin[] = SLOT_0_SO1_PIN; - CK_ULONG pinLength = sizeof(pin) - 1; - CK_UTF8CHAR label[32]; - memset(label, ' ', 32); - memcpy(label, "token1", strlen("token1")); - - // (Re)initialize the token - CK_RV rv = C_Initialize(NULL_PTR); - CPPUNIT_ASSERT(rv == CKR_OK); - rv = C_InitToken(SLOT_INIT_TOKEN, pin, pinLength, label); - CPPUNIT_ASSERT(rv == CKR_OK); - C_Finalize(NULL_PTR); -} - -void UserTests::tearDown() -{ - // Just make sure that we finalize any previous tests - C_Finalize(NULL_PTR); -} - void UserTests::testInitPIN() { CK_RV rv; - CK_UTF8CHAR pin[] = SLOT_0_USER1_PIN; - CK_ULONG pinLength = sizeof(pin) - 1; - CK_UTF8CHAR sopin[] = SLOT_0_SO1_PIN; - CK_ULONG sopinLength = sizeof(sopin) - 1; CK_SESSION_HANDLE hSession = CK_INVALID_HANDLE; // Just make sure that we finalize any previous tests C_Finalize(NULL_PTR); - rv = C_InitPIN(hSession, pin, pinLength); + rv = C_InitPIN(hSession, m_userPin1, m_userPin1Length); CPPUNIT_ASSERT(rv == CKR_CRYPTOKI_NOT_INITIALIZED); rv = C_Initialize(NULL_PTR); CPPUNIT_ASSERT(rv == CKR_OK); - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSession); + rv = C_OpenSession(m_initializedTokenSlotID, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSession); CPPUNIT_ASSERT(rv == CKR_OK); - rv = C_InitPIN(hSession, pin, pinLength); + rv = C_InitPIN(hSession, m_userPin1, m_userPin1Length); CPPUNIT_ASSERT(rv == CKR_USER_NOT_LOGGED_IN); - rv = C_Login(hSession, CKU_SO, sopin, sopinLength); + rv = C_Login(hSession, CKU_SO, m_soPin1, m_soPin1Length); CPPUNIT_ASSERT(rv == CKR_OK); - rv = C_InitPIN(CK_INVALID_HANDLE, pin, pinLength); + rv = C_InitPIN(CK_INVALID_HANDLE, m_userPin1, m_userPin1Length); CPPUNIT_ASSERT(rv == CKR_SESSION_HANDLE_INVALID); - rv = C_InitPIN(hSession, pin, 0); + rv = C_InitPIN(hSession, m_userPin1, 0); CPPUNIT_ASSERT(rv == CKR_PIN_LEN_RANGE); - rv = C_InitPIN(hSession, pin, pinLength); + rv = C_InitPIN(hSession, m_userPin1, m_userPin1Length); CPPUNIT_ASSERT(rv == CKR_OK); } void UserTests::testLogin() { CK_RV rv; - CK_UTF8CHAR pin[] = SLOT_0_USER1_PIN; - CK_ULONG pinLength = sizeof(pin) - 1; - CK_UTF8CHAR sopin[] = SLOT_0_SO1_PIN; - CK_ULONG sopinLength = sizeof(sopin) - 1; CK_SESSION_HANDLE hSession[2]; // Just make sure that we finalize any previous tests @@ -121,79 +81,77 @@ void UserTests::testLogin() // Set up user PIN rv = C_Initialize(NULL_PTR); CPPUNIT_ASSERT(rv == CKR_OK); - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSession[0]); + rv = C_OpenSession(m_initializedTokenSlotID, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSession[0]); CPPUNIT_ASSERT(rv == CKR_OK); - rv = C_Login(hSession[0], CKU_USER, pin, pinLength); + rv = C_Login(hSession[0], CKU_USER, m_userPin1, m_userPin1Length); CPPUNIT_ASSERT(rv == CKR_USER_PIN_NOT_INITIALIZED); - rv = C_Login(hSession[0], CKU_SO, sopin, sopinLength); + rv = C_Login(hSession[0], CKU_SO, m_soPin1, m_soPin1Length); CPPUNIT_ASSERT(rv == CKR_OK); - rv = C_InitPIN(hSession[0], pin, pinLength); + rv = C_InitPIN(hSession[0], m_userPin1, m_userPin1Length); CPPUNIT_ASSERT(rv == CKR_OK); C_Finalize(NULL_PTR); - rv = C_Login(hSession[0], CKU_SO, sopin, sopinLength); + rv = C_Login(hSession[0], CKU_SO, m_soPin1, m_soPin1Length); CPPUNIT_ASSERT(rv == CKR_CRYPTOKI_NOT_INITIALIZED); rv = C_Initialize(NULL_PTR); CPPUNIT_ASSERT(rv == CKR_OK); - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSession[0]); + rv = C_OpenSession(m_initializedTokenSlotID, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSession[0]); CPPUNIT_ASSERT(rv == CKR_OK); - rv = C_Login(CK_INVALID_HANDLE, CKU_SO, sopin, sopinLength); + rv = C_Login(CK_INVALID_HANDLE, CKU_SO, m_soPin1, m_soPin1Length); CPPUNIT_ASSERT(rv == CKR_SESSION_HANDLE_INVALID); - rv = C_Login(hSession[0], CKU_SO, NULL_PTR, sopinLength); + rv = C_Login(hSession[0], CKU_SO, NULL_PTR, m_soPin1Length); CPPUNIT_ASSERT(rv == CKR_ARGUMENTS_BAD); - rv = C_Login(hSession[0], CKU_SO, sopin, 0); + rv = C_Login(hSession[0], CKU_SO, m_soPin1, 0); CPPUNIT_ASSERT(rv == CKR_PIN_INCORRECT); - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSession[1]); + rv = C_OpenSession(m_initializedTokenSlotID, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSession[1]); CPPUNIT_ASSERT(rv == CKR_OK); - rv = C_Login(hSession[0], CKU_SO, sopin, sopinLength); + rv = C_Login(hSession[0], CKU_SO, m_soPin1, m_soPin1Length); CPPUNIT_ASSERT(rv == CKR_SESSION_READ_ONLY_EXISTS); rv = C_CloseSession(hSession[1]); CPPUNIT_ASSERT(rv == CKR_OK); - rv = C_Login(hSession[0], CKU_USER, pin, pinLength); + rv = C_Login(hSession[0], CKU_USER, m_userPin1, m_userPin1Length); CPPUNIT_ASSERT(rv == CKR_OK); - rv = C_Login(hSession[0], CKU_SO, sopin, sopinLength); + rv = C_Login(hSession[0], CKU_SO, m_soPin1, m_soPin1Length); CPPUNIT_ASSERT(rv == CKR_USER_ANOTHER_ALREADY_LOGGED_IN); rv = C_Logout(hSession[0]); CPPUNIT_ASSERT(rv == CKR_OK); - rv = C_Login(hSession[0], CKU_SO, sopin, sopinLength); + rv = C_Login(hSession[0], CKU_SO, m_soPin1, m_soPin1Length); CPPUNIT_ASSERT(rv == CKR_OK); - rv = C_Login(hSession[0], CKU_SO, sopin, sopinLength); + rv = C_Login(hSession[0], CKU_SO, m_soPin1, m_soPin1Length); CPPUNIT_ASSERT(rv == CKR_USER_ALREADY_LOGGED_IN); - rv = C_Login(hSession[0], CKU_USER, pin, pinLength); + rv = C_Login(hSession[0], CKU_USER, m_userPin1, m_userPin1Length); CPPUNIT_ASSERT(rv == CKR_USER_ANOTHER_ALREADY_LOGGED_IN); rv = C_Logout(hSession[0]); CPPUNIT_ASSERT(rv == CKR_OK); - rv = C_Login(hSession[0], CKU_USER, pin, pinLength - 1); + rv = C_Login(hSession[0], CKU_USER, m_userPin1, m_userPin1Length - 1); CPPUNIT_ASSERT(rv == CKR_PIN_INCORRECT); - rv = C_Login(hSession[0], CKU_USER, pin, pinLength); + rv = C_Login(hSession[0], CKU_USER, m_userPin1, m_userPin1Length); CPPUNIT_ASSERT(rv == CKR_OK); - rv = C_Login(hSession[0], CKU_USER, pin, pinLength); + rv = C_Login(hSession[0], CKU_USER, m_userPin1, m_userPin1Length); CPPUNIT_ASSERT(rv == CKR_USER_ALREADY_LOGGED_IN); } void UserTests::testLogout() { CK_RV rv; - CK_UTF8CHAR pin[] = SLOT_0_SO1_PIN; - CK_ULONG pinLength = sizeof(pin) - 1; CK_SESSION_HANDLE hSession = CK_INVALID_HANDLE; // Just make sure that we finalize any previous tests @@ -205,10 +163,10 @@ void UserTests::testLogout() rv = C_Initialize(NULL_PTR); CPPUNIT_ASSERT(rv == CKR_OK); - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSession); + rv = C_OpenSession(m_initializedTokenSlotID, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSession); CPPUNIT_ASSERT(rv == CKR_OK); - rv = C_Login(hSession, CKU_SO, pin, pinLength); + rv = C_Login(hSession, CKU_SO, m_soPin1, m_soPin1Length); CPPUNIT_ASSERT(rv == CKR_OK); rv = C_Logout(CK_INVALID_HANDLE); @@ -224,14 +182,10 @@ void UserTests::testLogout() void UserTests::testSetPIN() { CK_RV rv; - CK_UTF8CHAR pin1[] = SLOT_0_USER1_PIN; - CK_ULONG pin1Length = sizeof(pin1) - 1; - CK_UTF8CHAR pin2[] = SLOT_0_USER2_PIN; - CK_ULONG pin2Length = sizeof(pin2) - 1; - CK_UTF8CHAR so1pin[] = SLOT_0_SO1_PIN; - CK_ULONG so1pinLength = sizeof(so1pin) - 1; - CK_UTF8CHAR so2pin[] = SLOT_0_SO2_PIN; - CK_ULONG so2pinLength = sizeof(so2pin) - 1; + const CK_UTF8CHAR_PTR pin2((CK_UTF8CHAR_PTR)"12345"); + const CK_ULONG pin2Length(strlen((char*)pin2)); + const CK_UTF8CHAR_PTR so2pin((CK_UTF8CHAR_PTR)"123456789"); + const CK_ULONG so2pinLength(strlen((char*)so2pin)); CK_SESSION_HANDLE hSession; // Just make sure that we finalize any previous tests @@ -240,77 +194,77 @@ void UserTests::testSetPIN() // Set up user PIN rv = C_Initialize(NULL_PTR); CPPUNIT_ASSERT(rv == CKR_OK); - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSession); + rv = C_OpenSession(m_initializedTokenSlotID, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSession); CPPUNIT_ASSERT(rv == CKR_OK); - rv = C_Login(hSession, CKU_SO, so1pin, so1pinLength); + rv = C_Login(hSession, CKU_SO, m_soPin1, m_soPin1Length); CPPUNIT_ASSERT(rv == CKR_OK); - rv = C_InitPIN(hSession, pin1, pin1Length); + rv = C_InitPIN(hSession, m_userPin1, m_userPin1Length); CPPUNIT_ASSERT(rv == CKR_OK); C_Finalize(NULL_PTR); - rv = C_SetPIN(hSession, pin1, pin1Length, pin2, pin2Length); + rv = C_SetPIN(hSession, m_userPin1, m_userPin1Length, pin2, pin2Length); CPPUNIT_ASSERT(rv == CKR_CRYPTOKI_NOT_INITIALIZED); rv = C_Initialize(NULL_PTR); CPPUNIT_ASSERT(rv == CKR_OK); - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSession); + rv = C_OpenSession(m_initializedTokenSlotID, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSession); CPPUNIT_ASSERT(rv == CKR_OK); - rv = C_SetPIN(CK_INVALID_HANDLE, pin1, pin1Length, pin2, pin2Length); + rv = C_SetPIN(CK_INVALID_HANDLE, m_userPin1, m_userPin1Length, pin2, pin2Length); CPPUNIT_ASSERT(rv == CKR_SESSION_HANDLE_INVALID); - rv = C_SetPIN(hSession, pin1, pin1Length, pin2, pin2Length); + rv = C_SetPIN(hSession, m_userPin1, m_userPin1Length, pin2, pin2Length); CPPUNIT_ASSERT(rv == CKR_SESSION_READ_ONLY); rv = C_CloseSession(hSession); CPPUNIT_ASSERT(rv == CKR_OK); - rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSession); + rv = C_OpenSession(m_initializedTokenSlotID, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSession); CPPUNIT_ASSERT(rv == CKR_OK); - rv = C_SetPIN(hSession, NULL_PTR, pin1Length, pin2, pin2Length); + rv = C_SetPIN(hSession, NULL_PTR, m_userPin1Length, pin2, pin2Length); CPPUNIT_ASSERT(rv == CKR_ARGUMENTS_BAD); - rv = C_SetPIN(hSession, pin1, pin1Length, NULL_PTR, pin2Length); + rv = C_SetPIN(hSession, m_userPin1, m_userPin1Length, NULL_PTR, pin2Length); CPPUNIT_ASSERT(rv == CKR_ARGUMENTS_BAD); - rv = C_SetPIN(hSession, pin1, pin1Length, pin2, 0); + rv = C_SetPIN(hSession, m_userPin1, m_userPin1Length, pin2, 0); CPPUNIT_ASSERT(rv == CKR_PIN_LEN_RANGE); rv = C_SetPIN(hSession, pin2, pin2Length, pin2, pin2Length); CPPUNIT_ASSERT(rv == CKR_PIN_INCORRECT); - rv = C_SetPIN(hSession, pin1, pin1Length, pin2, pin2Length); + rv = C_SetPIN(hSession, m_userPin1, m_userPin1Length, pin2, pin2Length); CPPUNIT_ASSERT(rv == CKR_OK); rv = C_Login(hSession, CKU_USER, pin2, pin2Length); CPPUNIT_ASSERT(rv == CKR_OK); - rv = C_SetPIN(hSession, pin1, pin1Length, pin2, pin2Length); + rv = C_SetPIN(hSession, m_userPin1, m_userPin1Length, pin2, pin2Length); CPPUNIT_ASSERT(rv == CKR_PIN_INCORRECT); - rv = C_SetPIN(hSession, pin2, pin2Length, pin1, pin1Length); + rv = C_SetPIN(hSession, pin2, pin2Length, m_userPin1, m_userPin1Length); CPPUNIT_ASSERT(rv == CKR_OK); - rv = C_Login(hSession, CKU_SO, so1pin, so1pinLength); + rv = C_Login(hSession, CKU_SO, m_soPin1, m_soPin1Length); CPPUNIT_ASSERT(rv == CKR_USER_ANOTHER_ALREADY_LOGGED_IN); rv = C_Logout(hSession); CPPUNIT_ASSERT(rv == CKR_OK); - rv = C_Login(hSession, CKU_SO, so1pin, so1pinLength); + rv = C_Login(hSession, CKU_SO, m_soPin1, m_soPin1Length); CPPUNIT_ASSERT(rv == CKR_OK); rv = C_SetPIN(hSession, so2pin, so2pinLength, so2pin, so2pinLength); CPPUNIT_ASSERT(rv == CKR_PIN_INCORRECT); - rv = C_SetPIN(hSession, so1pin, so1pinLength, so2pin, so2pinLength); + rv = C_SetPIN(hSession, m_soPin1, m_soPin1Length, so2pin, so2pinLength); CPPUNIT_ASSERT(rv == CKR_OK); - rv = C_SetPIN(hSession, so1pin, so1pinLength, so1pin, so1pinLength); + rv = C_SetPIN(hSession, m_soPin1, m_soPin1Length, m_soPin1, m_soPin1Length); CPPUNIT_ASSERT(rv == CKR_PIN_INCORRECT); - rv = C_SetPIN(hSession, so2pin, so2pinLength, so1pin, so1pinLength); + rv = C_SetPIN(hSession, so2pin, so2pinLength, m_soPin1, m_soPin1Length); CPPUNIT_ASSERT(rv == CKR_OK); } diff --git a/src/lib/test/UserTests.h b/src/lib/test/UserTests.h index d7dd99bc1..91042080b 100644 --- a/src/lib/test/UserTests.h +++ b/src/lib/test/UserTests.h @@ -33,10 +33,10 @@ #ifndef _SOFTHSM_V2_USERTESTS_H #define _SOFTHSM_V2_USERTESTS_H +#include "TestsNoPINInitBase.h" #include -#include "cryptoki.h" -class UserTests : public CppUnit::TestFixture +class UserTests : public TestsNoPINInitBase { CPPUNIT_TEST_SUITE(UserTests); CPPUNIT_TEST(testInitPIN); @@ -50,9 +50,6 @@ class UserTests : public CppUnit::TestFixture void testLogin(); void testLogout(); void testSetPIN(); - - void setUp(); - void tearDown(); }; #endif // !_SOFTHSM_V2_USERTESTS_H diff --git a/src/lib/test/p11test.cpp b/src/lib/test/p11test.cpp index 544aaee38..010fe115f 100644 --- a/src/lib/test/p11test.cpp +++ b/src/lib/test/p11test.cpp @@ -32,9 +32,16 @@ #include #include +#include int main(int /*argc*/, char** /*argv*/) { +#ifndef _WIN32 + setenv("SOFTHSM2_CONF", "./softhsm2.conf", 1); +#else + setenv("SOFTHSM2_CONF", ".\\softhsm2.conf", 1); +#endif + CppUnit::TextUi::TestRunner runner; CppUnit::TestFactoryRegistry ®istry = CppUnit::TestFactoryRegistry::getRegistry();