diff --git a/.travis.yml b/.travis.yml index 8ea9f61..19baefd 100644 --- a/.travis.yml +++ b/.travis.yml @@ -52,15 +52,6 @@ before_script: ./configure --prefix=$PREFIX --enable-openssl-install --enable-python || cat config.log; make install; fi - # ccid requires OpenSC - - git clone https://github.com/frankmorgner/OpenSC - - cd OpenSC && autoreconf -vsi - - if [ -z "$HOST" ]; then - ./configure --prefix=$PREFIX --with-completiondir=/tmp || cat config.log; - else - ./configure --prefix=$PREFIX --with-completiondir=/tmp --host=$HOST || cat config.log; - fi - - make install # Configure virtualsmartcard - cd $TRAVIS_BUILD_DIR/virtualsmartcard && autoreconf -vsi - if [ -z "$HOST" ]; then @@ -85,7 +76,7 @@ before_script: # Configure ccid - if [ $TRAVIS_OS_NAME == linux -a -z "$HOST" ]; then cd $TRAVIS_BUILD_DIR/ccid && autoreconf -vsi; - ./configure OPENSC_LIBS="-L$PREFIX/lib -lopensc" || cat config.log; + ./configure || cat config.log; fi # Optionally try to upload to Coverity Scan # On error (propably quota is exhausted), just continue diff --git a/ccid/Makefile.am b/ccid/Makefile.am index e05ec00..7aa20d3 100644 --- a/ccid/Makefile.am +++ b/ccid/Makefile.am @@ -1,5 +1,28 @@ ACLOCAL_AMFLAGS = -I m4 -SUBDIRS = src doc +SUBDIRS = . src doc + +DIST_SUBDIRS = $(SUBDIRS) src/OpenSC EXTRA_DIST = docs patches + +all-local: + cd src/OpenSC/src/common && $(MAKE) $(AM_MAKEFLAGS) all + cd src/OpenSC/src/scconf && $(MAKE) $(AM_MAKEFLAGS) all + cd src/OpenSC/src/pkcs15init && $(MAKE) $(AM_MAKEFLAGS) all + cd src/OpenSC/src/sm && $(MAKE) $(AM_MAKEFLAGS) all + cd src/OpenSC/src/libopensc && $(MAKE) $(AM_MAKEFLAGS) all + +check-local: + cd src/OpenSC/src/common && $(MAKE) $(AM_MAKEFLAGS) check + cd src/OpenSC/src/scconf && $(MAKE) $(AM_MAKEFLAGS) check + cd src/OpenSC/src/pkcs15init && $(MAKE) $(AM_MAKEFLAGS) check + cd src/OpenSC/src/sm && $(MAKE) $(AM_MAKEFLAGS) check + cd src/OpenSC/src/libopensc && $(MAKE) $(AM_MAKEFLAGS) check + +clean-local: + cd src/OpenSC/src/common && $(MAKE) $(AM_MAKEFLAGS) clean + cd src/OpenSC/src/scconf && $(MAKE) $(AM_MAKEFLAGS) clean + cd src/OpenSC/src/pkcs15init && $(MAKE) $(AM_MAKEFLAGS) clean + cd src/OpenSC/src/sm && $(MAKE) $(AM_MAKEFLAGS) clean + cd src/OpenSC/src/libopensc && $(MAKE) $(AM_MAKEFLAGS) clean diff --git a/ccid/configure.ac b/ccid/configure.ac index 1bfb8a3..6a4f582 100644 --- a/ccid/configure.ac +++ b/ccid/configure.ac @@ -59,21 +59,6 @@ AC_TRY_LINK_FUNC(EVP_read_pw_string_min, [ AC_MSG_RESULT([yes]) ], [ AC_MSG_ERRO CPPFLAGS="$saved_CPPFLAGS" LIBS="$saved_LIBS" -saved_CPPFLAGS="$CPPFLAGS" -saved_LIBS="$LIBS" -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 $OPENSSL_LIBS" -LIBS="$LDFLAGS $OPENSC_LIBS" -AC_MSG_CHECKING([for sc_bytes2apdu]) -AC_TRY_LINK_FUNC(sc_bytes2apdu, [ AC_MSG_RESULT([yes]) ], -[ AC_MSG_ERROR([libopensc >= 0.12.1 not found, use ./configure OPENSC_LIBS=...]) ]) -AC_CHECK_FUNCS([sc_apdu_set_resp sc_apdu_get_octets _sc_match_atr boxing_buf_to_pace_input]) -CPPFLAGS="$saved_CPPFLAGS" -LIBS="$saved_LIBS" - - PACKAGE_SUMMARY="Emulate a USB CCID compliant smart card reader" AC_SUBST(PACKAGE_SUMMARY) @@ -102,6 +87,8 @@ AC_CONFIG_FILES([ doc/Makefile ]) +AC_CONFIG_SUBDIRS([src/OpenSC]) + AC_OUTPUT cat << EOF @@ -122,7 +109,6 @@ Libraries: ${LIBS} PTHREAD_CFLAGS: ${PTHREAD_CFLAGS} PTHREAD_LIBS: ${PTHREAD_LIBS} -OPENSC_LIBS: ${OPENSC_LIBS} OPENSSL_CFLAGS: ${OPENSSL_CFLAGS} OPENSSL_LIBS: ${OPENSSL_LIBS} diff --git a/ccid/doc/Makefile.am b/ccid/doc/Makefile.am index 390704d..e4886fd 100644 --- a/ccid/doc/Makefile.am +++ b/ccid/doc/Makefile.am @@ -13,7 +13,6 @@ do_subst = $(SED) \ -e 's,[@]libdir[@],$(libdir),g' \ -e 's,[@]includedir[@],$(includedir),g' \ -e 's,[@]VERSION[@],$(VERSION),g' \ - -e 's,[@]OPENSC_LIBS[@],$(OPENSC_LIBS),g' \ -e 's,[@]abs_top_srcdir[@],$(abs_top_srcdir),g' \ -e 's,[@]top_srcdir[@],$(top_srcdir),g' diff --git a/ccid/doc/README.txt.in b/ccid/doc/README.txt.in index b8e17d5..35db87d 100644 --- a/ccid/doc/README.txt.in +++ b/ccid/doc/README.txt.in @@ -265,6 +265,9 @@ modern Windows and Unix-like systems by default. .. include:: autotools.txt +The @PACKAGE_NAME@ depends on :program:`libopensc`, which is automatically +built from a snapshot of the OpenSC source code and then statically linked. + ================= Hints on GadgetFS @@ -302,33 +305,6 @@ loading the module, you maybe want to check out `this patch `_. -=============== -Hints on OpenSC -=============== - -@PACKAGE_NAME@ needs the OpenSC components to be -installed (especially :file:`libopensc.so`). Here is an example of how to get -the standard installation of OpenSC without |PACE|:: - - PREFIX=/tmp/install - VSMARTCARD=$PWD/vsmartcard - git clone https://github.com/frankmorgner/vsmartcard.git $VSMARTCARD - cd $VSMARTCARD - git submodule init - git submodule update - cd $VSMARTCARD/ccid/src/opensc - autoreconf --verbose --install - ./configure --prefix=$PREFIX - make install && cd - - -Now :file:`libopensc.so` should be located in ``$PREFIX/lib``. Here is how to -configure the @PACKAGE_NAME@ to use it:: - - cd $VSMARTCARD/ccid - ./configure --prefix=$PREFIX OPENSC_LIBS="-L$PREFIX/lib -lopensc" - make install && cd - - - ***** Usage ***** diff --git a/ccid/src/Makefile.am b/ccid/src/Makefile.am index 808f9d6..02f5237 100644 --- a/ccid/src/Makefile.am +++ b/ccid/src/Makefile.am @@ -10,13 +10,13 @@ do_subst = $(SED) \ BUILT_SOURCES = cmdline.h cmdline.c EXTRA_DIST = ccid-emulator.ggo ccid-emulator.ggo.in -EXTRA_DIST += $(shell find $(top_srcdir)/src/OpenSC/src -path '*/.git' -prune -o -type f -a \( -name '*.h' -o -name 'apdu.c' -o -name 'card.c' \) -print) MAINTAINERCLEANFILES = $(BUILT_SOURCES) ccid-emulator.ggo $(dist_man1_MANS) dist_man1_MANS = ccid-emulator.1 ccid_emulator_SOURCES = cmdline.c ccid.c usbstring.c usb.c scutil.c -ccid_emulator_LDADD = $(OPENSC_LIBS) $(OPENSSL_LIBS) $(PTHREAD_LIBS) +ccid_emulator_LDADD = OpenSC/src/libopensc/libopensc.la +ccid_emulator_LDFLAGS = $(OPENSSL_LIBS) $(PTHREAD_LIBS) -static ccid_emulator_CFLAGS = $(OPENSSL_CFLAGS) $(PTHREAD_CFLAGS) -I$(top_srcdir)/src/OpenSC/src @@ -42,7 +42,6 @@ bin_PROGRAMS = ccid-emulator noinst_HEADERS = \ ccid.h \ - ccid-types.h \ cmdline.h \ scutil.h \ usbstring.h diff --git a/ccid/src/ccid-types.h b/ccid/src/ccid-types.h deleted file mode 100644 index 62b2071..0000000 --- a/ccid/src/ccid-types.h +++ /dev/null @@ -1,276 +0,0 @@ -/* - * Copyright (C) 2009 Frank Morgner - * - * This file is part of ccid. - * - * ccid is free software: you can redistribute it and/or modify it under the - * terms of the GNU General Public License as published by the Free Software - * Foundation, either version 3 of the License, or (at your option) any later - * version. - * - * ccid is distributed in the hope that it will be useful, but WITHOUT ANY - * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more - * details. - * - * You should have received a copy of the GNU General Public License along with - * ccid. If not, see . - */ -/** - * @file - */ -#ifndef _CCID_TYPES_H -#define _CCID_TYPES_H - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#define USB_REQ_CCID 0xA1 - -#define CCID_CONTROL_ABORT 0x01 -#define CCID_CONTROL_GET_CLOCK_FREQUENCIES 0x02 -#define CCID_CONTROL_GET_DATA_RATES 0x03 - -#define CCID_OPERATION_VERIFY 0x00; -#define CCID_OPERATION_MODIFY 0x01; -#define CCID_ENTRY_VALIDATE 0x02 - -#define CCID_BERROR_CMD_ABORTED 0xff /** Host aborted the current activity */ -#define CCID_BERROR_ICC_MUTE 0xfe /** CCID timed out while talking to the ICC */ -#define CCID_BERROR_XFR_PARITY_ERROR 0xfd /** Parity error while talking to the ICC */ -#define CCID_BERROR_XFR_OVERRUN 0xfc /** Overrun error while talking to the ICC */ -#define CCID_BERROR_HW_ERROR 0xfb /** An all inclusive hardware error occurred */ -#define CCID_BERROR_BAD_ATR_TS 0xf -#define CCID_BERROR_BAD_ATR_TCK 0xf -#define CCID_BERROR_ICC_PROTOCOL_NOT_SUPPORTED 0xf6 -#define CCID_BERROR_ICC_CLASS_NOT_SUPPORTED 0xf5 -#define CCID_BERROR_PROCEDURE_BYTE_CONFLICT 0xf4 -#define CCID_BERROR_DEACTIVATED_PROTOCOL 0xf3 -#define CCID_BERROR_BUSY_WITH_AUTO_SEQUENCE 0xf2 /** Automatic Sequence Ongoing */ -#define CCID_BERROR_PIN_TIMEOUT 0xf0 -#define CCID_BERROR_PIN_CANCELLED 0xef -#define CCID_BERROR_CMD_SLOT_BUSY 0xe0 /** A second command was sent to a slot which was already processing a command. */ -#define CCID_BERROR_CMD_NOT_SUPPORTED 0x00 -#define CCID_BERROR_OK 0x00 - -#define CCID_BSTATUS_OK_ACTIVE 0x00 /** No error. An ICC is present and active */ -#define CCID_BSTATUS_OK_INACTIVE 0x01 /** No error. ICC is present and inactive */ -#define CCID_BSTATUS_OK_NOICC 0x02 /** No error. No ICC is present */ -#define CCID_BSTATUS_ERROR_ACTIVE 0x40 /** Failed. An ICC is present and active */ -#define CCID_BSTATUS_ERROR_INACTIVE 0x41 /** Failed. ICC is present and inactive */ -#define CCID_BSTATUS_ERROR_NOICC 0x42 /** Failed. No ICC is present */ - -#define CCID_WLEVEL_DIRECT __constant_cpu_to_le16(0) /** APDU begins and ends with this command */ -#define CCID_WLEVEL_CHAIN_NEXT_XFRBLOCK __constant_cpu_to_le16(1) /** APDU begins with this command, and continue in the next PC_to_RDR_XfrBlock */ -#define CCID_WLEVEL_CHAIN_END __constant_cpu_to_le16(2) /** abData field continues a command APDU and ends the APDU command */ -#define CCID_WLEVEL_CHAIN_CONTINUE __constant_cpu_to_le16(3) /** abData field continues a command APDU and another block is to follow */ -#define CCID_WLEVEL_RESPONSE_IN_DATABLOCK __constant_cpu_to_le16(0x10) /** empty abData field, continuation of response APDU is expected in the next RDR_to_PC_DataBlock */ - -#define CCID_PIN_ENCODING_BIN 0x00 -#define CCID_PIN_ENCODING_BCD 0x01 -#define CCID_PIN_ENCODING_ASCII 0x02 -#define CCID_PIN_UNITS_BYTES 0x80 -#define CCID_PIN_JUSTIFY_RIGHT 0x04 -#define CCID_PIN_CONFIRM_NEW 0x01 -#define CCID_PIN_INSERT_OLD 0x02 -#define CCID_PIN_NO_MSG 0x00 -#define CCID_PIN_MSG1 0x01 -#define CCID_PIN_MSG2 0x02 -#define CCID_PIN_MSG_REF 0x03 -#define CCID_PIN_MSG_DEFAULT 0xff - -#define CCID_SLOTS_UNCHANGED 0x00 -#define CCID_SLOT1_CARD_PRESENT 0x01 -#define CCID_SLOT1_CHANGED 0x02 -#define CCID_SLOT2_CARD_PRESENT 0x04 -#define CCID_SLOT2_CHANGED 0x08 -#define CCID_SLOT3_CARD_PRESENT 0x10 -#define CCID_SLOT3_CHANGED 0x20 -#define CCID_SLOT4_CARD_PRESENT 0x40 -#define CCID_SLOT4_CHANGED 0x80 - -#define CCID_EXT_APDU_MAX (4 + 3 + 0xffff + 3) -#define CCID_SHORT_APDU_MAX (4 + 1 + 0xff + 1) - -struct ccid_class_descriptor { - uint8_t bLength; - uint8_t bDescriptorType; - uint16_t bcdCCID; - uint8_t bMaxSlotIndex; - uint8_t bVoltageSupport; - uint32_t dwProtocols; - uint32_t dwDefaultClock; - uint32_t dwMaximumClock; - uint8_t bNumClockSupport; - uint32_t dwDataRate; - uint32_t dwMaxDataRate; - uint8_t bNumDataRatesSupported; - uint32_t dwMaxIFSD; - uint32_t dwSynchProtocols; - uint32_t dwMechanical; - uint32_t dwFeatures; - uint32_t dwMaxCCIDMessageLength; - uint8_t bClassGetResponse; - uint8_t bclassEnvelope; - uint16_t wLcdLayout; - uint8_t bPINSupport; - uint8_t bMaxCCIDBusySlots; -} __attribute__ ((packed)); - -typedef struct { - uint8_t bmFindexDindex; - uint8_t bmTCCKST0; - uint8_t bGuardTimeT0; - uint8_t bWaitingIntegerT0; - uint8_t bClockStop; -} __attribute__ ((packed)) abProtocolDataStructure_T0_t; -typedef struct { - uint8_t bmFindexDindex; - uint8_t bmTCCKST1; - uint8_t bGuardTimeT1; - uint8_t bWaitingIntegersT1; - uint8_t bClockStop; - uint8_t bIFSC; - uint8_t bNadValue; -} __attribute__ ((packed)) abProtocolDataStructure_T1_t; - -typedef struct { - uint8_t bTimeOut; - uint8_t bmFormatString; - uint8_t bmPINBlockString; - uint8_t bmPINLengthFormat; - uint16_t wPINMaxExtraDigit; - uint8_t bEntryValidationCondition; - uint8_t bNumberMessage; - uint16_t wLangId; - uint8_t bMsgIndex; - uint8_t bTeoPrologue1; - uint16_t bTeoPrologue2; -} __attribute__ ((packed)) abPINDataStucture_Verification_t; -typedef struct { - uint8_t bTimeOut; - uint8_t bmFormatString; - uint8_t bmPINBlockString; - uint8_t bmPINLengthFormat; - uint8_t bInsertionOffsetOld; - uint8_t bInsertionOffsetNew; - uint16_t wPINMaxExtraDigit; - uint8_t bConfirmPIN; - uint8_t bEntryValidationCondition; - uint8_t bNumberMessage; - uint16_t wLangId; - uint8_t bMsgIndex1; -} __attribute__ ((packed)) abPINDataStucture_Modification_t; - -typedef struct { - uint8_t bMessageType; - uint32_t dwLength; - uint8_t bSlot; - uint8_t bSeq; - uint8_t bBWI; - uint16_t wLevelParameter; -} __attribute__ ((packed)) PC_to_RDR_XfrBlock_t; -typedef struct { - uint8_t bMessageType; - uint32_t dwLength; - uint8_t bSlot; - uint8_t bSeq; - uint8_t abRFU1; - uint16_t abRFU2; -} __attribute__ ((packed)) PC_to_RDR_IccPowerOff_t; -typedef struct { - uint8_t bMessageType; - uint32_t dwLength; - uint8_t bSlot; - uint8_t bSeq; - uint8_t abRFU1; - uint16_t abRFU2; -} __attribute__ ((packed)) PC_to_RDR_GetSlotStatus_t; -typedef struct { - uint8_t bMessageType; - uint32_t dwLength; - uint8_t bSlot; - uint8_t bSeq; - uint8_t abRFU1; - uint16_t abRFU2; -} __attribute__ ((packed)) PC_to_RDR_GetParameters_t; -typedef struct { - uint8_t bMessageType; - uint32_t dwLength; - uint8_t bSlot; - uint8_t bSeq; - uint8_t abRFU1; - uint16_t abRFU2; -} __attribute__ ((packed)) PC_to_RDR_ResetParameters_t; -typedef struct { - uint8_t bMessageType; - uint32_t dwLength; - uint8_t bSlot; - uint8_t bSeq; - uint8_t bProtocolNum; - uint16_t abRFU; -} __attribute__ ((packed)) PC_to_RDR_SetParameters_t; -typedef struct { - uint8_t bMessageType; - uint32_t dwLength; - uint8_t bSlot; - uint8_t bSeq; - uint8_t bBWI; - uint16_t wLevelParameter; -} __attribute__ ((packed)) PC_to_RDR_Secure_t; -typedef struct { - uint8_t bMessageType; - uint32_t dwLength; - uint8_t bSlot; - uint8_t bSeq; - uint8_t bPowerSelect; - uint16_t abRFU; -} __attribute__ ((packed)) PC_to_RDR_IccPowerOn_t; - -typedef struct { - uint8_t bMessageType; - uint32_t dwLength; - uint8_t bSlot; - uint8_t bSeq; - uint8_t bStatus; - uint8_t bError; - uint8_t bClockStatus; -} __attribute__ ((packed)) RDR_to_PC_SlotStatus_t; -typedef struct { - uint8_t bMessageType; - uint32_t dwLength; - uint8_t bSlot; - uint8_t bSeq; - uint8_t bStatus; - uint8_t bError; - uint8_t bChainParameter; -} __attribute__ ((packed)) RDR_to_PC_DataBlock_t; -typedef struct { - uint8_t bMessageType; - uint32_t dwLength; - uint8_t bSlot; - uint8_t bSeq; - uint8_t bStatus; - uint8_t bError; - uint8_t bProtocolNum; -} __attribute__ ((packed)) RDR_to_PC_Parameters_t; -typedef struct { - uint8_t bMessageType; - uint8_t bmSlotICCState; /* we support 1 slots, so we need 2*1 bits = 1 byte */ -} __attribute__ ((packed)) RDR_to_PC_NotifySlotChange_t; - -struct hid_class_descriptor { - uint8_t bLength; - uint8_t bDescriptorType; - uint16_t bcdHID; - uint32_t bCountryCode; - uint8_t bNumDescriptors; -} __attribute__ ((packed)); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ccid/src/ccid.c b/ccid/src/ccid.c index 604441a..f449fca 100644 --- a/ccid/src/ccid.c +++ b/ccid/src/ccid.c @@ -34,10 +34,6 @@ #include "config.h" #include "scutil.h" -#ifndef HAVE_BOXING_BUF_TO_PACE_INPUT -#include -#endif - static sc_context_t *ctx = NULL; static sc_card_t *card = NULL; static sc_reader_t *reader = NULL; @@ -464,11 +460,6 @@ perform_PC_to_RDR_IccPowerOn(const __u8 *in, size_t inlen, __u8 **out, size_t *o } if (sc_result >= 0) { -#ifdef WITH_PACE -#ifndef DISABLE_GLOBAL_BOXING_INITIALIZATION - sc_initialize_boxing_cmds(ctx); -#endif -#endif return get_RDR_to_PC_SlotStatus(request->bSeq, sc_result, out, outlen, card->atr.value, card->atr.len); } else { diff --git a/ccid/src/ccid.h b/ccid/src/ccid.h index 9c9b006..91aac74 100644 --- a/ccid/src/ccid.h +++ b/ccid/src/ccid.h @@ -23,8 +23,7 @@ #define _CCID_H #include -#include -#include "ccid-types.h" +#include #ifdef __cplusplus extern "C" { diff --git a/ccid/src/scutil.c b/ccid/src/scutil.c index 7fb9d07..7d6638d 100644 --- a/ccid/src/scutil.c +++ b/ccid/src/scutil.c @@ -20,29 +20,7 @@ #include "config.h" #endif -#include "libopensc/internal.h" - -#ifndef HAVE__SC_MATCH_ATR -int sc_dlclose(void *handle) {} -const char *sc_dlerror() {} -void *sc_dlsym(void *handle, const char *symbol) {} -size_t strlcpy(char *dst, const char *src, size_t siz) {} -int sc_mutex_create(const sc_context_t *ctx, void **mutex) {} -int sc_mutex_destroy(const sc_context_t *ctx, void *mutex) {} -int _sc_parse_atr(sc_reader_t *reader) {} -void *sc_dlopen(const char *filename) {} -int sc_mutex_lock(const sc_context_t *ctx, void *mutex) {} -int sc_mutex_unlock(const sc_context_t *ctx, void *mutex) {} -#include "libopensc/card.c" -#endif - -#if !defined(HAVE_SC_APDU_GET_OCTETS) || !defined(HAVE_SC_APDU_SET_RESP) -#ifdef HAVE__SC_MATCH_ATR -size_t sc_get_max_send_size(const sc_card_t *card) {return 0;} -#endif -#include "libopensc/apdu.c" -#endif - +#include #include #include #include diff --git a/ccid/src/scutil.h b/ccid/src/scutil.h index 04ad123..870e636 100644 --- a/ccid/src/scutil.h +++ b/ccid/src/scutil.h @@ -88,38 +88,5 @@ void _bin_log(sc_context_t *ctx, int type, const char *file, int line, */ int print_avail(int verbose); -/* - * OPENSC functions that do not get exported (sometimes) - */ - -/** - * Returns the encoded APDU in newly created buffer. - * @param ctx sc_context_t object - * @param apdu sc_apdu_t object with the APDU to encode - * @param buf pointer to the newly allocated buffer - * @param len length of the encoded APDU - * @param proto protocol to be used - * @return SC_SUCCESS on success and an error code otherwise - */ -int sc_apdu_get_octets(sc_context_t *ctx, const sc_apdu_t *apdu, u8 **buf, - size_t *len, unsigned int proto); - -/** - * Sets the status bytes and return data in the APDU - * @param ctx sc_context_t object - * @param apdu the apdu to which the data should be written - * @param buf returned data - * @param len length of the returned data - * @return SC_SUCCESS on success and an error code otherwise - */ -int sc_apdu_set_resp(sc_context_t *ctx, sc_apdu_t *apdu, const u8 *buf, - size_t len); - -/* Returns an index number if a match was found, -1 otherwise. table has to - * be null terminated. */ -int _sc_match_atr(struct sc_card *card, struct sc_atr_table *table, int *type_out); - -int fread_to_eof(const char *file, unsigned char **buf, size_t *buflen); - #endif /* @} */ diff --git a/doc/conf.py b/doc/conf.py index 909d65e..ef94679 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -18,6 +18,7 @@ os.system("make doc -C virtualsmartcard") os.system("make doc -C ccid") os.system("make doc -C pcsc-relay") +os.environ['PATH'] = os.path.abspath('../ccid/src') + os.pathsep + os.environ['PATH'] os.environ['PATH'] = os.path.abspath('../pcsc-relay/src') + os.pathsep + os.environ['PATH'] os.environ['PATH'] = os.path.abspath('../virtualsmartcard/src/vpicc') + os.pathsep + os.environ['PATH'] diff --git a/docs/_sources/ccid/README.txt b/docs/_sources/ccid/README.txt index b868f62..0b72c4d 100644 --- a/docs/_sources/ccid/README.txt +++ b/docs/_sources/ccid/README.txt @@ -265,6 +265,9 @@ modern Windows and Unix-like systems by default. .. include:: autotools.txt +The USB CCID Emulator depends on :program:`libopensc`, which is automatically +built from a snapshot of the OpenSC source code and then statically linked. + ================= Hints on GadgetFS @@ -302,33 +305,6 @@ loading the module, you maybe want to check out `this patch `_. -=============== -Hints on OpenSC -=============== - -USB CCID Emulator needs the OpenSC components to be -installed (especially :file:`libopensc.so`). Here is an example of how to get -the standard installation of OpenSC without |PACE|:: - - PREFIX=/tmp/install - VSMARTCARD=$PWD/vsmartcard - git clone https://github.com/frankmorgner/vsmartcard.git $VSMARTCARD - cd $VSMARTCARD - git submodule init - git submodule update - cd $VSMARTCARD/ccid/src/opensc - autoreconf --verbose --install - ./configure --prefix=$PREFIX - make install && cd - - -Now :file:`libopensc.so` should be located in ``$PREFIX/lib``. Here is how to -configure the USB CCID Emulator to use it:: - - cd $VSMARTCARD/ccid - ./configure --prefix=$PREFIX OPENSC_LIBS="-L$PREFIX/lib -lopensc" - make install && cd - - - ***** Usage ***** diff --git a/docs/ccid/README.html b/docs/ccid/README.html index cb7885f..d9add12 100644 --- a/docs/ccid/README.html +++ b/docs/ccid/README.html @@ -109,7 +109,6 @@
  • Installation
  • Usage
  • @@ -491,6 +490,8 @@ make make install +

    The USB CCID Emulator depends on libopensc, which is automatically +built from a snapshot of the OpenSC source code and then statically linked.

    Hints on GadgetFS

    @@ -522,31 +523,6 @@ patch is needed.

    If you are using a more recent version of dummy_hcd and get an error loading the module, you maybe want to check out this patch.

    -
    -

    Hints on OpenSC

    -

    USB CCID Emulator needs the OpenSC components to be -installed (especially libopensc.so). Here is an example of how to get -the standard installation of OpenSC without PACE:

    -
    PREFIX=/tmp/install
    -VSMARTCARD=$PWD/vsmartcard
    -git clone https://github.com/frankmorgner/vsmartcard.git $VSMARTCARD
    -cd $VSMARTCARD
    -git submodule init
    -git submodule update
    -cd $VSMARTCARD/ccid/src/opensc
    -autoreconf --verbose --install
    -./configure --prefix=$PREFIX
    -make install && cd -
    -
    -
    -

    Now libopensc.so should be located in $PREFIX/lib. Here is how to -configure the USB CCID Emulator to use it:

    -
    cd $VSMARTCARD/ccid
    -./configure --prefix=$PREFIX OPENSC_LIBS="-L$PREFIX/lib -lopensc"
    -make install && cd -
    -
    -
    -

    Usage

    diff --git a/pcsc-relay/doc/Makefile.am b/pcsc-relay/doc/Makefile.am index 1b1c8e1..450699f 100644 --- a/pcsc-relay/doc/Makefile.am +++ b/pcsc-relay/doc/Makefile.am @@ -13,7 +13,6 @@ do_subst = $(SED) \ -e 's,[@]libdir[@],$(libdir),g' \ -e 's,[@]includedir[@],$(includedir),g' \ -e 's,[@]VERSION[@],$(VERSION),g' \ - -e 's,[@]OPENSC_LIBS[@],$(OPENSC_LIBS),g' \ -e 's,[@]abs_top_srcdir[@],$(abs_top_srcdir),g' \ -e 's,[@]top_srcdir[@],$(top_srcdir),g' diff --git a/virtualsmartcard/doc/Makefile.am b/virtualsmartcard/doc/Makefile.am index 0cf74c6..1844a18 100644 --- a/virtualsmartcard/doc/Makefile.am +++ b/virtualsmartcard/doc/Makefile.am @@ -14,7 +14,6 @@ do_subst = $(SED) \ -e 's,[@]libdir[@],$(libdir),g' \ -e 's,[@]includedir[@],$(includedir),g' \ -e 's,[@]VERSION[@],$(VERSION),g' \ - -e 's,[@]OPENSC_LIBS[@],$(OPENSC_LIBS),g' \ -e 's,[@]abs_top_srcdir[@],$(abs_top_srcdir),g' \ -e 's,[@]top_srcdir[@],$(top_srcdir),g'