- made establishpacechannel output independant from any byte order conversion.

little endian handling is done by the ccid-part.
- pacelib exports PACE-functionality.


git-svn-id: https://vsmartcard.svn.sourceforge.net/svnroot/vsmartcard@223 96b47cad-a561-4643-ad3b-153ac7d7599c
This commit is contained in:
frankmorgner
2010-07-15 18:53:27 +00:00
parent f6bf6e3e7c
commit 77e37a83b3
9 changed files with 80 additions and 33 deletions

View File

@@ -1,2 +1,7 @@
ACLOCAL_AMFLAGS = -I m4
SUBDIRS = src m4 patches
if WITH_PACE
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = libpace.pc
endif

View File

@@ -12,6 +12,7 @@ AM_INIT_AUTOMAKE
AC_PROG_CC
AC_PROG_INSTALL
AC_PROG_LN_S
AC_PROG_LIBTOOL
AM_PROG_CC_C_O
PKG_PROG_PKG_CONFIG
@@ -62,34 +63,41 @@ AC_SUBST(PTHREAD_CFLAGS)
AC_SUBST(PTHREAD_LIBS)
AM_CONDITIONAL(WITH_CCID, test "${enable_ccid}" != "no")
PKG_CHECK_EXISTS([libssl],
[PKG_CHECK_MODULES([OPENSSL], [libssl])],
[AC_MSG_WARN([libssl not found by pkg-config])])
saved_CPPFLAGS="$CPPFLAGS"
saved_LIBS="$LIBS"
CPPFLAGS="$CPPFLAGS $OPENSSL_CFLAGS"
LIBS="$LDFLAGS $OPENSSL_LIBS"
AC_CHECK_HEADERS(openssl/evp.h, [], [ AC_MSG_ERROR([openssl/evp.h not found, install OpenSSL or use ./configure OPENSSL_CFLAGS=...]) ])
AC_MSG_CHECKING([for EVP_read_pw_string_min])
AC_TRY_LINK_FUNC(EVP_read_pw_string_min, [ AC_MSG_RESULT([yes]) ], [ AC_MSG_ERROR([OpenSSL not found, use ./configure OPENSSL_LIBS=...]) ])
# --enable-pace
AC_ARG_ENABLE(pace,
AS_HELP_STRING([--enable-pace], [Enable Password Authenticated Connection Establishment (PACE)]),
[enable_pace="${enableval}"], [enable_pace=no])
if test "x$enable_pace" != xno ; then
PKG_CHECK_EXISTS([libssl],
[PKG_CHECK_MODULES([OPENSSL], [libssl])],
[AC_MSG_WARN([libssl not found by pkg-config])])
saved_CPPFLAGS="$CPPFLAGS"
saved_LIBS="$LIBS"
CPPFLAGS="$CPPFLAGS $OPENSSL_CFLAGS"
LIBS="$LDFLAGS $OPENSSL_LIBS"
AC_CHECK_HEADERS(openssl/pace.h, [], [ AC_MSG_ERROR([openssl/pace.h not found, install OpenPACE or use ./configure OPENSSL_CFLAGS=...]) ])
AC_MSG_CHECKING([for parse_ef_card_access])
AC_TRY_LINK_FUNC(parse_ef_card_access, [ AC_MSG_RESULT([yes]) ], [ AC_MSG_ERROR([OpenPACE not found, use ./configure OPENSSL_LIBS=...]) ])
CPPFLAGS="$saved_CPPFLAGS"
LIBS="$saved_LIBS"
enable_pace=yes
fi
CPPFLAGS="$saved_CPPFLAGS"
LIBS="$saved_LIBS"
AC_SUBST(OPENSSL_CFLAGS)
AC_SUBST(OPENSSL_LIBS)
AM_CONDITIONAL(WITH_PACE, test "${enable_pace}" != "no")
AM_COND_IF(WITH_PACE, [AC_DEFINE(WITH_PACE, 1, [enable PACE support])])
# --enable-ccid-test
AC_ARG_ENABLE(ccid-test,
AS_HELP_STRING([--enable-ccid-test], [Enable test of PACE smartcard reader]),
@@ -166,8 +174,11 @@ PACE test for reader ${enable_ccid_test}
EOF
AC_CONFIG_FILES([Makefile
AC_CONFIG_FILES([
Makefile
m4/Makefile
patches/Makefile
src/Makefile])
src/Makefile
libpace.pc
])
AC_OUTPUT

View File

@@ -1,3 +1,3 @@
EXTRA_DIST = ccid-1.3.11.patch ccid-1.3.13.patch \
pcsc-lite-1.5.5.patch pcsc-lite-1.6.1.patch \
pcsclite_trunk_r5063.patch
pcsclite_trunk_r5067.patch

View File

@@ -1,27 +1,51 @@
IFDNFC_LIB = libifdnfc.$(DYN_LIB_EXT)
AM_CPPFLAGS = -I$(top_srcdir)/src/pace -I$(top_builddir)/src/pace
ccid_emulator_SOURCES = ccid.c usbstring.c usb.c binutil.c scutil.c
ccid_emulator_LDADD = $(OPENSC_LIBS) $(PTHREAD_LIBS)
ccid_emulator_CFLAGS = $(OPENSC_CFLAGS) $(PTHREAD_CFLAGS)
libpace_la_SOURCES = sm.c scutil.c pace.c pace_lib.c
libpace_la_LIBADD = $(OPENSC_LIBS) $(OPENSSL_LIBS)
libpace_la_CFLAGS = $(OPENSC_CFLAGS) $(OPENSSL_CFLAGS)
ccid_emulator_SOURCES = ccid.c usbstring.c usb.c binutil.c
ccid_emulator_LDADD = $(OPENSC_LIBS) $(OPENSSL_LIBS) $(PTHREAD_LIBS)
ccid_emulator_CFLAGS = $(OPENSC_CFLAGS) $(OPENSSL_CFLAGS) $(PTHREAD_CFLAGS)
ccid_test_SOURCES = ccid-test.c
ccid_test_LDADD = $(PCSC_LIBS)
ccid_test_CFLAGS = $(PCSC_CFLAGS)
pace_tool_SOURCES = sm.c pace-tool.c binutil.c scutil.c pace.c pace_lib.c
pace_tool_LDADD = $(OPENSC_LIBS) $(OPENSSL_LIBS)
pace_tool_SOURCES = pace-tool.c binutil.c
pace_tool_LDADD = $(OPENSC_LIBS) $(OPENSSL_LIBS) libpace.la
pace_tool_CFLAGS = $(OPENSC_CFLAGS) $(OPENSSL_CFLAGS)
bin_PROGRAMS =
noinst_HEADERS = \
binutil.h \
ccid.h \
usbstring.h
if WITH_CCID
bin_PROGRAMS += ccid-emulator ccid-test
endif
if WITH_PACE
bin_PROGRAMS += pace-tool
ccid_emulator_LDADD += libpace.la
ccid_emulator_SOURCES += sm.c pace.c pace_lib.c
ccid_emulator_LDADD += $(OPENSSL_LIBS)
ccid_emulator_CFLAGS += $(OPENSSL_CFLAGS)
lib_LTLIBRARIES = libpace.la
nobase_include_HEADERS = \
pace/sm.h \
pace/pace.h \
pace/scutil.h \
pace/pace_lib.h
else
ccid_emulator_SOURCES += scutil.c sm.c
noinst_HEADERS += \
pace/sm.h \
pace/pace.h \
pace/scutil.h \
pace/pace_lib.h
endif
noinst_HEADERS = binutil.h ccid.h pace.h pace_lib.h scutil.h sm.h usbstring.h

View File

@@ -27,14 +27,17 @@
#include <opensc/log.h>
#include "ccid.h"
#include "sm.h"
#include "scutil.h"
#include "config.h"
#ifdef WITH_PACE
#include "pace.h"
#include <pace/pace.h>
#include <pace/sm.h>
#include <pace/scutil.h>
struct sm_ctx sctx;
static struct sm_ctx sctx;
#else
#include "pace/scutil.h"
#endif
static sc_context_t *ctx = NULL;
@@ -178,7 +181,11 @@ static int get_rapdu(sc_apdu_t *apdu, size_t slot, __u8 **buf, size_t *resplen)
}
*buf = apdu->resp;
#ifdef WITH_PACE
sc_result = sm_transmit_apdu(&sctx, card_in_slot[slot], apdu);
#else
sc_result = sc_transmit_apdu(&sctx, card_in_slot[slot], apdu);
#endif
if (sc_result < 0) {
goto err;
}
@@ -1069,7 +1076,7 @@ perform_PC_to_RDR_Secure(const __u8 *in, size_t inlen, __u8** out, size_t *outle
uint8_t encoding = bmFormatString & 2;
uint8_t blocksize = bmPINBlockString & 0xf;
sc_debug(ctx, "PIN %s block (%d bytes) proberties:\n"
sc_debug(ctx, "PIN %s block (%d bytes) proberties:\n"
"\tminimum %d, maximum %d PIN digits\n"
"\t%s PIN encoding, %s justification\n"
"\tsystem units are %s\n"

View File

@@ -19,8 +19,8 @@
#ifndef _CCID_PACE_H
#define _CCID_PACE_H
#include "pace_lib.h"
#include "sm.h"
#include <pace/pace_lib.h>
#include <pace/sm.h>
#include <opensc/opensc.h>
#include <openssl/bn.h>
#include <openssl/pace.h>