Hi,
Just to share some tips/fixes that make the cvs version of PKCS11 to
build on Windows:
1. cvs gets pcsclite and pkcs11
mkdir pcsclite
cd pcsclite
cvs -d:pserver:[EMAIL PROTECTED]:/cvsroot/pcsclite login
cvs -z3 -d:pserver:[EMAIL PROTECTED]:/cvsroot/pcsclite co PCSC
cd ..
mkdir muscleapps
cd muscleapps
cvs -d:pserver:[EMAIL PROTECTED]:/cvsroot/muscleplugins login
cvs -z3 -d:pserver:[EMAIL PROTECTED]:/cvsroot/muscleapps
co PKCS11
cd ..
mkdir libs
(copy musclecard.lib,libeay32.lib,pthreadVC.lib from
Muscle for Win2k installer to libs)
2. Fix signed/unsigned mismatch compiler warnings
- see p11_object.diff and p11x_object.diff
3. Fix SYS_ThreadCreate declaration mismatch in thread_generic.h
- see thread_generic_h.diff
4. Add include paths to pkcs11.dsp
- "..\include" for cryptoki.h
- "..\..\..\pcsclite\PCSC\libmusclecard\src\PCSC" for musclecard.h
- "..\..\..\pcsclite\PCSC\win32" for win32_pcsclite.h
5. Add libs path "..\..\..\libs" to pkcs11.dsp
6. Add files to pkcs11.dsp:
muscleapps\PKCS11\src\crackcert.c
muscleapps\PKCS11\src\crackcert.h
to fix unresolved external symbol _GetCertFields
7. Add file "..\..\..\pcsclite\PCSC\src\thread_win32.c"
to pkcs11.dsp to fix unresolved external symbols:
p11x_thread.obj : error LNK2001: unresolved external symbol _SYS_MutexUnLock
p11x_thread.obj : error LNK2001: unresolved external symbol _SYS_MutexLock
p11x_thread.obj : error LNK2001: unresolved external symbol
_SYS_MutexDestroy
p11x_thread.obj : error LNK2001: unresolved external symbol _SYS_MutexInit
8. Add post build step:
if not exist ..\..\win32bin\*.* mkdir ..\..\win32bin
see pkcs11.dsp
Rgds.
Martin
--- cvs\muscleapps\PKCS11\src\p11_object.c 2004-11-28 22:30:31.000000000
+0800
+++ muscleapps\PKCS11\src\p11_object.c 2005-07-19 15:46:06.453125000 +0800
@@ -506,24 +506,24 @@
/* Otherwise it uses the memory pointer back into the
calling application. */
session->search_attrib = (CK_ATTRIBUTE *)calloc(ulCount,
sizeof(CK_ATTRIBUTE));
if (NULL == session->search_attrib) {
rv = CKR_HOST_MEMORY;
goto finish;
}
else
{
- int i;
+ CK_ULONG i;
memcpy(session->search_attrib, pTemplate, ulCount *
sizeof(CK_ATTRIBUTE));
for (i=0; i<ulCount; i++) {
session->search_attrib[i].pValue =
malloc(session->search_attrib[i].ulValueLen);
if (NULL == session->search_attrib[i].pValue) {
/* avoid leaking memory here */
- int k;
+ CK_ULONG k;
for (k=0 ; k<i ; k++)
free(session->search_attrib[k].pValue);
free(session->search_attrib);
session->search_attrib = NULL;
rv = CKR_HOST_MEMORY;
goto finish;
@@ -677,17 +677,17 @@
if (CKR_ERROR(rv = slot_TokenChanged()))
rv = CKR_SESSION_HANDLE_INVALID;
else
{
session->search_object = 0x00;
if (session->search_attrib)
{
- int j;
+ CK_ULONG j;
for (j=0 ; j<session->search_attrib_count; j++) {
if (session->search_attrib[j].pValue) {
/* redundant if, actually */
free(session->search_attrib[j].pValue);
session->search_attrib[j].pValue = NULL;
}
}
--- cvs\muscleapps\PKCS11\src\p11x_object.c 2005-05-24 15:13:21.000000000
+0800
+++ muscleapps\PKCS11\src\p11x_object.c 2005-07-19 15:46:40.312500000 +0800
@@ -706,17 +706,17 @@
!memcmp(reverse, obj_attrib->attrib.pValue, attrib->ulValueLen)))
{
rv = 1;
}
else
{
{
CK_BYTE *buf;
- int len = attrib->ulValueLen;
+ CK_ULONG len = attrib->ulValueLen;
/* be sure object_GetAttrib() worked before dereferencing
* obj_attrib */
if ((rv == CKR_OK) && (obj_attrib->attrib.ulValueLen > len))
len = obj_attrib->attrib.ulValueLen;
buf = (CK_BYTE *)malloc((len * 3) + 1);
if (buf == NULL)
diff -u -8 -r cvs\muscleapps\PKCS11/include/thread_generic.h
muscleapps\PKCS11/include/thread_generic.h
--- cvs\muscleapps\PKCS11/include/thread_generic.h 2003-06-05
08:46:49.000000000 +0800
+++ muscleapps\PKCS11/include/thread_generic.h 2005-07-19 16:26:38.015625000
+0800
@@ -38,17 +38,17 @@
#define PCSCLITE_MUTEX pthread_mutex_t
#define PCSCLITE_MUTEX_T pthread_mutex_t*
#endif
int SYS_MutexInit(PCSCLITE_MUTEX_T);
int SYS_MutexDestroy(PCSCLITE_MUTEX_T);
int SYS_MutexLock(PCSCLITE_MUTEX_T);
int SYS_MutexUnLock(PCSCLITE_MUTEX_T);
- int SYS_ThreadCreate(PCSCLITE_THREAD_T *, LPVOID, LPVOID, LPVOID);
+ int SYS_ThreadCreate(PCSCLITE_THREAD_T *, int, LPVOID, LPVOID);
int SYS_ThreadCancel(PCSCLITE_THREAD_T *);
int SYS_ThreadDetach(PCSCLITE_THREAD_T);
int SYS_ThreadJoin(PCSCLITE_THREAD_T *, LPVOID*);
int SYS_ThreadExit(LPVOID);
PCSC_API int MSC_MutexInit(PCSCLITE_MUTEX_T);
PCSC_API int MSC_MutexDestroy(PCSCLITE_MUTEX_T);# Microsoft Developer Studio Project File - Name="PKCS11" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
CFG=PKCS11 - Win32 Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "PKCS11.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "PKCS11.mak" CFG="PKCS11 - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "PKCS11 - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE "PKCS11 - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
MTL=midl.exe
RSC=rc.exe
!IF "$(CFG)" == "PKCS11 - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "Release"
# PROP BASE Intermediate_Dir "Release"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release"
# PROP Intermediate_Dir "Release"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D
"_MBCS" /D "_USRDLL" /D "PKCS11_EXPORTS" /YX /FD /c
# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\include" /I
"..\..\..\pcsclite\PCSC\libmusclecard\src\PCSC" /I
"..\..\..\pcsclite\PCSC\win32" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS"
/D "_USRDLL" /D "PKCS11_EXPORTS" /D "CRYPTOKI_EXPORTS" /FD /c
# SUBTRACT CPP /YX
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib
advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib
odbccp32.lib /nologo /dll /machine:I386
# ADD LINK32 musclecard.lib libeay32.lib pthreadVC.lib advapi32.lib /nologo
/dll /machine:I386 /libpath:"..\..\..\libs"
!ELSEIF "$(CFG)" == "PKCS11 - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Debug"
# PROP BASE Intermediate_Dir "Debug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug"
# PROP Intermediate_Dir "Debug"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D
"_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PKCS11_EXPORTS" /YX /FD /GZ /c
# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "..\include" /I
"..\..\..\pcsclite\PCSC\libmusclecard\src\PCSC" /I
"..\..\..\pcsclite\PCSC\win32" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS"
/D "_USRDLL" /D "PKCS11_EXPORTS" /D "CRYPTOKI_EXPORTS" /FR /FD /GZ /c
# SUBTRACT CPP /YX
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib
advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib
odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
# ADD LINK32 musclecard.lib libeay32.lib pthreadVC.lib advapi32.lib /nologo
/dll /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\libs"
# Begin Special Build Tool
SOURCE="$(InputPath)"
PostBuild_Cmds=if not exist ..\..\win32bin\*.* mkdir ..\..\win32bin copy
Debug\PKCS11.dll ..\..\win32bin copy Debug\PKCS11.lib
..\..\win32bin
# End Special Build Tool
!ENDIF
# Begin Target
# Name "PKCS11 - Win32 Release"
# Name "PKCS11 - Win32 Debug"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=..\src\crackcert.c
# End Source File
# Begin Source File
SOURCE=..\src\p11_crypt.c
!IF "$(CFG)" == "PKCS11 - Win32 Release"
# ADD CPP /I "..\..\..\pcsclite\libmusclecard\src\PCSC"
!ELSEIF "$(CFG)" == "PKCS11 - Win32 Debug"
!ENDIF
# End Source File
# Begin Source File
SOURCE=..\src\p11_digest.c
# ADD CPP /I "..\include" /I "..\..\..\pcsclite\PCSC\libmusclecard\src\PCSC" /I
"..\..\..\pcsclite\PCSC\win32"
# End Source File
# Begin Source File
SOURCE=..\src\p11_dual.c
# ADD CPP /I "..\include" /I "..\..\..\pcsclite\PCSC\libmusclecard\src\PCSC" /I
"..\..\..\pcsclite\PCSC\win32"
# End Source File
# Begin Source File
SOURCE=..\src\p11_ext.c
# ADD CPP /I "..\include" /I "..\..\..\pcsclite\PCSC\libmusclecard\src\PCSC" /I
"..\..\..\pcsclite\PCSC\win32"
# End Source File
# Begin Source File
SOURCE=..\src\p11_general.c
# ADD CPP /I "..\include" /I "..\..\..\pcsclite\PCSC\libmusclecard\src\PCSC" /I
"..\..\..\pcsclite\PCSC\win32"
# End Source File
# Begin Source File
SOURCE=..\src\p11_key.c
# ADD CPP /I "..\include" /I "..\..\..\pcsclite\PCSC\libmusclecard\src\PCSC" /I
"..\..\..\pcsclite\PCSC\win32"
# End Source File
# Begin Source File
SOURCE=..\src\p11_object.c
# ADD CPP /I "..\include" /I "..\..\..\pcsclite\PCSC\libmusclecard\src\PCSC" /I
"..\..\..\pcsclite\PCSC\win32"
# End Source File
# Begin Source File
SOURCE=..\src\p11_parallel.c
# ADD CPP /I "..\include" /I "..\..\..\pcsclite\PCSC\libmusclecard\src\PCSC" /I
"..\..\..\pcsclite\PCSC\win32"
# End Source File
# Begin Source File
SOURCE=..\src\p11_random.c
# ADD CPP /I "..\include" /I "..\..\..\pcsclite\PCSC\libmusclecard\src\PCSC" /I
"..\..\..\pcsclite\PCSC\win32"
# End Source File
# Begin Source File
SOURCE=..\src\p11_session.c
# ADD CPP /I "..\include" /I "..\..\..\pcsclite\PCSC\libmusclecard\src\PCSC" /I
"..\..\..\pcsclite\PCSC\win32"
# End Source File
# Begin Source File
SOURCE=..\src\p11_sign.c
# ADD CPP /I "..\include" /I "..\..\..\pcsclite\PCSC\libmusclecard\src\PCSC" /I
"..\..\..\pcsclite\PCSC\win32"
# End Source File
# Begin Source File
SOURCE=..\src\p11_token.c
# ADD CPP /I "..\include" /I "..\..\..\pcsclite\PCSC\libmusclecard\src\PCSC" /I
"..\..\..\pcsclite\PCSC\win32"
# End Source File
# Begin Source File
SOURCE=..\src\p11_verify.c
# ADD CPP /I "..\include" /I "..\..\..\pcsclite\PCSC\libmusclecard\src\PCSC" /I
"..\..\..\pcsclite\PCSC\win32"
# End Source File
# Begin Source File
SOURCE=..\src\p11x_async.c
# ADD CPP /I "..\include" /I "..\..\..\pcsclite\PCSC\libmusclecard\src\PCSC" /I
"..\..\..\pcsclite\PCSC\win32"
# End Source File
# Begin Source File
SOURCE=..\src\p11x_error.c
# ADD CPP /I "..\include" /I "..\..\..\pcsclite\PCSC\libmusclecard\src\PCSC" /I
"..\..\..\pcsclite\PCSC\win32"
# End Source File
# Begin Source File
SOURCE=..\src\p11x_log.c
# ADD CPP /I "..\include" /I "..\..\..\pcsclite\PCSC\libmusclecard\src\PCSC" /I
"..\..\..\pcsclite\PCSC\win32"
# End Source File
# Begin Source File
SOURCE=..\src\p11x_msc.c
# ADD CPP /I "..\include" /I "..\..\..\pcsclite\PCSC\libmusclecard\src\PCSC" /I
"..\..\..\pcsclite\PCSC\win32"
# End Source File
# Begin Source File
SOURCE=..\src\p11x_object.c
# ADD CPP /I "..\include" /I "..\..\..\pcsclite\PCSC\libmusclecard\src\PCSC" /I
"..\..\..\pcsclite\PCSC\win32"
# End Source File
# Begin Source File
SOURCE=..\src\p11x_prefs.c
# ADD CPP /I "..\include" /I "..\..\..\pcsclite\PCSC\libmusclecard\src\PCSC" /I
"..\..\..\pcsclite\PCSC\win32"
# End Source File
# Begin Source File
SOURCE=..\src\p11x_session.c
# ADD CPP /I "..\include" /I "..\..\..\pcsclite\PCSC\libmusclecard\src\PCSC" /I
"..\..\..\pcsclite\PCSC\win32"
# End Source File
# Begin Source File
SOURCE=..\src\p11x_slot.c
# ADD CPP /I "..\include" /I "..\..\..\pcsclite\PCSC\libmusclecard\src\PCSC" /I
"..\..\..\pcsclite\PCSC\win32"
# End Source File
# Begin Source File
SOURCE=..\src\p11x_state.c
# ADD CPP /I "..\include" /I "..\..\..\pcsclite\PCSC\libmusclecard\src\PCSC" /I
"..\..\..\pcsclite\PCSC\win32"
# End Source File
# Begin Source File
SOURCE=..\src\p11x_thread.c
# ADD CPP /I "..\include" /I "..\..\..\pcsclite\PCSC\libmusclecard\src\PCSC" /I
"..\..\..\pcsclite\PCSC\win32"
# End Source File
# Begin Source File
SOURCE=..\src\p11x_util.c
# ADD CPP /I "..\include" /I "..\..\..\pcsclite\PCSC\libmusclecard\src\PCSC" /I
"..\..\..\pcsclite\PCSC\win32"
# End Source File
# Begin Source File
SOURCE=..\src\p11x_win32dll.c
# ADD CPP /I "..\include" /I "..\..\..\pcsclite\PCSC\libmusclecard\src\PCSC" /I
"..\..\..\pcsclite\PCSC\win32"
# End Source File
# Begin Source File
SOURCE=..\..\..\pcsclite\PCSC\src\thread_win32.c
# End Source File
# End Group
# Begin Group "Header Files"
# PROP Default_Filter "h;hpp;hxx;hm;inl"
# Begin Source File
SOURCE=..\include\crackcert.h
# End Source File
# Begin Source File
SOURCE=..\include\cryptoki.h
# End Source File
# Begin Source File
SOURCE=..\include\cryptoki_unix.h
# End Source File
# Begin Source File
SOURCE=..\include\cryptoki_win32.h
# End Source File
# Begin Source File
SOURCE=..\include\p11x_msc.h
# End Source File
# Begin Source File
SOURCE=..\include\pkcs11.h
# End Source File
# Begin Source File
SOURCE=..\include\pkcs11f.h
# End Source File
# Begin Source File
SOURCE=..\include\pkcs11t.h
# End Source File
# Begin Source File
SOURCE=..\include\thread_generic.h
# End Source File
# End Group
# Begin Group "Resource Files"
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
# End Group
# End Target
# End Project
_______________________________________________
Muscle mailing list
[email protected]
http://lists.drizzle.com/mailman/listinfo/muscle