diff --git a/npa/configure.ac b/npa/configure.ac index 51b100e..3d89a86 100644 --- a/npa/configure.ac +++ b/npa/configure.ac @@ -34,12 +34,23 @@ AC_PATH_PROG(GENGETOPT, doxygen, false // No gengetopt //) # If you need to see the details, just run make V=1. m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])]) + # Checks for libraries. PKG_CHECK_EXISTS([libopensc], [PKG_CHECK_MODULES([OPENSC], [libopensc >= 0.12.1 ])], [AC_MSG_WARN([libopensc >= 0.12.1 not found by pkg-config])]) test -z "$OPENSC_LIBS" && OPENSC_LIBS="-lopensc" +saved_LIBS="$LIBS" +LIBS="$LDFLAGS $OPENSC_LIBS" + +AC_MSG_CHECKING([for sc_perform_pace]) +AC_TRY_LINK_FUNC(sc_perform_pace, [ AC_MSG_RESULT([yes]) ], + [ AC_MSG_ERROR([libopensc with PACE (git clone git://github.com/frankmorgner/OpenSC.git) not found, use ./configure OPENSC_LIBS=...]) ]) + +LIBS="$saved_LIBS" + + PKG_CHECK_EXISTS([libcrypto], [PKG_CHECK_MODULES([OPENSSL], [libcrypto])], [AC_MSG_WARN([libcrypto not found by pkg-config])]) @@ -47,23 +58,32 @@ PKG_CHECK_EXISTS([libcrypto], saved_CPPFLAGS="$CPPFLAGS" saved_LIBS="$LIBS" CPPFLAGS="$CPPFLAGS $OPENSSL_CFLAGS" -LIBS="$LDFLAGS $OPENSC_LIBS $OPENSSL_LIBS" -AC_MSG_CHECKING([for sc_perform_pace]) -AC_TRY_LINK_FUNC(sc_perform_pace, [ AC_MSG_RESULT([yes]) ], - [ AC_MSG_ERROR([libopensc with PACE (git clone git://github.com/frankmorgner/OpenSC.git) not found, use ./configure OPENSC_LIBS=...]) ]) +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=...]) ]) -AC_CHECK_HEADERS(openssl/eac.h, [], [ AC_MSG_ERROR([openssl/eac.h not found, install OpenPACE or use ./configure OPENSSL_CFLAGS=...]) ]) +CPPFLAGS="$saved_CPPFLAGS" +LIBS="$saved_LIBS" + + +PKG_CHECK_EXISTS([libeac], + [PKG_CHECK_MODULES([OPENPACE], [libeac])], + [AC_MSG_WARN([libeac not found by pkg-config])]) + +saved_CPPFLAGS="$CPPFLAGS" +saved_LIBS="$LIBS" +CPPFLAGS="$CPPFLAGS $OPENPACE_CFLAGS" +LIBS="$LDFLAGS $OPENPACE_LIBS" + +AC_CHECK_HEADERS(eac/eac.h, [], [ AC_MSG_ERROR([eac/eac.h not found, install OpenPACE or use ./configure OPENSSL_CFLAGS=...]) ]) AC_MSG_CHECKING([for EAC_CTX_init_pace]) -AC_TRY_LINK_FUNC(EAC_CTX_init_pace, [ AC_MSG_RESULT([yes]) ], [ AC_MSG_ERROR([OpenPACE not found, use ./configure OPENSSL_LIBS=...]) ]) +AC_TRY_LINK_FUNC(EAC_CTX_init_pace, [ AC_MSG_RESULT([yes]) ], [ AC_MSG_ERROR([OpenPACE not found, use ./configure OPENPACE_LIBS=...]) ]) CPPFLAGS="$saved_CPPFLAGS" LIBS="$saved_LIBS" -AC_DEFINE(BUERGERCLIENT_WORKAROUND, 1, [Always get EF.CardAccess, when connecting to a smart card. This is a workaround for the recent Buergerclient]) # Checks for header files. @@ -102,6 +122,8 @@ Libraries: ${LIBS} OPENSC_LIBS: ${OPENSC_LIBS} OPENSSL_CFLAGS: ${OPENSSL_CFLAGS} OPENSSL_LIBS: ${OPENSSL_LIBS} +OPENPACE_CFLAGS: ${OPENPACE_CFLAGS} +OPENPACE_LIBS: ${OPENPACE_LIBS} EOF diff --git a/npa/libnpa.pc.in b/npa/libnpa.pc.in index e9c828e..9ff6050 100644 --- a/npa/libnpa.pc.in +++ b/npa/libnpa.pc.in @@ -6,6 +6,6 @@ includedir=@includedir@ Name: lib@PACKAGE_NAME@ Description: Library for the new German ID card (neuer Personalausweis, nPA) Version: @VERSION@ -Requires: libcrypto +Requires: libeac Libs: -L${libdir} -lnpa @OPENSC_LIBS@ Cflags: -I${includedir} diff --git a/npa/src/Makefile.am b/npa/src/Makefile.am index 0828bb0..c8de471 100644 --- a/npa/src/Makefile.am +++ b/npa/src/Makefile.am @@ -17,17 +17,17 @@ dist_man1_MANS = npa-tool.1 AM_CPPFLAGS = -I$(top_srcdir)/src/npa -I$(top_srcdir)/src/opensc/src libnpa_la_SOURCES = sm.c scutil.c npa.c sslutil.c -libnpa_la_LIBADD = $(OPENSSL_LIBS) $(OPENSC_LIBS) -libnpa_la_CFLAGS = $(OPENSSL_CFLAGS) +libnpa_la_LIBADD = $(OPENSSL_LIBS) $(OPENPACE_LIBS) $(OPENSC_LIBS) +libnpa_la_CFLAGS = $(OPENSSL_CFLAGS) $(OPENPACE_CFLAGS) libnpa_la_LDFLAGS = -no-undefined npa_tool_SOURCES = npa-tool.c $(BUILT_SOURCES) -npa_tool_LDADD = $(OPENSSL_LIBS) $(OPENSC_LIBS) libnpa.la -npa_tool_CFLAGS = $(OPENSSL_CFLAGS) +npa_tool_LDADD = $(OPENSSL_LIBS) $(OPENPACE_LIBS) $(OPENSC_LIBS) libnpa.la +npa_tool_CFLAGS = $(OPENSSL_CFLAGS) $(OPENPACE_CFLAGS) example_SOURCES = example.c -example_LDADD = $(OPENSSL_LIBS) $(OPENSC_LIBS) libnpa.la -example_CFLAGS = $(OPENSSL_CFLAGS) +example_LDADD = $(OPENSSL_LIBS) $(OPENPACE_LIBS) $(OPENSC_LIBS) libnpa.la +example_CFLAGS = $(OPENSSL_CFLAGS) $(OPENPACE_CFLAGS) npa-tool.c: $(BUILT_SOURCES) diff --git a/npa/src/npa-tool.c b/npa/src/npa-tool.c index 9503ece..c87c0ea 100644 --- a/npa/src/npa-tool.c +++ b/npa/src/npa-tool.c @@ -18,10 +18,11 @@ */ #include "cmdline.h" #include "config.h" +#include #include +#include #include #include -#include #include #include #include diff --git a/npa/src/npa.c b/npa/src/npa.c index 72b68ae..c763d1f 100644 --- a/npa/src/npa.c +++ b/npa/src/npa.c @@ -17,22 +17,22 @@ * ccid. If not, see . */ #include "npa.h" -#include "sm.h" #include "scutil.h" +#include "sm.h" #include "sslutil.h" +#include +#include +#include +#include #include #include #include #include #include #include -#include -#include -#include #include #include #include -#include #include @@ -173,6 +173,11 @@ struct npa_sm_ctx { BUF_MEM *auxiliary_data; }; + +/* included in OpenPACE, but not propagated */ +extern BUF_MEM *BUF_MEM_create_init(const void *buf, size_t len); + + static int npa_sm_encrypt(sc_card_t *card, const struct sm_ctx *ctx, const u8 *data, size_t datalen, u8 **enc); static int npa_sm_decrypt(sc_card_t *card, const struct sm_ctx *ctx, diff --git a/npa/src/npa/npa.h b/npa/src/npa/npa.h index debc01d..8945752 100644 --- a/npa/src/npa/npa.h +++ b/npa/src/npa/npa.h @@ -26,10 +26,10 @@ #ifndef _CCID_NPA_H #define _CCID_NPA_H -#include +#include +#include #include -#include -#include +#include #ifdef __cplusplus extern "C" {