add cardmod a minidrivers for windows
git-svn-id: https://www.opensc-project.org/svnp/opensc/trunk@4001 c6295689-39f2-0310-b995-f0e70906c6a9
This commit is contained in:
parent
dc6bc0df4a
commit
0e03c6d5cf
29
configure.ac
29
configure.ac
|
@ -339,6 +339,9 @@ AC_CHECK_HEADER(
|
|||
)
|
||||
CFLAGS="${saved_CFLAGS}"
|
||||
|
||||
dnl for minidriver basecsp
|
||||
test -z "${CARDMOD}" && CARDMOD="no"
|
||||
|
||||
if test "${WIN32}" = "no"; then
|
||||
dnl Special check for pthread support.
|
||||
ACX_PTHREAD(
|
||||
|
@ -350,6 +353,28 @@ if test "${WIN32}" = "no"; then
|
|||
[AC_MSG_ERROR([POSIX thread support required])]
|
||||
)
|
||||
CC="${PTHREAD_CC}"
|
||||
else
|
||||
dnl win32 special test for minidriver
|
||||
AC_CHECK_HEADER([cardmod.h])
|
||||
if test "${ac_cv_header_cardmod_h}" != "yes"; then
|
||||
saved_CFLAGS="${CFLAGS}"
|
||||
CFLAGS="${CFLAGS} -Isrc/libopensc"
|
||||
AC_MSG_CHECKING([secondary check for carmod.h presence])
|
||||
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
|
||||
#include <windows.h>
|
||||
#include <internal-winscard.h>
|
||||
#include <cardmod.h>
|
||||
int main(int argc, char **argv) { return 0;}]])],
|
||||
[CARDMOD="yes"],
|
||||
[CARDMOD="no"])
|
||||
AC_MSG_RESULT(["${CARDMOD}"])
|
||||
CFLAGS="${saved_CFLAGS}"
|
||||
else
|
||||
CARDMOD="yes"
|
||||
fi
|
||||
if test "${CARDMOD}" = "yes"; then
|
||||
AC_DEFINE([HAVE_CARDMOD_H], [], [card minidriver header])
|
||||
fi
|
||||
fi
|
||||
|
||||
AC_ARG_VAR([ZLIB_CFLAGS], [C compiler flags for zlib])
|
||||
|
@ -666,6 +691,7 @@ AM_CONDITIONAL([ENABLE_OPENCT], [test "${enable_openct}" = "yes"])
|
|||
AM_CONDITIONAL([ENABLE_DOC], [test "${enable_doc}" = "yes"])
|
||||
AM_CONDITIONAL([WIN32], [test "${WIN32}" = "yes"])
|
||||
AM_CONDITIONAL([CYGWIN], [test "${CYGWIN}" = "yes"])
|
||||
AM_CONDITIONAL([CARDMOD], [test "${CARDMOD}" = "yes"])
|
||||
|
||||
if test "${enable_pedantic}" = "yes"; then
|
||||
enable_strict="yes";
|
||||
|
@ -701,6 +727,7 @@ AC_CONFIG_FILES([
|
|||
src/tests/Makefile
|
||||
src/tests/regression/Makefile
|
||||
src/tools/Makefile
|
||||
src/cardmod/Makefile
|
||||
win32/Makefile
|
||||
win32/versioninfo.rc
|
||||
])
|
||||
|
@ -749,5 +776,7 @@ OPENCT_CFLAGS: ${OPENCT_CFLAGS}
|
|||
OPENCT_LIBS: ${OPENCT_LIBS}
|
||||
PCSC_CFLAGS: ${PCSC_CFLAGS}
|
||||
|
||||
CARDMOD: ${CARDMOD}
|
||||
|
||||
EOF
|
||||
|
||||
|
|
|
@ -412,3 +412,13 @@ app tokend {
|
|||
score = 10;
|
||||
}
|
||||
}
|
||||
|
||||
app cardmod {
|
||||
#allow only cardmodule pcsc reader for minidriver
|
||||
reader_drivers = cardmod;
|
||||
|
||||
reader_driver cardmod {
|
||||
enable_pinpad = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -3,4 +3,4 @@ EXTRA_DIST = Makefile.mak
|
|||
|
||||
# Order IS important
|
||||
SUBDIRS = common include scconf pkcs15init libopensc pkcs11 \
|
||||
tools tests openssh
|
||||
tools tests openssh cardmod
|
||||
|
|
|
@ -2,7 +2,7 @@ TOPDIR = ..
|
|||
|
||||
!INCLUDE $(TOPDIR)\win32\Make.rules.mak
|
||||
|
||||
SUBDIRS = include common scconf pkcs15init libopensc pkcs11 tools tests
|
||||
SUBDIRS = include common scconf pkcs15init libopensc pkcs11 tools tests cardmod
|
||||
|
||||
all::
|
||||
|
||||
|
|
|
@ -0,0 +1,30 @@
|
|||
include $(top_srcdir)/win32/ltrc.inc
|
||||
|
||||
MAINTAINERCLEANFILES = $(srcdir)/Makefile.in
|
||||
|
||||
EXTRA_DIST = Makefile.mak
|
||||
|
||||
lib_LTLIBRARIES =
|
||||
|
||||
INCLUDES = -I$(top_builddir)/src/include \
|
||||
-I$(top_srcdir)/src/common \
|
||||
-I$(top_srcdir)/src/libopensc
|
||||
|
||||
opensc_cardmod_la_SOURCES = cardmod.c cardmod.exports
|
||||
opensc_cardmod_la_LIBADD = $(LTLIB_LIBS) \
|
||||
$(top_builddir)/src/libopensc/libopensc.la
|
||||
opensc_cardmod_la_LDFLAGS = $(AM_LDFLAGS) \
|
||||
-export-symbols "$(srcdir)/cardmod.exports" \
|
||||
-module -avoid-version -no-undefined
|
||||
|
||||
if CARDMOD
|
||||
sbin_SCRIPTS = cardmod.inf cardmod-westcos.reg
|
||||
lib_LTLIBRARIES += opensc-cardmod.la
|
||||
opensc_cardmod_la_SOURCES += $(top_builddir)/win32/versioninfo.rc
|
||||
opensc_cardmod_la_LIBADD += -lcrypt32
|
||||
install-exec-hook:
|
||||
mv "$(DESTDIR)$(libdir)/opensc-cardmod.dll" "$(DESTDIR)$(bindir)/"
|
||||
else
|
||||
dist_noinst_SCRIPTS = cardmod.inf cardmod-westcos.reg
|
||||
endif
|
||||
|
|
@ -0,0 +1,603 @@
|
|||
# Makefile.in generated by automake 1.10.1 from Makefile.am.
|
||||
# @configure_input@
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||
# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
@SET_MAKE@
|
||||
|
||||
# Required to build Windows resource file
|
||||
|
||||
|
||||
VPATH = @srcdir@
|
||||
pkgdatadir = $(datadir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
install_sh_PROGRAM = $(install_sh) -c
|
||||
install_sh_SCRIPT = $(install_sh) -c
|
||||
INSTALL_HEADER = $(INSTALL_DATA)
|
||||
transform = $(program_transform_name)
|
||||
NORMAL_INSTALL = :
|
||||
PRE_INSTALL = :
|
||||
POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = @build@
|
||||
host_triplet = @host@
|
||||
DIST_COMMON = $(am__dist_noinst_SCRIPTS_DIST) $(srcdir)/Makefile.am \
|
||||
$(srcdir)/Makefile.in $(top_srcdir)/win32/ltrc.inc
|
||||
@CARDMOD_TRUE@am__append_1 = opensc-cardmod.la
|
||||
@CARDMOD_TRUE@am__append_2 = $(top_builddir)/win32/versioninfo.rc
|
||||
@CARDMOD_TRUE@am__append_3 = -lcrypt32
|
||||
subdir = src/cardmod
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/m4/acx_pthread.m4 \
|
||||
$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
|
||||
$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
|
||||
$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
mkinstalldirs = $(install_sh) -d
|
||||
CONFIG_HEADER = $(top_builddir)/config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
|
||||
am__vpath_adj = case $$p in \
|
||||
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
|
||||
*) f=$$p;; \
|
||||
esac;
|
||||
am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
|
||||
am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(sbindir)"
|
||||
libLTLIBRARIES_INSTALL = $(INSTALL)
|
||||
LTLIBRARIES = $(lib_LTLIBRARIES)
|
||||
am__DEPENDENCIES_1 =
|
||||
opensc_cardmod_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
|
||||
$(top_builddir)/src/libopensc/libopensc.la \
|
||||
$(am__DEPENDENCIES_1)
|
||||
am__opensc_cardmod_la_SOURCES_DIST = cardmod.c cardmod.exports \
|
||||
$(top_builddir)/win32/versioninfo.rc
|
||||
am__dirstamp = $(am__leading_dot)dirstamp
|
||||
@CARDMOD_TRUE@am__objects_1 = $(top_builddir)/win32/versioninfo.lo
|
||||
am_opensc_cardmod_la_OBJECTS = cardmod.lo $(am__objects_1)
|
||||
opensc_cardmod_la_OBJECTS = $(am_opensc_cardmod_la_OBJECTS)
|
||||
opensc_cardmod_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
|
||||
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
|
||||
$(opensc_cardmod_la_LDFLAGS) $(LDFLAGS) -o $@
|
||||
@CARDMOD_TRUE@am_opensc_cardmod_la_rpath = -rpath $(libdir)
|
||||
am__dist_noinst_SCRIPTS_DIST = cardmod.inf cardmod-westcos.reg
|
||||
sbinSCRIPT_INSTALL = $(INSTALL_SCRIPT)
|
||||
SCRIPTS = $(dist_noinst_SCRIPTS) $(sbin_SCRIPTS)
|
||||
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
|
||||
depcomp = $(SHELL) $(top_srcdir)/depcomp
|
||||
am__depfiles_maybe = depfiles
|
||||
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
|
||||
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
||||
LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
|
||||
--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
|
||||
$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
||||
CCLD = $(CC)
|
||||
LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
|
||||
--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
|
||||
$(LDFLAGS) -o $@
|
||||
SOURCES = $(opensc_cardmod_la_SOURCES)
|
||||
DIST_SOURCES = $(am__opensc_cardmod_la_SOURCES_DIST)
|
||||
ETAGS = etags
|
||||
CTAGS = ctags
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
ACLOCAL = @ACLOCAL@
|
||||
AMTAR = @AMTAR@
|
||||
AR = @AR@
|
||||
AS = @AS@
|
||||
AUTOCONF = @AUTOCONF@
|
||||
AUTOHEADER = @AUTOHEADER@
|
||||
AUTOMAKE = @AUTOMAKE@
|
||||
AWK = @AWK@
|
||||
CC = @CC@
|
||||
CCDEPMODE = @CCDEPMODE@
|
||||
CFLAGS = @CFLAGS@
|
||||
CPP = @CPP@
|
||||
CPPFLAGS = @CPPFLAGS@
|
||||
CYGPATH_W = @CYGPATH_W@
|
||||
DEFAULT_PCSC_PROVIDER = @DEFAULT_PCSC_PROVIDER@
|
||||
DEFS = @DEFS@
|
||||
DEPDIR = @DEPDIR@
|
||||
DLLTOOL = @DLLTOOL@
|
||||
DSYMUTIL = @DSYMUTIL@
|
||||
DUMPBIN = @DUMPBIN@
|
||||
ECHO_C = @ECHO_C@
|
||||
ECHO_N = @ECHO_N@
|
||||
ECHO_T = @ECHO_T@
|
||||
EGREP = @EGREP@
|
||||
EXEEXT = @EXEEXT@
|
||||
FGREP = @FGREP@
|
||||
GREP = @GREP@
|
||||
ICONV_CFLAGS = @ICONV_CFLAGS@
|
||||
ICONV_LIBS = @ICONV_LIBS@
|
||||
INSTALL = @INSTALL@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
LD = @LD@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
LIBS = @LIBS@
|
||||
LIBTOOL = @LIBTOOL@
|
||||
LIPO = @LIPO@
|
||||
LN_S = @LN_S@
|
||||
LTLIBOBJS = @LTLIBOBJS@
|
||||
LTLIB_CFLAGS = @LTLIB_CFLAGS@
|
||||
LTLIB_LIBS = @LTLIB_LIBS@
|
||||
MAKEINFO = @MAKEINFO@
|
||||
MKDIR_P = @MKDIR_P@
|
||||
NM = @NM@
|
||||
NMEDIT = @NMEDIT@
|
||||
OBJDUMP = @OBJDUMP@
|
||||
OBJEXT = @OBJEXT@
|
||||
OPENCT_CFLAGS = @OPENCT_CFLAGS@
|
||||
OPENCT_LIBS = @OPENCT_LIBS@
|
||||
OPENSC_LT_AGE = @OPENSC_LT_AGE@
|
||||
OPENSC_LT_CURRENT = @OPENSC_LT_CURRENT@
|
||||
OPENSC_LT_OLDEST = @OPENSC_LT_OLDEST@
|
||||
OPENSC_LT_REVISION = @OPENSC_LT_REVISION@
|
||||
OPENSC_VERSION_FIX = @OPENSC_VERSION_FIX@
|
||||
OPENSC_VERSION_MAJOR = @OPENSC_VERSION_MAJOR@
|
||||
OPENSC_VERSION_MINOR = @OPENSC_VERSION_MINOR@
|
||||
OPENSSL_CFLAGS = @OPENSSL_CFLAGS@
|
||||
OPENSSL_LIBS = @OPENSSL_LIBS@
|
||||
OPTIONAL_ICONV_CFLAGS = @OPTIONAL_ICONV_CFLAGS@
|
||||
OPTIONAL_ICONV_LIBS = @OPTIONAL_ICONV_LIBS@
|
||||
OPTIONAL_OPENCT_CFLAGS = @OPTIONAL_OPENCT_CFLAGS@
|
||||
OPTIONAL_OPENCT_LIBS = @OPTIONAL_OPENCT_LIBS@
|
||||
OPTIONAL_OPENSSL_CFLAGS = @OPTIONAL_OPENSSL_CFLAGS@
|
||||
OPTIONAL_OPENSSL_LIBS = @OPTIONAL_OPENSSL_LIBS@
|
||||
OPTIONAL_PCSC_CFLAGS = @OPTIONAL_PCSC_CFLAGS@
|
||||
OPTIONAL_READLINE_CFLAGS = @OPTIONAL_READLINE_CFLAGS@
|
||||
OPTIONAL_READLINE_LIBS = @OPTIONAL_READLINE_LIBS@
|
||||
OPTIONAL_ZLIB_CFLAGS = @OPTIONAL_ZLIB_CFLAGS@
|
||||
OPTIONAL_ZLIB_LIBS = @OPTIONAL_ZLIB_LIBS@
|
||||
OTOOL = @OTOOL@
|
||||
OTOOL64 = @OTOOL64@
|
||||
PACKAGE = @PACKAGE@
|
||||
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
||||
PACKAGE_NAME = @PACKAGE_NAME@
|
||||
PACKAGE_STRING = @PACKAGE_STRING@
|
||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||
PCSC_CFLAGS = @PCSC_CFLAGS@
|
||||
PCSC_LIBS = @PCSC_LIBS@
|
||||
PKG_CONFIG = @PKG_CONFIG@
|
||||
PTHREAD_CC = @PTHREAD_CC@
|
||||
PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
|
||||
PTHREAD_LIBS = @PTHREAD_LIBS@
|
||||
RANLIB = @RANLIB@
|
||||
RC = @RC@
|
||||
READLINE_CFLAGS = @READLINE_CFLAGS@
|
||||
READLINE_LIBS = @READLINE_LIBS@
|
||||
SED = @SED@
|
||||
SET_MAKE = @SET_MAKE@
|
||||
SHELL = @SHELL@
|
||||
STRIP = @STRIP@
|
||||
SVN = @SVN@
|
||||
TR = @TR@
|
||||
VERSION = @VERSION@
|
||||
WGET = @WGET@
|
||||
WGET_OPTS = @WGET_OPTS@
|
||||
WIN_LIBPREFIX = @WIN_LIBPREFIX@
|
||||
XSLTPROC = @XSLTPROC@
|
||||
ZLIB_CFLAGS = @ZLIB_CFLAGS@
|
||||
ZLIB_LIBS = @ZLIB_LIBS@
|
||||
abs_builddir = @abs_builddir@
|
||||
abs_srcdir = @abs_srcdir@
|
||||
abs_top_builddir = @abs_top_builddir@
|
||||
abs_top_srcdir = @abs_top_srcdir@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
|
||||
acx_pthread_config = @acx_pthread_config@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
am__quote = @am__quote@
|
||||
am__tar = @am__tar@
|
||||
am__untar = @am__untar@
|
||||
bindir = @bindir@
|
||||
build = @build@
|
||||
build_alias = @build_alias@
|
||||
build_cpu = @build_cpu@
|
||||
build_os = @build_os@
|
||||
build_vendor = @build_vendor@
|
||||
builddir = @builddir@
|
||||
datadir = @datadir@
|
||||
datarootdir = @datarootdir@
|
||||
docdir = @docdir@
|
||||
dvidir = @dvidir@
|
||||
exec_prefix = @exec_prefix@
|
||||
host = @host@
|
||||
host_alias = @host_alias@
|
||||
host_cpu = @host_cpu@
|
||||
host_os = @host_os@
|
||||
host_vendor = @host_vendor@
|
||||
htmldir = @htmldir@
|
||||
includedir = @includedir@
|
||||
infodir = @infodir@
|
||||
install_sh = @install_sh@
|
||||
libdir = @libdir@
|
||||
libexecdir = @libexecdir@
|
||||
localedir = @localedir@
|
||||
localstatedir = @localstatedir@
|
||||
lt_ECHO = @lt_ECHO@
|
||||
mandir = @mandir@
|
||||
mkdir_p = @mkdir_p@
|
||||
oldincludedir = @oldincludedir@
|
||||
openscincludedir = @openscincludedir@
|
||||
pdfdir = @pdfdir@
|
||||
pkcs11dir = @pkcs11dir@
|
||||
pkgconfigdir = @pkgconfigdir@
|
||||
prefix = @prefix@
|
||||
program_transform_name = @program_transform_name@
|
||||
psdir = @psdir@
|
||||
sbindir = @sbindir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
srcdir = @srcdir@
|
||||
sysconfdir = @sysconfdir@
|
||||
target_alias = @target_alias@
|
||||
top_build_prefix = @top_build_prefix@
|
||||
top_builddir = @top_builddir@
|
||||
top_srcdir = @top_srcdir@
|
||||
xslstylesheetsdir = @xslstylesheetsdir@
|
||||
RCCOMPILE = $(RC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
|
||||
$(AM_CPPFLAGS) $(CPPFLAGS)
|
||||
|
||||
LTRCCOMPILE = $(LIBTOOL) --mode=compile --tag=RC $(RCCOMPILE)
|
||||
MAINTAINERCLEANFILES = $(srcdir)/Makefile.in
|
||||
EXTRA_DIST = Makefile.mak
|
||||
lib_LTLIBRARIES = $(am__append_1)
|
||||
INCLUDES = -I$(top_builddir)/src/include \
|
||||
-I$(top_srcdir)/src/common \
|
||||
-I$(top_srcdir)/src/libopensc
|
||||
|
||||
opensc_cardmod_la_SOURCES = cardmod.c cardmod.exports $(am__append_2)
|
||||
opensc_cardmod_la_LIBADD = $(LTLIB_LIBS) \
|
||||
$(top_builddir)/src/libopensc/libopensc.la $(am__append_3)
|
||||
opensc_cardmod_la_LDFLAGS = $(AM_LDFLAGS) \
|
||||
-export-symbols "$(srcdir)/cardmod.exports" \
|
||||
-module -avoid-version -no-undefined
|
||||
|
||||
@CARDMOD_TRUE@sbin_SCRIPTS = cardmod.inf cardmod-westcos.reg
|
||||
@CARDMOD_FALSE@dist_noinst_SCRIPTS = cardmod.inf cardmod-westcos.reg
|
||||
all: all-am
|
||||
|
||||
.SUFFIXES:
|
||||
.SUFFIXES: .c .lo .o .obj .rc
|
||||
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/win32/ltrc.inc $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
|
||||
&& exit 0; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/cardmod/Makefile'; \
|
||||
cd $(top_srcdir) && \
|
||||
$(AUTOMAKE) --gnu src/cardmod/Makefile
|
||||
.PRECIOUS: Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
@case '$?' in \
|
||||
*config.status*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
|
||||
*) \
|
||||
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
|
||||
esac;
|
||||
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
$(top_srcdir)/configure: $(am__configure_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
install-libLTLIBRARIES: $(lib_LTLIBRARIES)
|
||||
@$(NORMAL_INSTALL)
|
||||
test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"
|
||||
@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
|
||||
if test -f $$p; then \
|
||||
f=$(am__strip_dir) \
|
||||
echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \
|
||||
$(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \
|
||||
else :; fi; \
|
||||
done
|
||||
|
||||
uninstall-libLTLIBRARIES:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
|
||||
p=$(am__strip_dir) \
|
||||
echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \
|
||||
$(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \
|
||||
done
|
||||
|
||||
clean-libLTLIBRARIES:
|
||||
-test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
|
||||
@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
|
||||
dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
|
||||
test "$$dir" != "$$p" || dir=.; \
|
||||
echo "rm -f \"$${dir}/so_locations\""; \
|
||||
rm -f "$${dir}/so_locations"; \
|
||||
done
|
||||
$(top_builddir)/win32/$(am__dirstamp):
|
||||
@$(MKDIR_P) $(top_builddir)/win32
|
||||
@: > $(top_builddir)/win32/$(am__dirstamp)
|
||||
$(top_builddir)/win32/$(DEPDIR)/$(am__dirstamp):
|
||||
@$(MKDIR_P) $(top_builddir)/win32/$(DEPDIR)
|
||||
@: > $(top_builddir)/win32/$(DEPDIR)/$(am__dirstamp)
|
||||
$(top_builddir)/win32/versioninfo.lo: \
|
||||
$(top_builddir)/win32/$(am__dirstamp) \
|
||||
$(top_builddir)/win32/$(DEPDIR)/$(am__dirstamp)
|
||||
opensc-cardmod.la: $(opensc_cardmod_la_OBJECTS) $(opensc_cardmod_la_DEPENDENCIES)
|
||||
$(opensc_cardmod_la_LINK) $(am_opensc_cardmod_la_rpath) $(opensc_cardmod_la_OBJECTS) $(opensc_cardmod_la_LIBADD) $(LIBS)
|
||||
install-sbinSCRIPTS: $(sbin_SCRIPTS)
|
||||
@$(NORMAL_INSTALL)
|
||||
test -z "$(sbindir)" || $(MKDIR_P) "$(DESTDIR)$(sbindir)"
|
||||
@list='$(sbin_SCRIPTS)'; for p in $$list; do \
|
||||
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
|
||||
if test -f $$d$$p; then \
|
||||
f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
|
||||
echo " $(sbinSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(sbindir)/$$f'"; \
|
||||
$(sbinSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(sbindir)/$$f"; \
|
||||
else :; fi; \
|
||||
done
|
||||
|
||||
uninstall-sbinSCRIPTS:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
@list='$(sbin_SCRIPTS)'; for p in $$list; do \
|
||||
f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
|
||||
echo " rm -f '$(DESTDIR)$(sbindir)/$$f'"; \
|
||||
rm -f "$(DESTDIR)$(sbindir)/$$f"; \
|
||||
done
|
||||
|
||||
mostlyclean-compile:
|
||||
-rm -f *.$(OBJEXT)
|
||||
-rm -f $(top_builddir)/win32/versioninfo.$(OBJEXT)
|
||||
-rm -f $(top_builddir)/win32/versioninfo.lo
|
||||
|
||||
distclean-compile:
|
||||
-rm -f *.tab.c
|
||||
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cardmod.Plo@am__quote@
|
||||
|
||||
.c.o:
|
||||
@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
|
||||
@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(COMPILE) -c $<
|
||||
|
||||
.c.obj:
|
||||
@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
|
||||
@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
|
||||
|
||||
.c.lo:
|
||||
@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
|
||||
@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
|
||||
|
||||
mostlyclean-libtool:
|
||||
-rm -f *.lo
|
||||
|
||||
clean-libtool:
|
||||
-rm -rf $(top_builddir)/win32/.libs $(top_builddir)/win32/_libs
|
||||
-rm -rf .libs _libs
|
||||
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
|
||||
END { if (nonempty) { for (i in files) print i; }; }'`; \
|
||||
mkid -fID $$unique
|
||||
tags: TAGS
|
||||
|
||||
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
|
||||
END { if (nonempty) { for (i in files) print i; }; }'`; \
|
||||
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
|
||||
test -n "$$unique" || unique=$$empty_fix; \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$tags $$unique; \
|
||||
fi
|
||||
ctags: CTAGS
|
||||
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
|
||||
END { if (nonempty) { for (i in files) print i; }; }'`; \
|
||||
test -z "$(CTAGS_ARGS)$$tags$$unique" \
|
||||
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
|
||||
$$tags $$unique
|
||||
|
||||
GTAGS:
|
||||
here=`$(am__cd) $(top_builddir) && pwd` \
|
||||
&& cd $(top_srcdir) \
|
||||
&& gtags -i $(GTAGS_ARGS) $$here
|
||||
|
||||
distclean-tags:
|
||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
||||
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
||||
list='$(DISTFILES)'; \
|
||||
dist_files=`for file in $$list; do echo $$file; done | \
|
||||
sed -e "s|^$$srcdirstrip/||;t" \
|
||||
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
|
||||
case $$dist_files in \
|
||||
*/*) $(MKDIR_P) `echo "$$dist_files" | \
|
||||
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
|
||||
sort -u` ;; \
|
||||
esac; \
|
||||
for file in $$dist_files; do \
|
||||
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
||||
if test -d $$d/$$file; then \
|
||||
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
||||
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
|
||||
fi; \
|
||||
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
|
||||
else \
|
||||
test -f $(distdir)/$$file \
|
||||
|| cp -p $$d/$$file $(distdir)/$$file \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
check-am: all-am
|
||||
check: check-am
|
||||
all-am: Makefile $(LTLIBRARIES) $(SCRIPTS)
|
||||
installdirs:
|
||||
for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(sbindir)"; do \
|
||||
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
|
||||
done
|
||||
install: install-am
|
||||
install-exec: install-exec-am
|
||||
install-data: install-data-am
|
||||
uninstall: uninstall-am
|
||||
|
||||
install-am: all-am
|
||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||
|
||||
installcheck: installcheck-am
|
||||
install-strip:
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
`test -z '$(STRIP)' || \
|
||||
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
-test -z "$(top_builddir)/win32/$(DEPDIR)/$(am__dirstamp)" || rm -f $(top_builddir)/win32/$(DEPDIR)/$(am__dirstamp)
|
||||
-test -z "$(top_builddir)/win32/$(am__dirstamp)" || rm -f $(top_builddir)/win32/$(am__dirstamp)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
|
||||
@CARDMOD_FALSE@install-exec-hook:
|
||||
clean: clean-am
|
||||
|
||||
clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
|
||||
mostlyclean-am
|
||||
|
||||
distclean: distclean-am
|
||||
-rm -rf ./$(DEPDIR)
|
||||
-rm -f Makefile
|
||||
distclean-am: clean-am distclean-compile distclean-generic \
|
||||
distclean-tags
|
||||
|
||||
dvi: dvi-am
|
||||
|
||||
dvi-am:
|
||||
|
||||
html: html-am
|
||||
|
||||
info: info-am
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am:
|
||||
|
||||
install-dvi: install-dvi-am
|
||||
|
||||
install-exec-am: install-libLTLIBRARIES install-sbinSCRIPTS
|
||||
@$(NORMAL_INSTALL)
|
||||
$(MAKE) $(AM_MAKEFLAGS) install-exec-hook
|
||||
|
||||
install-html: install-html-am
|
||||
|
||||
install-info: install-info-am
|
||||
|
||||
install-man:
|
||||
|
||||
install-pdf: install-pdf-am
|
||||
|
||||
install-ps: install-ps-am
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-am
|
||||
-rm -rf ./$(DEPDIR)
|
||||
-rm -f Makefile
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
mostlyclean: mostlyclean-am
|
||||
|
||||
mostlyclean-am: mostlyclean-compile mostlyclean-generic \
|
||||
mostlyclean-libtool
|
||||
|
||||
pdf: pdf-am
|
||||
|
||||
pdf-am:
|
||||
|
||||
ps: ps-am
|
||||
|
||||
ps-am:
|
||||
|
||||
uninstall-am: uninstall-libLTLIBRARIES uninstall-sbinSCRIPTS
|
||||
|
||||
.MAKE: install-am install-exec-am install-strip
|
||||
|
||||
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
|
||||
clean-libLTLIBRARIES clean-libtool ctags distclean \
|
||||
distclean-compile distclean-generic distclean-libtool \
|
||||
distclean-tags distdir dvi dvi-am html html-am info info-am \
|
||||
install install-am install-data install-data-am install-dvi \
|
||||
install-dvi-am install-exec install-exec-am install-exec-hook \
|
||||
install-html install-html-am install-info install-info-am \
|
||||
install-libLTLIBRARIES install-man install-pdf install-pdf-am \
|
||||
install-ps install-ps-am install-sbinSCRIPTS install-strip \
|
||||
installcheck installcheck-am installdirs maintainer-clean \
|
||||
maintainer-clean-generic mostlyclean mostlyclean-compile \
|
||||
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
|
||||
tags uninstall uninstall-am uninstall-libLTLIBRARIES \
|
||||
uninstall-sbinSCRIPTS
|
||||
|
||||
|
||||
.rc.lo:
|
||||
$(LTRCCOMPILE) -i "$<" -o "$@"
|
||||
|
||||
.rc.o:
|
||||
$(RCCOMPILE) -i "$<" -o "$@"
|
||||
@CARDMOD_TRUE@install-exec-hook:
|
||||
@CARDMOD_TRUE@ mv "$(DESTDIR)$(libdir)/opensc-cardmod.dll" "$(DESTDIR)$(bindir)/"
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
|
@ -0,0 +1,12 @@
|
|||
TOPDIR = ..\..
|
||||
|
||||
TARGET = opensc-cardmod.lib
|
||||
OBJECTS = cardmod.obj
|
||||
|
||||
all: $(TARGET)
|
||||
|
||||
$(TARGET): $(OBJECTS)
|
||||
lib /nologo /machine:ix86 /out:$(TARGET) $(OBJECTS)
|
||||
|
||||
!INCLUDE $(TOPDIR)\win32\Make.rules.mak
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
Windows Registry Editor Version 5.00
|
||||
|
||||
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\Calais\SmartCards\CEV WESTCOS]
|
||||
"80000001"="opensc-cardmod.dll"
|
||||
"ATR"=hex:3f,69,00,00,00,64,01,00,00,00,80,90,00
|
||||
"ATRMask"=hex:ff,ff,ff,ff,ff,ff,ff,00,00,00,f0,ff,ff
|
||||
"Crypto Provider"="Microsoft Base Smart Card Crypto Provider"
|
||||
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,3 @@
|
|||
DllMain
|
||||
CardAcquireContext
|
||||
|
|
@ -0,0 +1,149 @@
|
|||
|
||||
[Version]
|
||||
Signature="$Windows NT$"
|
||||
Class=SmartCard
|
||||
ClassGuid={990A2BD7-E738-46c7-B26F-1CF8FB9F1391}
|
||||
Provider=%ProviderName%
|
||||
CatalogFile=delta.cat
|
||||
DriverVer=05/02/2010,0.0.1.3
|
||||
|
||||
[Manufacturer]
|
||||
%ProviderName%=Minidriver,NTamd64,NTamd64.6.1,NTx86,NTx86.6.1
|
||||
|
||||
[Minidriver.NTamd64]
|
||||
%CardDeviceName%=Minidriver64_Install,SCFILTER\CID_00640181010c829000
|
||||
|
||||
[Minidriver.NTx86]
|
||||
%CardDeviceName%=Minidriver32_Install,SCFILTER\CID_00640181010c829000
|
||||
|
||||
[Minidriver.NTamd64.6.1]
|
||||
%CardDeviceName%=Minidriver64_61_Install,SCFILTER\CID_00640181010c829000
|
||||
|
||||
[Minidriver.NTx86.6.1]
|
||||
%CardDeviceName%=Minidriver32_61_Install,SCFILTER\CID_00640181010c829000
|
||||
|
||||
[DefaultInstall]
|
||||
CopyFiles=x86_CopyFiles
|
||||
AddReg=AddRegDefault
|
||||
|
||||
[DefaultInstall.ntamd64]
|
||||
CopyFiles=amd64_CopyFiles
|
||||
CopyFiles=wow64_CopyFiles
|
||||
AddReg=AddRegWOW64
|
||||
AddReg=AddRegDefault
|
||||
|
||||
[DefaultInstall.NTx86]
|
||||
CopyFiles=x86_CopyFiles
|
||||
AddReg=AddRegDefault
|
||||
|
||||
[DefaultInstall.ntamd64.6.1]
|
||||
AddReg=AddRegWOW64
|
||||
AddReg=AddRegDefault
|
||||
|
||||
[DefaultInstall.NTx86.6.1]
|
||||
AddReg=AddRegDefault
|
||||
|
||||
[SourceDisksFiles]
|
||||
%SmartCardCardModule%=1
|
||||
%SmartCardCardModule64%=1
|
||||
|
||||
[SourceDisksNames]
|
||||
1 = %MediaDescription%
|
||||
|
||||
[Minidriver64_Install.NT]
|
||||
CopyFiles=amd64_CopyFiles
|
||||
CopyFiles=wow64_CopyFiles
|
||||
AddReg=AddRegWOW64
|
||||
AddReg=AddRegDefault
|
||||
|
||||
[Minidriver64_61_Install.NT]
|
||||
AddReg=AddRegWOW64
|
||||
AddReg=AddRegDefault
|
||||
Include=umpass.inf
|
||||
Needs=UmPass
|
||||
|
||||
[Minidriver32_Install.NT]
|
||||
CopyFiles=x86_CopyFiles
|
||||
AddReg=AddRegDefault
|
||||
|
||||
[Minidriver32_61_Install.NT]
|
||||
AddReg=AddRegDefault
|
||||
Include=umpass.inf
|
||||
Needs=UmPass
|
||||
|
||||
[Minidriver64_61_Install.NT.Services]
|
||||
Include=umpass.inf
|
||||
Needs=UmPass.Services
|
||||
|
||||
[Minidriver32_61_Install.NT.Services]
|
||||
Include=umpass.inf
|
||||
Needs=UmPass.Services
|
||||
|
||||
|
||||
[Minidriver64_61_Install.NT.HW]
|
||||
Include=umpass.inf
|
||||
Needs=UmPass.HW
|
||||
|
||||
[Minidriver64_61_Install.NT.CoInstallers]
|
||||
Include=umpass.inf
|
||||
Needs=UmPass.CoInstallers
|
||||
|
||||
|
||||
[Minidriver64_61_Install.NT.Interfaces]
|
||||
Include=umpass.inf
|
||||
Needs=UmPass.Interfaces
|
||||
|
||||
|
||||
[Minidriver32_61_Install.NT.HW]
|
||||
Include=umpass.inf
|
||||
Needs=UmPass.HW
|
||||
|
||||
[Minidriver32_61_Install.NT.CoInstallers]
|
||||
Include=umpass.inf
|
||||
Needs=UmPass.CoInstallers
|
||||
|
||||
|
||||
[Minidriver32_61_Install.NT.Interfaces]
|
||||
Include=umpass.inf
|
||||
Needs=UmPass.Interfaces
|
||||
|
||||
|
||||
[amd64_CopyFiles]
|
||||
;%SmartCardCardModule%,%SmartCardCardModule64%
|
||||
|
||||
[x86_CopyFiles]
|
||||
;%SmartCardCardModule%
|
||||
|
||||
[wow64_CopyFiles]
|
||||
;%SmartCardCardModule64%
|
||||
|
||||
[AddRegWOW64]
|
||||
HKLM, %SmartCardNameWOW64%,"ATR",0x00000001,3f,69,00,00,00,64,01,00,00,00,80,90,00
|
||||
HKLM, %SmartCardNameWOW64%,"ATRMask",0x00000001,ff,ff,ff,ff,ff,ff,ff,00,00,00,f0,ff,ff
|
||||
HKLM, %SmartCardNameWOW64%,"Crypto Provider",0x00000000,"Microsoft Base Smart Card Crypto Provider"
|
||||
HKLM, %SmartCardNameWOW64%,"Smart Card Key Storage Provider",0x00000000,"Microsoft Smart Card Key Storage Provider"
|
||||
HKLM, %SmartCardNameWOW64%,"80000001",0x00000000,%SmartCardCardModule64%
|
||||
|
||||
[AddRegDefault]
|
||||
HKLM, %SmartCardName%,"ATR",0x00000001,3f,69,00,00,00,64,01,00,00,00,80,90,00
|
||||
HKLM, %SmartCardName%,"ATRMask",0x00000001,ff,ff,ff,ff,ff,ff,ff,00,00,00,f0,ff,ff
|
||||
HKLM, %SmartCardName%,"Crypto Provider",0x00000000,"Microsoft Base Smart Card Crypto Provider"
|
||||
HKLM, %SmartCardName%,"Smart Card Key Storage Provider",0x00000000,"Microsoft Smart Card Key Storage Provider"
|
||||
HKLM, %SmartCardName%,"80000001",0x00000000,%SmartCardCardModule%
|
||||
|
||||
[DestinationDirs]
|
||||
amd64_CopyFiles=10,system32
|
||||
x86_CopyFiles=10,system32
|
||||
wow64_CopyFiles=10,syswow64
|
||||
|
||||
|
||||
; =================== Generic ==================================
|
||||
|
||||
[Strings]
|
||||
ProviderName ="Opensc"
|
||||
MediaDescription="Opensc Smart Card Minidriver Installation Disk"
|
||||
CardDeviceName="Opensc Minidriver for Smart Card"
|
||||
SmartCardName="SOFTWARE\Microsoft\Cryptography\Calais\SmartCards\Cev Westcos"
|
||||
SmartCardNameWOW64="SOFTWARE\Wow6432Node\Microsoft\Cryptography\Calais\SmartCards\Cev Westcos"
|
||||
SmartCardCardModule="opensc-cardmod.dll"
|
||||
SmartCardCardModule64="opensc-cardmod64.dll"
|
|
@ -95,6 +95,9 @@ static const struct _sc_driver_entry internal_card_drivers[] = {
|
|||
static const struct _sc_driver_entry internal_reader_drivers[] = {
|
||||
#ifdef ENABLE_PCSC
|
||||
{ "pcsc", (void *(*)(void)) sc_get_pcsc_driver },
|
||||
#ifdef HAVE_CARDMOD_H
|
||||
{ "cardmod", (void *(*)(void)) sc_get_cardmod_driver },
|
||||
#endif
|
||||
#endif
|
||||
#ifdef ENABLE_CTAPI
|
||||
{ "ctapi", (void *(*)(void)) sc_get_ctapi_driver },
|
||||
|
|
|
@ -130,6 +130,8 @@ typedef LONG (PCSC_API *SCardTransmit_t)(SCARDHANDLE hCard, LPCSCARD_IO_REQUEST
|
|||
LPBYTE pbRecvBuffer, LPDWORD pcbRecvLength);
|
||||
typedef LONG (PCSC_API *SCardListReaders_t)(SCARDCONTEXT hContext, LPCSTR mszGroups,
|
||||
LPSTR mszReaders, LPDWORD pcchReaders);
|
||||
typedef LONG (PCSC_API *SCardGetAttrib_t)(SCARDHANDLE hCard, DWORD dwAttrId,\
|
||||
LPBYTE pbAttr, LPDWORD pcbAttrLen);
|
||||
|
||||
/* Copied from pcsc-lite reader.h */
|
||||
|
||||
|
|
|
@ -240,6 +240,7 @@ void sc_apdu_log(sc_context_t *ctx, const u8 *data, size_t len,
|
|||
extern struct sc_reader_driver *sc_get_pcsc_driver(void);
|
||||
extern struct sc_reader_driver *sc_get_ctapi_driver(void);
|
||||
extern struct sc_reader_driver *sc_get_openct_driver(void);
|
||||
extern struct sc_reader_driver *sc_get_cardmod_driver(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -71,6 +71,7 @@ struct pcsc_global_private_data {
|
|||
SCardControl_t SCardControl;
|
||||
SCardTransmit_t SCardTransmit;
|
||||
SCardListReaders_t SCardListReaders;
|
||||
SCardGetAttrib_t SCardGetAttrib;
|
||||
};
|
||||
|
||||
struct pcsc_private_data {
|
||||
|
@ -1456,5 +1457,394 @@ struct sc_reader_driver * sc_get_pcsc_driver(void)
|
|||
return &pcsc_drv;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
*
|
||||
*/
|
||||
#ifdef HAVE_CARDMOD_H
|
||||
|
||||
#define SCARD_CLASS_SYSTEM 0x7fff
|
||||
#define SCARD_ATTR_VALUE(Class, Tag) ((((ULONG)(Class)) << 16) | ((ULONG)(Tag)))
|
||||
#define SCARD_ATTR_DEVICE_FRIENDLY_NAME_A SCARD_ATTR_VALUE(SCARD_CLASS_SYSTEM, 0x0003)
|
||||
#define SCARD_ATTR_DEVICE_SYSTEM_NAME_A SCARD_ATTR_VALUE(SCARD_CLASS_SYSTEM, 0x0004)
|
||||
|
||||
static int cardmod_connect(sc_reader_t *reader)
|
||||
{
|
||||
DWORD active_proto, protocol;
|
||||
SCARDHANDLE card_handle;
|
||||
LONG rv;
|
||||
struct pcsc_private_data *priv = GET_PRIV_DATA(reader);
|
||||
int r;
|
||||
|
||||
r = refresh_attributes(reader);
|
||||
if (r)
|
||||
return r;
|
||||
if (!(reader->flags & SC_READER_CARD_PRESENT))
|
||||
return SC_ERROR_CARD_NOT_PRESENT;
|
||||
|
||||
return SC_SUCCESS;
|
||||
}
|
||||
|
||||
static int cardmod_disconnect(sc_reader_t * reader)
|
||||
{
|
||||
struct pcsc_private_data *priv = GET_PRIV_DATA(reader);
|
||||
|
||||
reader->flags = 0;
|
||||
return SC_SUCCESS;
|
||||
}
|
||||
|
||||
static struct sc_reader_operations cardmod_ops;
|
||||
|
||||
static struct sc_reader_driver cardmod_drv = {
|
||||
"PC/SC cardmod reader",
|
||||
"cardmod",
|
||||
&cardmod_ops,
|
||||
0, 0, NULL
|
||||
};
|
||||
|
||||
static int cardmod_init(sc_context_t *ctx, void **reader_data)
|
||||
{
|
||||
struct pcsc_global_private_data *gpriv;
|
||||
scconf_block *conf_block = NULL;
|
||||
int ret = SC_ERROR_INTERNAL;
|
||||
|
||||
*reader_data = NULL;
|
||||
|
||||
gpriv = (struct pcsc_global_private_data *) calloc(1, sizeof(struct pcsc_global_private_data));
|
||||
if (gpriv == NULL) {
|
||||
ret = SC_ERROR_OUT_OF_MEMORY;
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* Defaults */
|
||||
gpriv->enable_pinpad = 1;
|
||||
|
||||
conf_block = sc_get_conf_block(ctx, "reader_driver", "pcsc", 1);
|
||||
if (conf_block) {
|
||||
scconf_get_bool(conf_block, "enable_pinpad", gpriv->enable_pinpad);
|
||||
}
|
||||
sc_debug(ctx, "PC/SC options: enable_pinpad=%d", gpriv->enable_pinpad);
|
||||
|
||||
gpriv->dlhandle = lt_dlopen("winscard.dll");
|
||||
if (gpriv->dlhandle == NULL) {
|
||||
ret = SC_ERROR_CANNOT_LOAD_MODULE;
|
||||
goto out;
|
||||
}
|
||||
|
||||
gpriv->SCardStatus = (SCardStatus_t)lt_dlsym(gpriv->dlhandle, "SCardStatus");
|
||||
gpriv->SCardGetStatusChange = (SCardGetStatusChange_t)lt_dlsym(gpriv->dlhandle, "SCardGetStatusChange");
|
||||
gpriv->SCardTransmit = (SCardTransmit_t)lt_dlsym(gpriv->dlhandle, "SCardTransmit");
|
||||
|
||||
if (gpriv->SCardStatus == NULL)
|
||||
gpriv->SCardStatus = (SCardStatus_t)lt_dlsym(gpriv->dlhandle, "SCardStatusA");
|
||||
if (gpriv->SCardGetStatusChange == NULL)
|
||||
gpriv->SCardGetStatusChange = (SCardGetStatusChange_t)lt_dlsym(gpriv->dlhandle, "SCardGetStatusChangeA");
|
||||
|
||||
gpriv->SCardGetAttrib = lt_dlsym(gpriv->dlhandle, "SCardGetAttrib");
|
||||
|
||||
/* If we have SCardGetAttrib it is correct API */
|
||||
if (gpriv->SCardGetAttrib != NULL) {
|
||||
if (gpriv->SCardControl == NULL) {
|
||||
gpriv->SCardControl = (SCardControl_t)lt_dlsym(gpriv->dlhandle, "SCardControl");
|
||||
}
|
||||
}
|
||||
else {
|
||||
//gpriv->SCardControlOLD = (SCardControlOLD_t)lt_dlsym(gpriv->dlhandle, "SCardControl");
|
||||
}
|
||||
|
||||
if (
|
||||
gpriv->SCardStatus == NULL ||
|
||||
gpriv->SCardGetStatusChange == NULL ||
|
||||
gpriv->SCardControl == NULL ||
|
||||
gpriv->SCardTransmit == NULL ||
|
||||
gpriv->SCardGetAttrib == NULL) {
|
||||
ret = SC_ERROR_CANNOT_LOAD_MODULE;
|
||||
goto out;
|
||||
}
|
||||
|
||||
*reader_data = gpriv;
|
||||
gpriv = NULL;
|
||||
ret = SC_SUCCESS;
|
||||
|
||||
out:
|
||||
if (gpriv != NULL) {
|
||||
if (gpriv->dlhandle != NULL)
|
||||
lt_dlclose(gpriv->dlhandle);
|
||||
free(gpriv);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int cardmod_finish(sc_context_t *ctx, void *prv_data)
|
||||
{
|
||||
struct pcsc_global_private_data *gpriv = (struct pcsc_global_private_data *) prv_data;
|
||||
|
||||
if (gpriv) {
|
||||
if (gpriv->dlhandle != NULL)
|
||||
lt_dlclose(gpriv->dlhandle);
|
||||
free(gpriv);
|
||||
}
|
||||
|
||||
return SC_SUCCESS;
|
||||
}
|
||||
|
||||
static int cardmod_detect_readers(sc_context_t *ctx, void *prv_data)
|
||||
{
|
||||
SCARDHANDLE card_handle;
|
||||
u8 feature_buf[256], rbuf[SC_MAX_APDU_BUFFER_SIZE];
|
||||
PCSC_TLV_STRUCTURE *pcsc_tlv;
|
||||
struct pcsc_global_private_data *gpriv = (struct pcsc_global_private_data *) prv_data;
|
||||
LONG rv;
|
||||
char reader_name[128];
|
||||
DWORD rcount, feature_len, display_ioctl, reader_name_size = sizeof(reader_name);
|
||||
int ret = SC_ERROR_INTERNAL;
|
||||
HKEY key;
|
||||
unsigned int i;
|
||||
wchar_t b;
|
||||
char *p;
|
||||
|
||||
SC_FUNC_CALLED(ctx, 3);
|
||||
|
||||
if (!gpriv) {
|
||||
ret = SC_ERROR_NO_READERS_FOUND;
|
||||
goto out;
|
||||
}
|
||||
|
||||
sc_debug(ctx, "Probing pcsc readers");
|
||||
|
||||
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Opensccm",\
|
||||
NULL, KEY_READ, &key)==ERROR_SUCCESS)
|
||||
{
|
||||
CHAR val[1024];
|
||||
DWORD type;
|
||||
LONG size = sizeof(val);
|
||||
|
||||
if(RegQueryValueEx(key,"pcsc_ctx", NULL, &type,
|
||||
val, &size) == ERROR_SUCCESS)
|
||||
{
|
||||
if(type == REG_DWORD)
|
||||
{
|
||||
gpriv->pcsc_ctx = *(DWORD*)val;
|
||||
}
|
||||
}
|
||||
|
||||
if(RegQueryValueEx(key,"pcsc_card", NULL, &type,
|
||||
val, &size) == ERROR_SUCCESS)
|
||||
{
|
||||
if(type == REG_DWORD)
|
||||
{
|
||||
card_handle = *(DWORD*)val;
|
||||
}
|
||||
}
|
||||
|
||||
RegCloseKey(key);
|
||||
}
|
||||
else
|
||||
{
|
||||
sc_debug(ctx, "Unable to open registry key Opensccm");
|
||||
}
|
||||
|
||||
//gpriv->pcsc_ctx = pcsc_ctx;
|
||||
//card_handle = pcsc_card;
|
||||
|
||||
sc_debug(ctx, "gpriv->pcsc_ctx = %X, card_handle = %X", gpriv->pcsc_ctx, card_handle);
|
||||
|
||||
if(gpriv->SCardGetAttrib(card_handle, SCARD_ATTR_DEVICE_SYSTEM_NAME_A, \
|
||||
reader_name, &reader_name_size) == SCARD_S_SUCCESS)
|
||||
{
|
||||
sc_reader_t *reader = NULL;
|
||||
struct pcsc_private_data *priv = NULL;
|
||||
|
||||
if(1)
|
||||
{
|
||||
char texte[2048];
|
||||
sc_bin_to_hex(reader_name, reader_name_size, texte, sizeof(texte)-5, ':');
|
||||
sc_debug(ctx, "lecteur name = %s\n%s\n", reader_name,texte);
|
||||
}
|
||||
|
||||
if ((reader = (sc_reader_t *) calloc(1, sizeof(sc_reader_t))) == NULL) {
|
||||
ret = SC_ERROR_OUT_OF_MEMORY;
|
||||
goto err1;
|
||||
}
|
||||
if ((priv = (struct pcsc_private_data *) malloc(sizeof(struct pcsc_private_data))) == NULL) {
|
||||
ret = SC_ERROR_OUT_OF_MEMORY;
|
||||
goto err1;
|
||||
}
|
||||
|
||||
reader->drv_data = priv;
|
||||
reader->ops = &cardmod_ops;
|
||||
reader->driver = &cardmod_drv;
|
||||
if ((reader->name = strdup(reader_name)) == NULL) {
|
||||
ret = SC_ERROR_OUT_OF_MEMORY;
|
||||
goto err1;
|
||||
}
|
||||
priv->gpriv = gpriv;
|
||||
reader->active_protocol = pcsc_proto_to_opensc(SCARD_PROTOCOL_T0); /* FIXME: detecte or set active protocol ??? */
|
||||
if (_sc_add_reader(ctx, reader)) {
|
||||
ret = SC_SUCCESS; /* silent ignore */
|
||||
goto err1;
|
||||
}
|
||||
priv->pcsc_card = card_handle;
|
||||
|
||||
/* check for pinpad support */
|
||||
if (gpriv->SCardControl != NULL)
|
||||
{
|
||||
sc_debug(ctx, "Requesting reader features ... ");
|
||||
rv = gpriv->SCardControl(card_handle, CM_IOCTL_GET_FEATURE_REQUEST, NULL, 0, feature_buf, sizeof(feature_buf), &feature_len);
|
||||
if (rv != SCARD_S_SUCCESS)
|
||||
{
|
||||
sc_debug(ctx, "SCardControl failed %08x", rv);
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((feature_len % sizeof(PCSC_TLV_STRUCTURE)) != 0)
|
||||
{
|
||||
sc_debug(ctx, "Inconsistent TLV from reader!");
|
||||
}
|
||||
else
|
||||
{
|
||||
char *log_disabled = "but it's disabled in configuration file";
|
||||
/* get the number of elements instead of the complete size */
|
||||
feature_len /= sizeof(PCSC_TLV_STRUCTURE);
|
||||
|
||||
pcsc_tlv = (PCSC_TLV_STRUCTURE *)feature_buf;
|
||||
for (i = 0; i < feature_len; i++)
|
||||
{
|
||||
sc_debug(ctx, "Reader feature %02x detected", pcsc_tlv[i].tag);
|
||||
if (pcsc_tlv[i].tag == FEATURE_VERIFY_PIN_DIRECT)
|
||||
{
|
||||
priv->verify_ioctl = ntohl(pcsc_tlv[i].value);
|
||||
}
|
||||
else if (pcsc_tlv[i].tag == FEATURE_VERIFY_PIN_START)
|
||||
{
|
||||
priv->verify_ioctl_start = ntohl(pcsc_tlv[i].value);
|
||||
}
|
||||
else if (pcsc_tlv[i].tag == FEATURE_VERIFY_PIN_FINISH)
|
||||
{
|
||||
priv->verify_ioctl_finish = ntohl(pcsc_tlv[i].value);
|
||||
}
|
||||
else if (pcsc_tlv[i].tag == FEATURE_MODIFY_PIN_DIRECT)
|
||||
{
|
||||
priv->modify_ioctl = ntohl(pcsc_tlv[i].value);
|
||||
}
|
||||
else if (pcsc_tlv[i].tag == FEATURE_MODIFY_PIN_START)
|
||||
{
|
||||
priv->modify_ioctl_start = ntohl(pcsc_tlv[i].value);
|
||||
}
|
||||
else if (pcsc_tlv[i].tag == FEATURE_MODIFY_PIN_FINISH)
|
||||
{
|
||||
priv->modify_ioctl_finish = ntohl(pcsc_tlv[i].value);
|
||||
}
|
||||
else if (pcsc_tlv[i].tag == FEATURE_IFD_PIN_PROPERTIES)
|
||||
{
|
||||
display_ioctl = ntohl(pcsc_tlv[i].value);
|
||||
}
|
||||
else
|
||||
{
|
||||
sc_debug(ctx, "Reader feature %02x is not supported", pcsc_tlv[i].tag);
|
||||
}
|
||||
}
|
||||
|
||||
/* Set slot capabilities based on detected IOCTLs */
|
||||
if (priv->verify_ioctl || (priv->verify_ioctl_start && priv->verify_ioctl_finish)) {
|
||||
char *log_text = "Reader supports pinpad PIN verification";
|
||||
if (priv->gpriv->enable_pinpad) {
|
||||
sc_debug(ctx, log_text);
|
||||
reader->capabilities |= SC_READER_CAP_PIN_PAD;
|
||||
} else {
|
||||
sc_debug(ctx, "%s %s", log_text, log_disabled);
|
||||
}
|
||||
}
|
||||
|
||||
if (priv->modify_ioctl || (priv->modify_ioctl_start && priv->modify_ioctl_finish)) {
|
||||
char *log_text = "Reader supports pinpad PIN modification";
|
||||
if (priv->gpriv->enable_pinpad) {
|
||||
sc_debug(ctx, log_text);
|
||||
reader->capabilities |= SC_READER_CAP_PIN_PAD;
|
||||
} else {
|
||||
sc_debug(ctx, "%s %s", log_text, log_disabled);
|
||||
}
|
||||
}
|
||||
|
||||
if (display_ioctl)
|
||||
{
|
||||
rcount = sizeof(rbuf);
|
||||
rv = gpriv->SCardControl(card_handle, display_ioctl, NULL, 0, rbuf, sizeof(rbuf), &rcount);
|
||||
if (rv == SCARD_S_SUCCESS)
|
||||
{
|
||||
if (rcount == sizeof(PIN_PROPERTIES_STRUCTURE))
|
||||
{
|
||||
PIN_PROPERTIES_STRUCTURE *caps = (PIN_PROPERTIES_STRUCTURE *)rbuf;
|
||||
if (caps->wLcdLayout > 0)
|
||||
{
|
||||
sc_debug(ctx, "Reader has a display: %04X", caps->wLcdLayout);
|
||||
reader->capabilities |= SC_READER_CAP_DISPLAY;
|
||||
}
|
||||
else
|
||||
sc_debug(ctx, "Reader does not have a display.");
|
||||
}
|
||||
else
|
||||
{
|
||||
sc_debug(ctx, "Returned PIN properties structure has bad length (%d/%d)", rcount, sizeof(PIN_PROPERTIES_STRUCTURE));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
refresh_attributes(reader);
|
||||
|
||||
ret = SC_SUCCESS;
|
||||
|
||||
goto out;
|
||||
|
||||
err1:
|
||||
if (priv != NULL)
|
||||
{
|
||||
free(priv);
|
||||
}
|
||||
if (reader != NULL)
|
||||
{
|
||||
if (reader->name)
|
||||
free(reader->name);
|
||||
free(reader);
|
||||
}
|
||||
}
|
||||
|
||||
out:
|
||||
|
||||
SC_FUNC_RETURN(ctx, 3, ret);
|
||||
}
|
||||
|
||||
struct sc_reader_driver * sc_get_cardmod_driver(void)
|
||||
{
|
||||
|
||||
struct sc_reader_driver *pcsc_drv = sc_get_pcsc_driver();
|
||||
|
||||
cardmod_ops = *(pcsc_drv->ops);
|
||||
|
||||
cardmod_ops.init = cardmod_init;
|
||||
cardmod_ops.finish = cardmod_finish;
|
||||
cardmod_ops.detect_readers = cardmod_detect_readers;
|
||||
//cardmod_ops.transmit = ;
|
||||
cardmod_ops.detect_card_presence = NULL;
|
||||
cardmod_ops.lock = NULL;
|
||||
cardmod_ops.unlock = NULL;
|
||||
cardmod_ops.release = NULL;
|
||||
cardmod_ops.connect = cardmod_connect;
|
||||
cardmod_ops.disconnect = cardmod_disconnect;
|
||||
//cardmod_ops.perform_verify = ;
|
||||
cardmod_ops.wait_for_event = NULL;
|
||||
cardmod_ops.reset = NULL;
|
||||
|
||||
return &cardmod_drv;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#endif /* HAVE_PCSC */
|
||||
|
||||
|
|
Loading…
Reference in New Issue