diff --git a/ccid/Makefile.am b/ccid/Makefile.am index acd0402..ad27830 100644 --- a/ccid/Makefile.am +++ b/ccid/Makefile.am @@ -1,2 +1,7 @@ ACLOCAL_AMFLAGS = -I m4 SUBDIRS = src m4 patches + +if WITH_PACE +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = libpace.pc +endif diff --git a/ccid/configure.ac b/ccid/configure.ac index 785b4b9..fcddeb9 100644 --- a/ccid/configure.ac +++ b/ccid/configure.ac @@ -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 diff --git a/ccid/patches/Makefile.am b/ccid/patches/Makefile.am index 3aef615..313e86f 100644 --- a/ccid/patches/Makefile.am +++ b/ccid/patches/Makefile.am @@ -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 diff --git a/ccid/src/Makefile.am b/ccid/src/Makefile.am index 427b410..1a21b3f 100644 --- a/ccid/src/Makefile.am +++ b/ccid/src/Makefile.am @@ -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 diff --git a/ccid/src/ccid.c b/ccid/src/ccid.c index ded76ad..02c269f 100644 --- a/ccid/src/ccid.c +++ b/ccid/src/ccid.c @@ -27,14 +27,17 @@ #include #include "ccid.h" -#include "sm.h" -#include "scutil.h" #include "config.h" #ifdef WITH_PACE -#include "pace.h" +#include +#include +#include -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" diff --git a/ccid/src/pace.h b/ccid/src/pace/pace.h similarity index 98% rename from ccid/src/pace.h rename to ccid/src/pace/pace.h index a3a43f1..1bbf28c 100644 --- a/ccid/src/pace.h +++ b/ccid/src/pace/pace.h @@ -19,8 +19,8 @@ #ifndef _CCID_PACE_H #define _CCID_PACE_H -#include "pace_lib.h" -#include "sm.h" +#include +#include #include #include #include diff --git a/ccid/src/pace_lib.h b/ccid/src/pace/pace_lib.h similarity index 100% rename from ccid/src/pace_lib.h rename to ccid/src/pace/pace_lib.h diff --git a/ccid/src/scutil.h b/ccid/src/pace/scutil.h similarity index 100% rename from ccid/src/scutil.h rename to ccid/src/pace/scutil.h diff --git a/ccid/src/sm.h b/ccid/src/pace/sm.h similarity index 100% rename from ccid/src/sm.h rename to ccid/src/pace/sm.h