This is the first of two messages, dealing with building OpenSC on Windows
using the win32/Makefile.mak files as has been done in the past. As I had
stated before, I would like to see OpenSC built on Windows using the Windows
compiler header files and dlls. I understand some would like to convert
to using cross compilation for a number of reasons.
So I am submitting changes so OpenSC can continue to be built on Windows.
I an using Visual Studio 8 on XP. Attached is an svn diff.
win32/makedep.pl - changed to not export the _real@ entry created for
the one float number in all the source code.
win32/version.rc - change version number.
win32/Make.rules.mak - change HAVE_OPENSSL and HAVE_ZLIB_H to
ENABLE_OPENSSL and ENABLE_ZLIB
src/tools/opensc-tool.c - #ifdef the PACKAGE_NAME new code,
as it is still under development and so I
build without it for now.
src/pkcs11/pkcs11-global.c - This tries to allocate a variable
size array an an automatic variable. The compiler
complained, so I changed it to use calloc.
*/*/Makefile.mak - Most of these have additional headers and obj
modules defined. I also put the names in the same
order as the header and source files as found
in Makefile.am. It is very straight forward
to make the conversion.
src/include/winconfig.h - The main change is to include WinSock2.h
before windows.h. Google for WinSock2.h WInsock.h
to see why this is required. A matching change was
made to reader-pcsc.c. ENABLE_PCSC, USE_WINDOWS_PCSC
and DEFAULT_PCSC_PROVIDER were also defined.
src/pkcs15init/pkcs15-lib.c - don't include rutoken for now on windows.
src/libopensc/reader-pcsc.c - read config.h early, so WinSock2.h is
included before windows.h
src/libopensc/internal-winscard.h - (1) add #ifdefs for USE_WINDOWS_PCSC
This is set by the wincof.h It says we are uing the
Microsoft header files, that include many of
defines for PSCS that neede to be added if not using
the Windows headers.
(2) Change the typdefs for the SC_*_t routines.
The WINAPI had to be moved. For example from:
typedef PCSC_API LONG (*SCardEstablishContext_t)...
to:
typedef LONG (PCSC_API *SCardEstablishContext_t)...
I am not sure if this will cause problems with the
ming builds or not.
src/libopensc/ctx.c - don't include rutoken for now on windows.
src/libopensc/pkcs15-syn.c - don't include rutoken for now on windows.
Second message to follow in rutoken issues.
--
Douglas E. Engert <[EMAIL PROTECTED]>
Argonne National Laboratory
9700 South Cass Avenue
Argonne, Illinois 60439
(630) 252-5444
Index: win32/makedef.pl
===================================================================
--- win32/makedef.pl (revision 3456)
+++ win32/makedef.pl (working copy)
@@ -21,7 +21,7 @@
split;
$_ = $_[0];
- if(!/^\?\?_G/ && !/^\?\?_E/ && !/DllMain/)
+ if(!/^\?\?_G/ && !/^\?\?_E/ && !/_real@/ && !/DllMain/)
{
# Stupid windows linker needs to have
# preceding underscore for ANSI C programs
Index: win32/version.rc
===================================================================
--- win32/version.rc (revision 3456)
+++ win32/version.rc (working copy)
@@ -19,8 +19,8 @@
#endif
VS_VERSION_INFO VERSIONINFO
- FILEVERSION 0,11,4,0
- PRODUCTVERSION 0,11,4,0
+ FILEVERSION 0,11,4,1
+ PRODUCTVERSION 0,11,4,1
FILEFLAGSMASK 0x3fL
FILEFLAGS 0x0L
FILEOS 0x40004L
@@ -32,8 +32,8 @@
BLOCK "080904b0"
BEGIN
VALUE "Description", "OpenSC PKCS#11 library\0"
- VALUE "FileVersion", "0, 11, 4, 0\0"
- VALUE "ProductVersion", "0, 11, 4, 0\0"
+ VALUE "FileVersion", "0, 11, 4, 1\0"
+ VALUE "ProductVersion", "0, 11, 4, 1\0"
VALUE "Licence", "LGPL\0"
VALUE "Info", "http://www.opensc-project.org/\0"
END
Index: win32/Make.rules.mak
===================================================================
--- win32/Make.rules.mak (revision 3456)
+++ win32/Make.rules.mak (working copy)
@@ -14,8 +14,8 @@
# - uncomment the line starting with OPENSSL_DEF
# - set the OPENSSL_INCL_DIR below to your openssl include directory, preceded
by "/I"
# - set the OPENSSL_LIB below to your openssl lib file
-#OPENSSL_DEF = /DHAVE_OPENSSL
-!IF "$(OPENSSL_DEF)" == "/DHAVE_OPENSSL"
+#OPENSSL_DEF = /DENABLE_OPENSSL
+!IF "$(OPENSSL_DEF)" == "/DENABLE_OPENSSL"
OPENSSL_INCL_DIR = /IC:\openssl\include
OPENSSL_LIB = C:\openssl\out32dll\libeay32.lib
PROGRAMS_OPENSSL = pkcs15-init.exe cryptoflex-tool.exe netkey-tool.exe
@@ -26,8 +26,8 @@
# - uncomment the line starting with ZLIB_DEF
# - set the ZLIB_INCL_DIR below to the zlib include lib proceeded by "/I"
# - set the ZLIB_LIB below to your zlib lib file
-#ZLIB_DEF = /DHAVE_ZLIB_H
-!IF "$(ZLIB_DEF)" == "/DHAVE_ZLIB_H"
+#ZLIB_DEF = /DENABLE_ZLIB
+!IF "$(ZLIB_DEF)" == "/DENABLE_ZLIB"
ZLIB_INCL_DIR = /IC:\ZLIB\INCLUDE
ZLIB_LIB = C:\ZLIB\LIB\zlib.lib
!ENDIF
Index: src/tools/opensc-tool.c
===================================================================
--- src/tools/opensc-tool.c (revision 3456)
+++ src/tools/opensc-tool.c (working copy)
@@ -84,11 +84,13 @@
static int opensc_info(void)
{
+#ifndef _WIN32
printf (
"%s %s ",
PACKAGE_NAME,
PACKAGE_VERSION
);
+#endif
#if defined(__VERSION__)
printf (
@@ -105,7 +107,9 @@
#else
printf ("[Unknown compiler, please report]");
#endif
+#ifndef _WIN32
printf ("Enabled features:%s\n", OPENSC_FEATURES);
+#endif
return 0;
}
Index: src/pkcs11/pkcs11-global.c
===================================================================
--- src/pkcs11/pkcs11-global.c (revision 3456)
+++ src/pkcs11/pkcs11-global.c (working copy)
@@ -320,7 +320,7 @@
CK_SLOT_ID_PTR pSlotList, /* receives the array of slot
IDs */
CK_ULONG_PTR pulCount) /* receives the number of
slots */
{
- CK_SLOT_ID found[sc_pkcs11_conf.pkcs11_max_virtual_slots];
+ CK_SLOT_ID_PTR found = NULL;
int i;
CK_ULONG numMatches;
sc_pkcs11_slot_t *slot;
@@ -330,6 +330,14 @@
if (rv != CKR_OK)
return rv;
+ if (!(found = (CK_SLOT_ID_PTR)
+ calloc(sc_pkcs11_conf.pkcs11_max_virtual_slots,
+ sizeof(CK_SLOT_ID)))) {
+ rv = SC_ERROR_OUT_OF_MEMORY;
+ goto out;
+ }
+
+
if (pulCount == NULL_PTR) {
rv = CKR_ARGUMENTS_BAD;
goto out;
@@ -367,6 +375,9 @@
sc_debug(context, "returned %d slots\n", numMatches);
out: sc_pkcs11_unlock();
+ if (found) {
+ free(found);
+ }
return rv;
}
Index: src/pkcs11/Makefile.mak
===================================================================
--- src/pkcs11/Makefile.mak (revision 3456)
+++ src/pkcs11/Makefile.mak (working copy)
@@ -1,6 +1,6 @@
TOPDIR = ..\..
-HEADERS = pkcs11.h
+HEADERS = pkcs11-opensc.h pkcs11.h sc-pkcs11.h
HEADERSDIR = $(TOPDIR)\src\include\opensc
@@ -10,8 +10,9 @@
TARGET3 = pkcs11-spy.dll
OBJECTS = pkcs11-global.obj pkcs11-session.obj
pkcs11-object.obj misc.obj slot.obj \
- secretkey.obj framework-pkcs15.obj
framework-pkcs15init.obj mechanism.obj \
- openssl.obj debug.obj $(TOPDIR)\win32\version.res
+ mechanism.obj openssl.obj secretkey.obj
framework-pkcs15.obj \
+ framework-pkcs15init.obj debug.obj \
+ $(TOPDIR)\win32\version.res
OBJECTS2 = libpkcs11.obj
OBJECTS3 = pkcs11-spy.obj pkcs11-display.obj libpkcs11.obj
Index: src/include/winconfig.h
===================================================================
--- src/include/winconfig.h (revision 3456)
+++ src/include/winconfig.h (working copy)
@@ -2,6 +2,9 @@
#define _OPENSC_WINCONFIG_H
#include <stdio.h>
+#ifdef IF_WIN_USE_WINSOCK2_H
+#include <winsock2.h>
+#endif
#include <windows.h>
#include <sys/timeb.h>
@@ -65,13 +68,14 @@
#endif
#define HAVE_IO_H
-#define HAVE_GETPASS
-#define HAVE_PCSC
+#define ENABLE_PCSC
+#define USE_WINDOWS_PCSC
+#define DEFAULT_PCSC_PROVIDER "winscard.dll"
#define PATH_MAX _MAX_PATH
#ifndef VERSION
-#define VERSION "0.11.4"
+#define VERSION "0.11.4.1"
#endif
/* src/common/getpass.c */
Index: src/common/Makefile.mak
===================================================================
--- src/common/Makefile.mak (revision 3456)
+++ src/common/Makefile.mak (working copy)
@@ -1,9 +1,9 @@
TOPDIR = ..\..
-HEADERS = my_getopt.h strlcpy.h
+HEADERS = compat_getpass.h compat_getopt.h compat_strlcpy.h
HEADERSDIR = $(TOPDIR)\src\include
TARGET = common.lib
-OBJECTS = getpass.obj my_getopt.obj strlcpy.obj
+OBJECTS = compat_getpass.obj compat_getopt.obj compat_strlcpy.obj
all: install-headers $(TARGET)
Index: src/pkcs15init/pkcs15-lib.c
===================================================================
--- src/pkcs15init/pkcs15-lib.c (revision 3456)
+++ src/pkcs15init/pkcs15-lib.c (working copy)
@@ -149,7 +149,9 @@
const char *name;
void *func;
} profile_operations[] = {
+#ifndef _WIN32
{ "rutoken", (void *) sc_pkcs15init_get_rutoken_ops },
+#endif
{ "gpk", (void *) sc_pkcs15init_get_gpk_ops },
{ "miocos", (void *) sc_pkcs15init_get_miocos_ops },
{ "flex", (void *) sc_pkcs15init_get_cryptoflex_ops },
Index: src/pkcs15init/Makefile.mak
===================================================================
--- src/pkcs15init/Makefile.mak (revision 3456)
+++ src/pkcs15init/Makefile.mak (working copy)
@@ -2,11 +2,11 @@
TARGET = pkcs15init.dll
-HEADERS = pkcs15-init.h keycache.h
+HEADERS = pkcs15-init.h profile.h keycache.h
HEADERSDIR = $(TOPDIR)\src\include\opensc
-OBJECTS = profile.obj pkcs15-lib.obj keycache.obj \
- pkcs15-miocos.obj pkcs15-gpk.obj pkcs15-cflex.obj \
+OBJECTS = pkcs15-lib.obj profile.obj keycache.obj \
+ pkcs15-gpk.obj pkcs15-miocos.obj pkcs15-cflex.obj \
pkcs15-cardos.obj pkcs15-jcop.obj pkcs15-starcos.obj \
pkcs15-oberthur.obj pkcs15-setcos.obj pkcs15-incrypto34.obj \
pkcs15-muscle.obj pkcs15-asepcos.obj
Index: src/scconf/Makefile.mak
===================================================================
--- src/scconf/Makefile.mak (revision 3456)
+++ src/scconf/Makefile.mak (working copy)
@@ -3,7 +3,7 @@
TARGET = scconf.lib
HEADERS = scconf.h
HEADERSDIR = $(TOPDIR)\src\include\opensc
-OBJECTS = parse.obj scconf.obj write.obj sclex.obj
+OBJECTS = scconf.obj parse.obj write.obj sclex.obj
.SUFFIXES : .l
Index: src/libopensc/reader-pcsc.c
===================================================================
--- src/libopensc/reader-pcsc.c (revision 3456)
+++ src/libopensc/reader-pcsc.c (working copy)
@@ -18,6 +18,11 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+#ifdef HAVE_CONFIG_H
+#define IF_WIN_USE_WINSOCK2_H
+#include <config.h>
+#endif
+
#include "internal.h"
#ifdef ENABLE_PCSC
#include "ctbcs.h"
@@ -27,9 +32,7 @@
#include <time.h>
#include <ltdl.h>
-#ifdef _WIN32
-#include <winsock2.h>
-#else
+#ifndef _WIN32
#include <arpa/inet.h>
#endif
Index: src/libopensc/internal-winscard.h
===================================================================
--- src/libopensc/internal-winscard.h (revision 3456)
+++ src/libopensc/internal-winscard.h (working copy)
@@ -28,6 +28,8 @@
#warning no uint32_t type available, please contact [EMAIL PROTECTED]
#endif
+#ifndef USE_WINDOWS_PCSC
+
#define MAX_ATR_SIZE 33 /**< Maximum ATR size */
#define SCARD_PROTOCOL_T0 0x0001 /**< T=0 active protocol. */
@@ -61,6 +63,8 @@
#define SCARD_CTL_CODE(code) (0x42000000 + (code))
+#endif
+
#if defined(_WIN32)
#define PCSC_API WINAPI
#elif defined(USE_CYGWIN)
@@ -68,6 +72,8 @@
#else
#define PCSC_API
#endif
+
+#ifndef USE_WINDOWS_PCSC
typedef const BYTE *LPCBYTE;
typedef long SCARDCONTEXT; /**< \p hContext returned by
SCardEstablishContext() */
@@ -95,33 +101,35 @@
}
SCARD_IO_REQUEST, *PSCARD_IO_REQUEST, *LPSCARD_IO_REQUEST;
+#endif /* USE_WINDOWS_PCSC */
+
typedef const SCARD_IO_REQUEST *LPCSCARD_IO_REQUEST;
typedef SCARD_READERSTATE_A SCARD_READERSTATE, *PSCARD_READERSTATE_A,
*LPSCARD_READERSTATE_A;
-typedef PCSC_API LONG (*SCardEstablishContext_t)(DWORD dwScope, LPCVOID
pvReserved1,
+typedef LONG (PCSC_API *SCardEstablishContext_t)(DWORD dwScope, LPCVOID
pvReserved1,
LPCVOID pvReserved2, LPSCARDCONTEXT phContext);
-typedef PCSC_API LONG (*SCardReleaseContext_t)(SCARDCONTEXT hContext);
-typedef PCSC_API LONG (*SCardConnect_t)(SCARDCONTEXT hContext, LPCSTR
szReader, DWORD dwShareMode,
+typedef LONG (PCSC_API *SCardReleaseContext_t)(SCARDCONTEXT hContext);
+typedef LONG (PCSC_API *SCardConnect_t)(SCARDCONTEXT hContext, LPCSTR
szReader, DWORD dwShareMode,
DWORD dwPreferredProtocols, LPSCARDHANDLE phCard, LPDWORD
pdwActiveProtocol);
-typedef PCSC_API LONG (*SCardReconnect_t)(SCARDHANDLE hCard, DWORD
dwShareMode, DWORD dwPreferredProtocols,
+typedef LONG (PCSC_API *SCardReconnect_t)(SCARDHANDLE hCard, DWORD
dwShareMode, DWORD dwPreferredProtocols,
DWORD dwInitialization, LPDWORD pdwActiveProtocol);
-typedef PCSC_API LONG (*SCardDisconnect_t)(SCARDHANDLE hCard, DWORD
dwDisposition);
-typedef PCSC_API LONG (*SCardBeginTransaction_t)(SCARDHANDLE hCard);
-typedef PCSC_API LONG (*SCardEndTransaction_t)(SCARDHANDLE hCard, DWORD
dwDisposition);
-typedef PCSC_API LONG (*SCardStatus_t)(SCARDHANDLE hCard, LPSTR
mszReaderNames, LPDWORD pcchReaderLen,
+typedef LONG (PCSC_API *SCardDisconnect_t)(SCARDHANDLE hCard, DWORD
dwDisposition);
+typedef LONG (PCSC_API *SCardBeginTransaction_t)(SCARDHANDLE hCard);
+typedef LONG (PCSC_API *SCardEndTransaction_t)(SCARDHANDLE hCard, DWORD
dwDisposition);
+typedef LONG (PCSC_API *SCardStatus_t)(SCARDHANDLE hCard, LPSTR
mszReaderNames, LPDWORD pcchReaderLen,
LPDWORD pdwState, LPDWORD pdwProtocol, LPBYTE pbAtr, LPDWORD pcbAtrLen);
-typedef PCSC_API LONG (*SCardGetStatusChange_t)(SCARDCONTEXT hContext, DWORD
dwTimeout,
+typedef LONG (PCSC_API *SCardGetStatusChange_t)(SCARDCONTEXT hContext, DWORD
dwTimeout,
LPSCARD_READERSTATE_A rgReaderStates, DWORD cReaders);
-typedef PCSC_API LONG (*SCardControlOLD_t)(SCARDHANDLE hCard, LPCVOID
pbSendBuffer, DWORD cbSendLength,
+typedef LONG (PCSC_API *SCardControlOLD_t)(SCARDHANDLE hCard, LPCVOID
pbSendBuffer, DWORD cbSendLength,
LPVOID pbRecvBuffer, LPDWORD lpBytesReturned);
-typedef PCSC_API LONG (*SCardControl_t)(SCARDHANDLE hCard, DWORD
dwControlCode, LPCVOID pbSendBuffer,
+typedef LONG (PCSC_API *SCardControl_t)(SCARDHANDLE hCard, DWORD
dwControlCode, LPCVOID pbSendBuffer,
DWORD cbSendLength, LPVOID pbRecvBuffer, DWORD cbRecvLength,
LPDWORD lpBytesReturned);
-typedef PCSC_API LONG (*SCardTransmit_t)(SCARDHANDLE hCard,
LPCSCARD_IO_REQUEST pioSendPci,
+typedef LONG (PCSC_API *SCardTransmit_t)(SCARDHANDLE hCard,
LPCSCARD_IO_REQUEST pioSendPci,
LPCBYTE pbSendBuffer, DWORD cbSendLength, LPSCARD_IO_REQUEST pioRecvPci,
LPBYTE pbRecvBuffer, LPDWORD pcbRecvLength);
-typedef PCSC_API LONG (*SCardListReaders_t)(SCARDCONTEXT hContext, LPCSTR
mszGroups,
+typedef LONG (PCSC_API *SCardListReaders_t)(SCARDCONTEXT hContext, LPCSTR
mszGroups,
LPSTR mszReaders, LPDWORD pcchReaders);
/* Copied from pcsc-lite reader.h */
Index: src/libopensc/ctx.c
===================================================================
--- src/libopensc/ctx.c (revision 3456)
+++ src/libopensc/ctx.c (working copy)
@@ -51,7 +51,9 @@
static const struct _sc_driver_entry internal_card_drivers[] = {
/* legacy, the old name was "etoken", so we keep that for a while */
+#ifndef _WIN32
{ "rutoken", (void *(*)(void)) sc_get_rutoken_driver },
+#endif
{ "cardos", (void *(*)(void)) sc_get_cardos_driver },
{ "etoken", (void *(*)(void)) sc_get_cardos_driver },
{ "flex", (void *(*)(void)) sc_get_cryptoflex_driver },
Index: src/libopensc/Makefile.mak
===================================================================
--- src/libopensc/Makefile.mak (revision 3456)
+++ src/libopensc/Makefile.mak (working copy)
@@ -5,37 +5,35 @@
HEADERS = \
opensc.h pkcs15.h emv.h \
- cardctl.h cards.h asn1.h \
- log.h ui.h errors.h types.h
+ cardctl.h asn1.h log.h ui.h \
+ errors.h types.h compression.h \
+ cards.h
HEADERSDIR = $(TOPDIR)\src\include\opensc
OBJECTS = \
sc.obj ctx.obj ui.obj log.obj errors.obj \
- asn1.obj base64.obj sec.obj card.obj iso7816.obj dir.obj padding.obj \
- apdu.obj \
+ asn1.obj base64.obj sec.obj card.obj iso7816.obj dir.obj padding.obj
apdu.obj \
\
pkcs15.obj pkcs15-cert.obj pkcs15-data.obj pkcs15-pin.obj \
pkcs15-prkey.obj pkcs15-pubkey.obj pkcs15-sec.obj \
pkcs15-wrap.obj pkcs15-algo.obj pkcs15-cache.obj pkcs15-syn.obj \
\
- emv.obj \
+ pkcs15-gemsafeV1.obj muscle.obj muscle-filesystem.obj \
\
- ctbcs.obj reader-ctapi.obj reader-pcsc.obj \
+ ctbcs.obj reader-ctapi.obj reader-pcsc.obj reader-openct.obj \
\
card-setcos.obj card-miocos.obj card-flex.obj card-gpk.obj \
card-cardos.obj card-tcos.obj card-emv.obj card-default.obj \
card-mcrd.obj card-starcos.obj card-openpgp.obj card-jcop.obj \
- card-oberthur.obj card-belpic.obj card-atrust-acos.obj card-akis.obj \
- card-incrypto34.obj card-piv.obj card-acos5.obj card-asepcos.obj \
- muscle.obj card-muscle.obj muscle-filesystem.obj \
- compression.obj p15card-helper.obj \
+ card-oberthur.obj card-belpic.obj card-atrust-acos.obj \
+ card-incrypto34.obj card-piv.obj card-muscle.obj card-acos5.obj \
+ card-asepcos.obj card-akis.obj card-gemsafeV1.obj \
\
pkcs15-openpgp.obj pkcs15-infocamere.obj pkcs15-starcert.obj \
- pkcs15-tcos.obj pkcs15-esteid.obj pkcs15-postecert.obj \
- pkcs15-gemsafe.obj pkcs15-actalis.obj pkcs15-atrust-acos.obj \
- pkcs15-tccardos.obj pkcs15-piv.obj\
- \
+ pkcs15-tcos.obj pkcs15-esteid.obj pkcs15-postecert.obj
pkcs15-gemsafeGPK.obj \
+ pkcs15-actalis.obj pkcs15-atrust-acos.obj pkcs15-tccardos.obj
pkcs15-piv.obj \
+ compression.obj p15card-helper.obj \
$(TOPDIR)\win32\version.res
all: install-headers $(TARGET)
Index: src/libopensc/pkcs15-syn.c
===================================================================
--- src/libopensc/pkcs15-syn.c (revision 3456)
+++ src/libopensc/pkcs15-syn.c (working copy)
@@ -52,7 +52,9 @@
sc_pkcs15emu_opt_t *opts);
extern int sc_pkcs15emu_tccardos_init_ex(sc_pkcs15_card_t *,
sc_pkcs15emu_opt_t *);
+#ifndef WIN32
extern int sc_pkcs15emu_rutoken_init_ex(sc_pkcs15_card_t *, sc_pkcs15emu_opt_t
*);
+#endif
static struct {
const char * name;
@@ -70,7 +72,9 @@
{ "actalis", sc_pkcs15emu_actalis_init_ex },
{ "atrust-acos",sc_pkcs15emu_atrust_acos_init_ex},
{ "tccardos", sc_pkcs15emu_tccardos_init_ex },
+#ifndef WIN32
{ "rutoken", sc_pkcs15emu_rutoken_init_ex },
+#endif
{ NULL, NULL }
};
_______________________________________________
opensc-devel mailing list
[email protected]
http://www.opensc-project.org/mailman/listinfo/opensc-devel