[SmartcardServices-Changes] [113] trunk/SmartCardServices/src/PKCS11dotNetV2
source_changes at macosforge.org
source_changes at macosforge.org
Mon Feb 8 01:41:17 PST 2010
Revision: 113
http://trac.macosforge.org/projects/smartcardservices/changeset/113
Author: ludovic.rousseau at gmail.com
Date: 2010-02-08 01:41:15 -0800 (Mon, 08 Feb 2010)
Log Message:
-----------
resync with upstream (release 2.1.3)
Modified Paths:
--------------
trunk/SmartCardServices/src/PKCS11dotNetV2/PKCS11Module2/application.cpp
trunk/SmartCardServices/src/PKCS11dotNetV2/PKCS11Module2/beroctet.cpp
trunk/SmartCardServices/src/PKCS11dotNetV2/PKCS11Module2/cardcache.cpp
trunk/SmartCardServices/src/PKCS11dotNetV2/PKCS11Module2/dataobject.h
trunk/SmartCardServices/src/PKCS11dotNetV2/PKCS11Module2/log.cpp
trunk/SmartCardServices/src/PKCS11dotNetV2/PKCS11Module2/log.h
trunk/SmartCardServices/src/PKCS11dotNetV2/PKCS11Module2/pkcs11.cpp
trunk/SmartCardServices/src/PKCS11dotNetV2/PKCS11Module2/pkcs11.h
trunk/SmartCardServices/src/PKCS11dotNetV2/PKCS11Module2/pkcs11f.h
trunk/SmartCardServices/src/PKCS11dotNetV2/PKCS11Module2/pkcs11t.h
trunk/SmartCardServices/src/PKCS11dotNetV2/PKCS11Module2/platconfig.h
trunk/SmartCardServices/src/PKCS11dotNetV2/PKCS11Module2/sctoken.cpp
trunk/SmartCardServices/src/PKCS11dotNetV2/PKCS11Module2/sctoken.h
trunk/SmartCardServices/src/PKCS11dotNetV2/PKCS11Module2/secretkeyobject.h
trunk/SmartCardServices/src/PKCS11dotNetV2/PKCS11Module2/session.cpp
trunk/SmartCardServices/src/PKCS11dotNetV2/PKCS11Module2/slot.cpp
trunk/SmartCardServices/src/PKCS11dotNetV2/PKCS11Module2/slot.h
trunk/SmartCardServices/src/PKCS11dotNetV2/PKCS11Module2/x509pubkeycertobject.h
trunk/SmartCardServices/src/PKCS11dotNetV2/configure.in
trunk/SmartCardServices/src/PKCS11dotNetV2/cppMarshaller/Marshaller.cpp
trunk/SmartCardServices/src/PKCS11dotNetV2/cppMarshaller/PCSC.cpp
Modified: trunk/SmartCardServices/src/PKCS11dotNetV2/PKCS11Module2/application.cpp
===================================================================
--- trunk/SmartCardServices/src/PKCS11dotNetV2/PKCS11Module2/application.cpp 2010-02-04 14:54:20 UTC (rev 112)
+++ trunk/SmartCardServices/src/PKCS11dotNetV2/PKCS11Module2/application.cpp 2010-02-08 09:41:15 UTC (rev 113)
@@ -66,13 +66,13 @@
#ifndef _XCL_
CK_RV Application::InitApplication( )
{
- Log::begin( "Application::InitApplication" );
+ //Log::begin( "Application::InitApplication" );
// do the enumeration of slots
CK_ULONG hResult = SCardEstablishContext( SCARD_SCOPE_USER, NULL, NULL, &Application::_hContext );
- Log::log( "Application::InitApplication - SCardEstablishContext <%#02x>", hResult );
- Log::log( "Application::InitApplication - Application::_hContext <%#02x>", Application::_hContext );
+ //Log::log( "Application::InitApplication - SCardEstablishContext <%#02x>", hResult );
+ //Log::log( "Application::InitApplication - Application::_hContext <%#02x>", Application::_hContext );
if( SCARD_S_SUCCESS != hResult )
{
@@ -88,7 +88,7 @@
}
#endif
- Log::end( "Application::InitApplication" );
+ //Log::end( "Application::InitApplication" );
return CKR_OK;
}
@@ -97,7 +97,7 @@
CK_RV Application::InitApplication( )
{
- Log::begin( "Application::InitApplication" );
+ //Log::begin( "Application::InitApplication" );
u4 deviceID;
u4 rv;
xCL_DevicePtr deviceList;
@@ -143,7 +143,7 @@
CK_RV Application::Enumerate( CK_BBOOL tokenPresent, CK_SLOT_ID_PTR pSlotList, CK_ULONG_PTR pulCount )
{
- Log::begin( "Application::Enumerate" );
+ //Log::begin( "Application::Enumerate" );
CK_ULONG slotNb = 0;
LPTSTR pReader = NULL;
@@ -152,7 +152,7 @@
if( NULL_PTR == pulCount )
{
- Log::error( "Application::Enumerate", "CKR_ARGUMENTS_BAD" );
+ //Log::error( "Application::Enumerate", "CKR_ARGUMENTS_BAD" );
return CKR_ARGUMENTS_BAD;
}
@@ -164,35 +164,35 @@
if( NULL_PTR != Application::_slotCache[ i ] )
{
currentCache[ i ] = *(Application::_slotCache[ i ]->_readerName);
- Log::log( "Application::Enumerate - currentCache[ %d ] <%s>", i, currentCache[ i ].c_str( ) );
+ //Log::log( "Application::Enumerate - currentCache[ %d ] <%s>", i, currentCache[ i ].c_str( ) );
}
}
// Get the readers from the PCSC layer
DWORD readerListCharLength = 0;
hResult = SCardListReaders( Application::_hContext, NULL, NULL, &readerListCharLength );
- Log::log( "Application::Enumerate - readerListCharLength <%#02x>", readerListCharLength );
- Log::log( "Application::Enumerate - SCardListReaders <%#02x>", hResult );
+ //Log::log( "Application::Enumerate - readerListCharLength <%#02x>", readerListCharLength );
+ //Log::log( "Application::Enumerate - SCardListReaders <%#02x>", hResult );
if( SCARD_S_SUCCESS != hResult )
{
- Log::error( "Application::Enumerate", "CKR_GENERAL_ERROR" );
+ //Log::error( "Application::Enumerate", "CKR_GENERAL_ERROR" );
return CKR_GENERAL_ERROR;
}
LPTSTR pReaderList = (lpCharPtr)malloc( sizeof(char) * readerListCharLength );
if( NULL == pReaderList )
{
- Log::error( "Application::Enumerate", "CKR_HOST_MEMORY" );
+ //Log::error( "Application::Enumerate", "CKR_HOST_MEMORY" );
return CKR_HOST_MEMORY;
}
memset( pReaderList, 0, sizeof(char) * readerListCharLength );
hResult = SCardListReaders( Application::_hContext, NULL, pReaderList, &readerListCharLength);
- Log::log( "Application::Enumerate - SCardListReaders 2 <%#02x>", hResult );
+ //Log::log( "Application::Enumerate - SCardListReaders 2 <%#02x>", hResult );
if( SCARD_S_SUCCESS != hResult )
{
free( pReaderList );
- Log::error( "Application::Enumerate", "CKR_GENERAL_ERROR" );
+ //Log::error( "Application::Enumerate", "CKR_GENERAL_ERROR" );
return CKR_GENERAL_ERROR;
}
@@ -207,13 +207,13 @@
while( pReader && ( '\0' != *pReader ) )
{
currentPcscList[ i ] = pReader;
- Log::log( "Application::Enumerate - PCSC List[ %d ] <%s>", i, currentPcscList[ i ].c_str( ) );
+ //Log::log( "Application::Enumerate - PCSC List[ %d ] <%s>", i, currentPcscList[ i ].c_str( ) );
i++;
if( i > CONFIG_MAX_SLOT )
{
/*
free( pReaderList );
- Log::error( "Application::Enumerate", "CKR_HOST_MEMORY" );
+ //Log::error( "Application::Enumerate", "CKR_HOST_MEMORY" );
return CKR_HOST_MEMORY;
*/
break;
@@ -282,7 +282,7 @@
CK_RV rv = addSlot( currentPcscList[ i ] );
if( CKR_OK != rv )
{
- Log::error( "Application::Enumerate", "addSlot failed" );
+ //Log::error( "Application::Enumerate", "addSlot failed" );
return rv;
}
}
@@ -313,13 +313,13 @@
{
// We found a card in this reader
Application::_slotCache[i]->_slotInfo.flags |= CKF_TOKEN_PRESENT;
- Log::log( "Application::Enumerate - New Cache[ %d ] - Name <%s> - Token present", i, Application::_slotCache[ i ]->_readerName->c_str( ) );
+ //Log::log( "Application::Enumerate - New Cache[ %d ] - Name <%s> - Token present", i, Application::_slotCache[ i ]->_readerName->c_str( ) );
}
else
{
// No card in this reader
Application::_slotCache[i]->_slotInfo.flags &= ~CKF_TOKEN_PRESENT;
- Log::log( "Application::Enumerate - New Cache[ %d ] - Name <%s> - Token NOT present", i, Application::_slotCache[ i ]->_readerName->c_str( ) );
+ //Log::log( "Application::Enumerate - New Cache[ %d ] - Name <%s> - Token NOT present", i, Application::_slotCache[ i ]->_readerName->c_str( ) );
}
}
@@ -342,7 +342,7 @@
if((pSlotList != NULL_PTR)&&(*pulCount < slotNb))
{
*pulCount = slotNb;
- Log::error( "Application::Enumerate", "CKR_BUFFER_TOO_SMALL" );
+ //Log::error( "Application::Enumerate", "CKR_BUFFER_TOO_SMALL" );
return CKR_BUFFER_TOO_SMALL;
}
@@ -380,7 +380,7 @@
}
}
- Log::end( "Application::Enumerate" );
+ //Log::end( "Application::Enumerate" );
return CKR_OK;
}
@@ -564,20 +564,20 @@
*/
void Application::ClearCache(void)
{
+ Log::begin( "Application::ClearCache" );
+
// initialize the slot cache
- CK_SLOT_ID sid = 0;
- for(;sid<CONFIG_MAX_SLOT;sid++)
+ for( int sid = 0 ; sid < CONFIG_MAX_SLOT ; sid++ )
{
- if(Application::_slotCache[sid] != NULL_PTR)
+ Slot* slot = Application::_slotCache[ sid ];
+ if( NULL_PTR != slot )
{
- Slot* slot = Application::_slotCache[sid];
#ifdef INCLUDE_EVENTING
if(slot->_tracker != NULL_PTR)
{
- slot->_tracker->stop();
+ slot->_tracker->stop( );
}
#endif
-
delete slot;
Application::_slotCache[sid] = NULL_PTR;
}
@@ -590,6 +590,8 @@
// we should just signal all the events
CryptokiEvent.Signal();
#endif
+
+ Log::end( "Application::ClearCache" );
}
Modified: trunk/SmartCardServices/src/PKCS11dotNetV2/PKCS11Module2/beroctet.cpp
===================================================================
--- trunk/SmartCardServices/src/PKCS11dotNetV2/PKCS11Module2/beroctet.cpp 2010-02-04 14:54:20 UTC (rev 112)
+++ trunk/SmartCardServices/src/PKCS11dotNetV2/PKCS11Module2/beroctet.cpp 2010-02-08 09:41:15 UTC (rev 113)
@@ -27,6 +27,8 @@
#include <string.h>
#include <stdlib.h>
+#include <stdio.h>
+
#include "beroctet.h"
using namespace std;
Modified: trunk/SmartCardServices/src/PKCS11dotNetV2/PKCS11Module2/cardcache.cpp
===================================================================
--- trunk/SmartCardServices/src/PKCS11dotNetV2/PKCS11Module2/cardcache.cpp 2010-02-04 14:54:20 UTC (rev 112)
+++ trunk/SmartCardServices/src/PKCS11dotNetV2/PKCS11Module2/cardcache.cpp 2010-02-08 09:41:15 UTC (rev 113)
@@ -28,7 +28,7 @@
#define KEYSPEC_KEYEXCHANGE 0x01
#define KEYSPEC_SIGNATURE 0x02
#define MAX_RETRY 2
-#define LOW_MEMORY_LIMIT 5000
+#define LOW_MEMORY_LIMIT 25000
/* Constructor
@@ -47,12 +47,16 @@
{
try
{
- s4 freeMemory = _mscm->GetMemory( );
+ if( NULL != _mscm )
+ {
+ s4 freeMemory = _mscm->GetMemory( );
- if ( freeMemory < LOW_MEMORY_LIMIT )
- {
- Log::error( "CardCache::ManageGC", "ForceGarbageCollector" );
- _mscm->ForceGarbageCollector( );
+ if ( freeMemory < LOW_MEMORY_LIMIT )
+ {
+ //printf( "\nCardCache::ManageGC - ForceGarbageCollector\n" );
+ Log::error( "CardCache::ManageGC", "ForceGarbageCollector" );
+ _mscm->ForceGarbageCollector( );
+ }
}
}
catch( ... )
@@ -72,9 +76,9 @@
{
try
{
- ManageGC( );
ntry++;
_mscm->WriteFile( const_cast< std::string* >( &path ), const_cast< u1Array* >( &data ) );
+ ManageGC( );
_fileCache[ path ] = data;
break;
}
@@ -110,6 +114,8 @@
*/
const u1Array & CardCache::ReadFile( std::string const & path )
{
+ //Log::log( "***** CardCache::ReadFile - path <%s>", path.c_str( ) );
+
// V2+ cards may throw OutOfMemoryException from ReadFile, however
// it may recover from this by forcing the garbage collection to
// occur. In fact as a result of a ReadFile command that throws
@@ -119,14 +125,16 @@
map<string, u1Array>::const_iterator ifile = _fileCache.find( path );
if( ifile == _fileCache.end( ) )
{
+ //Log::log( "****** CardCache::ReadFile - read card" );
+
int ntry = 0;
while( ntry < MAX_RETRY )
{
try
{
- ManageGC( );
ntry++;
auto_ptr< u1Array > data( _mscm->ReadFile( const_cast< std::string* >( &path ), 0 ) );
+ ManageGC( );
_fileCache[ path ] = *data;
break;
}
@@ -246,9 +254,9 @@
{
try
{
- ManageGC( );
ntry++;
auto_ptr<StringArray> files( _mscm->GetFiles( const_cast<string*>( &dir ) ) );
+ ManageGC( );
for( u4 i = 0; i < files->GetLength( ) ; i++ )
{
vfile.push_back( *files->GetStringAt( i ) );
Modified: trunk/SmartCardServices/src/PKCS11dotNetV2/PKCS11Module2/dataobject.h
===================================================================
--- trunk/SmartCardServices/src/PKCS11dotNetV2/PKCS11Module2/dataobject.h 2010-02-04 14:54:20 UTC (rev 112)
+++ trunk/SmartCardServices/src/PKCS11dotNetV2/PKCS11Module2/dataobject.h 2010-02-08 09:41:15 UTC (rev 113)
@@ -34,7 +34,7 @@
public:
DataObject();
- ~DataObject();
+ virtual ~DataObject();
CK_BBOOL Compare(CK_ATTRIBUTE attribute);
CK_RV SetAttribute(CK_ATTRIBUTE attribute,CK_BBOOL objCreation);
Modified: trunk/SmartCardServices/src/PKCS11dotNetV2/PKCS11Module2/log.cpp
===================================================================
--- trunk/SmartCardServices/src/PKCS11dotNetV2/PKCS11Module2/log.cpp 2010-02-04 14:54:20 UTC (rev 112)
+++ trunk/SmartCardServices/src/PKCS11dotNetV2/PKCS11Module2/log.cpp 2010-02-08 09:41:15 UTC (rev 113)
@@ -27,6 +27,7 @@
#define T_KEY_GEN_MECHANISM 7
#define T_UNKNOWN 8
+unsigned long Log::m_ulStart = 0;
/* Log a message into the log file
*/
@@ -2180,3 +2181,27 @@
#endif
}
+
+/*
+*/
+void Log::start( void )
+{
+#ifdef __DEBUG_GEMALTO__
+#ifdef WIN32
+ m_ulStart = GetTickCount( );
+#endif
+#endif
+}
+
+
+/*
+*/
+void Log::stop( const char* a_pMethod )
+{
+#ifdef __DEBUG_GEMALTO__
+#ifdef WIN32
+ unsigned long ulTickCount = GetTickCount( ) - m_ulStart;
+ Log::log( "%s - Spend <%ld> milliseconds", a_pMethod, ulTickCount );
+#endif
+#endif
+}
Modified: trunk/SmartCardServices/src/PKCS11dotNetV2/PKCS11Module2/log.h
===================================================================
--- trunk/SmartCardServices/src/PKCS11dotNetV2/PKCS11Module2/log.h 2010-02-04 14:54:20 UTC (rev 112)
+++ trunk/SmartCardServices/src/PKCS11dotNetV2/PKCS11Module2/log.h 2010-02-08 09:41:15 UTC (rev 113)
@@ -42,6 +42,9 @@
static void begin( const char* a_pMethod );
static void end( const char* a_pMethod );
+ static void start( void );
+ static void stop( const char* a_pMethod );
+
static void logCK_SLOT_ID_PTR( const char*, CK_SLOT_ID_PTR, CK_ULONG_PTR );
static void logCK_SLOT_INFO_PTR( const char*, CK_SLOT_INFO_PTR );
static void logCK_C_INITIALIZE_ARGS_PTR( const char*, CK_C_INITIALIZE_ARGS_PTR );
@@ -84,6 +87,9 @@
template<typename T> static void classtoString( const T & value, std::string &result );
+ static unsigned long m_ulStart;
+
+
};
Modified: trunk/SmartCardServices/src/PKCS11dotNetV2/PKCS11Module2/pkcs11.cpp
===================================================================
--- trunk/SmartCardServices/src/PKCS11dotNetV2/PKCS11Module2/pkcs11.cpp 2010-02-04 14:54:20 UTC (rev 112)
+++ trunk/SmartCardServices/src/PKCS11dotNetV2/PKCS11Module2/pkcs11.cpp 2010-02-08 09:41:15 UTC (rev 113)
@@ -58,6 +58,9 @@
// require significant work.
CCriticalSection _critSect;
+CCriticalSection _critSectAPI;
+
+
static const CK_FUNCTION_LIST FunctionList = {
{ CRYPTOKIVERSION_LIBRARY_MAJOR, CRYPTOKIVERSION_LIBRARY_MINOR },
@@ -113,70 +116,79 @@
* @param pInitArgs
*/
CK_DEFINE_FUNCTION( CK_RV, C_Initialize )( CK_VOID_PTR pInitArgs )
- {
- Log::begin( "C_Initialize" );
- Log::in( "C_Initialize" );
- Log::log( "C_Initialize - pInitArgs <%#02x>", pInitArgs );
- Log::log( "C_Initialize - isInitialized <%#02x>", _isInitialized );
-
+ {
+ CCriticalSectionLocker cslock( _critSectAPI );
+
CK_RV rv = CKR_OK;
-
- // Already Initialized
- if( TRUE == _isInitialized )
+
+ try
{
- Log::error( "C_Initialize", "CKR_CRYPTOKI_ALREADY_INITIALIZED" );
- rv = CKR_CRYPTOKI_ALREADY_INITIALIZED;
- }
- else if( NULL_PTR != pInitArgs )
- {
- CK_C_INITIALIZE_ARGS initArgs = *(CK_C_INITIALIZE_ARGS_PTR)pInitArgs;
+ Log::begin( "C_Initialize" );
+ Log::in( "C_Initialize" );
+ Log::log( "C_Initialize - pInitArgs <%#02x>", pInitArgs );
+ //SLog::log( S"C_Initialize - isInitialized <%#02x>", _isInitialized );
- Log::logCK_C_INITIALIZE_ARGS_PTR( "C_Initialize", (CK_C_INITIALIZE_ARGS_PTR)pInitArgs );
-
- if( NULL_PTR != initArgs.pReserved )
+ // Already Initialized
+ if( TRUE == _isInitialized )
{
- Log::error( "C_Initialize", "CKR_ARGUMENTS_BAD" );
- rv = CKR_ARGUMENTS_BAD;
+ Log::error( "C_Initialize", "CKR_CRYPTOKI_ALREADY_INITIALIZED" );
+ rv = CKR_CRYPTOKI_ALREADY_INITIALIZED;
}
- else if( initArgs.flags & CKF_LIBRARY_CANT_CREATE_OS_THREADS )
+ else if( NULL_PTR != pInitArgs )
{
- Log::error( "C_Initialize", "CKR_NEED_TO_CREATE_THREADS" );
- rv = CKR_NEED_TO_CREATE_THREADS;
- }
- else if( initArgs.flags & CKF_OS_LOCKING_OK )
- {
- if( initArgs.CreateMutex || initArgs.DestroyMutex || initArgs.LockMutex || initArgs.UnlockMutex )
+ CK_C_INITIALIZE_ARGS initArgs = *(CK_C_INITIALIZE_ARGS_PTR)pInitArgs;
+
+ Log::logCK_C_INITIALIZE_ARGS_PTR( "C_Initialize", (CK_C_INITIALIZE_ARGS_PTR)pInitArgs );
+
+ if( NULL_PTR != initArgs.pReserved )
{
- Log::error( "C_Initialize", "CKR_CANT_LOCK" );
- rv = CKR_CANT_LOCK;
- }
- }
- else if( initArgs.CreateMutex || initArgs.DestroyMutex || initArgs.LockMutex || initArgs.UnlockMutex )
- {
- if( !initArgs.CreateMutex || !initArgs.DestroyMutex || !initArgs.LockMutex || !initArgs.UnlockMutex )
- {
Log::error( "C_Initialize", "CKR_ARGUMENTS_BAD" );
rv = CKR_ARGUMENTS_BAD;
}
- else if( !( initArgs.flags & CKF_OS_LOCKING_OK ) )
+ else if( initArgs.flags & CKF_LIBRARY_CANT_CREATE_OS_THREADS )
{
- Log::error( "C_Initialize", "CKR_CANT_LOCK" );
- rv = CKR_CANT_LOCK;
+ Log::error( "C_Initialize", "CKR_NEED_TO_CREATE_THREADS" );
+ rv = CKR_NEED_TO_CREATE_THREADS;
}
+ else if( initArgs.flags & CKF_OS_LOCKING_OK )
+ {
+ if( initArgs.CreateMutex || initArgs.DestroyMutex || initArgs.LockMutex || initArgs.UnlockMutex )
+ {
+ Log::error( "C_Initialize", "CKR_CANT_LOCK" );
+ rv = CKR_CANT_LOCK;
+ }
+ }
+ else if( initArgs.CreateMutex || initArgs.DestroyMutex || initArgs.LockMutex || initArgs.UnlockMutex )
+ {
+ if( !initArgs.CreateMutex || !initArgs.DestroyMutex || !initArgs.LockMutex || !initArgs.UnlockMutex )
+ {
+ Log::error( "C_Initialize", "CKR_ARGUMENTS_BAD" );
+ rv = CKR_ARGUMENTS_BAD;
+ }
+ else if( !( initArgs.flags & CKF_OS_LOCKING_OK ) )
+ {
+ Log::error( "C_Initialize", "CKR_CANT_LOCK" );
+ rv = CKR_CANT_LOCK;
+ }
+ }
}
+
+ if (rv == CKR_OK)
+ {
+ Application::InitApplication( );
+ _isInitialized = TRUE;
+ }
+
+ Log::log( "C_Initialize - isInitialized <%#02x>", _isInitialized );
+
+ Log::logCK_RV( "C_Initialize", rv );
+ Log::end( "C_Initialize\n" );
}
-
- if (rv == CKR_OK)
+ catch( ... )
{
- Application::InitApplication( );
- _isInitialized = TRUE;
+ rv = CKR_GENERAL_ERROR;
}
- Log::log( "C_Initialize - isInitialized <%#02x>", _isInitialized );
-
- Log::logCK_RV( "C_Initialize", rv );
- Log::end( "C_Initialize" );
-
return rv;
}
@@ -189,32 +201,41 @@
*/
CK_DEFINE_FUNCTION( CK_RV, C_Finalize )( CK_VOID_PTR pReserved )
{
- Log::begin( "C_Finalize" );
- Log::in( "C_Finalize" );
- Log::log( "C_Finalize - pReserved <%#02x>", pReserved );
-
+ CCriticalSectionLocker cslock( _critSectAPI );
+
CK_RV rv = CKR_OK;
+
+ try
+ {
+ Log::begin( "C_Finalize" );
+ Log::in( "C_Finalize" );
+ Log::log( "C_Finalize - pReserved <%#02x>", pReserved );
- // Not Initialized
- if( !_isInitialized )
- {
- Log::error( "C_Finalize", "CKR_CRYPTOKI_NOT_INITIALIZED" );
- rv = CKR_CRYPTOKI_NOT_INITIALIZED;
+ // Not Initialized
+ if( !_isInitialized )
+ {
+ Log::error( "C_Finalize", "CKR_CRYPTOKI_NOT_INITIALIZED" );
+ rv = CKR_CRYPTOKI_NOT_INITIALIZED;
+ }
+ else if( NULL_PTR != pReserved )
+ {
+ Log::error( "C_Finalize", "CKR_ARGUMENTS_BAD" );
+ rv = CKR_ARGUMENTS_BAD;
+ }
+ else
+ {
+ _isInitialized = FALSE;
+ Application::End( );
+ }
+
+ Log::logCK_RV( "C_Finalize", rv );
+ Log::end( "C_Finalize\n" );
}
- else if( NULL_PTR != pReserved )
+ catch( ... )
{
- Log::error( "C_Finalize", "CKR_ARGUMENTS_BAD" );
- rv = CKR_ARGUMENTS_BAD;
+ rv = CKR_GENERAL_ERROR;
}
- else
- {
- _isInitialized = FALSE;
- Application::End( );
- }
- Log::logCK_RV( "C_Finalize", rv );
- Log::end( "C_Finalize" );
-
return rv;
}
@@ -226,37 +247,47 @@
*/
CK_DEFINE_FUNCTION( CK_RV, C_GetInfo )( CK_INFO_PTR pInfo )
{
- Log::begin( "C_GetInfo" );
- Log::in( "C_GetInfo" );
- Log::logCK_INFO( "C_GetInfo", pInfo );
-
+ CCriticalSectionLocker cslock( _critSectAPI );
+
CK_RV rv = CKR_OK;
- if( FALSE == _isInitialized )
+
+ try
{
- rv = CKR_CRYPTOKI_NOT_INITIALIZED;
+ Log::begin( "C_GetInfo" );
+ Log::in( "C_GetInfo" );
+ Log::logCK_INFO( "C_GetInfo", pInfo );
+
+ if( FALSE == _isInitialized )
+ {
+ rv = CKR_CRYPTOKI_NOT_INITIALIZED;
+ }
+ else if( NULL_PTR == pInfo )
+ {
+ rv = CKR_ARGUMENTS_BAD;
+ }
+ else
+ {
+ pInfo->cryptokiVersion.major = CRYPTOKIVERSION_INTERFACE_MAJOR;
+ pInfo->cryptokiVersion.minor = CRYPTOKIVERSION_INTERFACE_MINOR;
+ pInfo->flags = 0;
+ memset(pInfo->libraryDescription, ' ', sizeof(pInfo->libraryDescription));
+ memcpy(pInfo->libraryDescription, LIBRARY_DESCRIPTION, strlen(LIBRARY_DESCRIPTION));
+ memset(pInfo->manufacturerID, ' ', sizeof(pInfo->manufacturerID));
+ memcpy(pInfo->manufacturerID, MANUFACTURER_ID, strlen(MANUFACTURER_ID));
+ pInfo->libraryVersion.major = CRYPTOKIVERSION_LIBRARY_MAJOR;
+ pInfo->libraryVersion.minor = CRYPTOKIVERSION_LIBRARY_MINOR;
+ }
+
+ Log::logCK_RV( "C_GetInfo", rv );
+ Log::out( "C_GetInfo" );
+ Log::logCK_INFO( "C_GetInfo", pInfo );
+ Log::end( "C_GetInfo\n" );
}
- else if( NULL_PTR == pInfo )
+ catch( ... )
{
- rv = CKR_ARGUMENTS_BAD;
+ rv = CKR_GENERAL_ERROR;
}
- else
- {
- pInfo->cryptokiVersion.major = CRYPTOKIVERSION_INTERFACE_MAJOR;
- pInfo->cryptokiVersion.minor = CRYPTOKIVERSION_INTERFACE_MINOR;
- pInfo->flags = 0;
- memset(pInfo->libraryDescription, ' ', sizeof(pInfo->libraryDescription));
- memcpy(pInfo->libraryDescription, LIBRARY_DESCRIPTION, strlen(LIBRARY_DESCRIPTION));
- memset(pInfo->manufacturerID, ' ', sizeof(pInfo->manufacturerID));
- memcpy(pInfo->manufacturerID, MANUFACTURER_ID, strlen(MANUFACTURER_ID));
- pInfo->libraryVersion.major = CRYPTOKIVERSION_LIBRARY_MAJOR;
- pInfo->libraryVersion.minor = CRYPTOKIVERSION_LIBRARY_MINOR;
- }
- Log::logCK_RV( "C_GetInfo", rv );
- Log::out( "C_GetInfo" );
- Log::logCK_INFO( "C_GetInfo", pInfo );
- Log::end( "C_GetInfo" );
-
return rv;
}
@@ -267,26 +298,36 @@
*/
CK_DEFINE_FUNCTION( CK_RV,C_GetFunctionList )( CK_FUNCTION_LIST_PTR_PTR ppFunctionList )
{
- Log::begin( "C_GetFunctionList" );
- Log::in( "C_GetFunctionList" );
- Log::log( "C_GetFunctionList - CK_FUNCTION_LIST_PTR_PTR <%#02x>", ppFunctionList );
-
+ CCriticalSectionLocker cslock( _critSectAPI );
+
CK_RV rv = CKR_OK;
- if( NULL_PTR == ppFunctionList )
+
+ try
{
- rv = CKR_ARGUMENTS_BAD;
+ Log::begin( "C_GetFunctionList" );
+ Log::in( "C_GetFunctionList" );
+ Log::log( "C_GetFunctionList - CK_FUNCTION_LIST_PTR_PTR <%#02x>", ppFunctionList );
+
+ if( NULL_PTR == ppFunctionList )
+ {
+ rv = CKR_ARGUMENTS_BAD;
+ }
+ else
+ {
+ // this is the only function which an application can call before calling C_Initialize
+ *ppFunctionList = (CK_FUNCTION_LIST_PTR)&FunctionList;
+ }
+
+ Log::logCK_RV( "C_GetFunctionList", rv );
+ Log::out( "C_GetFunctionList" );
+ Log::log( "C_GetFunctionList - CK_FUNCTION_LIST_PTR_PTR <%#02x>", ppFunctionList );
+ Log::end( "C_GetFunctionList\n" );
}
- else
+ catch( ... )
{
- // this is the only function which an application can call before calling C_Initialize
- *ppFunctionList = (CK_FUNCTION_LIST_PTR)&FunctionList;
+ rv = CKR_GENERAL_ERROR;
}
- Log::logCK_RV( "C_GetFunctionList", rv );
- Log::out( "C_GetFunctionList" );
- Log::log( "C_GetFunctionList - CK_FUNCTION_LIST_PTR_PTR <%#02x>", ppFunctionList );
- Log::end( "C_GetFunctionList" );
-
return rv;
}
@@ -300,23 +341,35 @@
*/
CK_DEFINE_FUNCTION( CK_RV, C_GetSlotList )( CK_BBOOL tokenPresent, CK_SLOT_ID_PTR pSlotList, CK_ULONG_PTR pulCount )
{
- Log::begin( "C_GetSlotList" );
- Log::in( "C_GetSlotList" );
- Log::log( "C_GetSlotList - tokenPresent <%d>", tokenPresent );
- Log::logCK_SLOT_ID_PTR( "C_GetSlotList", pSlotList, pulCount );
-
+ CCriticalSectionLocker cslock( _critSectAPI );
+
CK_RV rv = CKR_OK;
- PKCS11_TRY
+
+ try
{
- rv = Application::Enumerate( tokenPresent, pSlotList, pulCount );
+ Log::begin( "C_GetSlotList" );
+ Log::in( "C_GetSlotList" );
+ Log::log( "C_GetSlotList - tokenPresent <%d>", tokenPresent );
+ Log::logCK_SLOT_ID_PTR( "C_GetSlotList", pSlotList, pulCount );
+
+ Log::start( );
+ PKCS11_TRY
+ {
+ rv = Application::Enumerate( tokenPresent, pSlotList, pulCount );
+ }
+ PKCS11_CATCH( rv )
+ Log::stop( "C_GetSlotList" );
+
+ Log::logCK_RV( "C_GetSlotList", rv );
+ Log::out( "C_GetSlotList" );
+ Log::logCK_SLOT_ID_PTR( "C_GetSlotList", pSlotList, pulCount );
+ Log::end( "C_GetSlotList\n" );
}
- PKCS11_CATCH( rv )
+ catch( ... )
+ {
+ rv = CKR_GENERAL_ERROR;
+ }
- Log::logCK_RV( "C_GetSlotList", rv );
- Log::out( "C_GetSlotList" );
- Log::logCK_SLOT_ID_PTR( "C_GetSlotList", pSlotList, pulCount );
- Log::end( "C_GetSlotList" );
-
return rv;
}
@@ -330,38 +383,51 @@
*/
CK_DEFINE_FUNCTION( CK_RV, C_GetSlotInfo )( CK_SLOT_ID slotID, CK_SLOT_INFO_PTR pInfo )
{
- Log::begin( "C_GetSlotInfo" );
- Log::in( "C_GetSlotInfo" );
- Log::log( "C_GetSlotInfo - slotID <%ld>", slotID );
- Log::logCK_SLOT_INFO_PTR( "C_GetSlotInfo", pInfo );
-
+ CCriticalSectionLocker cslock( _critSectAPI );
+
CK_RV rv = CKR_OK;
- PKCS11_TRY
+
+ try
{
- if(Application::_numSlots == 0)
+ Log::begin( "C_GetSlotInfo" );
+ Log::in( "C_GetSlotInfo" );
+ Log::log( "C_GetSlotInfo - slotID <%ld>", slotID );
+ Log::logCK_SLOT_INFO_PTR( "C_GetSlotInfo", pInfo );
+
+ Log::start( );
+ PKCS11_TRY
{
- CK_ULONG slotCount = 0;
- Application::Enumerate(CK_FALSE,NULL_PTR,&slotCount);
- CK_SLOT_ID_PTR slots = (CK_SLOT_ID_PTR)malloc(sizeof(CK_SLOT_ID)*slotCount);
- Application::Enumerate(CK_FALSE,slots,&slotCount);
- free(slots);
- }
+ //if(Application::_numSlots == 0)
+ // {
+ // //CK_ULONG slotCount = 0;
+ // //Application::Enumerate(CK_FALSE,NULL_PTR,&slotCount);
+ // CK_ULONG slotCount = 32;
+ // CK_SLOT_ID_PTR slots = (CK_SLOT_ID_PTR) malloc( sizeof( CK_SLOT_ID ) * slotCount );
+ // Application::Enumerate( CK_FALSE, slots, &slotCount );
+ // free(slots);
+ // }
- Slot* pSlot = NULL_PTR;
- rv = Application::GetSlotFromSlotId( slotID, &pSlot );
+ Slot* pSlot = NULL_PTR;
+ rv = Application::GetSlotFromSlotId( slotID, &pSlot );
- if(rv == CKR_OK)
- {
- rv = pSlot->GetInfo( pInfo );
+ if(rv == CKR_OK)
+ {
+ rv = pSlot->GetInfo( pInfo );
+ }
}
+ PKCS11_CATCH(rv)
+ Log::stop( "C_GetSlotInfo" );
+
+ Log::logCK_RV( "C_GetSlotInfo", rv );
+ Log::out( "C_GetSlotInfo" );
+ Log::logCK_SLOT_INFO_PTR( "C_GetSlotInfo", pInfo );
+ Log::end( "C_GetSlotInfo\n" );
}
- PKCS11_CATCH(rv)
+ catch( ... )
+ {
+ rv = CKR_GENERAL_ERROR;
+ }
- Log::logCK_RV( "C_GetSlotInfo", rv );
- Log::out( "C_GetSlotInfo" );
- Log::logCK_SLOT_INFO_PTR( "C_GetSlotInfo", pInfo );
- Log::end( "C_GetSlotInfo" );
-
return rv;
}
@@ -375,59 +441,71 @@
*/
CK_DEFINE_FUNCTION( CK_RV, C_GetTokenInfo )( CK_SLOT_ID slotID, CK_TOKEN_INFO_PTR pInfo )
{
- Log::begin( "C_GetTokenInfo" );
- Log::in( "C_GetTokenInfo" );
- Log::log( "C_GetTokenInfo - slotID <%ld>", slotID );
- Log::logCK_TOKEN_INFO_PTR( "C_GetTokenInfo", pInfo );
-
+ CCriticalSectionLocker cslock( _critSectAPI );
+
CK_RV rv = CKR_OK;
+
+ try
+ {
+ Log::begin( "C_GetTokenInfo" );
+ Log::in( "C_GetTokenInfo" );
+ Log::log( "C_GetTokenInfo - slotID <%ld>", slotID );
+ Log::logCK_TOKEN_INFO_PTR( "C_GetTokenInfo", pInfo );
- PKCS11_TRY
- {
- if(Application::_numSlots == 0)
+ Log::start( );
+ PKCS11_TRY
{
- CK_ULONG slotCount = 0;
- Application::Enumerate(CK_FALSE,NULL_PTR,&slotCount);
- CK_SLOT_ID_PTR slots = (CK_SLOT_ID_PTR)malloc(sizeof(CK_SLOT_ID)*slotCount);
- Application::Enumerate(CK_FALSE,slots,&slotCount);
- free(slots);
- }
+ //if(Application::_numSlots == 0)
+ //{
+ // //CK_ULONG slotCount = 0;
+ // //Application::Enumerate(CK_FALSE,NULL_PTR,&slotCount);
+ // CK_ULONG slotCount = 32;
+ // CK_SLOT_ID_PTR slots = (CK_SLOT_ID_PTR) malloc( sizeof( CK_SLOT_ID ) * slotCount );
+ // Application::Enumerate( CK_FALSE, slots, &slotCount );
+ // free(slots);
+ //}
- Slot* slot = NULL_PTR;
- rv = Application::GetSlotFromSlotId(slotID,&slot);
+ Slot* slot = NULL_PTR;
+ rv = Application::GetSlotFromSlotId(slotID,&slot);
- if(rv == CKR_OK)
+ if(rv == CKR_OK)
+ {
+ rv = slot->GetTokenInfo(pInfo);
+ }
+ }
+ //PKCS11_CATCH(rv)
+ catch( CkError & e )
{
- rv = slot->GetTokenInfo(pInfo);
+ rv = e.Error( );
+ //Log::log( "C_GetTokenInfo - ## Error ## CkError <%s> <%#02x>", e.what( ), e.Error( ) );
}
+ catch( PcscError & /*e*/ )
+ {
+ rv = CKR_FUNCTION_FAILED;
+ //Log::log( "C_GetTokenInfo - ## Error ## PcscError <%s> <%#02x> <%#02x>", e.what( ), e.Error( ), rv );
+ }
+ catch( Marshaller::Exception & e )
+ {
+ rv = CkError::CheckMarshallerException( e );
+ //Log::log( "C_GetTokenInfo - ## Error ## PcscError <%s> <%#02x>", e.what( ), rv );
+ }
+ catch( ... )
+ {
+ rv = CKR_GENERAL_ERROR;
+ //Log::log( "C_GetTokenInfo - ## Error ## (...) <%#02x>", rv );
+ }
+ Log::stop( "C_GetTokenInfo" );
+
+ Log::logCK_RV( "C_GetTokenInfo", rv );
+ Log::out( "C_GetTokenInfo" );
+ Log::logCK_TOKEN_INFO_PTR( "C_GetTokenInfo", pInfo );
+ Log::end( "C_GetTokenInfo\n" );
}
- //PKCS11_CATCH(rv)
- catch( CkError & e )
- {
- rv = e.Error( );
- Log::log( "C_GetTokenInfo - ## Error ## CkError <%s> <%#02x>", e.what( ), e.Error( ) );
- }
- catch( PcscError & e )
- {
- rv = CKR_FUNCTION_FAILED;
- Log::log( "C_GetTokenInfo - ## Error ## PcscError <%s> <%#02x> <%#02x>", e.what( ), e.Error( ), rv );
- }
- catch( Marshaller::Exception & e )
- {
- rv = CkError::CheckMarshallerException( e );
- Log::log( "C_GetTokenInfo - ## Error ## PcscError <%s> <%#02x>", e.what( ), rv );
- }
catch( ... )
{
rv = CKR_GENERAL_ERROR;
- Log::log( "C_GetTokenInfo - ## Error ## (...) <%#02x>", rv );
}
- Log::logCK_RV( "C_GetTokenInfo", rv );
- Log::out( "C_GetTokenInfo" );
- Log::logCK_TOKEN_INFO_PTR( "C_GetTokenInfo", pInfo );
- Log::end( "C_GetTokenInfo" );
-
return rv;
}
@@ -442,38 +520,51 @@
*/
CK_DEFINE_FUNCTION( CK_RV, C_GetMechanismList )( CK_SLOT_ID slotID, CK_MECHANISM_TYPE_PTR pMechanismList, CK_ULONG_PTR pulCount )
{
- Log::begin( "C_GetMechanismList" );
- Log::in( "C_GetMechanismList" );
- Log::log( "C_GetMechanismList - slotID <%#02x>", slotID );
- Log::logCK_MECHANISM_TYPE( "C_GetMechanismList", pMechanismList, pulCount );
-
+ CCriticalSectionLocker cslock( _critSectAPI );
+
CK_RV rv = CKR_OK;
+
+ try
+ {
+ Log::begin( "C_GetMechanismList" );
+ Log::in( "C_GetMechanismList" );
+ Log::log( "C_GetMechanismList - slotID <%#02x>", slotID );
+ Log::logCK_MECHANISM_TYPE( "C_GetMechanismList", pMechanismList, pulCount );
- PKCS11_TRY
- {
- if(Application::_numSlots == 0)
+ Log::start( );
+ PKCS11_TRY
{
- CK_ULONG slotCount = 0;
- Application::Enumerate(CK_FALSE,NULL_PTR,&slotCount);
- CK_SLOT_ID_PTR slots = (CK_SLOT_ID_PTR)malloc(sizeof(CK_SLOT_ID)*slotCount);
- Application::Enumerate(CK_FALSE,slots,&slotCount);
- free(slots);
- }
+ //if(Application::_numSlots == 0)
+ //{
+ // //CK_ULONG slotCount = 0;
+ // //Application::Enumerate(CK_FALSE,NULL_PTR,&slotCount);
+ // CK_ULONG slotCount = 32;
+ // CK_SLOT_ID_PTR slots = (CK_SLOT_ID_PTR) malloc( sizeof( CK_SLOT_ID ) * slotCount );
+ // Application::Enumerate( CK_FALSE, slots, &slotCount );
+ // free(slots);
+ //}
- Slot* slot = NULL_PTR;
- rv = Application::GetSlotFromSlotId(slotID,&slot);
+ Slot* slot = NULL_PTR;
+ rv = Application::GetSlotFromSlotId(slotID,&slot);
- if(rv == CKR_OK)
- {
- rv = slot->GetMechanismList(pMechanismList,pulCount);
+ if(rv == CKR_OK)
+ {
+ rv = slot->GetMechanismList(pMechanismList,pulCount);
+ }
}
+ PKCS11_CATCH(rv)
+ Log::stop( "C_GetMechanismList" );
+
+ Log::logCK_RV( "C_GetMechanismList", rv );
+ Log::out( "C_GetMechanismList" );
+ Log::logCK_MECHANISM_TYPE( "C_GetMechanismList", pMechanismList, pulCount );
+ Log::end( "C_GetMechanismList\n" );
}
- PKCS11_CATCH(rv)
+ catch( ... )
+ {
+ rv = CKR_GENERAL_ERROR;
+ }
- Log::logCK_RV( "C_GetMechanismList", rv );
- Log::out( "C_GetMechanismList" );
- Log::logCK_MECHANISM_TYPE( "C_GetMechanismList", pMechanismList, pulCount );
- Log::end( "C_GetMechanismList" );
return rv;
}
@@ -488,39 +579,52 @@
*/
CK_DEFINE_FUNCTION( CK_RV, C_GetMechanismInfo )( CK_SLOT_ID slotID, CK_MECHANISM_TYPE type, CK_MECHANISM_INFO_PTR pInfo )
{
- Log::begin( "C_GetMechanismInfo" );
- Log::in( "C_GetMechanismInfo" );
- Log::log( "C_GetMechanismInfo - slotID <%#02x>", slotID );
- Log::logCK_MECHANISM_TYPE( "C_GetMechanismInfo", type );
- Log::logCK_MECHANISM_INFO_PTR( "C_GetMechanismInfo", pInfo );
-
+ CCriticalSectionLocker cslock( _critSectAPI );
+
CK_RV rv = CKR_OK;
+
+ try
+ {
+ Log::begin( "C_GetMechanismInfo" );
+ Log::in( "C_GetMechanismInfo" );
+ Log::log( "C_GetMechanismInfo - slotID <%#02x>", slotID );
+ Log::logCK_MECHANISM_TYPE( "C_GetMechanismInfo", type );
+ Log::logCK_MECHANISM_INFO_PTR( "C_GetMechanismInfo", pInfo );
- PKCS11_TRY
- {
- if(Application::_numSlots == 0)
+ Log::start( );
+ PKCS11_TRY
{
- CK_ULONG slotCount = 0;
- Application::Enumerate(CK_FALSE,NULL_PTR,&slotCount);
- CK_SLOT_ID_PTR slots = (CK_SLOT_ID_PTR)malloc(sizeof(CK_SLOT_ID)*slotCount);
- Application::Enumerate(CK_FALSE,slots,&slotCount);
- free(slots);
- }
+ //if(Application::_numSlots == 0)
+ //{
+ // //CK_ULONG slotCount = 0;
+ // //Application::Enumerate(CK_FALSE,NULL_PTR,&slotCount);
+ // CK_ULONG slotCount = 32;
+ // CK_SLOT_ID_PTR slots = (CK_SLOT_ID_PTR) malloc( sizeof( CK_SLOT_ID ) * slotCount );
+ // Application::Enumerate( CK_FALSE, slots, &slotCount );
+ // free(slots);
+ //}
- Slot* slot = NULL_PTR;
- rv = Application::GetSlotFromSlotId(slotID,&slot);
+ Slot* slot = NULL_PTR;
+ rv = Application::GetSlotFromSlotId(slotID,&slot);
- if(rv == CKR_OK)
- {
- rv = slot->GetMechanismInfo(type,pInfo);
+ if(rv == CKR_OK)
+ {
+ rv = slot->GetMechanismInfo(type,pInfo);
+ }
}
+ PKCS11_CATCH(rv)
+ Log::stop( "C_GetMechanismInfo" );
+
+ Log::logCK_RV( "C_GetMechanismInfo", rv );
+ Log::out( "C_GetMechanismInfo" );
+ Log::logCK_MECHANISM_INFO_PTR( "C_GetMechanismInfo", pInfo );
+ Log::end( "C_GetMechanismInfo\n" );
}
- PKCS11_CATCH(rv)
+ catch( ... )
+ {
+ rv = CKR_GENERAL_ERROR;
+ }
- Log::logCK_RV( "C_GetMechanismInfo", rv );
- Log::out( "C_GetMechanismInfo" );
- Log::logCK_MECHANISM_INFO_PTR( "C_GetMechanismInfo", pInfo );
- Log::end( "C_GetMechanismInfo" );
return rv;
}
@@ -535,36 +639,50 @@
*/
CK_DEFINE_FUNCTION( CK_RV, C_InitToken )( CK_SLOT_ID slotID, CK_UTF8CHAR_PTR pPin, CK_ULONG ulPinLen, CK_UTF8CHAR_PTR pLabel )
{
- Log::begin( "C_InitToken" );
- Log::in( "C_InitToken" );
- Log::log( "C_InitToken - slotID <%#02x>", slotID );
- Log::logCK_UTF8CHAR_PTR( "C_InitToken - pPin", pPin, ulPinLen );
- Log::logCK_UTF8CHAR_PTR( "C_InitToken - pLabel", pLabel, 32 );
-
+ CCriticalSectionLocker cslock( _critSectAPI );
+
CK_RV rv = CKR_OK;
- PKCS11_TRY
+
+ try
{
- if(Application::_numSlots == 0)
+ Log::begin( "C_InitToken" );
+ Log::in( "C_InitToken" );
+ Log::log( "C_InitToken - slotID <%#02x>", slotID );
+ Log::logCK_UTF8CHAR_PTR( "C_InitToken - pPin", pPin, ulPinLen );
+ Log::logCK_UTF8CHAR_PTR( "C_InitToken - pLabel", pLabel, 32 );
+
+ Log::start( );
+ PKCS11_TRY
{
- CK_ULONG slotCount = 0;
- Application::Enumerate(CK_FALSE,NULL_PTR,&slotCount);
- CK_SLOT_ID_PTR slots = (CK_SLOT_ID_PTR)malloc(sizeof(CK_SLOT_ID)*slotCount);
- Application::Enumerate(CK_FALSE,slots,&slotCount);
- free(slots);
- }
+ //if(Application::_numSlots == 0)
+ //{
+ // //CK_ULONG slotCount = 0;
+ // //Application::Enumerate(CK_FALSE,NULL_PTR,&slotCount);
+ // CK_ULONG slotCount = 32;
+ // CK_SLOT_ID_PTR slots = (CK_SLOT_ID_PTR) malloc( sizeof( CK_SLOT_ID ) * slotCount );
+ // Application::Enumerate( CK_FALSE, slots, &slotCount );
+ // free(slots);
+ //}
- Slot* slot = NULL_PTR;
- rv = Application::GetSlotFromSlotId(slotID,&slot);
+ Slot* slot = NULL_PTR;
+ rv = Application::GetSlotFromSlotId(slotID,&slot);
- if(rv == CKR_OK)
- {
- rv = slot->InitToken(pPin,ulPinLen,pLabel);
+ if(rv == CKR_OK)
+ {
+ rv = slot->InitToken(pPin,ulPinLen,pLabel);
+ }
}
+ PKCS11_CATCH(rv)
+ Log::stop( "C_InitToken" );
+
+ Log::logCK_RV( "C_InitToken", rv );
+ Log::end( "C_InitToken\n" );
}
- PKCS11_CATCH(rv)
+ catch( ... )
+ {
+ rv = CKR_GENERAL_ERROR;
+ }
- Log::logCK_RV( "C_InitToken", rv );
- Log::end( "C_InitToken" );
return rv;
}
@@ -578,20 +696,32 @@
*/
CK_DEFINE_FUNCTION( CK_RV,C_InitPIN )( CK_SESSION_HANDLE hSession, CK_UTF8CHAR_PTR pPin, CK_ULONG ulPinLen )
{
- Log::begin( "C_InitPIN" );
- Log::in( "C_InitPIN" );
- Log::log( "C_InitPIN - hSession <%#02x>", hSession );
- Log::logCK_UTF8CHAR_PTR( "C_InitPIN - pPin", pPin, ulPinLen );
-
+ CCriticalSectionLocker cslock( _critSectAPI );
+
CK_RV rv = CKR_OK;
- PKCS11_TRY
+
+ try
{
- rv = Slot::InitPIN( hSession, pPin, ulPinLen );
+ Log::begin( "C_InitPIN" );
+ Log::in( "C_InitPIN" );
+ Log::log( "C_InitPIN - hSession <%#02x>", hSession );
+ Log::logCK_UTF8CHAR_PTR( "C_InitPIN - pPin", pPin, ulPinLen );
+
+ Log::start( );
+ PKCS11_TRY
+ {
+ rv = Slot::InitPIN( hSession, pPin, ulPinLen );
+ }
+ PKCS11_CATCH(rv)
+ Log::stop( "C_InitPIN" );
+
+ Log::logCK_RV( "C_InitPIN", rv );
+ Log::end( "C_InitPIN\n" );
}
- PKCS11_CATCH(rv)
-
- Log::logCK_RV( "C_InitPIN", rv );
- Log::end( "C_InitPIN" );
+ catch( ... )
+ {
+ rv = CKR_GENERAL_ERROR;
+ }
return rv;
}
@@ -607,21 +737,35 @@
*/
CK_DEFINE_FUNCTION( CK_RV, C_SetPIN )( CK_SESSION_HANDLE hSession, CK_UTF8CHAR_PTR pOldPin, CK_ULONG ulOldLen, CK_UTF8CHAR_PTR pNewPin, CK_ULONG ulNewLen )
{
- Log::begin( "C_SetPIN" );
- Log::in( "C_SetPIN" );
- Log::log( "C_SetPIN - hSession <%#02x>", hSession );
- Log::logCK_UTF8CHAR_PTR( "C_SetPIN - pOldPin", pOldPin, ulOldLen );
- Log::logCK_UTF8CHAR_PTR( "C_SetPIN - pNewPin", pNewPin, ulNewLen );
-
+ CCriticalSectionLocker cslock( _critSectAPI );
+
CK_RV rv = CKR_OK;
- PKCS11_TRY
+
+ try
{
- rv = Slot::SetPIN( hSession, pOldPin, ulOldLen, pNewPin, ulNewLen );
+ Log::begin( "C_SetPIN" );
+ Log::in( "C_SetPIN" );
+ Log::log( "C_SetPIN - hSession <%#02x>", hSession );
+ Log::logCK_UTF8CHAR_PTR( "C_SetPIN - pOldPin", pOldPin, ulOldLen );
+ Log::logCK_UTF8CHAR_PTR( "C_SetPIN - pNewPin", pNewPin, ulNewLen );
+
+ Log::start( );
+ CK_RV rv = CKR_OK;
+ PKCS11_TRY
+ {
+ rv = Slot::SetPIN( hSession, pOldPin, ulOldLen, pNewPin, ulNewLen );
+ }
+ PKCS11_CATCH(rv)
+ Log::stop( "C_SetPIN" );
+
+ Log::logCK_RV( "C_SetPIN", rv );
+ Log::end( "C_SetPIN\n" );
}
- PKCS11_CATCH(rv)
+ catch( ... )
+ {
+ rv = CKR_GENERAL_ERROR;
+ }
- Log::logCK_RV( "C_SetPIN", rv );
- Log::end( "C_SetPIN" );
return rv;
}
@@ -638,41 +782,55 @@
*/
CK_DEFINE_FUNCTION( CK_RV, C_OpenSession )( CK_SLOT_ID slotID, CK_FLAGS flags, CK_VOID_PTR pApplication, CK_NOTIFY Notify, CK_SESSION_HANDLE_PTR phSession )
{
- Log::begin( "C_OpenSession" );
- Log::in( "C_OpenSession" );
- Log::log( "C_OpenSession - slotID <%#02x>", slotID );
- Log::logSessionFlags( "C_OpenSession", flags );
- Log::log( "C_OpenSession - pApplication <%#02x>", pApplication );
- Log::log( "C_OpenSession - Notify <%#02x>", Notify );
- Log::log( "C_OpenSession - phSession <%#02x> (%#02x)", phSession, ( ( NULL_PTR != phSession ) ? *phSession : 0 ) );
-
+ CCriticalSectionLocker cslock( _critSectAPI );
+
CK_RV rv = CKR_OK;
- PKCS11_TRY
+
+ try
{
- if(Application::_numSlots == 0)
+ Log::begin( "C_OpenSession" );
+ Log::in( "C_OpenSession" );
+ Log::log( "C_OpenSession - slotID <%#02x>", slotID );
+ Log::logSessionFlags( "C_OpenSession", flags );
+ Log::log( "C_OpenSession - pApplication <%#02x>", pApplication );
+ Log::log( "C_OpenSession - Notify <%#02x>", Notify );
+ Log::log( "C_OpenSession - phSession <%#02x> (%#02x)", phSession, ( ( NULL_PTR != phSession ) ? *phSession : 0 ) );
+
+ Log::start( );
+ PKCS11_TRY
{
- CK_ULONG slotCount = 0;
- Application::Enumerate(CK_FALSE,NULL_PTR,&slotCount);
- CK_SLOT_ID_PTR slots = (CK_SLOT_ID_PTR)malloc(sizeof(CK_SLOT_ID)*slotCount);
- Application::Enumerate(CK_FALSE,slots,&slotCount);
- free(slots);
- }
+ //if(Application::_numSlots == 0)
+ //{
+ // //CK_ULONG slotCount = 0;
+ // //Application::Enumerate(CK_FALSE,NULL_PTR,&slotCount);
+ // CK_ULONG slotCount = 32;
+ // CK_SLOT_ID_PTR slots = (CK_SLOT_ID_PTR) malloc( sizeof( CK_SLOT_ID ) * slotCount );
+ // Application::Enumerate( CK_FALSE, slots, &slotCount );
+ // free(slots);
+ //}
- Slot* slot = NULL_PTR;
- rv = Application::GetSlotFromSlotId(slotID,&slot);
+ Slot* slot = NULL_PTR;
+ rv = Application::GetSlotFromSlotId(slotID,&slot);
- if(rv == CKR_OK)
- {
- PKCS11_ASSERT(slot != NULL_PTR);
- rv = slot->OpenSession(flags,pApplication,Notify,phSession);
+ if(rv == CKR_OK)
+ {
+ PKCS11_ASSERT(slot != NULL_PTR);
+ rv = slot->OpenSession(flags,pApplication,Notify,phSession);
+ }
}
+ PKCS11_CATCH(rv)
+ Log::stop( "C_OpenSession" );
+
+ Log::logCK_RV( "C_OpenSession", rv );
+ Log::out( "C_OpenSession" );
+ Log::log( "C_OpenSession - phSession <%#02x> (%ld)", phSession, ( ( NULL_PTR != phSession ) ? *phSession : 0 ) );
+ Log::end( "C_OpenSession\n" );
}
- PKCS11_CATCH(rv)
+ catch( ... )
+ {
+ rv = CKR_GENERAL_ERROR;
+ }
- Log::logCK_RV( "C_OpenSession", rv );
- Log::out( "C_OpenSession" );
- Log::log( "C_OpenSession - phSession <%#02x> (%ld)", phSession, ( ( NULL_PTR != phSession ) ? *phSession : 0 ) );
- Log::end( "C_OpenSession" );
return rv;
}
@@ -685,19 +843,32 @@
*/
CK_DEFINE_FUNCTION( CK_RV, C_CloseSession )( CK_SESSION_HANDLE hSession )
{
- Log::begin( "C_CloseSession" );
- Log::in( "C_CloseSession" );
- Log::log( "C_CloseSession - hSession <%#02x>", hSession );
-
+ CCriticalSectionLocker cslock( _critSectAPI );
+
CK_RV rv = CKR_OK;
- PKCS11_TRY
+
+ try
{
- rv = Slot::CloseSession(hSession);
+ Log::begin( "C_CloseSession" );
+ Log::in( "C_CloseSession" );
+ Log::log( "C_CloseSession - hSession <%#02x>", hSession );
+
+ Log::start( );
+ PKCS11_TRY
+ {
+ rv = Slot::CloseSession(hSession);
+ }
+ PKCS11_CATCH(rv)
+ Log::stop( "C_CloseSession" );
+
+ Log::logCK_RV( "C_CloseSession", rv );
+ Log::end( "C_CloseSession\n" );
}
- PKCS11_CATCH(rv)
+ catch( ... )
+ {
+ rv = CKR_GENERAL_ERROR;
+ }
- Log::logCK_RV( "C_CloseSession", rv );
- Log::end( "C_CloseSession" );
return rv;
}
@@ -709,34 +880,48 @@
*/
CK_DEFINE_FUNCTION( CK_RV, C_CloseAllSessions )( CK_SLOT_ID slotID )
{
- Log::begin( "C_CloseAllSessions" );
- Log::in( "C_CloseAllSessions" );
- Log::log( "C_CloseAllSessions - slotID <%#02x>", slotID );
-
+ CCriticalSectionLocker cslock( _critSectAPI );
+
CK_RV rv = CKR_OK;
- PKCS11_TRY
+
+ try
{
- if(Application::_numSlots == 0)
+ Log::begin( "C_CloseAllSessions" );
+ Log::in( "C_CloseAllSessions" );
+ Log::log( "C_CloseAllSessions - slotID <%#02x>", slotID );
+
+ Log::start( );
+ PKCS11_TRY
{
- CK_ULONG slotCount = 0;
- Application::Enumerate(CK_FALSE,NULL_PTR,&slotCount);
- CK_SLOT_ID_PTR slots = (CK_SLOT_ID_PTR)malloc(sizeof(CK_SLOT_ID)*slotCount);
- Application::Enumerate(CK_FALSE,slots,&slotCount);
- free(slots);
- }
+ //if(Application::_numSlots == 0)
+ //{
+ // //CK_ULONG slotCount = 0;
+ // //Application::Enumerate(CK_FALSE,NULL_PTR,&slotCount);
+ // CK_ULONG slotCount = 32;
+ // CK_SLOT_ID_PTR slots = (CK_SLOT_ID_PTR) malloc( sizeof( CK_SLOT_ID ) * slotCount );
+ // Application::Enumerate( CK_FALSE, slots, &slotCount );
+ // free(slots);
+ //}
- Slot* slot = NULL_PTR;
- rv = Application::GetSlotFromSlotId(slotID,&slot);
+ Slot* slot = NULL_PTR;
+ rv = Application::GetSlotFromSlotId(slotID,&slot);
- if(rv == CKR_OK)
- {
- rv = slot->CloseAllSessions();
+ if(rv == CKR_OK)
+ {
+ rv = slot->CloseAllSessions();
+ }
}
+ PKCS11_CATCH(rv)
+ Log::stop( "C_CloseAllSessions" );
+
+ Log::logCK_RV( "C_CloseAllSessions", rv );
+ Log::end( "C_CloseAllSessions\n" );
}
- PKCS11_CATCH(rv)
+ catch( ... )
+ {
+ rv = CKR_GENERAL_ERROR;
+ }
- Log::logCK_RV( "C_CloseAllSessions", rv );
- Log::end( "C_CloseAllSessions" );
return rv;
}
@@ -749,22 +934,35 @@
*/
CK_DEFINE_FUNCTION( CK_RV, C_GetSessionInfo )( CK_SESSION_HANDLE hSession, CK_SESSION_INFO_PTR pInfo )
{
- Log::begin( "C_GetSessionInfo" );
- Log::in( "C_GetSessionInfo" );
- Log::log( "C_GetSessionInfo - hSession <%#02x>", hSession );
- Log::logCK_SESSION_INFO_PTR( "C_GetSessionInfo", pInfo );
-
+ CCriticalSectionLocker cslock( _critSectAPI );
+
CK_RV rv = CKR_OK;
- PKCS11_TRY
+
+ try
{
- rv = Slot::GetSessionInfo(hSession,pInfo);
+ Log::begin( "C_GetSessionInfo" );
+ Log::in( "C_GetSessionInfo" );
+ Log::log( "C_GetSessionInfo - hSession <%#02x>", hSession );
+ Log::logCK_SESSION_INFO_PTR( "C_GetSessionInfo", pInfo );
+
+ Log::start( );
+ PKCS11_TRY
+ {
+ rv = Slot::GetSessionInfo(hSession,pInfo);
+ }
+ PKCS11_CATCH(rv)
+ Log::stop( "C_GetSessionInfo" );
+
+ Log::logCK_RV( "C_GetSessionInfo", rv );
+ Log::out( "C_GetSessionInfo" );
+ Log::logCK_SESSION_INFO_PTR( "C_GetSessionInfo", pInfo );
+ Log::end( "C_GetSessionInfo\n" );
}
- PKCS11_CATCH(rv)
+ catch( ... )
+ {
+ rv = CKR_GENERAL_ERROR;
+ }
- Log::logCK_RV( "C_GetSessionInfo", rv );
- Log::out( "C_GetSessionInfo" );
- Log::logCK_SESSION_INFO_PTR( "C_GetSessionInfo", pInfo );
- Log::end( "C_GetSessionInfo" );
return rv;
}
@@ -787,7 +985,7 @@
rv = CKR_FUNCTION_NOT_SUPPORTED;
}
Log::logCK_RV( "C_GetOperationState", rv );
- Log::end( "C_GetOperationState" );
+ Log::end( "C_GetOperationState\n" );
return rv;
}
@@ -812,7 +1010,7 @@
rv = CKR_FUNCTION_NOT_SUPPORTED;
}
Log::logCK_RV( "C_SetOperationState", rv );
- Log::end( "C_SetOperationState" );
+ Log::end( "C_SetOperationState\n" );
return rv;
}
@@ -826,22 +1024,35 @@
*/
CK_DEFINE_FUNCTION( CK_RV, C_Login )( CK_SESSION_HANDLE hSession, CK_USER_TYPE userType, CK_UTF8CHAR_PTR pPin, CK_ULONG ulPinLen )
{
- Log::begin( "C_Login" );
- Log::in( "C_Login" );
- Log::log( "C_Login - hSession <%#02x>", hSession );
- Log::logCK_USER_TYPE( "C_Login", userType );
- Log::logCK_UTF8CHAR_PTR( "C_Login - pPin", pPin, ulPinLen );
- Log::log( "C_Login - ulPinLen <%ld>", ulPinLen );
-
+ CCriticalSectionLocker cslock( _critSectAPI );
+
CK_RV rv = CKR_OK;
- PKCS11_TRY
+
+ try
{
- rv = Slot::Login(hSession,userType,pPin,ulPinLen);
+ Log::begin( "C_Login" );
+ Log::in( "C_Login" );
+ Log::log( "C_Login - hSession <%#02x>", hSession );
+ Log::logCK_USER_TYPE( "C_Login", userType );
+ Log::logCK_UTF8CHAR_PTR( "C_Login - pPin", pPin, ulPinLen );
+ Log::log( "C_Login - ulPinLen <%ld>", ulPinLen );
+
+ Log::start( );
+ PKCS11_TRY
+ {
+ rv = Slot::Login(hSession,userType,pPin,ulPinLen);
+ }
+ PKCS11_CATCH(rv)
+ Log::stop( "C_Login" );
+
+ Log::logCK_RV( "C_Login", rv );
+ Log::end( "C_Login\n" );
}
- PKCS11_CATCH(rv)
+ catch( ... )
+ {
+ rv = CKR_GENERAL_ERROR;
+ }
- Log::logCK_RV( "C_Login", rv );
- Log::end( "C_Login" );
return rv;
}
@@ -853,19 +1064,32 @@
*/
CK_DEFINE_FUNCTION( CK_RV, C_Logout )( CK_SESSION_HANDLE hSession )
{
- Log::begin( "C_Logout" );
- Log::in( "C_Logout" );
- Log::log( "C_Logout - hSession <%#02x>", hSession );
-
+ CCriticalSectionLocker cslock( _critSectAPI );
+
CK_RV rv = CKR_OK;
- PKCS11_TRY
+
+ try
{
- rv = Slot::Logout(hSession);
+ Log::begin( "C_Logout" );
+ Log::in( "C_Logout" );
+ Log::log( "C_Logout - hSession <%#02x>", hSession );
+
+ Log::start( );
+ PKCS11_TRY
+ {
+ rv = Slot::Logout(hSession);
+ }
+ PKCS11_CATCH(rv)
+ Log::stop( "C_Logout" );
+
+ Log::logCK_RV( "C_Logout", rv );
+ Log::end( "C_Logout\n" );
}
- PKCS11_CATCH(rv)
+ catch( ... )
+ {
+ rv = CKR_GENERAL_ERROR;
+ }
- Log::logCK_RV( "C_Logout", rv );
- Log::end( "C_Logout" );
return rv;
}
@@ -880,23 +1104,36 @@
*/
CK_DEFINE_FUNCTION( CK_RV, C_CreateObject )( CK_SESSION_HANDLE hSession, CK_ATTRIBUTE_PTR pTemplate, CK_ULONG ulCount, CK_OBJECT_HANDLE_PTR phObject )
{
- Log::begin( "C_CreateObject" );
- Log::in( "C_CreateObject" );
- Log::log( "C_CreateObject - hSession <%#02x>", hSession );
- Log::logCK_ATTRIBUTE_PTR( "C_CreateObject", pTemplate, ulCount );
- Log::log( "C_CreateObject - phObject <%#02x>", phObject );
-
+ CCriticalSectionLocker cslock( _critSectAPI );
+
CK_RV rv = CKR_OK;
- PKCS11_TRY
+
+ try
{
- rv = Slot::CreateObject( hSession, pTemplate, ulCount, phObject );
+ Log::begin( "C_CreateObject" );
+ Log::in( "C_CreateObject" );
+ Log::log( "C_CreateObject - hSession <%#02x>", hSession );
+ Log::logCK_ATTRIBUTE_PTR( "C_CreateObject", pTemplate, ulCount );
+ Log::log( "C_CreateObject - phObject <%#02x>", phObject );
+
+ Log::start( );
+ PKCS11_TRY
+ {
+ rv = Slot::CreateObject( hSession, pTemplate, ulCount, phObject );
+ }
+ PKCS11_CATCH(rv)
+ Log::stop( "C_CreateObject" );
+
+ Log::logCK_RV( "C_CreateObject", rv );
+ Log::out( "C_CreateObject" );
+ Log::log( "C_CreateObject - phObject <%#02x> (%#02x)", phObject, ( ( NULL_PTR != phObject ) ? *phObject : 0 ) );
+ Log::end( "C_CreateObject\n" );
}
- PKCS11_CATCH(rv)
+ catch( ... )
+ {
+ rv = CKR_GENERAL_ERROR;
+ }
- Log::logCK_RV( "C_CreateObject", rv );
- Log::out( "C_CreateObject" );
- Log::log( "C_CreateObject - phObject <%#02x> (%ld)", phObject, ( ( NULL_PTR != phObject ) ? *phObject : 0 ) );
- Log::end( "C_CreateObject" );
return rv;
}
@@ -914,7 +1151,7 @@
}
Log::logCK_RV( "C_CopyObject", rv );
- Log::end( "C_CopyObject" );
+ Log::end( "C_CopyObject\n" );
return rv;
}
@@ -928,20 +1165,33 @@
*/
CK_DEFINE_FUNCTION( CK_RV, C_DestroyObject )( CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hObject )
{
- Log::begin( "C_DestroyObject" );
- Log::in( "C_DestroyObject" );
- Log::log( "C_DestroyObject - hSession <%#02x>", hSession );
- Log::log( "C_DestroyObject - hObject <%#02x>", hObject );
-
+ CCriticalSectionLocker cslock( _critSectAPI );
+
CK_RV rv = CKR_OK;
- PKCS11_TRY
+
+ try
{
- rv = Slot::DestroyObject( hSession, hObject );
+ Log::begin( "C_DestroyObject" );
+ Log::in( "C_DestroyObject" );
+ Log::log( "C_DestroyObject - hSession <%#02x>", hSession );
+ Log::log( "C_DestroyObject - hObject <%#02x>", hObject );
+
+ Log::start( );
+ PKCS11_TRY
+ {
+ rv = Slot::DestroyObject( hSession, hObject );
+ }
+ PKCS11_CATCH(rv)
+ Log::stop( "C_DestroyObject" );
+
+ Log::logCK_RV( "C_DestroyObject", rv );
+ Log::end( "C_DestroyObject\n" );
}
- PKCS11_CATCH(rv)
+ catch( ... )
+ {
+ rv = CKR_GENERAL_ERROR;
+ }
- Log::logCK_RV( "C_DestroyObject", rv );
- Log::end( "C_DestroyObject" );
return rv;
}
@@ -958,7 +1208,7 @@
}
Log::logCK_RV( "C_GetObjectSize", rv );
- Log::end( "C_GetObjectSize" );
+ Log::end( "C_GetObjectSize\n" );
return rv;
}
@@ -974,23 +1224,36 @@
*/
CK_DEFINE_FUNCTION( CK_RV, C_GetAttributeValue )( CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hObject, CK_ATTRIBUTE_PTR pTemplate, CK_ULONG ulCount )
{
- Log::begin( "C_GetAttributeValue" );
- Log::in( "C_GetAttributeValue" );
- Log::log( "C_GetAttributeValue - hSession <%#02x>", hSession );
- Log::logCK_ATTRIBUTE_PTR( "C_GetAttributeValue", pTemplate, ulCount );
- Log::log( "C_GetAttributeValue - hObject <%#02x>", hObject );
-
+ CCriticalSectionLocker cslock( _critSectAPI );
+
CK_RV rv = CKR_OK;
- PKCS11_TRY
+
+ try
{
- rv = Slot::GetAttributeValue(hSession,hObject,pTemplate,ulCount);
+ Log::begin( "C_GetAttributeValue" );
+ Log::in( "C_GetAttributeValue" );
+ Log::log( "C_GetAttributeValue - hSession <%#02x>", hSession );
+ Log::logCK_ATTRIBUTE_PTR( "C_GetAttributeValue", pTemplate, ulCount );
+ Log::log( "C_GetAttributeValue - hObject <%#02x>", hObject );
+
+ Log::start( );
+ PKCS11_TRY
+ {
+ rv = Slot::GetAttributeValue(hSession,hObject,pTemplate,ulCount);
+ }
+ PKCS11_CATCH(rv)
+ Log::stop( "C_GetAttributeValue" );
+
+ Log::logCK_RV( "C_GetAttributeValue", rv );
+ Log::out( "C_GetAttributeValue" );
+ Log::logCK_ATTRIBUTE_PTR( "C_GetAttributeValue", pTemplate, ulCount );
+ Log::end( "C_GetAttributeValue\n" );
}
- PKCS11_CATCH(rv)
+ catch( ... )
+ {
+ rv = CKR_GENERAL_ERROR;
+ }
- Log::logCK_RV( "C_GetAttributeValue", rv );
- Log::out( "C_GetAttributeValue" );
- Log::logCK_ATTRIBUTE_PTR( "C_GetAttributeValue", pTemplate, ulCount );
- Log::end( "C_GetAttributeValue" );
return rv;
}
@@ -1006,21 +1269,34 @@
*/
CK_DEFINE_FUNCTION( CK_RV, C_SetAttributeValue )( CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hObject, CK_ATTRIBUTE_PTR pTemplate, CK_ULONG ulCount )
{
- Log::begin( "C_SetAttributeValue" );
- Log::in( "C_SetAttributeValue" );
- Log::log( "C_SetAttributeValue - hSession <%#02x>", hSession );
- Log::logCK_ATTRIBUTE_PTR( "C_SetAttributeValue", pTemplate, ulCount );
- Log::log( "C_SetAttributeValue - hObject <%#02x>", hObject );
-
+ CCriticalSectionLocker cslock( _critSectAPI );
+
CK_RV rv = CKR_OK;
- PKCS11_TRY
+
+ try
{
- rv = Slot::SetAttributeValue( hSession, hObject, pTemplate, ulCount );
+ Log::begin( "C_SetAttributeValue" );
+ Log::in( "C_SetAttributeValue" );
+ Log::log( "C_SetAttributeValue - hSession <%#02x>", hSession );
+ Log::logCK_ATTRIBUTE_PTR( "C_SetAttributeValue", pTemplate, ulCount );
+ Log::log( "C_SetAttributeValue - hObject <%#02x>", hObject );
+
+ Log::start( );
+ PKCS11_TRY
+ {
+ rv = Slot::SetAttributeValue( hSession, hObject, pTemplate, ulCount );
+ }
+ PKCS11_CATCH( rv )
+ Log::stop( "C_SetAttributeValue" );
+
+ Log::logCK_RV( "C_SetAttributeValue", rv );
+ Log::end( "C_SetAttributeValue\n" );
}
- PKCS11_CATCH( rv )
+ catch( ... )
+ {
+ rv = CKR_GENERAL_ERROR;
+ }
- Log::logCK_RV( "C_SetAttributeValue", rv );
- Log::end( "C_SetAttributeValue" );
return rv;
}
@@ -1035,20 +1311,32 @@
*/
CK_DEFINE_FUNCTION( CK_RV, C_FindObjectsInit )( CK_SESSION_HANDLE hSession, CK_ATTRIBUTE_PTR pTemplate, CK_ULONG ulCount )
{
- Log::begin( "C_FindObjectsInit" );
- Log::in( "C_FindObjectsInit" );
- Log::log( "C_FindObjectsInit - hSession <%#02x>", hSession );
- Log::logCK_ATTRIBUTE_PTR( "C_FindObjectsInit", pTemplate, ulCount );
-
+ CCriticalSectionLocker cslock( _critSectAPI );
+
CK_RV rv = CKR_OK;
- PKCS11_TRY
+
+ try
{
- rv = Slot::FindObjectsInit(hSession,pTemplate,ulCount);
+ Log::begin( "C_FindObjectsInit" );
+ Log::in( "C_FindObjectsInit" );
+ Log::log( "C_FindObjectsInit - hSession <%#02x>", hSession );
+ Log::logCK_ATTRIBUTE_PTR( "C_FindObjectsInit", pTemplate, ulCount );
+
+ Log::start( );
+ PKCS11_TRY
+ {
+ rv = Slot::FindObjectsInit(hSession,pTemplate,ulCount);
+ }
+ PKCS11_CATCH(rv)
+ Log::stop( "C_FindObjectsInit" );
+
+ Log::logCK_RV( "C_FindObjectsInit", rv );
+ Log::end( "C_FindObjectsInit\n" );
}
- PKCS11_CATCH(rv)
-
- Log::logCK_RV( "C_FindObjectsInit", rv );
- Log::end( "C_FindObjectsInit" );
+ catch( ... )
+ {
+ rv = CKR_GENERAL_ERROR;
+ }
return rv;
}
@@ -1065,25 +1353,38 @@
*/
CK_DEFINE_FUNCTION( CK_RV, C_FindObjects )(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE_PTR phObject, CK_ULONG ulMaxObjectCount, CK_ULONG_PTR pulObjectCount )
{
- Log::begin( "C_FindObjects" );
- Log::in( "C_FindObjects" );
- Log::log( "C_FindObjects - hSession <%#02x>", hSession );
- Log::log( "C_FindObjects - phObject <%#02x> (%#02x)", phObject, ( ( NULL_PTR != phObject ) ? *phObject : 0 ) );
- Log::log( "C_FindObjects - ulMaxObjectCount <%#02x>", ulMaxObjectCount );
- Log::log( "C_FindObjects - pulObjectCount <%#02x> (%#02x)", pulObjectCount, ( ( NULL_PTR != pulObjectCount ) ? *pulObjectCount : 0 ) );
-
+ CCriticalSectionLocker cslock( _critSectAPI );
+
CK_RV rv = CKR_OK;
- PKCS11_TRY
+
+ try
{
- rv = Slot::FindObjects( hSession, phObject, ulMaxObjectCount, pulObjectCount );
+ Log::begin( "C_FindObjects" );
+ Log::in( "C_FindObjects" );
+ Log::log( "C_FindObjects - hSession <%#02x>", hSession );
+ Log::log( "C_FindObjects - phObject <%#02x> (%#02x)", phObject, ( ( NULL_PTR != phObject ) ? *phObject : 0 ) );
+ Log::log( "C_FindObjects - ulMaxObjectCount <%#02x>", ulMaxObjectCount );
+ Log::log( "C_FindObjects - pulObjectCount <%#02x> (%#02x)", pulObjectCount, ( ( NULL_PTR != pulObjectCount ) ? *pulObjectCount : 0 ) );
+
+ Log::start( );
+ PKCS11_TRY
+ {
+ rv = Slot::FindObjects( hSession, phObject, ulMaxObjectCount, pulObjectCount );
+ }
+ PKCS11_CATCH(rv)
+ Log::stop( "C_FindObjects" );
+
+ Log::logCK_RV( "C_FindObjects", rv );
+ Log::out( "C_FindObjects" );
+ Log::log( "C_FindObjects - phObject <%#02x> (%#02x)", phObject, ( ( NULL_PTR != phObject ) ? *phObject : 0 ) );
+ Log::log( "C_FindObjects - pulObjectCount <%#02x> (%#02x)", pulObjectCount, ( ( NULL_PTR != pulObjectCount ) ? *pulObjectCount : 0 ) );
+ Log::end( "C_FindObjects\n" );
}
- PKCS11_CATCH(rv)
+ catch( ... )
+ {
+ rv = CKR_GENERAL_ERROR;
+ }
- Log::logCK_RV( "C_FindObjects", rv );
- Log::out( "C_FindObjects" );
- Log::log( "C_FindObjects - phObject <%#02x> (%#02x)", phObject, ( ( NULL_PTR != phObject ) ? *phObject : 0 ) );
- Log::log( "C_FindObjects - pulObjectCount <%#02x> (%#02x)", pulObjectCount, ( ( NULL_PTR != pulObjectCount ) ? *pulObjectCount : 0 ) );
- Log::end( "C_FindObjects" );
return rv;
}
@@ -1096,19 +1397,32 @@
*/
CK_DEFINE_FUNCTION( CK_RV, C_FindObjectsFinal )( CK_SESSION_HANDLE hSession )
{
- Log::begin( "C_FindObjectsFinal" );
- Log::in( "C_FindObjectsFinal" );
- Log::log( "C_FindObjectsFinal - hSession <%#02x>", hSession );
-
+ CCriticalSectionLocker cslock( _critSectAPI );
+
CK_RV rv = CKR_OK;
- PKCS11_TRY
+
+ try
{
- rv = Slot::FindObjectsFinal(hSession);
+ Log::begin( "C_FindObjectsFinal" );
+ Log::in( "C_FindObjectsFinal" );
+ Log::log( "C_FindObjectsFinal - hSession <%#02x>", hSession );
+
+ Log::start( );
+ PKCS11_TRY
+ {
+ rv = Slot::FindObjectsFinal(hSession);
+ }
+ PKCS11_CATCH(rv)
+ Log::stop( "C_FindObjectsFinal" );
+
+ Log::logCK_RV( "C_FindObjectsFinal", rv );
+ Log::end( "C_FindObjectsFinal\n" );
}
- PKCS11_CATCH(rv)
+ catch( ... )
+ {
+ rv = CKR_GENERAL_ERROR;
+ }
- Log::logCK_RV( "C_FindObjectsFinal", rv );
- Log::end( "C_FindObjectsFinal" );
return rv;
}
@@ -1122,21 +1436,34 @@
*/
CK_DEFINE_FUNCTION( CK_RV, C_EncryptInit )( CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism, CK_OBJECT_HANDLE hKey )
{
- Log::begin( "C_EncryptInit" );
- Log::in( "C_EncryptInit" );
- Log::log( "C_EncryptInit - hSession <%#02x>", hSession );
- Log::logCK_MECHANISM_PTR( "C_EncryptInit", pMechanism );
- Log::log( "C_EncryptInit - hKey <%#02x>", hKey );
-
+ CCriticalSectionLocker cslock( _critSectAPI );
+
CK_RV rv = CKR_OK;
- PKCS11_TRY
+
+ try
{
- rv = Slot::EncryptInit(hSession,pMechanism,hKey);
+ Log::begin( "C_EncryptInit" );
+ Log::in( "C_EncryptInit" );
+ Log::log( "C_EncryptInit - hSession <%#02x>", hSession );
+ Log::logCK_MECHANISM_PTR( "C_EncryptInit", pMechanism );
+ Log::log( "C_EncryptInit - hKey <%#02x>", hKey );
+
+ Log::start( );
+ PKCS11_TRY
+ {
+ rv = Slot::EncryptInit(hSession,pMechanism,hKey);
+ }
+ PKCS11_CATCH(rv)
+ Log::stop( "C_EncryptInit" );
+
+ Log::logCK_RV( "C_EncryptInit", rv );
+ Log::end( "C_EncryptInit\n" );
}
- PKCS11_CATCH(rv)
+ catch( ... )
+ {
+ rv = CKR_GENERAL_ERROR;
+ }
- Log::logCK_RV( "C_EncryptInit", rv );
- Log::end( "C_EncryptInit" );
return rv;
}
@@ -1152,23 +1479,36 @@
*/
CK_DEFINE_FUNCTION( CK_RV, C_Encrypt )( CK_SESSION_HANDLE hSession, CK_BYTE_PTR pData, CK_ULONG ulDataLen, CK_BYTE_PTR pEncryptedData, CK_ULONG_PTR pulEncryptedDataLen )
{
- Log::begin( "C_Encrypt" );
- Log::in( "C_Encrypt" );
- Log::log( "C_Encrypt - hSession <%#02x>", hSession );
- Log::logCK_UTF8CHAR_PTR( "C_Encrypt - pData", pData, ulDataLen );
- Log::logCK_UTF8CHAR_PTR( "C_Encrypt - pEncryptedData", pEncryptedData, (NULL_PTR == pulEncryptedDataLen) ? 0 : *pulEncryptedDataLen );
-
+ CCriticalSectionLocker cslock( _critSectAPI );
+
CK_RV rv = CKR_OK;
- PKCS11_TRY
+
+ try
{
- rv = Slot::Encrypt( hSession, pData, ulDataLen, pEncryptedData, pulEncryptedDataLen );
+ Log::begin( "C_Encrypt" );
+ Log::in( "C_Encrypt" );
+ Log::log( "C_Encrypt - hSession <%#02x>", hSession );
+ Log::logCK_UTF8CHAR_PTR( "C_Encrypt - pData", pData, ulDataLen );
+ Log::logCK_UTF8CHAR_PTR( "C_Encrypt - pEncryptedData", pEncryptedData, (NULL_PTR == pulEncryptedDataLen) ? 0 : *pulEncryptedDataLen );
+
+ Log::start( );
+ PKCS11_TRY
+ {
+ rv = Slot::Encrypt( hSession, pData, ulDataLen, pEncryptedData, pulEncryptedDataLen );
+ }
+ PKCS11_CATCH(rv)
+ Log::stop( "C_Encrypt" );
+
+ Log::logCK_RV( "C_Encrypt", rv );
+ Log::out( "C_Encrypt" );
+ Log::logCK_UTF8CHAR_PTR( "C_Encrypt - pEncryptedData", pEncryptedData, (NULL_PTR == pulEncryptedDataLen) ? 0 : *pulEncryptedDataLen );
+ Log::end( "C_Encrypt\n" );
}
- PKCS11_CATCH(rv)
+ catch( ... )
+ {
+ rv = CKR_GENERAL_ERROR;
+ }
- Log::logCK_RV( "C_Encrypt", rv );
- Log::out( "C_Encrypt" );
- Log::logCK_UTF8CHAR_PTR( "C_Encrypt - pEncryptedData", pEncryptedData, (NULL_PTR == pulEncryptedDataLen) ? 0 : *pulEncryptedDataLen );
- Log::end( "C_Encrypt" );
return rv;
}
@@ -1195,7 +1535,7 @@
}
Log::logCK_RV( "C_EncryptUpdate", rv );
- Log::end( "C_EncryptUpdate" );
+ Log::end( "C_EncryptUpdate\n" );
return rv;
}
@@ -1219,7 +1559,7 @@
}
Log::logCK_RV( "C_EncryptFinal", rv );
- Log::end( "C_EncryptFinal" );
+ Log::end( "C_EncryptFinal\n" );
return rv;
}
@@ -1233,21 +1573,34 @@
*/
CK_DEFINE_FUNCTION( CK_RV, C_DecryptInit )( CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism, CK_OBJECT_HANDLE hKey )
{
- Log::begin( "C_DecryptInit" );
- Log::in( "C_DecryptInit" );
- Log::log( "C_DecryptInit - hSession <%#02x>", hSession );
- Log::logCK_MECHANISM_PTR( "C_DecryptInit", pMechanism );
- Log::log( "C_DecryptInit - hKey <%#02x>", hKey );
-
+ CCriticalSectionLocker cslock( _critSectAPI );
+
CK_RV rv = CKR_OK;
- PKCS11_TRY
+
+ try
{
- rv = Slot::DecryptInit( hSession, pMechanism, hKey );
+ Log::begin( "C_DecryptInit" );
+ Log::in( "C_DecryptInit" );
+ Log::log( "C_DecryptInit - hSession <%#02x>", hSession );
+ Log::logCK_MECHANISM_PTR( "C_DecryptInit", pMechanism );
+ Log::log( "C_DecryptInit - hKey <%#02x>", hKey );
+
+ Log::start( );
+ PKCS11_TRY
+ {
+ rv = Slot::DecryptInit( hSession, pMechanism, hKey );
+ }
+ PKCS11_CATCH(rv)
+ Log::stop( "C_DecryptInit" );
+
+ Log::logCK_RV( "C_DecryptInit", rv );
+ Log::end( "C_DecryptInit\n" );
}
- PKCS11_CATCH(rv)
+ catch( ... )
+ {
+ rv = CKR_GENERAL_ERROR;
+ }
- Log::logCK_RV( "C_DecryptInit", rv );
- Log::end( "C_DecryptInit" );
return rv;
}
@@ -1264,23 +1617,36 @@
*/
CK_DEFINE_FUNCTION( CK_RV, C_Decrypt )( CK_SESSION_HANDLE hSession, CK_BYTE_PTR pEncryptedData, CK_ULONG ulEncryptedDataLen, CK_BYTE_PTR pData, CK_ULONG_PTR pulDataLen )
{
- Log::begin( "C_Decrypt" );
- Log::in( "C_Decrypt" );
- Log::log( "C_Decrypt - hSession <%#02x>", hSession );
- Log::logCK_UTF8CHAR_PTR( "C_Decrypt - pEncryptedData", pEncryptedData, ulEncryptedDataLen );
- Log::logCK_UTF8CHAR_PTR( "C_Decrypt - pData", pData, (NULL_PTR == pulDataLen) ? 0 : *pulDataLen );
-
+ CCriticalSectionLocker cslock( _critSectAPI );
+
CK_RV rv = CKR_OK;
- PKCS11_TRY
+
+ try
{
- rv = Slot::Decrypt(hSession,pEncryptedData,ulEncryptedDataLen,pData,pulDataLen);
+ Log::begin( "C_Decrypt" );
+ Log::in( "C_Decrypt" );
+ Log::log( "C_Decrypt - hSession <%#02x>", hSession );
+ Log::logCK_UTF8CHAR_PTR( "C_Decrypt - pEncryptedData", pEncryptedData, ulEncryptedDataLen );
+ Log::logCK_UTF8CHAR_PTR( "C_Decrypt - pData", pData, (NULL_PTR == pulDataLen) ? 0 : *pulDataLen );
+
+ Log::start( );
+ PKCS11_TRY
+ {
+ rv = Slot::Decrypt(hSession,pEncryptedData,ulEncryptedDataLen,pData,pulDataLen);
+ }
+ PKCS11_CATCH(rv)
+ Log::stop( "C_Decrypt" );
+
+ Log::logCK_RV( "C_Decrypt", rv );
+ Log::out( "C_Decrypt" );
+ Log::logCK_UTF8CHAR_PTR( "C_Decrypt - pData", pData, (NULL_PTR == pulDataLen) ? 0 : *pulDataLen );
+ Log::end( "C_Decrypt\n" );
}
- PKCS11_CATCH(rv)
+ catch( ... )
+ {
+ rv = CKR_GENERAL_ERROR;
+ }
- Log::logCK_RV( "C_Decrypt", rv );
- Log::out( "C_Decrypt" );
- Log::logCK_UTF8CHAR_PTR( "C_Decrypt - pData", pData, (NULL_PTR == pulDataLen) ? 0 : *pulDataLen );
- Log::end( "C_Decrypt" );
return rv;
}
@@ -1306,7 +1672,7 @@
}
Log::logCK_RV( "C_DecryptUpdate", rv );
- Log::end( "C_DecryptUpdate" );
+ Log::end( "C_DecryptUpdate\n" );
return rv;
}
@@ -1330,7 +1696,7 @@
}
Log::logCK_RV( "C_DecryptFinal", rv );
- Log::end( "C_DecryptFinal" );
+ Log::end( "C_DecryptFinal\n" );
return rv;
}
@@ -1343,20 +1709,33 @@
*/
CK_DEFINE_FUNCTION( CK_RV, C_DigestInit )( CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism )
{
- Log::begin( "C_DigestInit" );
- Log::in( "C_DigestInit" );
- Log::log( "C_DigestInit - hSession <%#02x>", hSession );
- Log::logCK_MECHANISM_PTR( "C_DigestInit", pMechanism );
-
+ CCriticalSectionLocker cslock( _critSectAPI );
+
CK_RV rv = CKR_OK;
- PKCS11_TRY
+
+ try
{
- rv = Slot::DigestInit(hSession,pMechanism);
+ Log::begin( "C_DigestInit" );
+ Log::in( "C_DigestInit" );
+ Log::log( "C_DigestInit - hSession <%#02x>", hSession );
+ Log::logCK_MECHANISM_PTR( "C_DigestInit", pMechanism );
+
+ Log::start( );
+ PKCS11_TRY
+ {
+ rv = Slot::DigestInit(hSession,pMechanism);
+ }
+ PKCS11_CATCH(rv)
+ Log::stop( "C_DigestInit" );
+
+ Log::logCK_RV( "C_DigestInit", rv );
+ Log::end( "C_DigestInit\n" );
}
- PKCS11_CATCH(rv)
+ catch( ... )
+ {
+ rv = CKR_GENERAL_ERROR;
+ }
- Log::logCK_RV( "C_DigestInit", rv );
- Log::end( "C_DigestInit" );
return rv;
}
@@ -1372,23 +1751,36 @@
*/
CK_DEFINE_FUNCTION( CK_RV, C_Digest )( CK_SESSION_HANDLE hSession, CK_BYTE_PTR pData, CK_ULONG ulDataLen, CK_BYTE_PTR pDigest, CK_ULONG_PTR pulDigestLen )
{
- Log::begin( "C_Digest" );
- Log::in( "C_Digest" );
- Log::log( "C_Digest - hSession <%#02x>", hSession );
- Log::logCK_UTF8CHAR_PTR( "C_Digest - pData", pData, ulDataLen );
- Log::logCK_UTF8CHAR_PTR( "C_Digest - pDigest", pDigest, (NULL_PTR == pulDigestLen) ? 0 : *pulDigestLen );
-
+ CCriticalSectionLocker cslock( _critSectAPI );
+
CK_RV rv = CKR_OK;
- PKCS11_TRY
+
+ try
{
- rv = Slot::Digest( hSession, pData, ulDataLen, pDigest, pulDigestLen );
+ Log::begin( "C_Digest" );
+ Log::in( "C_Digest" );
+ Log::log( "C_Digest - hSession <%#02x>", hSession );
+ Log::logCK_UTF8CHAR_PTR( "C_Digest - pData", pData, ulDataLen );
+ Log::logCK_UTF8CHAR_PTR( "C_Digest - pDigest", pDigest, (NULL_PTR == pulDigestLen) ? 0 : *pulDigestLen );
+
+ Log::start( );
+ PKCS11_TRY
+ {
+ rv = Slot::Digest( hSession, pData, ulDataLen, pDigest, pulDigestLen );
+ }
+ PKCS11_CATCH(rv)
+ Log::stop( "C_Digest" );
+
+ Log::logCK_RV( "C_Digest", rv );
+ Log::out( "C_Digest" );
+ Log::logCK_UTF8CHAR_PTR( "C_Digest - pDigest", pDigest, (NULL_PTR == pulDigestLen) ? 0 : *pulDigestLen );
+ Log::end( "C_Digest\n" );
}
- PKCS11_CATCH(rv)
+ catch( ... )
+ {
+ rv = CKR_GENERAL_ERROR;
+ }
- Log::logCK_RV( "C_Digest", rv );
- Log::out( "C_Digest" );
- Log::logCK_UTF8CHAR_PTR( "C_Digest - pDigest", pDigest, (NULL_PTR == pulDigestLen) ? 0 : *pulDigestLen );
- Log::end( "C_Digest" );
return rv;
}
@@ -1403,20 +1795,33 @@
*/
CK_DEFINE_FUNCTION( CK_RV, C_DigestUpdate )( CK_SESSION_HANDLE hSession, CK_BYTE_PTR pPart, CK_ULONG ulPartLen )
{
- Log::begin( "C_DigestUpdate" );
- Log::in( "C_DigestUpdate" );
- Log::log( "C_DigestUpdate - hSession <%#02x>", hSession );
- Log::logCK_UTF8CHAR_PTR( "C_DigestUpdate - pPart", pPart, ulPartLen );
-
+ CCriticalSectionLocker cslock( _critSectAPI );
+
CK_RV rv = CKR_OK;
- PKCS11_TRY
+
+ try
{
- rv = Slot::DigestUpdate( hSession, pPart, ulPartLen );
+ Log::begin( "C_DigestUpdate" );
+ Log::in( "C_DigestUpdate" );
+ Log::log( "C_DigestUpdate - hSession <%#02x>", hSession );
+ Log::logCK_UTF8CHAR_PTR( "C_DigestUpdate - pPart", pPart, ulPartLen );
+
+ Log::start( );
+ PKCS11_TRY
+ {
+ rv = Slot::DigestUpdate( hSession, pPart, ulPartLen );
+ }
+ PKCS11_CATCH(rv)
+ Log::stop( "C_DigestUpdate" );
+
+ Log::logCK_RV( "C_DigestUpdate", rv );
+ Log::end( "C_DigestUpdate\n" );
}
- PKCS11_CATCH(rv)
+ catch( ... )
+ {
+ rv = CKR_GENERAL_ERROR;
+ }
- Log::logCK_RV( "C_DigestUpdate", rv );
- Log::end( "C_DigestUpdate" );
return rv;
}
@@ -1435,7 +1840,7 @@
}
Log::logCK_RV( "C_DigestKey", rv );
- Log::end( "C_DigestKey" );
+ Log::end( "C_DigestKey\n" );
return rv;
}
@@ -1451,22 +1856,35 @@
*/
CK_DEFINE_FUNCTION( CK_RV, C_DigestFinal )( CK_SESSION_HANDLE hSession, CK_BYTE_PTR pDigest, CK_ULONG_PTR pulDigestLen )
{
- Log::begin( "C_DigestFinal" );
- Log::in( "C_DigestFinal" );
- Log::log( "C_DigestFinal - hSession <%#02x>", hSession );
- Log::logCK_UTF8CHAR_PTR( "C_DigestFinal - pDigest", pDigest, (NULL_PTR == pulDigestLen) ? 0 : *pulDigestLen );
-
+ CCriticalSectionLocker cslock( _critSectAPI );
+
CK_RV rv = CKR_OK;
- PKCS11_TRY
+
+ try
{
- rv = Slot::DigestFinal( hSession, pDigest, pulDigestLen );
+ Log::begin( "C_DigestFinal" );
+ Log::in( "C_DigestFinal" );
+ Log::log( "C_DigestFinal - hSession <%#02x>", hSession );
+ Log::logCK_UTF8CHAR_PTR( "C_DigestFinal - pDigest", pDigest, (NULL_PTR == pulDigestLen) ? 0 : *pulDigestLen );
+
+ Log::start( );
+ PKCS11_TRY
+ {
+ rv = Slot::DigestFinal( hSession, pDigest, pulDigestLen );
+ }
+ PKCS11_CATCH(rv)
+ Log::stop( "C_DigestFinal" );
+
+ Log::logCK_RV( "C_DigestFinal", rv );
+ Log::out( "C_DigestFinal" );
+ Log::logCK_UTF8CHAR_PTR( "C_DigestFinal - pDigest", pDigest, (NULL_PTR == pulDigestLen) ? 0 : *pulDigestLen );
+ Log::end( "C_DigestFinal\n" );
}
- PKCS11_CATCH(rv)
+ catch( ... )
+ {
+ rv = CKR_GENERAL_ERROR;
+ }
- Log::logCK_RV( "C_DigestFinal", rv );
- Log::out( "C_DigestFinal" );
- Log::logCK_UTF8CHAR_PTR( "C_DigestFinal - pDigest", pDigest, (NULL_PTR == pulDigestLen) ? 0 : *pulDigestLen );
- Log::end( "C_DigestFinal" );
return rv;
}
@@ -1483,21 +1901,34 @@
*/
CK_DEFINE_FUNCTION( CK_RV, C_SignInit )( CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism, CK_OBJECT_HANDLE hKey )
{
- Log::begin( "C_SignInit" );
- Log::in( "C_SignInit" );
- Log::log( "C_SignInit - hSession <%#02x>", hSession );
- Log::logCK_MECHANISM_PTR( "C_SignInit", pMechanism );
- Log::log( "C_SignInit - hKey <%#02x>", hKey );
-
+ CCriticalSectionLocker cslock( _critSectAPI );
+
CK_RV rv = CKR_OK;
- PKCS11_TRY
+
+ try
{
- rv = Slot::SignInit(hSession,pMechanism,hKey);
+ Log::begin( "C_SignInit" );
+ Log::in( "C_SignInit" );
+ Log::log( "C_SignInit - hSession <%#02x>", hSession );
+ Log::logCK_MECHANISM_PTR( "C_SignInit", pMechanism );
+ Log::log( "C_SignInit - hKey <%#02x>", hKey );
+
+ Log::start( );
+ PKCS11_TRY
+ {
+ rv = Slot::SignInit(hSession,pMechanism,hKey);
+ }
+ PKCS11_CATCH(rv)
+ Log::stop( "C_SignInit" );
+
+ Log::logCK_RV( "C_SignInit", rv );
+ Log::end( "C_SignInit\n" );
}
- PKCS11_CATCH(rv)
+ catch( ... )
+ {
+ rv = CKR_GENERAL_ERROR;
+ }
- Log::logCK_RV( "C_SignInit", rv );
- Log::end( "C_SignInit" );
return rv;
}
@@ -1516,23 +1947,36 @@
*/
CK_DEFINE_FUNCTION( CK_RV, C_Sign )( CK_SESSION_HANDLE hSession, CK_BYTE_PTR pData, CK_ULONG ulDataLen, CK_BYTE_PTR pSignature, CK_ULONG_PTR pulSignatureLen )
{
- Log::begin( "C_Sign" );
- Log::in( "C_Sign" );
- Log::log( "C_Sign - hSession <%#02x>", hSession );
- Log::logCK_UTF8CHAR_PTR( "C_Sign - pData", pData, ulDataLen );
- Log::logCK_UTF8CHAR_PTR( "C_Sign - pSignature", pSignature, (NULL_PTR == pulSignatureLen) ? 0 : *pulSignatureLen );
-
+ CCriticalSectionLocker cslock( _critSectAPI );
+
CK_RV rv = CKR_OK;
- PKCS11_TRY
+
+ try
{
- rv = Slot::Sign( hSession, pData, ulDataLen, pSignature, pulSignatureLen );
+ Log::begin( "C_Sign" );
+ Log::in( "C_Sign" );
+ Log::log( "C_Sign - hSession <%#02x>", hSession );
+ Log::logCK_UTF8CHAR_PTR( "C_Sign - pData", pData, ulDataLen );
+ Log::logCK_UTF8CHAR_PTR( "C_Sign - pSignature", pSignature, (NULL_PTR == pulSignatureLen) ? 0 : *pulSignatureLen );
+
+ Log::start( );
+ PKCS11_TRY
+ {
+ rv = Slot::Sign( hSession, pData, ulDataLen, pSignature, pulSignatureLen );
+ }
+ PKCS11_CATCH(rv)
+ Log::stop( "C_Sign" );
+
+ Log::logCK_RV( "C_Sign", rv );
+ Log::out( "C_Sign" );
+ Log::logCK_UTF8CHAR_PTR( "C_Sign - pSignature", pSignature, (NULL_PTR == pulSignatureLen) ? 0 : *pulSignatureLen );
+ Log::end( "C_Sign\n" );
}
- PKCS11_CATCH(rv)
+ catch( ... )
+ {
+ rv = CKR_GENERAL_ERROR;
+ }
- Log::logCK_RV( "C_Sign", rv );
- Log::out( "C_Sign" );
- Log::logCK_UTF8CHAR_PTR( "C_Sign - pSignature", pSignature, (NULL_PTR == pulSignatureLen) ? 0 : *pulSignatureLen );
- Log::end( "C_Sign" );
return rv;
}
@@ -1548,20 +1992,33 @@
*/
CK_DEFINE_FUNCTION( CK_RV, C_SignUpdate )( CK_SESSION_HANDLE hSession, CK_BYTE_PTR pPart, CK_ULONG ulPartLen )
{
- Log::begin( "C_SignUpdate" );
- Log::in( "C_SignUpdate" );
- Log::log( "C_SignUpdate - hSession <%#02x>", hSession );
- Log::logCK_UTF8CHAR_PTR( "C_SignUpdate - pPart", pPart, ulPartLen );
-
+ CCriticalSectionLocker cslock( _critSectAPI );
+
CK_RV rv = CKR_OK;
- PKCS11_TRY
+
+ try
{
- rv = Slot::SignUpdate(hSession,pPart,ulPartLen);
+ Log::begin( "C_SignUpdate" );
+ Log::in( "C_SignUpdate" );
+ Log::log( "C_SignUpdate - hSession <%#02x>", hSession );
+ Log::logCK_UTF8CHAR_PTR( "C_SignUpdate - pPart", pPart, ulPartLen );
+
+ Log::start( );
+ PKCS11_TRY
+ {
+ rv = Slot::SignUpdate(hSession,pPart,ulPartLen);
+ }
+ PKCS11_CATCH(rv)
+ Log::stop( "C_SignUpdate" );
+
+ Log::logCK_RV( "C_SignUpdate", rv );
+ Log::end( "C_SignUpdate\n" );
}
- PKCS11_CATCH(rv)
+ catch( ... )
+ {
+ rv = CKR_GENERAL_ERROR;
+ }
- Log::logCK_RV( "C_SignUpdate", rv );
- Log::end( "C_SignUpdate" );
return rv;
}
@@ -1576,22 +2033,35 @@
*/
CK_DEFINE_FUNCTION( CK_RV, C_SignFinal )( CK_SESSION_HANDLE hSession, CK_BYTE_PTR pSignature, CK_ULONG_PTR pulSignatureLen )
{
- Log::begin( "C_SignFinal" );
- Log::in( "C_SignFinal" );
- Log::log( "C_SignFinal - hSession <%#02x>", hSession );
- Log::logCK_UTF8CHAR_PTR( "C_SignFinal - pSignature", pSignature, (NULL_PTR == pulSignatureLen) ? 0 : *pulSignatureLen );
-
+ CCriticalSectionLocker cslock( _critSectAPI );
+
CK_RV rv = CKR_OK;
- PKCS11_TRY
+
+ try
{
- rv = Slot::SignFinal(hSession,pSignature,pulSignatureLen);
+ Log::begin( "C_SignFinal" );
+ Log::in( "C_SignFinal" );
+ Log::log( "C_SignFinal - hSession <%#02x>", hSession );
+ Log::logCK_UTF8CHAR_PTR( "C_SignFinal - pSignature", pSignature, (NULL_PTR == pulSignatureLen) ? 0 : *pulSignatureLen );
+
+ Log::start( );
+ PKCS11_TRY
+ {
+ rv = Slot::SignFinal(hSession,pSignature,pulSignatureLen);
+ }
+ PKCS11_CATCH(rv)
+ Log::stop( "C_SignFinal" );
+
+ Log::logCK_RV( "C_SignFinal", rv );
+ Log::out( "C_SignFinal" );
+ Log::logCK_UTF8CHAR_PTR( "C_SignFinal - pSignature", pSignature, (NULL_PTR == pulSignatureLen) ? 0 : *pulSignatureLen );
+ Log::end( "C_SignFinal\n" );
}
- PKCS11_CATCH(rv)
+ catch( ... )
+ {
+ rv = CKR_GENERAL_ERROR;
+ }
- Log::logCK_RV( "C_SignFinal", rv );
- Log::out( "C_SignFinal" );
- Log::logCK_UTF8CHAR_PTR( "C_SignFinal - pSignature", pSignature, (NULL_PTR == pulSignatureLen) ? 0 : *pulSignatureLen );
- Log::end( "C_SignFinal" );
return rv;
}
@@ -1609,7 +2079,7 @@
}
Log::logCK_RV( "C_SignRecoverInit", rv );
- Log::end( "C_SignRecoverInit" );
+ Log::end( "C_SignRecoverInit\n" );
return rv;
}
@@ -1626,7 +2096,7 @@
}
Log::logCK_RV( "C_SignRecover", rv );
- Log::end( "C_SignRecover" );
+ Log::end( "C_SignRecover\n" );
return rv;
}
@@ -1643,21 +2113,34 @@
*/
CK_DEFINE_FUNCTION( CK_RV, C_VerifyInit )( CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism, CK_OBJECT_HANDLE hKey )
{
- Log::begin( "C_VerifyInit" );
- Log::in( "C_VerifyInit" );
- Log::log( "C_VerifyInit - hSession <%#02x>", hSession );
- Log::logCK_MECHANISM_PTR( "C_VerifyInit", pMechanism );
- Log::log( "C_VerifyInit - hKey <%#02x>", hKey );
-
+ CCriticalSectionLocker cslock( _critSectAPI );
+
CK_RV rv = CKR_OK;
- PKCS11_TRY
+
+ try
{
- rv = Slot::VerifyInit( hSession, pMechanism, hKey );
+ Log::begin( "C_VerifyInit" );
+ Log::in( "C_VerifyInit" );
+ Log::log( "C_VerifyInit - hSession <%#02x>", hSession );
+ Log::logCK_MECHANISM_PTR( "C_VerifyInit", pMechanism );
+ Log::log( "C_VerifyInit - hKey <%#02x>", hKey );
+
+ Log::start( );
+ PKCS11_TRY
+ {
+ rv = Slot::VerifyInit( hSession, pMechanism, hKey );
+ }
+ PKCS11_CATCH(rv)
+ Log::stop( "C_VerifyInit" );
+
+ Log::logCK_RV( "C_VerifyInit", rv );
+ Log::end( "C_VerifyInit\n" );
}
- PKCS11_CATCH(rv)
+ catch( ... )
+ {
+ rv = CKR_GENERAL_ERROR;
+ }
- Log::logCK_RV( "C_VerifyInit", rv );
- Log::end( "C_VerifyInit" );
return rv;
}
@@ -1675,23 +2158,36 @@
*/
CK_DEFINE_FUNCTION( CK_RV, C_Verify )( CK_SESSION_HANDLE hSession, CK_BYTE_PTR pData, CK_ULONG ulDataLen, CK_BYTE_PTR pSignature, CK_ULONG ulSignatureLen )
{
- Log::begin( "C_Verify" );
- Log::in( "C_Verify" );
- Log::log( "C_Verify - hSession <%#02x>", hSession );
- Log::logCK_UTF8CHAR_PTR( "C_Verify - pData", pData, ulDataLen );
- Log::logCK_UTF8CHAR_PTR( "C_Verify - pSignature", pSignature, ulSignatureLen );
-
+ CCriticalSectionLocker cslock( _critSectAPI );
+
CK_RV rv = CKR_OK;
- PKCS11_TRY
+
+ try
{
- rv = Slot::Verify(hSession,pData,ulDataLen,pSignature,ulSignatureLen);
+ Log::begin( "C_Verify" );
+ Log::in( "C_Verify" );
+ Log::log( "C_Verify - hSession <%#02x>", hSession );
+ Log::logCK_UTF8CHAR_PTR( "C_Verify - pData", pData, ulDataLen );
+ Log::logCK_UTF8CHAR_PTR( "C_Verify - pSignature", pSignature, ulSignatureLen );
+
+ Log::start( );
+ PKCS11_TRY
+ {
+ rv = Slot::Verify(hSession,pData,ulDataLen,pSignature,ulSignatureLen);
+ }
+ PKCS11_CATCH(rv)
+ Log::stop( "C_Verify" );
+
+ Log::logCK_RV( "C_Verify", rv );
+ Log::out( "C_Verify" );
+ Log::logCK_UTF8CHAR_PTR( "C_Verify - pSignature", pSignature, ulSignatureLen );
+ Log::end( "C_Verify\n" );
}
- PKCS11_CATCH(rv)
+ catch( ... )
+ {
+ rv = CKR_GENERAL_ERROR;
+ }
- Log::logCK_RV( "C_Verify", rv );
- Log::out( "C_Verify" );
- Log::logCK_UTF8CHAR_PTR( "C_Verify - pSignature", pSignature, ulSignatureLen );
- Log::end( "C_Verify" );
return rv;
}
@@ -1701,20 +2197,33 @@
* and plaintext cannot be recovered from the signature. */
CK_DEFINE_FUNCTION( CK_RV, C_VerifyUpdate )( CK_SESSION_HANDLE hSession, CK_BYTE_PTR pPart, CK_ULONG ulPartLen )
{
- Log::begin( "C_VerifyUpdate" );
- Log::in( "C_VerifyUpdate" );
- Log::log( "C_VerifyUpdate - hSession <%#02x>", hSession );
- Log::logCK_UTF8CHAR_PTR( "C_VerifyUpdate - pPart", pPart, ulPartLen );
-
+ CCriticalSectionLocker cslock( _critSectAPI );
+
CK_RV rv = CKR_OK;
- PKCS11_TRY
+
+ try
{
- rv = Slot::VerifyUpdate(hSession,pPart,ulPartLen);
+ Log::begin( "C_VerifyUpdate" );
+ Log::in( "C_VerifyUpdate" );
+ Log::log( "C_VerifyUpdate - hSession <%#02x>", hSession );
+ Log::logCK_UTF8CHAR_PTR( "C_VerifyUpdate - pPart", pPart, ulPartLen );
+
+ Log::start( );
+ PKCS11_TRY
+ {
+ rv = Slot::VerifyUpdate(hSession,pPart,ulPartLen);
+ }
+ PKCS11_CATCH(rv)
+ Log::stop( "C_VerifyUpdate" );
+
+ Log::logCK_RV( "C_VerifyUpdate", rv );
+ Log::end( "C_VerifyUpdate\n" );
}
- PKCS11_CATCH(rv)
+ catch( ... )
+ {
+ rv = CKR_GENERAL_ERROR;
+ }
- Log::logCK_RV( "C_VerifyUpdate", rv );
- Log::end( "C_VerifyUpdate" );
return rv;
}
@@ -1723,20 +2232,33 @@
* operation, checking the signature. */
CK_DEFINE_FUNCTION( CK_RV, C_VerifyFinal )( CK_SESSION_HANDLE hSession, CK_BYTE_PTR pSignature, CK_ULONG ulSignatureLen )
{
- Log::begin( "C_VerifyFinal" );
- Log::in( "C_VerifyFinal" );
- Log::log( "C_VerifyFinal - hSession <%#02x>", hSession );
- Log::logCK_UTF8CHAR_PTR( "C_VerifyFinal - pSignature", pSignature, ulSignatureLen );
-
+ CCriticalSectionLocker cslock( _critSectAPI );
+
CK_RV rv = CKR_OK;
- PKCS11_TRY
+
+ try
{
- rv = Slot::VerifyFinal(hSession,pSignature,ulSignatureLen);
+ Log::begin( "C_VerifyFinal" );
+ Log::in( "C_VerifyFinal" );
+ Log::log( "C_VerifyFinal - hSession <%#02x>", hSession );
+ Log::logCK_UTF8CHAR_PTR( "C_VerifyFinal - pSignature", pSignature, ulSignatureLen );
+
+ Log::start( );
+ PKCS11_TRY
+ {
+ rv = Slot::VerifyFinal(hSession,pSignature,ulSignatureLen);
+ }
+ PKCS11_CATCH(rv)
+ Log::stop( "C_VerifyFinal" );
+
+ Log::logCK_RV( "C_VerifyFinal", rv );
+ Log::end( "C_VerifyFinal\n" );
}
- PKCS11_CATCH(rv)
+ catch( ... )
+ {
+ rv = CKR_GENERAL_ERROR;
+ }
- Log::logCK_RV( "C_VerifyFinal", rv );
- Log::end( "C_VerifyFinal" );
return rv;
}
@@ -1754,7 +2276,7 @@
}
Log::logCK_RV( "C_VerifyRecoverInit", rv );
- Log::end( "C_VerifyRecoverInit" );
+ Log::end( "C_VerifyRecoverInit\n" );
return rv;
}
@@ -1772,7 +2294,7 @@
}
Log::logCK_RV( "C_VerifyRecover", rv );
- Log::end( "C_VerifyRecover" );
+ Log::end( "C_VerifyRecover\n" );
return rv;
}
@@ -1789,7 +2311,7 @@
}
Log::logCK_RV( "C_DigestEncryptUpdate", rv );
- Log::end( "C_DigestEncryptUpdate" );
+ Log::end( "C_DigestEncryptUpdate\n" );
return rv;
}
@@ -1806,7 +2328,7 @@
}
Log::logCK_RV( "C_DecryptDigestUpdate", rv );
- Log::end( "C_DecryptDigestUpdate" );
+ Log::end( "C_DecryptDigestUpdate\n" );
return rv;
}
@@ -1823,7 +2345,7 @@
}
Log::logCK_RV( "C_SignEncryptUpdate", rv );
- Log::end( "C_SignEncryptUpdate" );
+ Log::end( "C_SignEncryptUpdate\n" );
return rv;
}
@@ -1841,7 +2363,7 @@
}
Log::logCK_RV( "C_DecryptVerifyUpdate", rv );
- Log::end( "C_DecryptVerifyUpdate" );
+ Log::end( "C_DecryptVerifyUpdate\n" );
return rv;
}
@@ -1866,7 +2388,7 @@
}
Log::logCK_RV( "C_GenerateKey", rv );
- Log::end( "C_GenerateKey" );
+ Log::end( "C_GenerateKey\n" );
return rv;
}
@@ -1887,27 +2409,40 @@
*/
CK_DEFINE_FUNCTION( CK_RV, C_GenerateKeyPair )(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism, CK_ATTRIBUTE_PTR pPublicKeyTemplate, CK_ULONG ulPublicKeyAttributeCount, CK_ATTRIBUTE_PTR pPrivateKeyTemplate, CK_ULONG ulPrivateKeyAttributeCount, CK_OBJECT_HANDLE_PTR phPublicKey, CK_OBJECT_HANDLE_PTR phPrivateKey )
{
- Log::begin( "C_GenerateKeyPair" );
- Log::in( "C_GenerateKeyPair" );
- Log::log( "C_GenerateKeyPair - hSession <%#02x>", hSession );
- Log::logCK_MECHANISM_PTR( "C_GenerateKeyPair", pMechanism );
- Log::logCK_ATTRIBUTE_PTR( "C_GenerateKeyPair", pPublicKeyTemplate, ulPublicKeyAttributeCount );
- Log::logCK_ATTRIBUTE_PTR( "C_GenerateKeyPair", pPrivateKeyTemplate, ulPrivateKeyAttributeCount );
- Log::log( "C_GenerateKeyPair - phPublicKey <%#02x>", (phPublicKey == NULL_PTR) ? 0 : *phPublicKey );
- Log::log( "C_GenerateKeyPair - phPrivateKey <%#02x>", (phPrivateKey == NULL_PTR) ? 0 : *phPrivateKey );
-
+ CCriticalSectionLocker cslock( _critSectAPI );
+
CK_RV rv = CKR_OK;
- PKCS11_TRY
+
+ try
{
- rv = Slot::GenerateKeyPair( hSession, pMechanism, pPublicKeyTemplate, ulPublicKeyAttributeCount, pPrivateKeyTemplate, ulPrivateKeyAttributeCount, phPublicKey, phPrivateKey );
+ Log::begin( "C_GenerateKeyPair" );
+ Log::in( "C_GenerateKeyPair" );
+ Log::log( "C_GenerateKeyPair - hSession <%#02x>", hSession );
+ Log::logCK_MECHANISM_PTR( "C_GenerateKeyPair", pMechanism );
+ Log::logCK_ATTRIBUTE_PTR( "C_GenerateKeyPair", pPublicKeyTemplate, ulPublicKeyAttributeCount );
+ Log::logCK_ATTRIBUTE_PTR( "C_GenerateKeyPair", pPrivateKeyTemplate, ulPrivateKeyAttributeCount );
+ Log::log( "C_GenerateKeyPair - phPublicKey <%#02x>", (phPublicKey == NULL_PTR) ? 0 : *phPublicKey );
+ Log::log( "C_GenerateKeyPair - phPrivateKey <%#02x>", (phPrivateKey == NULL_PTR) ? 0 : *phPrivateKey );
+
+ Log::start( );
+ PKCS11_TRY
+ {
+ rv = Slot::GenerateKeyPair( hSession, pMechanism, pPublicKeyTemplate, ulPublicKeyAttributeCount, pPrivateKeyTemplate, ulPrivateKeyAttributeCount, phPublicKey, phPrivateKey );
+ }
+ PKCS11_CATCH(rv)
+ Log::stop( "C_GenerateKeyPair" );
+
+ Log::logCK_RV( "C_GenerateKeyPair", rv );
+ Log::out( "C_GenerateKeyPair" );
+ Log::log( "C_GenerateKeyPair - phPublicKey <%#02x>", (phPublicKey == NULL_PTR) ? 0 : *phPublicKey );
+ Log::log( "C_GenerateKeyPair - phPrivateKey <%#02x>", (phPrivateKey == NULL_PTR) ? 0 : *phPrivateKey );
+ Log::end( "C_GenerateKeyPair\n" );
}
- PKCS11_CATCH(rv)
+ catch( ... )
+ {
+ rv = CKR_GENERAL_ERROR;
+ }
- Log::logCK_RV( "C_GenerateKeyPair", rv );
- Log::out( "C_GenerateKeyPair" );
- Log::log( "C_GenerateKeyPair - phPublicKey <%#02x>", (phPublicKey == NULL_PTR) ? 0 : *phPublicKey );
- Log::log( "C_GenerateKeyPair - phPrivateKey <%#02x>", (phPrivateKey == NULL_PTR) ? 0 : *phPrivateKey );
- Log::end( "C_GenerateKeyPair" );
return rv;
}
@@ -1933,7 +2468,7 @@
}
Log::logCK_RV( "C_WrapKey", rv );
- Log::end( "C_WrapKey" );
+ Log::end( "C_WrapKey\n" );
return rv;
}
@@ -1963,7 +2498,7 @@
}
Log::logCK_RV( "C_UnwrapKey", rv );
- Log::end( "C_UnwrapKey" );
+ Log::end( "C_UnwrapKey\n" );
return rv;
}
@@ -1991,7 +2526,7 @@
}
Log::logCK_RV( "C_DeriveKey", rv );
- Log::end( "C_DeriveKey" );
+ Log::end( "C_DeriveKey\n" );
return rv;
}
@@ -2015,7 +2550,7 @@
}
Log::logCK_RV( "C_SeedRandom", rv );
- Log::end( "C_SeedRandom" );
+ Log::end( "C_SeedRandom\n" );
return rv;
}
@@ -2029,21 +2564,34 @@
*/
CK_DEFINE_FUNCTION( CK_RV, C_GenerateRandom )( CK_SESSION_HANDLE hSession, CK_BYTE_PTR pRandomData, CK_ULONG ulRandomLen )
{
- Log::begin( "C_GenerateRandom" );
- Log::in( "C_GenerateRandom" );
- Log::logCK_UTF8CHAR_PTR( "C_GenerateRandom", pRandomData, ulRandomLen );
-
+ CCriticalSectionLocker cslock( _critSectAPI );
+
CK_RV rv = CKR_OK;
- PKCS11_TRY
+
+ try
{
- rv = Slot::GenerateRandom( hSession, pRandomData, ulRandomLen );
+ Log::begin( "C_GenerateRandom" );
+ Log::in( "C_GenerateRandom" );
+ Log::logCK_UTF8CHAR_PTR( "C_GenerateRandom", pRandomData, ulRandomLen );
+
+ Log::start( );
+ PKCS11_TRY
+ {
+ rv = Slot::GenerateRandom( hSession, pRandomData, ulRandomLen );
+ }
+ PKCS11_CATCH(rv)
+ Log::stop( "C_GenerateRandom" );
+
+ Log::logCK_RV( "C_GenerateRandom", rv );
+ Log::out( "C_GenerateRandom" );
+ Log::logCK_UTF8CHAR_PTR( "C_GenerateRandom", pRandomData, ulRandomLen );
+ Log::end( "C_GenerateRandom\n" );
}
- PKCS11_CATCH(rv)
+ catch( ... )
+ {
+ rv = CKR_GENERAL_ERROR;
+ }
- Log::logCK_RV( "C_GenerateRandom", rv );
- Log::out( "C_GenerateRandom" );
- Log::logCK_UTF8CHAR_PTR( "C_GenerateRandom", pRandomData, ulRandomLen );
- Log::end( "C_GenerateRandom" );
return rv;
}
@@ -2066,7 +2614,7 @@
}
Log::logCK_RV( "C_GetFunctionStatus", rv );
- Log::end( "C_GetFunctionStatus" );
+ Log::end( "C_GetFunctionStatus\n" );
return rv;
}
@@ -2088,7 +2636,7 @@
}
Log::logCK_RV( "C_CancelFunction", rv );
- Log::end( "C_CancelFunction" );
+ Log::end( "C_CancelFunction\n" );
return rv;
}
Modified: trunk/SmartCardServices/src/PKCS11dotNetV2/PKCS11Module2/pkcs11.h
===================================================================
--- trunk/SmartCardServices/src/PKCS11dotNetV2/PKCS11Module2/pkcs11.h 2010-02-04 14:54:20 UTC (rev 112)
+++ trunk/SmartCardServices/src/PKCS11dotNetV2/PKCS11Module2/pkcs11.h 2010-02-08 09:41:15 UTC (rev 113)
@@ -1,5 +1,5 @@
/* pkcs11.h include file for PKCS #11. */
-/* $Revision: 1.4 $ */
+/* $Revision: 1.5 $ */
/* License to copy and use this software is granted provided that it is
* identified as "RSA Security Inc. PKCS #11 Cryptographic Token Interface
Modified: trunk/SmartCardServices/src/PKCS11dotNetV2/PKCS11Module2/pkcs11f.h
===================================================================
--- trunk/SmartCardServices/src/PKCS11dotNetV2/PKCS11Module2/pkcs11f.h 2010-02-04 14:54:20 UTC (rev 112)
+++ trunk/SmartCardServices/src/PKCS11dotNetV2/PKCS11Module2/pkcs11f.h 2010-02-08 09:41:15 UTC (rev 113)
@@ -1,5 +1,5 @@
/* pkcs11f.h include file for PKCS #11. */
-/* $Revision: 1.4 $ */
+/* $Revision: 1.5 $ */
/* License to copy and use this software is granted provided that it is
* identified as "RSA Security Inc. PKCS #11 Cryptographic Token Interface
Modified: trunk/SmartCardServices/src/PKCS11dotNetV2/PKCS11Module2/pkcs11t.h
===================================================================
--- trunk/SmartCardServices/src/PKCS11dotNetV2/PKCS11Module2/pkcs11t.h 2010-02-04 14:54:20 UTC (rev 112)
+++ trunk/SmartCardServices/src/PKCS11dotNetV2/PKCS11Module2/pkcs11t.h 2010-02-08 09:41:15 UTC (rev 113)
@@ -1,5 +1,5 @@
/* pkcs11t.h include file for PKCS #11. */
-/* $Revision: 1.4 $ */
+/* $Revision: 1.5 $ */
/* License to copy and use this software is granted provided that it is
* identified as "RSA Security Inc. PKCS #11 Cryptographic Token Interface
Modified: trunk/SmartCardServices/src/PKCS11dotNetV2/PKCS11Module2/platconfig.h
===================================================================
--- trunk/SmartCardServices/src/PKCS11dotNetV2/PKCS11Module2/platconfig.h 2010-02-04 14:54:20 UTC (rev 112)
+++ trunk/SmartCardServices/src/PKCS11dotNetV2/PKCS11Module2/platconfig.h 2010-02-08 09:41:15 UTC (rev 113)
@@ -1,5 +1,5 @@
/* cryptoki.h include file for PKCS #11. */
-/* $Revision: 1.4 $ */
+/* $Revision: 1.5 $ */
/* License to copy and use this software is granted provided that it is
* identified as "RSA Security Inc. PKCS #11 Cryptographic Token Interface
Modified: trunk/SmartCardServices/src/PKCS11dotNetV2/PKCS11Module2/sctoken.cpp
===================================================================
--- trunk/SmartCardServices/src/PKCS11dotNetV2/PKCS11Module2/sctoken.cpp 2010-02-04 14:54:20 UTC (rev 112)
+++ trunk/SmartCardServices/src/PKCS11dotNetV2/PKCS11Module2/sctoken.cpp 2010-02-08 09:41:15 UTC (rev 113)
@@ -64,7 +64,10 @@
#define CARD_PROPERTY_PIN_INFO_EX 0x87
#define CARD_PROPERTY_PIN_INFO 0x07
#define CARD_PROPERTY_EXTERNAL_PIN 0x01
+#define CARD_PROPERTY_NO_PIN 0x03
+#define CARD_PROPERTY_PIN_POLICY 0x80
#define CARD_ROLE_USER 0x01
+#define CARD_SERIAL_NUMBER 0x06
#define CM_IOCTL_GET_FEATURE_REQUEST SCARD_CTL_CODE(3400)
//#define FEATURE_VERIFY_PIN_START 0x01
@@ -92,6 +95,7 @@
#define AUTHENTICATE_PINPAD 2
#define AUTHENTICATE_BIO 3
+#define LOW_FREE_MEMORY_ALLOWED 25000
#pragma pack(push, mdnet, 1)
@@ -156,7 +160,7 @@
};
}
-Token :: Token(std::string* reader) : _mscm(0),
+Token::Token(std::string* reader) : _mscm(0),
_supportGarbageCollection(true),
_cardCache(0),
_fPinChanged(false),
@@ -174,31 +178,22 @@
m_sReaderName = (*reader).c_str( );
}
- //Log::log( "Token::Token - new CardModuleService..." );
std::string svcname("MSCM");
_mscm = new CardModuleService( reader, 5, &svcname );
- //Log::log( "Token::Token - new CardModuleService ok" );
_mscm->DoSCardTransact(false); // Turn off transaction handling since it is performed at application level
// Transact card
- //Log::log( "Token::Token - CardTransaction..." );
CardTransaction ct(this);
- //Log::log( "Token::Token - CardTransaction ok" );
- //Log::log( "Token::Token - new CardCache..." );
_cardCache = new CardCache(_mscm);
- //Log::log( "Token::Token - new CardCache ok" );
// Get seed for RNG from card. This is the first command to
// card. If it fails, assume the card is not a .NET card.
try
{
- //Log::log( "Token::Token - GetChallenge ..." );
- auto_ptr<u1Array> challange(_mscm->GetChallenge());
- //Log::log( "Token::Token - GetChallenge ok" );
-
- Util::SeedRandom(*challange);
+ auto_ptr<u1Array> challenge(_mscm->GetChallenge( ));
+ Util::SeedRandom(*challenge);
}
catch(...)
{
@@ -235,25 +230,41 @@
this->_tokenInfo.flags = CKF_RNG | CKF_LOGIN_REQUIRED | CKF_TOKEN_INITIALIZED | CKF_USER_PIN_INITIALIZED;
// Check if the smart card is in SSO mode
- if( ( true == this->isSSO( ) ) && ( true == this->isAuthenticated( ) ) )
+ m_bIsSSO = isSSO( );
+
+ // Check if PinPad device is supported
+ m_bIsPinPadSupported = isPinPadSupported( );
+
+ // Get the card configuration (mode, PIN type)
+ m_bCardMode = UVM_PIN_ONLY;
+ m_bTypePIN = PIN_TYPE_REGULAR;
+ getCardConfiguration( m_bCardMode, m_bTypePIN );
+
+ m_bIsNoPinSupported = false;
+ if( m_bTypePIN == 0x03 )
{
+ m_bIsNoPinSupported = true;
+ }
+
+ bool bIsAuthenticated = this->isAuthenticated( );
+
+ Log::log( "Token::Token - PIN type <%ld> (0 = regular ; 1 = external ; 2 = challenge/response ; 3 = no pin)", m_bTypePIN );
+ Log::log( "Token::Token - Card mode <%ld> (1 = pin only ; 2 = fp only ; 3 = fp or pin ; 4 = fp and pin)", m_bCardMode );
+ Log::log( "Token::Token - IsNoPinSupported <%d>", m_bIsNoPinSupported );
+ Log::log( "Token::Token - IsSSO <%d>", m_bIsSSO );
+ Log::log( "Token::Token - IsAuthenticated <%d>", bIsAuthenticated );
+
+ // Is login required ?
+ if( ( true == m_bIsNoPinSupported )
+ || ( ( true == m_bIsSSO ) && ( true == bIsAuthenticated ) )
+ )
+ {
this->_tokenInfo.flags &= ~CKF_LOGIN_REQUIRED;
+ Log::log( "Token::Token - No login required" );
}
- /*else
- {
- this->_tokenInfo.flags |= CKF_LOGIN_REQUIRED;
- }*/
-
// Check if the CKF_PROTECTED_AUTHENTICATION_PATH flag must be raised
- m_isPinPadSupported = isPinPadSupported( );
- //m_isPinExternal = isPinExternalSupported( );
- BYTE bCardMode = UVM_PIN_ONLY;
- BYTE bTypePIN = PIN_TYPE_REGULAR;
- getCardConfiguration( bCardMode, bTypePIN );
- Log::log( "Token::Token - PIN type <%ld> (0 = regular ; 1 = external)", bTypePIN );
- Log::log( "Token::Token - Card mode <%ld> (1 = pin only ; 2 = fp only ; 3 = fp or pin ; 4 = fp and pin)", bCardMode );
- if( ( bTypePIN == PIN_TYPE_EXTERNAL ) && ( ( ( bCardMode == UVM_PIN_ONLY ) && m_isPinPadSupported ) || ( bCardMode != UVM_PIN_ONLY ) ) )
+ if( ( m_bTypePIN == PIN_TYPE_EXTERNAL ) && ( ( ( m_bCardMode == UVM_PIN_ONLY ) && m_bIsPinPadSupported ) || ( m_bCardMode != UVM_PIN_ONLY ) ) )
{
Log::log( "Token::Token - Enable CKF_PROTECTED_AUTHENTICATION_PATH" );
this->_tokenInfo.flags |= CKF_PROTECTED_AUTHENTICATION_PATH;
@@ -277,6 +288,9 @@
}
CK_ULONG cardCf = LittleEndianToInt<CK_ULONG>(fileData->GetBuffer()+2);
+ //Log::log( "Token::Token - get serial number" );
+ //m_u1aSerialNumber = _mscm->GetCardProperty( CARD_SERIAL_NUMBER, 0 );
+
this->_initialized = this->IsInitialized();
if(_initialized)
@@ -300,31 +314,58 @@
_privCardCf = ~cardCf;
_cacheCardCf = ~cardCf;
+ //printf( "\nToken::Token - ManageGC( true )\n" );
+ //ManageGC( true );
+
//Log::end( "Token::Token" );
}
-Token :: ~Token()
+Token::~Token()
{
+ Log::begin( "Token::~Token" );
+
+ ManageGC( true );
+
delete _cardCache;
+
delete this->_mscm;
+
+ //if( NULL != m_u1aSerialNumber )
+ //{
+ // delete m_u1aSerialNumber;
+ //}
Clear();
+
+ Log::end( "Token::~Token" );
}
-void Token::ManageGC()
+void Token::ManageGC( bool bForceGarbage )
{
if(!_supportGarbageCollection)
return;
try
{
- s4 freeMemory = _mscm->GetMemory();
- if (freeMemory < 6000)
+ if( true == bForceGarbage )
{
+ //printf( "\nToken::ManageGC - ForceGarbageCollector (true)\n" );
+
Log::log( "Token::ManageGC - ForceGarbageCollector" );
_mscm->ForceGarbageCollector( );
}
+ else
+ {
+ s4 freeMemory = _mscm->GetMemory( );
+ if( freeMemory < LOW_FREE_MEMORY_ALLOWED )
+ {
+ //printf( "\nToken::ManageGC - ForceGarbageCollector\n" );
+
+ Log::log( "Token::ManageGC - ForceGarbageCollector (low)" );
+ _mscm->ForceGarbageCollector( );
+ }
+ }
}
catch(...)
{
@@ -337,7 +378,7 @@
{
for(size_t i=0;i<_objects.size();i++)
delete _objects[i];
- _objects.clear();
+ _objects.clear( );
}
@@ -363,16 +404,24 @@
{
// Read cache file.
std::string sCardcf("cardcf");
- ManageGC( );
auto_ptr<u1Array> fileData(_mscm->ReadFile(&sCardcf,0));
+ //ManageGC( );
if(fileData->GetLength() < 6)
throw CkError(CKR_TOKEN_NOT_RECOGNIZED);
_cardCf = LittleEndianToInt<CK_ULONG>(fileData->GetBuffer()+2);
}
- if((_publCardCf != _cardCf) ||
- ((_privCardCf != _cardCf) && (_roleLogged == CKU_USER)))
+ if( ( _publCardCf != _cardCf )
+ || ( ( _privCardCf != _cardCf )
+ && ( ( CKU_USER == _roleLogged )
+ || ( true == m_bIsNoPinSupported )
+ || ( ( true == m_bIsSSO ) && ( true == this->isAuthenticated( ) ) )
+ )
+ )
+ )
+ //if((_publCardCf != _cardCf) ||
+ // ((_privCardCf != _cardCf) && (_roleLogged == CKU_USER)))
{
// Card changed, so re-synchronize
Resynchronize();
@@ -420,11 +469,12 @@
IntToLittleEndian<WORD>(wContainersFreshness, fileData->GetBuffer(),2);
IntToLittleEndian<WORD>(wFilesFreshness, fileData->GetBuffer(),4);
- ManageGC( );
// Write cache file back
_mscm->WriteFile(&sCardCf, fileData.get());
+ ManageGC( );
+
// As a result of own update, our own cache is still valid
// as long as it was valid before.
CK_ULONG newCardCf = LittleEndianToInt<CK_ULONG>(fileData->GetBuffer()+2);
@@ -456,6 +506,8 @@
void Token::Resynchronize()
{
+ //printf( "\nToken::Resynchronize\n" );
+
// To be called at initial creation and also whenever
// it is detected that card has been changed.
// When re-sync, one have to maintain the object handles
@@ -479,7 +531,10 @@
_publCardCf = _cardCf;
- if(_roleLogged == CKU_USER)
+ if( ( CKU_USER == _roleLogged )
+ || ( true == m_bIsNoPinSupported )
+ || ( ( true == m_bIsSSO ) && ( true == this->isAuthenticated( ) ) )
+ )
{
CK_RV rv = CKR_OK;
TOKEN_TRY
@@ -529,9 +584,14 @@
// Store the list of files to delete, then delete these if logged in.
_toDelete = toDelete;
- if(_roleLogged == CKU_USER)
+ if( ( CKU_USER == _roleLogged )
+ || ( true == m_bIsNoPinSupported )
+ || ( ( true == m_bIsSSO ) && ( true == this->isAuthenticated( ) ) )
+ )
+ //if( ( CKU_USER == _roleLogged )
+ {
PerformDeferredDelete();
-
+ }
}
u1Array* Token::ComputeCryptogram(u1Array* challenge,u1Array* pin)
@@ -1521,18 +1581,18 @@
// Get the card mode (1=PIN, 2=FingerPrint, 3=PIN or FP, 4=PIN and FP)
// The default mode is PIN
- BYTE bCardMode = UVM_PIN_ONLY;
- BYTE bTypePIN = PIN_TYPE_REGULAR;
- getCardConfiguration( bCardMode, bTypePIN );
- Log::log( "Token::AuthenticateUser - PIN type <%ld> (0 = regular ; 1 = external)", bTypePIN );
- Log::log( "Token::AuthenticateUser - Card mode <%ld> (1 = pin only ; 2 = fp only ; 3 = fp or pin ; 4 = fp and pin)", bCardMode );
+ //BYTE bCardMode = UVM_PIN_ONLY;
+ //BYTE bTypePIN = PIN_TYPE_REGULAR;
+ //getCardConfiguration( bCardMode, bTypePIN );
+ Log::log( "Token::AuthenticateUser - PIN type <%ld> (0 = regular ; 1 = external)", m_bTypePIN );
+ Log::log( "Token::AuthenticateUser - Card mode <%ld> (1 = pin only ; 2 = fp only ; 3 = fp or pin ; 4 = fp and pin)", m_bCardMode );
Log::log( "Token::AuthenticateUser - PIN len <%ld>", bPinLen );
- if( PIN_TYPE_EXTERNAL == bTypePIN )
+ if( PIN_TYPE_EXTERNAL == m_bTypePIN )
{
- if( UVM_PIN_ONLY == bCardMode )
+ if( UVM_PIN_ONLY == m_bCardMode )
{
- if( true == m_isPinPadSupported )
+ if( true == m_bIsPinPadSupported )
{
if( 0 == bPinLen )
{
@@ -1559,7 +1619,7 @@
}
else
{
- if( ( 0 != bPinLen ) && ( ( UVM_PIN_ONLY == bCardMode ) || ( UVM_PIN_OR_FP == bCardMode ) ) )
+ if( ( 0 != bPinLen ) && ( ( UVM_PIN_ONLY == m_bCardMode ) || ( UVM_PIN_OR_FP == m_bCardMode ) ) )
{
Log::log( "Token::AuthenticateUser - Regular PIN && (UVM1 || UVM3) && valid len -> PIN normal" );
bRet = AUTHENTICATE_REGULAR;
@@ -1651,14 +1711,24 @@
CK_RV Token::Logout()
{
CK_RV rv = CKR_OK;
+
+ if( ( true == m_bIsNoPinSupported )
+ || ( ( true == m_bIsSSO ) && ( true == this->isAuthenticated( ) ) )
+ )
+ {
+ this->_roleLogged = CKU_NONE;
+ return rv;
+ }
+
TOKEN_TRY
{
-
if(this->_roleLogged == CKU_NONE)
{
throw CkError(CKR_USER_NOT_LOGGED_IN);
}
+ this->_roleLogged = CKU_NONE;
+
u1 role = (this->_roleLogged == CKU_USER) ? CARD_ROLE_USER : CARD_ROLE_ADMIN;
try
@@ -1667,7 +1737,7 @@
if( CARD_ROLE_USER == role )
{
// We log out if the SSO mode is not activated
- if( false == isSSO( ) )
+ if( false == m_bIsSSO )
{
this->_mscm->LogOut( role );
}
@@ -1679,7 +1749,7 @@
this->_mscm->LogOut( role );
}
- this->_roleLogged = CKU_NONE;
+ //this->_roleLogged = CKU_NONE;
}
catch(Marshaller::RemotingException&)
{
@@ -1831,21 +1901,33 @@
// serial number
u1Array* serialNum = Util::ReadByteArrayFromVector(from,&idx);
memcpy(this->_tokenInfo.serialNumber,serialNum->GetBuffer(),serialNum->GetLength());
- delete serialNum;
// Check MSCM's serial number. If this is larger than 8 bytes, do not
// use stored value since serial number may already have been truncated
// if the card was P11 enabled prior to this fix in revision 548361.
- auto_ptr<u1Array> serialNumber(_mscm->get_SerialNumber());
- if(serialNumber->GetLength() > 8)
+
+ //Log::log( "Token::DeserializeTokenInfo - get serial numner" );
+ //u1Array* serialNumber = NULL;
+ //serialNumber = _mscm->GetCardProperty( CARD_SERIAL_NUMBER, 0 );
+ ////auto_ptr<u1Array> serialNumber(_mscm->get_SerialNumber());
+
+ //if(m_u1aSerialNumber->GetLength() > 8)
+ if(serialNum->GetLength() > 8)
{
CMD5 md5;
CK_BYTE hash[16];
- md5.HashCore(serialNumber->GetBuffer(), 0, serialNumber->GetLength());
+ md5.HashCore(serialNum->GetBuffer(), 0, serialNum->GetLength());
md5.HashFinal(hash);
Util::ConvAscii(hash, 8, _tokenInfo.serialNumber);
}
+ delete serialNum;
+
+ //if( NULL != serialNumber )
+ //{
+ // delete serialNumber;
+ //}
+
// flags
CK_FLAGS flags;
@@ -1911,18 +1993,39 @@
// If serial number length is too big to fit in 16 (hex) digit field,
// then use the 8 first bytes of MD5 hash of the original serial number.
- auto_ptr<u1Array> serialNumber(_mscm->get_SerialNumber());
- if(serialNumber->GetLength() > 8)
+ Log::log( "Token::PopulateDefaultTokenInfo - get serial numner" );
+ u1Array* u1aSerialNumber = 0;
+ // Try first to load the serial number in a V2+ way
+ try
{
+ u1aSerialNumber = _mscm->GetCardProperty( CARD_SERIAL_NUMBER, 0 );
+ }
+ catch( ... )
+ {
+ u1aSerialNumber = 0;
+ }
+ // Try at last to get the serial number in a old V2 way
+ if( 0 == u1aSerialNumber )
+ {
+ u1aSerialNumber = _mscm->get_SerialNumber( );
+ }
+
+ //auto_ptr<u1Array> serialNumber(_mscm->get_SerialNumber());
+ if(u1aSerialNumber->GetLength() > 8)
+ {
CMD5 md5;
CK_BYTE hash[16];
- md5.HashCore(serialNumber->GetBuffer(), 0, serialNumber->GetLength());
+ md5.HashCore(u1aSerialNumber->GetBuffer(), 0, u1aSerialNumber->GetLength());
md5.HashFinal(hash);
Util::ConvAscii(hash, 8, _tokenInfo.serialNumber);
}
else
- Util::ConvAscii(serialNumber->GetBuffer(),serialNumber->GetLength(),this->_tokenInfo.serialNumber);
+ Util::ConvAscii(u1aSerialNumber->GetBuffer(),u1aSerialNumber->GetLength(),this->_tokenInfo.serialNumber);
+ if( NULL != u1aSerialNumber )
+ {
+ delete u1aSerialNumber;
+ }
}
CK_RV Token::GenerateRandom(CK_BYTE_PTR randomData,CK_ULONG len)
@@ -1978,11 +2081,23 @@
continue;
}
- if((this->_objects[i]->_private == CK_TRUE) &&
- (this->_roleLogged != CKU_USER))
+ if( this->_objects[ i ]->_private == CK_TRUE )
{
- continue;
+ if( false == m_bIsNoPinSupported )
+ {
+ if( ( CKU_USER != _roleLogged )
+ && ( ( true == m_bIsSSO ) && ( false == isAuthenticated( ) ) )
+ )
+ {
+ continue;
+ }
+ }
}
+ //if((this->_objects[i]->_private == CK_TRUE) &&
+ // (this->_roleLogged != CKU_USER))
+ //{
+ // continue;
+ //}
if(session->_searchTempl == NULL_PTR){
phObject[idx++] = CO_TOKEN_OBJECT | (i+1);
@@ -2165,10 +2280,6 @@
CK_RV rv = CKR_OK;
TOKEN_TRY
{
- // from the class field we will be able to determine proper type
- // and hence the corresponding file
- //CheckAvailableSpace( );
-
CK_RV rv = WriteObject(stobj.get());
if(rv == CKR_OK)
{
@@ -2177,6 +2288,7 @@
}
}
TOKEN_CATCH(rv)
+ //ManageGC( true );
return rv;
}
@@ -2276,24 +2388,6 @@
auto_ptr<u1Array> keyValue;
- //
- /*
- if( object->_modulus->GetLength( ) != object->_d->GetLength( ) )
- {
- }
- if( ( object->_modulus->GetLength( ) / 2 ) != object->_p->GetLength( ) )
- {
- }
- if( ( object->_modulus->GetLength( ) / 2 ) != object->_q->GetLength( ) )
- {
- }
- if( ( object->_modulus->GetLength( ) / 2 ) != object->_dp->GetLength( ) )
- {
- }
- if( ( object->_modulus->GetLength( ) / 2 ) != object->_dq->GetLength( ) )
- {
- }
- */
if( ( object->_modulus->GetLength( ) / 2 ) != object->_inverseQ->GetLength( ) )
{
// Pad with zeros in the front since big endian
@@ -2302,27 +2396,6 @@
size_t i = val.GetLength( )- object->_inverseQ->GetLength( );
memcpy( val.GetBuffer( ) + i, object->_inverseQ->GetBuffer(), object->_inverseQ->GetLength( ) );
*(object->_inverseQ) = val;
- /*
- // Create a new buffer with the a correct size
- u1Array val( (s4)( object->_modulus->GetLength( ) / 2 ) );
- //auto_ptr<u1Array> val = auto_ptr<u1Array>(new u1Array(keyLength));
-
- // Fill the buffer with zero
- for( size_t i = 0; i < val.GetLength( ) ; i++ )
- {
- val.SetU1At( i, 0 );
- }
-
- // Fill the buffer with the old value
- u4 j = 0;
- for( size_t i = ( val.GetLength( )- object->_inverseQ->GetLength( ) ) ; i < object->_inverseQ->GetLength( ) ; i++ )
- {
- val.SetU1At( i, object->_inverseQ->ReadU1At( j ) );
- j++;
- }
-
- object->_inverseQ = &val;
- */
}
// compute the total length;
@@ -2413,7 +2486,7 @@
{
try
{
- ManageGC( );
+ //ManageGC( );
ntry++;
this->_mscm->CreateCAPIContainer(ctrIdx,CK_TRUE,object->_keySpec,(modulusLen*8),keyValue.get());
break;
@@ -2476,6 +2549,7 @@
}
}
TOKEN_CATCH( rv )
+ //ManageGC( true );
return rv;
}
@@ -2769,6 +2843,8 @@
}
}
TOKEN_CATCH(rv)
+
+ //ManageGC( true );
return rv;
}
@@ -2780,9 +2856,21 @@
StorageObject * obj = GetObject(hObject);
// some more checks
- if((this->_roleLogged != CKU_USER) && (obj->_private == CK_TRUE)){
- throw CkError(CKR_USER_NOT_LOGGED_IN);
+ if( CK_TRUE == obj->_private )
+ {
+ if( false == m_bIsNoPinSupported )
+ {
+ if( ( CKU_USER != _roleLogged )
+ && ( ( true == m_bIsSSO ) && ( false == isAuthenticated( ) ) )
+ )
+ {
+ throw CkError(CKR_USER_NOT_LOGGED_IN);
+ }
+ }
}
+ //if((this->_roleLogged != CKU_USER) && (obj->_private == CK_TRUE)){
+ // throw CkError(CKR_USER_NOT_LOGGED_IN);
+ //}
if(obj->_class == CKO_CERTIFICATE){
@@ -2909,12 +2997,29 @@
StorageObject * obj = GetObject(hObject);
- if((this->_roleLogged != CKU_USER) && (obj->_private == CK_TRUE)){
- for(u4 i=0;i<ulCount;i++){
- pTemplate[i].ulValueLen = CK_UNAVAILABLE_INFORMATION; //(CK_LONG)-1;
+ if( CK_TRUE == obj->_private )
+ {
+ if( false == m_bIsNoPinSupported )
+ {
+ if( ( CKU_USER != _roleLogged )
+ && ( ( true == m_bIsSSO ) && ( false == isAuthenticated( ) ) )
+ )
+ {
+ for(u4 i=0;i<ulCount;i++)
+ {
+ pTemplate[i].ulValueLen = CK_UNAVAILABLE_INFORMATION; //(CK_LONG)-1;
+ }
+ throw CkError(CKR_USER_NOT_LOGGED_IN);
+ }
}
- throw CkError(CKR_USER_NOT_LOGGED_IN);
}
+ //if((this->_roleLogged != CKU_USER) && (obj->_private == CK_TRUE))
+ //{
+ // for(u4 i=0;i<ulCount;i++){
+ // pTemplate[i].ulValueLen = CK_UNAVAILABLE_INFORMATION; //(CK_LONG)-1;
+ // }
+ // throw CkError(CKR_USER_NOT_LOGGED_IN);
+ //}
for(u4 i=0;i<ulCount;i++){
rv = obj->GetAttribute(&pTemplate[i]);
@@ -2938,10 +3043,22 @@
// ??? pObj == NULL_PTR
// Check if we have a proper session
- if( ( this->_roleLogged != CKU_USER ) && ( pObj->_private == CK_TRUE ) )
+ if( CK_TRUE == pObj->_private )
{
- throw CkError( CKR_USER_NOT_LOGGED_IN );
+ if( false == m_bIsNoPinSupported )
+ {
+ if( ( CKU_USER != _roleLogged )
+ && ( ( true == m_bIsSSO ) && ( false == isAuthenticated( ) ) )
+ )
+ {
+ throw CkError(CKR_USER_NOT_LOGGED_IN);
+ }
+ }
}
+ // if( ( this->_roleLogged != CKU_USER ) && ( pObj->_private == CK_TRUE ) )
+ //{
+ // throw CkError( CKR_USER_NOT_LOGGED_IN );
+ //}
if( pObj->_modifiable == CK_FALSE )
{
@@ -3014,14 +3131,6 @@
if( CKR_OK != arv )
{
- /*try
- {
- _mscm->DeleteFile(&obj->_fileName);
- }
- catch( ... )
- {
- }*/
-
if(fCreate) // Restore state of object prior to update attempt.
{
pObj->_fileName.clear();
@@ -3279,9 +3388,9 @@
{
try
{
- ManageGC( );
ntry++;
this->_mscm->CreateCAPIContainer(ctrIdx,CK_FALSE,KEYSPEC_KEYEXCHANGE,rsaPubObject->_modulusLen,NULL_PTR);
+ //ManageGC( );
break;
}
catch( Marshaller::Exception & x )
@@ -3382,7 +3491,8 @@
}
}
TOKEN_CATCH(rv)
-
+ //printf( "\nToken::GenerateKeyPair - ManageGC( true )\n" );
+ ManageGC( true );
return rv;
}
@@ -3501,9 +3611,9 @@
{
try
{
- ManageGC( );
ntry++;
data = this->_mscm->PrivateKeyDecrypt( rsaKey->_ctrIndex, rsaKey->_keySpec, dataToDecrypt );
+ //ManageGC( );
break;
}
catch( Marshaller::Exception & x )
@@ -3804,9 +3914,9 @@
{
try
{
- ManageGC( );
ntry++;
signatureData = this->_mscm->PrivateKeyDecrypt(rsaKey->_ctrIndex, rsaKey->_keySpec, messageToSign);
+ //ManageGC( );
break;
}
catch( Marshaller::Exception & x )
@@ -3925,7 +4035,7 @@
bool Token::PerformDeferredDelete()
{
bool fSync = true;
- PKCS11_ASSERT(this->_roleLogged != CKU_NONE);
+ //PKCS11_ASSERT(this->_roleLogged != CKU_NONE);
if(_toDelete.empty())
return fSync;
@@ -4048,7 +4158,10 @@
bool bRet = false;
try
{
- bRet = (bool)(_mscm->IsAuthenticated( CARD_ROLE_USER ));
+ if( NULL != _mscm )
+ {
+ bRet = (bool)(_mscm->IsAuthenticated( CARD_ROLE_USER ));
+ }
}
catch( ... )
{
@@ -4061,18 +4174,45 @@
/*
*/
+bool Token::isNoPinSupported( void )
+{
+ return m_bIsNoPinSupported;
+/*
+bool bIsNoPinSupported = false;
+
+ u1Array* pinProperties = new u1Array( 0 );
+ try
+ {
+ pinProperties = _mscm->GetCardProperty( CARD_PROPERTY_PIN_INFO, CARD_ROLE_USER );
+
+ if( CARD_PROPERTY_NO_PIN == pinProperties->GetBuffer( )[ 0 ] )
+ {
+ bIsNoPinSupported = true;
+ }
+ }
+ catch( ... )
+ {
+ }
+
+ delete pinProperties;
+
+ return bIsNoPinSupported;
+*/
+}
+
+
+/*
+*/
bool Token::isSSO( void )
{
bool bRet = false;
u1Array* ba = 0;
try
{
- ba = _mscm->GetCardProperty( 0x80, 0 );
+ ba = _mscm->GetCardProperty( CARD_PROPERTY_PIN_POLICY, 0 );
}
catch( ... )
{
- //Log::error( "Token::isSSO", "GetCardProperty" );
- Log::log( "Token::isSSO - GetCardProperty failed !" );
bRet = false;
}
if( 0 != ba )
@@ -4123,6 +4263,8 @@
*/
void Token::CardBeginTransaction( )
{
+#ifndef _XCL_
+
//Log::begin( "Token::CardBeginTransaction" );
//Log::log( "Token::CardBeginTransaction - _mscm->GetPcscCardHandle..." );
@@ -4167,11 +4309,14 @@
}
//Log::end( "Token::CardBeginTransaction" );
+#endif
}
void Token::CardEndTransaction()
{
+#ifndef _XCL_
+
//Log::begin( "Token::CardEndTransaction" );
SCARDHANDLE hCard = _mscm->GetPcscCardHandle( );//_mscm->GetSCardHandle();
@@ -4197,6 +4342,7 @@
throw PcscError(hResult);
//Log::end( "Token::CardEndTransaction" );
+#endif
}
StorageObject * Token::GetObject(CK_OBJECT_HANDLE hObject)
@@ -4305,31 +4451,31 @@
}
-/*
-*/
-bool Token::isPinExternalSupported( void )
-{
- bool bIsPinExternalSupported = false;
+///*
+//*/
+//bool Token::isPinExternalSupported( void )
+//{
+// bool bIsPinExternalSupported = false;
+//
+// u1Array* pinProperties = new u1Array( 0 );
+// try
+// {
+// pinProperties = _mscm->GetardProperty( CARD_PROPERTY_PIN_INFO, CARD_ROLE_USER );
+//
+// if( CARD_PROPERTY_EXTERNAL_PIN == pinProperties->GetBuffer( )[ 0 ] )
+// {
+// bIsPinExternalSupported = true;
+// }
+// }
+// catch( ... )
+// {
+// }
+//
+// delete pinProperties;
+//
+// return bIsPinExternalSupported;
+//}
- u1Array* pinProperties = new u1Array( 0 );
- try
- {
- pinProperties = _mscm->GetCardProperty( CARD_PROPERTY_PIN_INFO, CARD_ROLE_USER );
-
- if( CARD_PROPERTY_EXTERNAL_PIN == pinProperties->GetBuffer( )[ 0 ] )
- {
- bIsPinExternalSupported = true;
- }
- }
- catch( ... )
- {
- }
-
- delete pinProperties;
-
- return bIsPinExternalSupported;
-}
-
/*
*/
CK_RV Token::verifyPinWithPinPad( void )
@@ -4421,10 +4567,6 @@
CK_RV rv = CKR_FUNCTION_FAILED;
if( ( 0x90 == outBuffer[ 0 ] ) && ( 0x00 == outBuffer[ 1 ] ) )
{
- //this->_tokenInfo.flags &= ~CKF_USER_PIN_LOCKED;
- //this->_tokenInfo.flags &= ~CKF_USER_PIN_FINAL_TRY;
- //this->_tokenInfo.flags &= ~CKF_USER_PIN_COUNT_LOW;
- //this->_roleLogged = CKU_USER;
rv = CKR_OK;
}
else if( ( 0x63 == outBuffer[ 0 ] ) && ( 0x00 == outBuffer[ 1 ] ) )
@@ -4651,10 +4793,10 @@
( ( ba->GetBuffer( )[ 14 ] ) << 16 ) +
( ( ba->GetBuffer( )[ 15 ] ) << 24 )
);
- Log::log( "Token::getCardMode - dwFlagsEx <%#08x>", dwFlagsEx );
+ //Log::log( "Token::getCardMode - dwFlagsEx <%#08x>", dwFlagsEx );
WORD wActiveMode = (WORD)( ba->GetBuffer( )[ 12 ] + ( ( ba->GetBuffer( )[ 13 ] ) << 8 ) );
- Log::log( "Token::getCardMode - Active mode <%ld>", wActiveMode );
+ //Log::log( "Token::getCardMode - Active mode <%ld>", wActiveMode );
a_bMode = (BYTE)wActiveMode;
Modified: trunk/SmartCardServices/src/PKCS11dotNetV2/PKCS11Module2/sctoken.h
===================================================================
--- trunk/SmartCardServices/src/PKCS11dotNetV2/PKCS11Module2/sctoken.h 2010-02-04 14:54:20 UTC (rev 112)
+++ trunk/SmartCardServices/src/PKCS11dotNetV2/PKCS11Module2/sctoken.h 2010-02-08 09:41:15 UTC (rev 113)
@@ -125,13 +125,19 @@
bool _fPinChanged;
bool _fContainerChanged;
bool _fFileChanged;
+
+ BYTE m_bCardMode;
+ BYTE m_bTypePIN;
+ //u1Array* m_u1aSerialNumber;
public:
CK_BBOOL _version;
CK_TOKEN_INFO _tokenInfo;
CK_ULONG _roleLogged;
//bool m_isPinExternal;
- bool m_isPinPadSupported;
+ bool m_bIsPinPadSupported;
+ bool m_bIsSSO;
+ bool m_bIsNoPinSupported;
public:
Token(std::string* reader);
@@ -144,7 +150,7 @@
void EndTransaction();
void CardBeginTransaction();
void CardEndTransaction();
- void ManageGC();
+ void ManageGC( bool bForceGarbage = false );
CK_RV Login(CK_ULONG userType,u1Array* pin);
CK_RV Logout();
@@ -175,13 +181,14 @@
bool isAuthenticated( void );
bool isSSO( void );
+ bool isNoPinSupported( void );
private:
void getCardConfiguration( BYTE& a_bMode, BYTE &a_bTypePIN );
BYTE howToAuthenticate( BYTE bPinLen );
bool isPinPadSupported( void );
- bool isPinExternalSupported( void );
+ //bool isPinExternalSupported( void );
CK_RV verifyPinWithPinPad( void );
CK_RV verifyPinWithBio( void /*Marshaller::u1Array *pin*/ );
DWORD m_dwIoctlVerifyPIN;
Modified: trunk/SmartCardServices/src/PKCS11dotNetV2/PKCS11Module2/secretkeyobject.h
===================================================================
--- trunk/SmartCardServices/src/PKCS11dotNetV2/PKCS11Module2/secretkeyobject.h 2010-02-04 14:54:20 UTC (rev 112)
+++ trunk/SmartCardServices/src/PKCS11dotNetV2/PKCS11Module2/secretkeyobject.h 2010-02-08 09:41:15 UTC (rev 113)
@@ -46,7 +46,7 @@
public:
SecretKeyObject();
- ~SecretKeyObject();
+ virtual ~SecretKeyObject();
CK_BBOOL Compare(CK_ATTRIBUTE attribute);
CK_RV SetAttribute(CK_ATTRIBUTE attribute,CK_BBOOL objCreation);
Modified: trunk/SmartCardServices/src/PKCS11dotNetV2/PKCS11Module2/session.cpp
===================================================================
--- trunk/SmartCardServices/src/PKCS11dotNetV2/PKCS11Module2/session.cpp 2010-02-04 14:54:20 UTC (rev 112)
+++ trunk/SmartCardServices/src/PKCS11dotNetV2/PKCS11Module2/session.cpp 2010-02-08 09:41:15 UTC (rev 113)
@@ -58,14 +58,27 @@
_objects.clear();
_sessionObjectsReturnedInSearch.clear();
_tokenObjectsReturnedInSearch.clear();
+
+ if( TRUE == this->_isReadWrite )
+ {
+ this->_state = CKS_RW_PUBLIC_SESSION;
+ }
+ else
+ {
+ this->_state = CKS_RO_PUBLIC_SESSION;
+ }
}
Session::~Session(){
- for(size_t i = 0; i < _objects.size(); i++){
- delete _objects[i];
- _objects[i] = NULL_PTR;
- }
+ for(size_t i = 0; i < _objects.size(); i++)
+ {
+ if( NULL_PTR != _objects[i] )
+ {
+ delete _objects[i];
+ }
+ _objects[i] = NULL_PTR;
+ }
if(this->_digest != NULL_PTR){
delete this->_digest;
@@ -202,11 +215,23 @@
continue;
}
- if((this->_objects[i]->_private == CK_TRUE) &&
- (this->_slot->_token->_roleLogged != CKU_USER))
- {
- continue;
- }
+ if( CK_TRUE == this->_objects[i]->_private )
+ {
+ if( false == _slot->_token->m_bIsNoPinSupported )
+ {
+ if( ( CKU_USER != _slot->_token->_roleLogged )
+ && ( ( true == _slot->_token->m_bIsSSO ) && ( false == _slot->_token->isAuthenticated( ) ) )
+ )
+ {
+ continue;
+ }
+ }
+ }
+ //if((this->_objects[i]->_private == CK_TRUE) &&
+ // (this->_slot->_token->_roleLogged != CKU_USER))
+ //{
+ // continue;
+ //}
if(this->_searchTempl == NULL_PTR){
phObject[idx++] = MakeObjectHandle(i+1);
@@ -292,9 +317,21 @@
return CKR_SESSION_READ_ONLY;
}
- if ((this->_slot->_token->_roleLogged != CKU_USER) && (obj->_private == CK_TRUE)){
- return CKR_USER_NOT_LOGGED_IN;
- }
+ if( CK_TRUE == obj->_private )
+ {
+ if( false == _slot->_token->m_bIsNoPinSupported )
+ {
+ if( ( CKU_USER != _slot->_token->_roleLogged )
+ && ( ( true == _slot->_token->m_bIsSSO ) && ( false == _slot->_token->isAuthenticated( ) ) )
+ )
+ {
+ return CKR_USER_NOT_LOGGED_IN;
+ }
+ }
+ }
+ //if ((this->_slot->_token->_roleLogged != CKU_USER) && (obj->_private == CK_TRUE)){
+ // return CKR_USER_NOT_LOGGED_IN;
+ //}
delete obj;
@@ -319,12 +356,29 @@
StorageObject* obj = this->_objects[idx-1];
- if((this->_slot->_token->_roleLogged != CKU_USER) && (obj->_private == CK_TRUE)){
- for(u4 i=0;i<ulCount;i++){
- pTemplate[i].ulValueLen = (CK_ULONG)-1;
- }
- return CKR_USER_NOT_LOGGED_IN;
- }
+ if( CK_TRUE == obj->_private )
+ {
+ if( false == _slot->_token->m_bIsNoPinSupported )
+ {
+ if( ( CKU_USER != _slot->_token->_roleLogged )
+ && ( ( true == _slot->_token->m_bIsSSO ) && ( false == _slot->_token->isAuthenticated( ) ) )
+ )
+ {
+ for(u4 i=0;i<ulCount;i++)
+ {
+ pTemplate[i].ulValueLen = (CK_ULONG)-1;
+ }
+ return CKR_USER_NOT_LOGGED_IN;
+ }
+ }
+ }
+ //if((this->_slot->_token->_roleLogged != CKU_USER) && (obj->_private == CK_TRUE))
+ // {
+ // for(u4 i=0;i<ulCount;i++){
+ // pTemplate[i].ulValueLen = (CK_ULONG)-1;
+ // }
+ // return CKR_USER_NOT_LOGGED_IN;
+ // }
for(u4 i=0;i<ulCount;i++){
rv = obj->GetAttribute(&pTemplate[i]);
@@ -352,9 +406,21 @@
StorageObject* obj = this->_objects[idx-1];
- if ((this->_slot->_token->_roleLogged != CKU_USER) && (obj->_private == CK_TRUE)){
- return CKR_USER_NOT_LOGGED_IN;
- }
+ if( CK_TRUE == obj->_private )
+ {
+ if( false == _slot->_token->m_bIsNoPinSupported )
+ {
+ if( ( CKU_USER != _slot->_token->_roleLogged )
+ && ( ( true == _slot->_token->m_bIsSSO ) && ( false == _slot->_token->isAuthenticated( ) ) )
+ )
+ {
+ return CKR_USER_NOT_LOGGED_IN;
+ }
+ }
+ }
+ //if ((this->_slot->_token->_roleLogged != CKU_USER) && (obj->_private == CK_TRUE)){
+ // return CKR_USER_NOT_LOGGED_IN;
+ //}
for(u4 i=0;i<ulCount;i++){
rv = obj->SetAttribute(pTemplate[i],CK_FALSE);
Modified: trunk/SmartCardServices/src/PKCS11dotNetV2/PKCS11Module2/slot.cpp
===================================================================
--- trunk/SmartCardServices/src/PKCS11dotNetV2/PKCS11Module2/slot.cpp 2010-02-04 14:54:20 UTC (rev 112)
+++ trunk/SmartCardServices/src/PKCS11dotNetV2/PKCS11Module2/slot.cpp 2010-02-08 09:41:15 UTC (rev 113)
@@ -175,7 +175,9 @@
}
-Slot::~Slot(){
+Slot::~Slot( )
+{
+ Log::begin( "Slot::~Slot" );
if(this->_token != NULL_PTR)
{
@@ -206,6 +208,8 @@
this->_sessions[i] = NULL_PTR;
}
}
+
+ Log::end( "Slot::~Slot" );
}
@@ -322,43 +326,51 @@
}
//Log::log( "Slot::GetTokenInfo - BuildToken..." );
+ //printf( "\n Slot::GetTokenInfo - BuildToken \n" );
CK_RV rv = this->BuildToken( );
//Log::log( "Slot::GetTokenInfo - BuildToken <%#02x>", rv );
if( CKR_OK == rv )
{
- Transaction trans(this);
+ //Transaction trans( this );
+ Log::log( "Slot::GetTokenInfo - 1" );
+
CK_BYTE idx;
pInfo->firmwareVersion.major = this->_token->_tokenInfo.firmwareVersion.major;
pInfo->firmwareVersion.minor = this->_token->_tokenInfo.firmwareVersion.minor;
- pInfo->flags = this->_token->_tokenInfo.flags;
pInfo->hardwareVersion.major = this->_token->_tokenInfo.hardwareVersion.major;
pInfo->hardwareVersion.minor = this->_token->_tokenInfo.hardwareVersion.minor;
+ Log::log( "Slot::GetTokenInfo - 2" );
+
// label
for(idx=0;idx<32;idx++)
{
pInfo->label[idx] = this->_token->_tokenInfo.label[idx];
}
+ Log::log( "Slot::GetTokenInfo - 3" );
// manufacturerID
for(idx=0;idx<32;idx++)
{
pInfo->manufacturerID[idx] = this->_token->_tokenInfo.manufacturerID[idx];
}
+ Log::log( "Slot::GetTokenInfo - 4" );
// model
for(idx=0;idx<16;idx++)
{
pInfo->model[idx] = this->_token->_tokenInfo.model[idx];
}
+ Log::log( "Slot::GetTokenInfo - 5" );
// serial number
for(idx=0;idx<16;idx++)
{
pInfo->serialNumber[idx] = this->_token->_tokenInfo.serialNumber[idx];
}
+ Log::log( "Slot::GetTokenInfo - 6" );
pInfo->ulFreePrivateMemory = this->_token->_tokenInfo.ulFreePrivateMemory;
pInfo->ulFreePublicMemory = this->_token->_tokenInfo.ulFreePublicMemory;
@@ -371,36 +383,49 @@
pInfo->ulTotalPrivateMemory = this->_token->_tokenInfo.ulTotalPrivateMemory;
pInfo->ulTotalPublicMemory = this->_token->_tokenInfo.ulTotalPublicMemory;
+ Log::log( "Slot::GetTokenInfo - 7" );
+
for(size_t i=1;i<_sessions.size();i++)
{
- if(_sessions[i])
+ if( NULL_PTR != _sessions[ i ] )
{
++pInfo->ulSessionCount;
if(_sessions[i]->_isReadWrite)
++pInfo->ulRwSessionCount;
}
}
+ Log::log( "Slot::GetTokenInfo - 8" );
// utcTime
for(idx=0;idx<16;idx++)
{
pInfo->utcTime[idx] = this->_token->_tokenInfo.utcTime[idx];
}
+ Log::log( "Slot::GetTokenInfo - 9" );
+ bool bIsAuthenticated = this->_token->isAuthenticated( );
+ Log::log( "Slot::GetTokenInfo - IsNoPinSupported <%d>", this->_token->m_bIsNoPinSupported );
+ Log::log( "Slot::GetTokenInfo - IsSSO <%d>", this->_token->m_bIsSSO );
+ Log::log( "Slot::GetTokenInfo - IsAuthenticated <%d>", bIsAuthenticated );
+
// Check if the smart card is in SSO mode
- if( ( true == this->_token->isSSO( ) ) && ( true == this->_token->isAuthenticated( ) ) )
+ if( ( true == this->_token->m_bIsNoPinSupported )
+ || ( ( true == this->_token->m_bIsSSO ) && ( true == bIsAuthenticated ) )
+ )
{
this->_token->_tokenInfo.flags &= ~CKF_LOGIN_REQUIRED;
+ Log::log( "Slot::GetTokenInfo - No login required" );
}
else
{
this->_token->_tokenInfo.flags |= CKF_LOGIN_REQUIRED;
+ Log::log( "Slot::GetTokenInfo - Login required" );
}
-
- Log::log( "Slot::GetTokenInfo - tokenInfo formated ok" );
+ pInfo->flags = this->_token->_tokenInfo.flags;
+ //Log::log( "Slot::GetTokenInfo - tokenInfo formated ok" );
}
- Log::logCK_RV( "Slot::GetTokenInfo", rv );
+ //Log::logCK_RV( "Slot::GetTokenInfo", rv );
Log::end( "Slot::GetTokenInfo" );
return rv;
@@ -489,6 +514,7 @@
}
}
+ //printf( "\n Slot::InitToken - BuildToken \n" );
rv = this->BuildToken();
if(rv != CKR_OK){
@@ -528,6 +554,7 @@
return CKR_SESSION_PARALLEL_NOT_SUPPORTED;
}
+ //printf( "\n Slot::OpenSession - BuildToken \n" );
CK_RV rv = this->BuildToken( );
if( rv != CKR_OK )
{
@@ -557,12 +584,23 @@
session->SetId(sessionId);
session->SetSlot(this);
- // Refresh the state of the session if the SSO mode is enabled
- UpdateAuthenticationState( );
-
- // prepare a unique session id
+ // prepare a unique session id
*phSession = MAKE_SESSIONHANDLE(sessionId,this->_slotId);
+ // Refresh the state of the session if the SSO mode is enabled or No pin is required
+ //UpdateAuthenticationState( );
+ if( ( CKU_USER == this->_token->_roleLogged )
+ || ( true == this->_token->m_bIsNoPinSupported )
+ || ( ( true == this->_token->m_bIsSSO ) && ( true == this->_token->isAuthenticated( ) ) )
+ )
+ {
+ UpdateSessionState( CKU_USER );
+ }
+ else if( CKU_SO == this->_token->_roleLogged )
+ {
+ UpdateSessionState( CKU_SO );
+ }
+
return rv;
}
@@ -576,15 +614,6 @@
CK_RV rv = GetSlotAndSessionIdFromSessionHandle( hSession, &pSlot, &hSessionId );
checkConnection( pSlot );
- //CK_SESSION_HANDLE hSessionId = CK_INVALID_HANDLE;
- //Slot* pSlot = NULL_PTR;
- //GetSlotAndSessionIdFromSessionHandle( hSession, &pSlot, &hSessionId );
- //checkConnection( pSlot );
-
- //hSessionId = CK_INVALID_HANDLE;
- //pSlot = NULL_PTR;
- //CK_RV rv = GetSlotAndSessionIdFromSessionHandle( hSession, &pSlot, &hSessionId );
-
if( CKR_OK == rv )
{
CHECK_IF_NULL_SESSION( pSlot, hSessionId );
@@ -593,47 +622,46 @@
pSlot->RemoveSession( hSessionId );
// Refresh the state of the session if the SSO mode is enabled
- pSlot->UpdateAuthenticationState( );
+ //pSlot->UpdateAuthenticationState( );
}
return rv;
}
-/*
-Check first if the card is in SSO mode then update the state of all sessions
-*/
-void Slot::UpdateAuthenticationState( void )
-{
- // Check if the smart card is in SSO mode
- if( true == _token->isSSO( ) )
- {
- // Affect the role to the token if the user is authenticated
- _token->_roleLogged = CKU_NONE;
- if( true == _token->isAuthenticated( ) )
- {
- _token->_roleLogged = CKU_USER;
- }
+///*
+//Check first if the card is in SSO mode then update the state of all sessions
+//*/
+//void Slot::UpdateAuthenticationState( void )
+//{
+// if( ( true == this->_token->_roleLogged )
+// || ( true == this->_token->m_bIsNoPinSupported )
+// || ( ( true == this->_token->m_bIsSSO ) && ( true == this->_token->isAuthenticated( ) ) )
+// )
+// {
+// UpdateSessionState( CKU_USER );
+// }
+//}
- // Update the state of all sessions
- UpdateSessionState( );
- }
-}
-
/*
*/
CK_RV Slot::CloseAllSessions(void)
{
+ //if( NULL != this->_token )
+ //{
+ // this->_token->ManageGC( true );
+ //}
+
// remove all sessions
for( size_t i = 1 ; i < _sessions.size( ) ; i++ )
{
if( NULL_PTR != this->_sessions[ i ] )
{
delete this->_sessions[ i ];
+ this->_sessions[ i ] = NULL_PTR;
}
-
- this->_sessions[ i ] = NULL_PTR;
+ //this->_sessions[ i ] = NULL_PTR;
}
_sessions.resize( 1 );
@@ -642,8 +670,10 @@
this->_token->_roleLogged = CKU_NONE;
- // Refresh the state of the session if the SSO mode is enabled
- UpdateAuthenticationState( );
+ //// Refresh the state of the session if the SSO mode is enabled
+ //UpdateAuthenticationState( );
+ //// Update the state of all sessions
+ //UpdateSessionState( );
return CKR_OK;
}
@@ -670,13 +700,15 @@
CHECK_IF_NULL_SESSION( pSlot, hSessionId);
- Transaction trans( pSlot );
+ // JCD
+ //Transaction trans( pSlot );
pInfo->slotID = pSlot->_slotId;
pInfo->ulDeviceError = CKR_OK;
+ // JCD
// Check if the smart card is in SSO mode
- pSlot->UpdateAuthenticationState( );
+ //pSlot->UpdateAuthenticationState( );
pInfo->flags = ( ( pSlot->_sessions[ hSessionId ]->_isReadWrite ) ? CKF_RW_SESSION : 0 ) | (CKF_SERIAL_SESSION);
pInfo->state = pSlot->_sessions[ hSessionId ]->_state;
@@ -704,6 +736,16 @@
CHECK_IF_TOKEN_IS_PRESENT( pSlot );
CHECK_IF_NULL_SESSION( pSlot, hSessionId );
+
+ if( true == pSlot->_token->m_bIsNoPinSupported )
+ {
+ return CKR_OK; //CKR_USER_ALREADY_LOGGED_IN;
+ }
+ if( ( true == pSlot->_token->m_bIsSSO ) && ( true == pSlot->_token->isAuthenticated( ) ) )
+ {
+ return CKR_USER_ALREADY_LOGGED_IN;
+ }
+
Transaction trans( pSlot );
if(userType == CKU_SO)
@@ -876,6 +918,7 @@
CHECK_IF_TOKEN_IS_PRESENT( pSlot );
CHECK_IF_NULL_SESSION( pSlot, hSessionId );
+
Transaction trans( pSlot );
if((pTemplate == NULL_PTR) && (ulCount != 0))
@@ -907,8 +950,6 @@
CK_RV Slot::FindObjects(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE_PTR phObject,
CK_ULONG ulMaxObjectCount,CK_ULONG_PTR pulObjectCount)
{
- Log::begin( "Slot::FindObjects" );
-
CK_SESSION_HANDLE hSessionId = CK_INVALID_HANDLE;
Slot* pSlot = NULL_PTR;
CK_RV rv = GetSlotAndSessionIdFromSessionHandle( hSession, &pSlot, &hSessionId );
@@ -920,54 +961,36 @@
if((phObject == NULL_PTR) || (pulObjectCount == NULL_PTR))
{
- Log::error( "Slot::FindObjects", "CKR_ARGUMENTS_BAD" );
return CKR_ARGUMENTS_BAD;
}
- Log::log( "Slot::FindObjects - CHECK_IF_TOKEN_IS_PRESENT" );
CHECK_IF_TOKEN_IS_PRESENT( pSlot );
- Log::log( "Slot::FindObjects - CHECK_IF_TOKEN_IS_PRESENT" );
-
- Log::log( "Slot::FindObjects - CHECK_IF_NULL_SESSION" );
CHECK_IF_NULL_SESSION( pSlot, hSessionId );
- Log::log( "Slot::FindObjects - CHECK_IF_NULL_SESSION" );
// Not needed here...
- Log::log( "Slot::FindObjects - Transaction" );
- Transaction trans( pSlot );
- Log::log( "Slot::FindObjects - Transaction" );
+ // JCD 1
+ //Transaction trans( pSlot );
- Log::log( "Slot::FindObjects - session" );
Session* session = pSlot->_sessions[ hSessionId ];
- Log::log( "Slot::FindObjects - session" );
// check if search is active for this session or not
- Log::log( "Slot::FindObjects - IsSearchActive" );
if(session->IsSearchActive() == CK_FALSE)
{
return CKR_OPERATION_NOT_INITIALIZED;
}
- Log::log( "Slot::FindObjects - IsSearchActive" );
*pulObjectCount = 0;
// find the token objects matching the template
// count will tell how much of the phObject buffer was written
- Log::log( "Slot::FindObjects - FindObjects" );
CK_ULONG count = pSlot->_token->FindObjects( session, phObject, ulMaxObjectCount, pulObjectCount );
- Log::log( "Slot::FindObjects - FindObjects" );
if(count < ulMaxObjectCount)
{
// find the session objects matching the template
- Log::log( "Slot::FindObjects - (count < ulMaxObjectCount)" );
count = session->FindObjects(count,phObject,ulMaxObjectCount,pulObjectCount);
- Log::log( "Slot::FindObjects - (count < ulMaxObjectCount)" );
}
- Log::logCK_RV( "Slot::FindObjects", rv );
- Log::end( "Slot::FindObjects" );
-
return rv;
}
@@ -1134,10 +1157,23 @@
}
}
- if ((pSlot->_token->_roleLogged != CKU_USER) && (object->_private == CK_TRUE))
+ if( CK_TRUE == object->_private )
{
+ if( false == pSlot->_token->m_bIsNoPinSupported )
+ {
+ if( ( CKU_USER != pSlot->_token->_roleLogged )
+ && ( ( true == pSlot->_token->m_bIsSSO ) && ( false == pSlot->_token->isAuthenticated( ) ) )
+ )
+ {
+ return CKR_USER_NOT_LOGGED_IN;
+ }
+ }
+ }
+ /*if ((pSlot->_token->_roleLogged != CKU_USER) && (object->_private == CK_TRUE))
+ {
return CKR_USER_NOT_LOGGED_IN;
}
+ */
if(object->_tokenObject)
{
@@ -1149,9 +1185,14 @@
// CardModule service does not allow 'deletion' of any file unless user is logged in. We can create a file
// when nobody is logged in but we can not delete. In order to be symmetrical we do not also allow
// the creation.
- if(pSlot->_token->_roleLogged != CKU_USER)
+ if( false == pSlot->_token->m_bIsNoPinSupported )
{
- return CKR_USER_NOT_LOGGED_IN;
+ if( ( CKU_USER != pSlot->_token->_roleLogged )
+ && ( ( true == pSlot->_token->m_bIsSSO ) && ( false == pSlot->_token->isAuthenticated( ) ) )
+ )
+ {
+ return CKR_USER_NOT_LOGGED_IN;
+ }
}
// some sanity checks
@@ -1175,6 +1216,9 @@
object.release();
}
+ //printf( "\nSlot::CreateObject - ManageGC( true )\n" );
+ pSlot->_token->ManageGC( true );
+
return rv;
}
@@ -1618,9 +1662,19 @@
return rv;
}
- if(pSlot->_token->_roleLogged != CKU_USER){
- return CKR_USER_NOT_LOGGED_IN;
+ if( false == pSlot->_token->m_bIsNoPinSupported )
+ {
+ if( ( CKU_USER != pSlot->_token->_roleLogged )
+ && ( ( true == pSlot->_token->m_bIsSSO ) && ( false == pSlot->_token->isAuthenticated( ) ) )
+ )
+ {
+ return CKR_USER_NOT_LOGGED_IN;
+ }
}
+ //if(pSlot->_token->_roleLogged != CKU_USER)
+ //{
+ // return CKR_USER_NOT_LOGGED_IN;
+ //}
// get the corresponding object
StorageObject* object = NULL_PTR;
@@ -1948,9 +2002,19 @@
return rv;
}
- if(pSlot->_token->_roleLogged != CKU_USER){
- return CKR_USER_NOT_LOGGED_IN;
+ if( false == pSlot->_token->m_bIsNoPinSupported )
+ {
+ if( ( CKU_USER != pSlot->_token->_roleLogged )
+ && ( ( true == pSlot->_token->m_bIsSSO ) && ( false == pSlot->_token->isAuthenticated( ) ) )
+ )
+ {
+ return CKR_USER_NOT_LOGGED_IN;
+ }
}
+ //if(pSlot->_token->_roleLogged != CKU_USER)
+ //{
+ // return CKR_USER_NOT_LOGGED_IN;
+ //}
// get the corresponding object
StorageObject* object = NULL_PTR;
@@ -2084,9 +2148,19 @@
return rv;
}
- if(pSlot->_token->_roleLogged != CKU_USER){
- return CKR_USER_NOT_LOGGED_IN;
+ if( false == pSlot->_token->m_bIsNoPinSupported )
+ {
+ if( ( CKU_USER != pSlot->_token->_roleLogged )
+ && ( ( true == pSlot->_token->m_bIsSSO ) && ( false == pSlot->_token->isAuthenticated( ) ) )
+ )
+ {
+ return CKR_USER_NOT_LOGGED_IN;
+ }
}
+ //if(pSlot->_token->_roleLogged != CKU_USER)
+ //{
+ // return CKR_USER_NOT_LOGGED_IN;
+ //}
// get the corresponding object
StorageObject* object = NULL_PTR;
@@ -2237,9 +2311,19 @@
return rv;
}
- if(pSlot->_token->_roleLogged != CKU_USER){
- return CKR_USER_NOT_LOGGED_IN;
+ if( false == pSlot->_token->m_bIsNoPinSupported )
+ {
+ if( ( CKU_USER != pSlot->_token->_roleLogged )
+ && ( ( true == pSlot->_token->m_bIsSSO ) && ( false == pSlot->_token->isAuthenticated( ) ) )
+ )
+ {
+ return CKR_USER_NOT_LOGGED_IN;
+ }
}
+ //if(pSlot->_token->_roleLogged != CKU_USER)
+ //{
+ // return CKR_USER_NOT_LOGGED_IN;
+ //}
// get the corresponding object
StorageObject* object = NULL_PTR;
@@ -2519,7 +2603,7 @@
*/
/*bool*/ void Slot::checkConnection( Slot* a_pSlot )
{
- Log::begin( "Slot::checkConnection" );
+ //Log::begin( "Slot::checkConnection" );
//bool bRet = false;
@@ -2541,10 +2625,12 @@
{
SCARDHANDLE hCard = pMSCM->GetPcscCardHandle( );
DWORD hResult = SCardStatus( hCard, readers, &dwLen, &dwState, &dwProtocol, &Atr[0], &dwLenAtr );
- Log::log( "Slot::checkConnection - SCardStatus <%#02x>", hResult );
+ //Log::log( "Slot::checkConnection - SCardStatus <%#02x>", hResult );
+ //printf( "\n Slot::checkConnection - SCardStatus <%#02x> \n", hResult );
if( ( SCARD_W_RESET_CARD == hResult ) || ( SCARD_W_REMOVED_CARD == hResult ) )
{
Log::error( "Slot::checkConnection", "Connection is broken" );
+ //printf( "\n Slot::checkConnection - Connection is broken \n" );
// Close all session
a_pSlot->CloseAllSessions( );
@@ -2552,6 +2638,8 @@
// Rebuild the token to restablish the CardModule communication
delete a_pSlot->_token;
a_pSlot->_token = NULL_PTR;
+
+ //printf( "\n Slot::checkConnection - BuildToken \n" );
a_pSlot->BuildToken( );
// bRet = false;
@@ -2560,7 +2648,7 @@
}
}
- Log::end( "Slot::checkConnection" );
+ //Log::end( "Slot::checkConnection" );
//return bRet;
}
@@ -2587,6 +2675,8 @@
*/
void Slot::RemoveSession( CK_LONG sessionId )
{
+ //this->_token->ManageGC( true );
+
delete this->_sessions[ sessionId ];
this->_sessions[sessionId] = NULL_PTR;
@@ -2620,16 +2710,33 @@
}
}
-void Slot::UpdateSessionState()
+
+/*
+*/
+void Slot::UpdateSessionState( CK_ULONG ulRole )
{
// update the state of all sessions
for(size_t i=1;i<_sessions.size();i++){
if(this->_sessions[i] != NULL_PTR){
+ this->_sessions[i]->UpdateState( ulRole );
+ }
+ }
+}
+
+
+/*
+*/
+void Slot::UpdateSessionState( )
+{
+ // update the state of all sessions
+ for(size_t i=1;i<_sessions.size();i++){
+ if(this->_sessions[i] != NULL_PTR){
this->_sessions[i]->UpdateState(this->_token->_roleLogged);
}
}
}
+
CK_BBOOL Slot::HasReadOnlySession()
{
for(size_t i=1;i<_sessions.size();i++){
@@ -2689,7 +2796,7 @@
{
// we not found a card in this reader
this->_slotInfo.flags &= ~CKF_TOKEN_PRESENT;
- Log::log( "Slot::BuildToken - ((readerStates.dwEventState & SCARD_STATE_PRESENT) != SCARD_STATE_PRESENT)" );
+ //Log::log( "Slot::BuildToken - ((readerStates.dwEventState & SCARD_STATE_PRESENT) != SCARD_STATE_PRESENT)" );
Log::logCK_RV( "Slot::BuildToken", CKR_TOKEN_NOT_PRESENT );
return CKR_TOKEN_NOT_PRESENT;
}
@@ -2719,14 +2826,16 @@
// TBD: Check if token is a .net smart card
// token is present in the slot
- Log::log( "Slot::BuildToken - new Token..." );
+ //Log::log( "Slot::BuildToken - new Token..." );
this->_token = new Token( this->_readerName );
- Log::log( "Slot::BuildToken - new Token ok" );
+ //Log::log( "Slot::BuildToken - new Token ok" );
- Log::logCK_RV( "Slot::BuildToken", CKR_OK );
- Log::end( "Slot::BuildToken" );
+ //Log::logCK_RV( "Slot::BuildToken", CKR_OK );
+ //Log::end( "Slot::BuildToken" );
}
+ Log::end( "Slot::BuildToken" );
+
return CKR_OK;
}
Modified: trunk/SmartCardServices/src/PKCS11dotNetV2/PKCS11Module2/slot.h
===================================================================
--- trunk/SmartCardServices/src/PKCS11dotNetV2/PKCS11Module2/slot.h 2010-02-04 14:54:20 UTC (rev 112)
+++ trunk/SmartCardServices/src/PKCS11dotNetV2/PKCS11Module2/slot.h 2010-02-08 09:41:15 UTC (rev 113)
@@ -53,8 +53,10 @@
virtual ~Slot();
void UpdateSessionState();
- void UpdateAuthenticationState( void );
+ //void UpdateAuthenticationState( void );
+ void UpdateSessionState( CK_ULONG ulRole );
+
static void ClearCache(void);
static CK_RV GetSlotAndSessionIdFromSessionHandle(CK_SESSION_HANDLE hSession,
Slot** slot,CK_ULONG_PTR sessionId);
@@ -166,12 +168,10 @@
SCardCancel(m_hMonitoringContext);
//printf( "%s - %d - %s - SCardCancel\n", __FILE__, __LINE__, __FUNCTION__);
- /*
- printf( "%s - %d - %s - SCardReleaseContext -->\n", __FILE__, __LINE__, __FUNCTION__);
- SCardReleaseContext(m_hMonitoringContext);
- printf( "%s - %d - %s - SCardReleaseContext <--\n", __FILE__, __LINE__, __FUNCTION__);
- m_hMonitoringContext = 0;
- */
+ //printf( "%s - %d - %s - SCardReleaseContext -->\n", __FILE__, __LINE__, __FUNCTION__);
+ //SCardReleaseContext(m_hMonitoringContext);
+ //printf( "%s - %d - %s - SCardReleaseContext <--\n", __FILE__, __LINE__, __FUNCTION__);
+ //m_hMonitoringContext = 0;
}
#endif // _XCL_
Modified: trunk/SmartCardServices/src/PKCS11dotNetV2/PKCS11Module2/x509pubkeycertobject.h
===================================================================
--- trunk/SmartCardServices/src/PKCS11dotNetV2/PKCS11Module2/x509pubkeycertobject.h 2010-02-04 14:54:20 UTC (rev 112)
+++ trunk/SmartCardServices/src/PKCS11dotNetV2/PKCS11Module2/x509pubkeycertobject.h 2010-02-08 09:41:15 UTC (rev 113)
@@ -1,22 +1,22 @@
/*
- * PKCS#11 library for .Net smart cards
- * Copyright (C) 2007-2009 Gemalto <support at gemalto.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- */
+* PKCS#11 library for .Net smart cards
+* Copyright (C) 2007-2009 Gemalto <support at gemalto.com>
+*
+* This library is free software; you can redistribute it and/or
+* modify it under the terms of the GNU Lesser General Public
+* License as published by the Free Software Foundation; either
+* version 2.1 of the License, or (at your option) any later version.
+*
+* This library is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this library; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+*
+*/
#ifndef _include_x509pubkeycertobject_h
#define _include_x509pubkeycertobject_h
@@ -27,25 +27,25 @@
{
public:
- u1Array* _subject;
- u1Array* _id;
- u1Array* _issuer;
- u1Array* _serialNumber;
- u1Array* _value;
- u1Array* _url;
- u1Array* _hashOfSubjectPubKey;
- u1Array* _hashOfIssuerPubKey;
+ u1Array* _subject;
+ u1Array* _id;
+ u1Array* _issuer;
+ u1Array* _serialNumber;
+ u1Array* _value;
+ u1Array* _url;
+ u1Array* _hashOfSubjectPubKey;
+ u1Array* _hashOfIssuerPubKey;
public:
- X509PubKeyCertObject();
- ~X509PubKeyCertObject();
+ X509PubKeyCertObject();
+ virtual ~X509PubKeyCertObject();
- CK_BBOOL Compare(CK_ATTRIBUTE attribute);
- CK_RV SetAttribute(CK_ATTRIBUTE attribute,CK_BBOOL objCreation);
- CK_RV GetAttribute(CK_ATTRIBUTE_PTR attribute);
+ CK_BBOOL Compare(CK_ATTRIBUTE attribute);
+ CK_RV SetAttribute(CK_ATTRIBUTE attribute,CK_BBOOL objCreation);
+ CK_RV GetAttribute(CK_ATTRIBUTE_PTR attribute);
- void Serialize(vector<u1>* to);
- void Deserialize(vector<u1> from,CK_ULONG_PTR idx);
+ void Serialize(vector<u1>* to);
+ void Deserialize(vector<u1> from,CK_ULONG_PTR idx);
};
Modified: trunk/SmartCardServices/src/PKCS11dotNetV2/configure.in
===================================================================
--- trunk/SmartCardServices/src/PKCS11dotNetV2/configure.in 2010-02-04 14:54:20 UTC (rev 112)
+++ trunk/SmartCardServices/src/PKCS11dotNetV2/configure.in 2010-02-08 09:41:15 UTC (rev 113)
@@ -2,7 +2,7 @@
# Process this file with autoconf to produce a configure script.
AC_PREREQ(2.59)
-AC_INIT(libgtop11dotnet, 2.1.2, hotline at gemalto.com)
+AC_INIT(libgtop11dotnet, 2.1.3, hotline at gemalto.com)
AM_INIT_AUTOMAKE
AC_CONFIG_SRCDIR([PKCS11Module2/pkcs11.cpp])
AC_CHECK_PROG([PKGCONFIG], [pkg-config], [yes])
Modified: trunk/SmartCardServices/src/PKCS11dotNetV2/cppMarshaller/Marshaller.cpp
===================================================================
--- trunk/SmartCardServices/src/PKCS11dotNetV2/cppMarshaller/Marshaller.cpp 2010-02-04 14:54:20 UTC (rev 112)
+++ trunk/SmartCardServices/src/PKCS11dotNetV2/cppMarshaller/Marshaller.cpp 2010-02-08 09:41:15 UTC (rev 113)
@@ -30,17 +30,18 @@
#include <vld.h>
#endif
+#ifdef __APPLE__
+#include <PCSC/winscard.h>
+#else
+#include <winscard.h>
+#endif
+
#ifndef WIN32
#include <strings.h>
#endif
#include <stdio.h>
#include <stdarg.h>
#include <stdexcept>
-#ifdef __APPLE__
-#include <PCSC/winscard.h>
-#else
-#include <winscard.h>
-#endif
#include "MarshallerCfg.h"
#include "Array.h"
#ifndef _XCL_
@@ -456,7 +457,7 @@
SmartCardMarshaller::SmartCardMarshaller(M_SAL_IN std::string* readerName, u2 portNumber, M_SAL_IN std::string* uri, u4 nameSpaceHivecode, u2 typeHivecode, u4 index)
{
- Log::begin( "SmartCardMarshaller::SmartCardMarshaller" );
+ //Log::begin( "SmartCardMarshaller::SmartCardMarshaller" );
this->uri = NULL;
this->pcsc = NULL;
@@ -473,39 +474,39 @@
if ((readerName == NULL) || (strncasecmp("selfdiscover", readerName->c_str(),readerName->length()) == 0))
{
#endif
- Log::log( "SmartCardMarshaller::SmartCardMarshaller - new PCSC( readerName, &portNumber, uri, nameSpaceHivecode, typeHivecode, index) ..." );
+ //Log::log( "SmartCardMarshaller::SmartCardMarshaller - new PCSC( readerName, &portNumber, uri, nameSpaceHivecode, typeHivecode, index) ..." );
#ifndef _XCL_
this->pcsc = new PCSC( readerName, &portNumber, uri, nameSpaceHivecode, typeHivecode, index);
#else // _XCL
this->pcsc = new XCLBroker(readerName, &portNumber, uri, nameSpaceHivecode, typeHivecode, index);
#endif // _XCL_
- Log::log( "SmartCardMarshaller::SmartCardMarshaller - new PCSC( readerName, &portNumber, uri, nameSpaceHivecode, typeHivecode, index) ok" );
+ //Log::log( "SmartCardMarshaller::SmartCardMarshaller - new PCSC( readerName, &portNumber, uri, nameSpaceHivecode, typeHivecode, index) ok" );
}
else
{
- Log::log( "SmartCardMarshaller::SmartCardMarshaller - new PCSC( readerName ) ..." );
+ //Log::log( "SmartCardMarshaller::SmartCardMarshaller - new PCSC( readerName ) ..." );
#ifndef _XCL_
this->pcsc = new PCSC( readerName );
#else // _XCL_
this->pcsc = new XCLBroker(readerName);
#endif // _XCL_
- Log::log( "SmartCardMarshaller::SmartCardMarshaller - new PCSC( readerName ) ok" );
+ //Log::log( "SmartCardMarshaller::SmartCardMarshaller - new PCSC( readerName ) ok" );
}
try
{
- Log::log( "SmartCardMarshaller::SmartCardMarshaller - new std::string(uri->c_str()) ..." );
+ //Log::log( "SmartCardMarshaller::SmartCardMarshaller - new std::string(uri->c_str()) ..." );
this->uri = new std::string(uri->c_str());
- Log::log( "SmartCardMarshaller::SmartCardMarshaller - new std::string(uri->c_str()) ok" );
+ //Log::log( "SmartCardMarshaller::SmartCardMarshaller - new std::string(uri->c_str()) ok" );
}
catch (...)
{
- Log::error( "SmartCardMarshaller::SmartCardMarshaller", "(...)" );
+ //Log::error( "SmartCardMarshaller::SmartCardMarshaller", "(...)" );
delete this->pcsc;
throw;
}
- Log::end( "SmartCardMarshaller::SmartCardMarshaller" );
+ //Log::end( "SmartCardMarshaller::SmartCardMarshaller" );
}
std::string* SmartCardMarshaller::GetReaderName(void)
Modified: trunk/SmartCardServices/src/PKCS11dotNetV2/cppMarshaller/PCSC.cpp
===================================================================
--- trunk/SmartCardServices/src/PKCS11dotNetV2/cppMarshaller/PCSC.cpp 2010-02-04 14:54:20 UTC (rev 112)
+++ trunk/SmartCardServices/src/PKCS11dotNetV2/cppMarshaller/PCSC.cpp 2010-02-08 09:41:15 UTC (rev 113)
@@ -26,16 +26,17 @@
#define DBG_UNREFERENCED_LOCAL_VARIABLE(a)
#endif
-#ifndef WIN32
-#include <strings.h>
-#endif
-#include <string.h>
#ifdef __APPLE__
+#include <PCSC/wintypes.h>
#include <PCSC/winscard.h>
-#include <PCSC/wintypes.h>
#else
#include <winscard.h>
#endif
+
+#ifndef WIN32
+#include <strings.h>
+#endif
+#include <string.h>
#include <stdexcept>
#include "MarshallerCfg.h"
#include "Array.h"
@@ -417,7 +418,8 @@
}
#ifdef __DEBUG_APDU__
- FILE *pFile = fopen("C:\\AxaltoProtocolAnalyzer.txt","a");
+ //FILE *pFile = fopen("C:\\AxaltoProtocolAnalyzer.txt","a");
+ FILE *pFile = fopen("C:\\Gemalto.NET.PKCS11.log","a");
#endif
try {
@@ -427,11 +429,12 @@
DWORD answerLen = sizeof(answerData);
#ifdef __DEBUG_APDU__
- fprintf(pFile, "APDU DataIn Buffer\n");
+ fprintf(pFile, "\nCmd DataIn\n");
for(int i=0; i < (s4)dataIn.GetLength(); i++) {
fprintf(pFile, "%02x",dataIn.GetBuffer()[i]);
}
fprintf(pFile, "\n");
+ unsigned long ulStart = GetTickCount( );
#endif
s4 lReturn = SCardTransmit(hCard, SCARD_PCI_T0, dataIn.GetBuffer(), dataIn.GetLength(), NULL, (lpByte)answerData, &answerLen);
@@ -448,7 +451,7 @@
temp.SetBuffer(answerData);
dataout += temp;
#ifdef __DEBUG_APDU__
- fprintf(pFile, "APDU DataOut Buffer\n");
+ fprintf(pFile, "Cmd DataOut\n");
for(int i=0; i< (s4)temp.GetLength(); i++) {
fprintf(pFile, "%02x",temp.GetBuffer()[i]);
}
@@ -460,9 +463,8 @@
u1 sw2 = answerData[answerLen - 1];
#ifdef __DEBUG_APDU__
- fprintf(pFile, "APDU Status Buffer\n");
- fprintf(pFile, "%02x%02x",sw1,sw2);
- fprintf(pFile, "\n");
+ fprintf( pFile, "Cmd Status => %02x%02x\n", sw1, sw2 );
+ fprintf( pFile, "Cmd Time => %ld ms\n", GetTickCount( ) - ulStart );
#endif
while ((sw1 == 0x61) || (sw1 == 0x9F))
@@ -480,11 +482,12 @@
answerLen = 258;
#ifdef __DEBUG_APDU__
- fprintf(pFile, "APDU DataIn Buffer\n");
+ fprintf(pFile, "GetResponse DataIn\n");
for(int i=0; i<5; i++) {
fprintf(pFile, "%02x",GetResponse[i]);
}
fprintf(pFile, "\n");
+ ulStart = GetTickCount( );
#endif
lReturn = SCardTransmit(hCard, SCARD_PCI_T0, (lpCByte)GetResponse, 5, NULL, (lpByte)answerData, &answerLen);
@@ -501,20 +504,20 @@
temp.SetBuffer(answerData);
dataout += temp;
#ifdef __DEBUG_APDU__
- fprintf(pFile, "APDU DataOut Buffer\n");
+ fprintf(pFile, "GetResponse DataOut\n");
for(int i=0; i< (s4)temp.GetLength(); i++) {
- fprintf(pFile, "%02x",temp.GetBuffer()[i]);
+ fprintf(pFile, "%02x ",temp.GetBuffer()[i]);
}
fprintf(pFile, "\n");
+
#endif
}
sw1 = answerData[answerLen - 2];
sw2 = answerData[answerLen - 1];
#ifdef __DEBUG_APDU__
- fprintf(pFile, "APDU Status Buffer\n");
- fprintf(pFile, "%02x%02x",sw1,sw2);
- fprintf(pFile, "\n");
+ fprintf( pFile, "GetResponse Status => %02x%02x\n ", sw1, sw2 );
+ fprintf( pFile, "GetResponse Time => %ld ms\n", GetTickCount( ) - ulStart );
#endif
}
} catch (...) {
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/smartcardservices-changes/attachments/20100208/2aa86fbc/attachment-0001.html>
More information about the SmartcardServices-Changes
mailing list