New upstream version 1.4.34
This commit is contained in:
parent
a0267df565
commit
a7859a1fbd
5
INSTALL
5
INSTALL
|
@ -58,8 +58,8 @@ target directory to use.
|
||||||
configuring the driver for the serial reader
|
configuring the driver for the serial reader
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
You have to create or edit the file /etc/reader.conf. The file should
|
You have to create a file in the /etc/reader.conf.d/ directory. The file
|
||||||
contain something like:
|
should contain something like:
|
||||||
|
|
||||||
# Gemalto reader with serial communication
|
# Gemalto reader with serial communication
|
||||||
# - n is the serial port to use n in [0..3]
|
# - n is the serial port to use n in [0..3]
|
||||||
|
@ -90,6 +90,7 @@ DEVICENAME field. Supported values are:
|
||||||
- GemCoreSIMPro2 for IDBridge CR30
|
- GemCoreSIMPro2 for IDBridge CR30
|
||||||
- GemPCPinPad for GemPC PinPad
|
- GemPCPinPad for GemPC PinPad
|
||||||
- GemPCTwin for GemPC Twin (default value)
|
- GemPCTwin for GemPC Twin (default value)
|
||||||
|
- SEC1210 for Microchip SEC1210
|
||||||
|
|
||||||
You will then have something like:
|
You will then have something like:
|
||||||
DEVICENAME /dev/ttyS0:GemPCPinPad
|
DEVICENAME /dev/ttyS0:GemPCPinPad
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Makefile.in generated by automake 1.16.2 from Makefile.am.
|
# Makefile.in generated by automake 1.16.3 from Makefile.am.
|
||||||
# @configure_input@
|
# @configure_input@
|
||||||
|
|
||||||
# Copyright (C) 1994-2020 Free Software Foundation, Inc.
|
# Copyright (C) 1994-2020 Free Software Foundation, Inc.
|
||||||
|
@ -202,6 +202,8 @@ am__relativize = \
|
||||||
GZIP_ENV = --best
|
GZIP_ENV = --best
|
||||||
DIST_ARCHIVES = $(distdir).tar.bz2
|
DIST_ARCHIVES = $(distdir).tar.bz2
|
||||||
DIST_TARGETS = dist-bzip2
|
DIST_TARGETS = dist-bzip2
|
||||||
|
# Exists only to be overridden by the user if desired.
|
||||||
|
AM_DISTCHECK_DVI_TARGET = dvi
|
||||||
distuninstallcheck_listfiles = find . -type f -print
|
distuninstallcheck_listfiles = find . -type f -print
|
||||||
am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
|
am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
|
||||||
| sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
|
| sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
|
||||||
|
@ -681,7 +683,7 @@ distcheck: dist
|
||||||
$(DISTCHECK_CONFIGURE_FLAGS) \
|
$(DISTCHECK_CONFIGURE_FLAGS) \
|
||||||
--srcdir=../.. --prefix="$$dc_install_base" \
|
--srcdir=../.. --prefix="$$dc_install_base" \
|
||||||
&& $(MAKE) $(AM_MAKEFLAGS) \
|
&& $(MAKE) $(AM_MAKEFLAGS) \
|
||||||
&& $(MAKE) $(AM_MAKEFLAGS) dvi \
|
&& $(MAKE) $(AM_MAKEFLAGS) $(AM_DISTCHECK_DVI_TARGET) \
|
||||||
&& $(MAKE) $(AM_MAKEFLAGS) check \
|
&& $(MAKE) $(AM_MAKEFLAGS) check \
|
||||||
&& $(MAKE) $(AM_MAKEFLAGS) install \
|
&& $(MAKE) $(AM_MAKEFLAGS) install \
|
||||||
&& $(MAKE) $(AM_MAKEFLAGS) installcheck \
|
&& $(MAKE) $(AM_MAKEFLAGS) installcheck \
|
||||||
|
|
31
README.md
31
README.md
|
@ -117,6 +117,37 @@ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
History:
|
History:
|
||||||
========
|
========
|
||||||
|
|
||||||
|
1.4.34 - 24 January 2021, Ludovic Rousseau
|
||||||
|
- Add support of
|
||||||
|
- ACS ACR1252IMP Reader
|
||||||
|
- ACS CryptoMate EVO
|
||||||
|
- Aktiv Rutoken SCR 3001 Reader
|
||||||
|
- Avtor KP-375BLE
|
||||||
|
- Avtor SC Reader KP382
|
||||||
|
- BIT4ID mLector AIR DI V3
|
||||||
|
- BIT4ID miniLector AIR NFC v3
|
||||||
|
- Bit4id Digital-DNA Key (ProductID 0x2354)
|
||||||
|
- Canokeys Canokey
|
||||||
|
- DESKO GmbH IDenty chrom
|
||||||
|
- DESKO GmbH PENTA Scanner
|
||||||
|
- FT Biopass CCID
|
||||||
|
- FT Biopass FIDO2
|
||||||
|
- FT Biopass KB CCID
|
||||||
|
- FT Biopass KB FIDO CCID
|
||||||
|
- Feitian BLE CCID Dongle
|
||||||
|
- Feitian R805
|
||||||
|
- Feitian vR504 Contactless Reader
|
||||||
|
- GoTrust Idem Key
|
||||||
|
- Identiv uTrust 3720 Contactless Reader
|
||||||
|
- Sunrex HP USB Business Slim Smartcard CCID Keyboard
|
||||||
|
- sysmocom - s.f.m.c. GmbH sysmoOCTSIM
|
||||||
|
- Fail if the requested protocol is not supported by reader
|
||||||
|
- Disable USB suspend for the AlcorMicro AU9520 reader
|
||||||
|
- Return "no smart card" if we get notified during a transmit
|
||||||
|
- Minor improvements reported by Maksim Ivanov
|
||||||
|
- Some other minor improvements
|
||||||
|
|
||||||
|
|
||||||
1.4.33 - 25 June 2020, Ludovic Rousseau
|
1.4.33 - 25 June 2020, Ludovic Rousseau
|
||||||
- Add support of
|
- Add support of
|
||||||
- Genesys Logic CCID Card Reader (idProduct: 0x0771)
|
- Genesys Logic CCID Card Reader (idProduct: 0x0771)
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# generated automatically by aclocal 1.16.2 -*- Autoconf -*-
|
# generated automatically by aclocal 1.16.3 -*- Autoconf -*-
|
||||||
|
|
||||||
# Copyright (C) 1996-2020 Free Software Foundation, Inc.
|
# Copyright (C) 1996-2020 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
@ -311,7 +311,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION],
|
||||||
[am__api_version='1.16'
|
[am__api_version='1.16'
|
||||||
dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
|
dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
|
||||||
dnl require some minimum version. Point them to the right macro.
|
dnl require some minimum version. Point them to the right macro.
|
||||||
m4_if([$1], [1.16.2], [],
|
m4_if([$1], [1.16.3], [],
|
||||||
[AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
|
[AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
|
||||||
])
|
])
|
||||||
|
|
||||||
|
@ -327,7 +327,7 @@ m4_define([_AM_AUTOCONF_VERSION], [])
|
||||||
# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
|
# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
|
||||||
# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
|
# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
|
||||||
AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
|
AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
|
||||||
[AM_AUTOMAKE_VERSION([1.16.2])dnl
|
[AM_AUTOMAKE_VERSION([1.16.3])dnl
|
||||||
m4_ifndef([AC_AUTOCONF_VERSION],
|
m4_ifndef([AC_AUTOCONF_VERSION],
|
||||||
[m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
|
[m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
|
||||||
_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
|
_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
|
||||||
|
@ -1093,12 +1093,7 @@ AC_DEFUN([AM_MISSING_HAS_RUN],
|
||||||
[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
|
[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
|
||||||
AC_REQUIRE_AUX_FILE([missing])dnl
|
AC_REQUIRE_AUX_FILE([missing])dnl
|
||||||
if test x"${MISSING+set}" != xset; then
|
if test x"${MISSING+set}" != xset; then
|
||||||
case $am_aux_dir in
|
MISSING="\${SHELL} '$am_aux_dir/missing'"
|
||||||
*\ * | *\ *)
|
|
||||||
MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
|
|
||||||
*)
|
|
||||||
MISSING="\${SHELL} $am_aux_dir/missing" ;;
|
|
||||||
esac
|
|
||||||
fi
|
fi
|
||||||
# Use eval to expand $SHELL
|
# Use eval to expand $SHELL
|
||||||
if eval "$MISSING --is-lightweight"; then
|
if eval "$MISSING --is-lightweight"; then
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#! /bin/sh
|
#! /bin/sh
|
||||||
# Guess values for system-dependent variables and create Makefiles.
|
# Guess values for system-dependent variables and create Makefiles.
|
||||||
# Generated by GNU Autoconf 2.69 for ccid 1.4.33.
|
# Generated by GNU Autoconf 2.69 for ccid 1.4.34.
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
|
# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
|
||||||
|
@ -587,8 +587,8 @@ MAKEFLAGS=
|
||||||
# Identity of this package.
|
# Identity of this package.
|
||||||
PACKAGE_NAME='ccid'
|
PACKAGE_NAME='ccid'
|
||||||
PACKAGE_TARNAME='ccid'
|
PACKAGE_TARNAME='ccid'
|
||||||
PACKAGE_VERSION='1.4.33'
|
PACKAGE_VERSION='1.4.34'
|
||||||
PACKAGE_STRING='ccid 1.4.33'
|
PACKAGE_STRING='ccid 1.4.34'
|
||||||
PACKAGE_BUGREPORT=''
|
PACKAGE_BUGREPORT=''
|
||||||
PACKAGE_URL=''
|
PACKAGE_URL=''
|
||||||
|
|
||||||
|
@ -1379,7 +1379,7 @@ if test "$ac_init_help" = "long"; then
|
||||||
# Omit some internal or obsolete options to make the list less imposing.
|
# Omit some internal or obsolete options to make the list less imposing.
|
||||||
# This message is too long to be a string in the A/UX 3.1 sh.
|
# This message is too long to be a string in the A/UX 3.1 sh.
|
||||||
cat <<_ACEOF
|
cat <<_ACEOF
|
||||||
\`configure' configures ccid 1.4.33 to adapt to many kinds of systems.
|
\`configure' configures ccid 1.4.34 to adapt to many kinds of systems.
|
||||||
|
|
||||||
Usage: $0 [OPTION]... [VAR=VALUE]...
|
Usage: $0 [OPTION]... [VAR=VALUE]...
|
||||||
|
|
||||||
|
@ -1450,7 +1450,7 @@ fi
|
||||||
|
|
||||||
if test -n "$ac_init_help"; then
|
if test -n "$ac_init_help"; then
|
||||||
case $ac_init_help in
|
case $ac_init_help in
|
||||||
short | recursive ) echo "Configuration of ccid 1.4.33:";;
|
short | recursive ) echo "Configuration of ccid 1.4.34:";;
|
||||||
esac
|
esac
|
||||||
cat <<\_ACEOF
|
cat <<\_ACEOF
|
||||||
|
|
||||||
|
@ -1597,7 +1597,7 @@ fi
|
||||||
test -n "$ac_init_help" && exit $ac_status
|
test -n "$ac_init_help" && exit $ac_status
|
||||||
if $ac_init_version; then
|
if $ac_init_version; then
|
||||||
cat <<\_ACEOF
|
cat <<\_ACEOF
|
||||||
ccid configure 1.4.33
|
ccid configure 1.4.34
|
||||||
generated by GNU Autoconf 2.69
|
generated by GNU Autoconf 2.69
|
||||||
|
|
||||||
Copyright (C) 2012 Free Software Foundation, Inc.
|
Copyright (C) 2012 Free Software Foundation, Inc.
|
||||||
|
@ -2016,7 +2016,7 @@ cat >config.log <<_ACEOF
|
||||||
This file contains any messages produced by compilers while
|
This file contains any messages produced by compilers while
|
||||||
running configure, to aid debugging if configure makes a mistake.
|
running configure, to aid debugging if configure makes a mistake.
|
||||||
|
|
||||||
It was created by ccid $as_me 1.4.33, which was
|
It was created by ccid $as_me 1.4.34, which was
|
||||||
generated by GNU Autoconf 2.69. Invocation command line was
|
generated by GNU Autoconf 2.69. Invocation command line was
|
||||||
|
|
||||||
$ $0 $@
|
$ $0 $@
|
||||||
|
@ -2570,12 +2570,7 @@ program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
|
||||||
am_aux_dir=`cd "$ac_aux_dir" && pwd`
|
am_aux_dir=`cd "$ac_aux_dir" && pwd`
|
||||||
|
|
||||||
if test x"${MISSING+set}" != xset; then
|
if test x"${MISSING+set}" != xset; then
|
||||||
case $am_aux_dir in
|
MISSING="\${SHELL} '$am_aux_dir/missing'"
|
||||||
*\ * | *\ *)
|
|
||||||
MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
|
|
||||||
*)
|
|
||||||
MISSING="\${SHELL} $am_aux_dir/missing" ;;
|
|
||||||
esac
|
|
||||||
fi
|
fi
|
||||||
# Use eval to expand $SHELL
|
# Use eval to expand $SHELL
|
||||||
if eval "$MISSING --is-lightweight"; then
|
if eval "$MISSING --is-lightweight"; then
|
||||||
|
@ -2880,7 +2875,7 @@ fi
|
||||||
|
|
||||||
# Define the identity of the package.
|
# Define the identity of the package.
|
||||||
PACKAGE='ccid'
|
PACKAGE='ccid'
|
||||||
VERSION='1.4.33'
|
VERSION='1.4.34'
|
||||||
|
|
||||||
|
|
||||||
cat >>confdefs.h <<_ACEOF
|
cat >>confdefs.h <<_ACEOF
|
||||||
|
@ -8392,11 +8387,11 @@ $as_echo "$lt_cv_ld_force_load" >&6; }
|
||||||
# to the OS version, if on x86, and 10.4, the deployment
|
# to the OS version, if on x86, and 10.4, the deployment
|
||||||
# target defaults to 10.4. Don't you love it?
|
# target defaults to 10.4. Don't you love it?
|
||||||
case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
|
case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
|
||||||
10.0,*86*-darwin8*|10.0,*-darwin[91]*)
|
10.0,*86*-darwin8*|10.0,*-darwin[912]*)
|
||||||
_lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
|
_lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
|
||||||
10.[012][,.]*)
|
10.[012][,.]*)
|
||||||
_lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
|
_lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
|
||||||
10.*)
|
10.*|11.*)
|
||||||
_lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
|
_lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
|
||||||
esac
|
esac
|
||||||
;;
|
;;
|
||||||
|
@ -14734,7 +14729,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
|
||||||
# report actual input values of CONFIG_FILES etc. instead of their
|
# report actual input values of CONFIG_FILES etc. instead of their
|
||||||
# values after options handling.
|
# values after options handling.
|
||||||
ac_log="
|
ac_log="
|
||||||
This file was extended by ccid $as_me 1.4.33, which was
|
This file was extended by ccid $as_me 1.4.34, which was
|
||||||
generated by GNU Autoconf 2.69. Invocation command line was
|
generated by GNU Autoconf 2.69. Invocation command line was
|
||||||
|
|
||||||
CONFIG_FILES = $CONFIG_FILES
|
CONFIG_FILES = $CONFIG_FILES
|
||||||
|
@ -14800,7 +14795,7 @@ _ACEOF
|
||||||
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
|
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
|
||||||
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
|
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
|
||||||
ac_cs_version="\\
|
ac_cs_version="\\
|
||||||
ccid config.status 1.4.33
|
ccid config.status 1.4.34
|
||||||
configured by $0, generated by GNU Autoconf 2.69,
|
configured by $0, generated by GNU Autoconf 2.69,
|
||||||
with options \\"\$ac_cs_config\\"
|
with options \\"\$ac_cs_config\\"
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
# Require autoconf 2.61
|
# Require autoconf 2.61
|
||||||
AC_PREREQ([2.69])
|
AC_PREREQ([2.69])
|
||||||
|
|
||||||
AC_INIT([ccid],[1.4.33])
|
AC_INIT([ccid],[1.4.34])
|
||||||
AC_CONFIG_SRCDIR(src/ifdhandler.c)
|
AC_CONFIG_SRCDIR(src/ifdhandler.c)
|
||||||
AC_CONFIG_AUX_DIR([.])
|
AC_CONFIG_AUX_DIR([.])
|
||||||
AM_INIT_AUTOMAKE(1.8 dist-bzip2 no-dist-gzip subdir-objects foreign)
|
AM_INIT_AUTOMAKE(1.8 dist-bzip2 no-dist-gzip subdir-objects foreign)
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Makefile.in generated by automake 1.16.2 from Makefile.am.
|
# Makefile.in generated by automake 1.16.3 from Makefile.am.
|
||||||
# @configure_input@
|
# @configure_input@
|
||||||
|
|
||||||
# Copyright (C) 1994-2020 Free Software Foundation, Inc.
|
# Copyright (C) 1994-2020 Free Software Foundation, Inc.
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Makefile.in generated by automake 1.16.2 from Makefile.am.
|
# Makefile.in generated by automake 1.16.3 from Makefile.am.
|
||||||
# @configure_input@
|
# @configure_input@
|
||||||
|
|
||||||
# Copyright (C) 1994-2020 Free Software Foundation, Inc.
|
# Copyright (C) 1994-2020 Free Software Foundation, Inc.
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Makefile.in generated by automake 1.16.2 from Makefile.am.
|
# Makefile.in generated by automake 1.16.3 from Makefile.am.
|
||||||
# @configure_input@
|
# @configure_input@
|
||||||
|
|
||||||
# Copyright (C) 1994-2020 Free Software Foundation, Inc.
|
# Copyright (C) 1994-2020 Free Software Foundation, Inc.
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Makefile.in generated by automake 1.16.2 from Makefile.am.
|
# Makefile.in generated by automake 1.16.3 from Makefile.am.
|
||||||
# @configure_input@
|
# @configure_input@
|
||||||
|
|
||||||
# Copyright (C) 1994-2020 Free Software Foundation, Inc.
|
# Copyright (C) 1994-2020 Free Software Foundation, Inc.
|
||||||
|
|
144
install-sh
144
install-sh
|
@ -1,7 +1,7 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
# install - install a program, script, or datafile
|
# install - install a program, script, or datafile
|
||||||
|
|
||||||
scriptversion=2018-03-11.20; # UTC
|
scriptversion=2020-11-14.01; # UTC
|
||||||
|
|
||||||
# This originates from X11R5 (mit/util/scripts/install.sh), which was
|
# This originates from X11R5 (mit/util/scripts/install.sh), which was
|
||||||
# later released in X11R6 (xc/config/util/install.sh) with the
|
# later released in X11R6 (xc/config/util/install.sh) with the
|
||||||
|
@ -69,6 +69,11 @@ posix_mkdir=
|
||||||
# Desired mode of installed file.
|
# Desired mode of installed file.
|
||||||
mode=0755
|
mode=0755
|
||||||
|
|
||||||
|
# Create dirs (including intermediate dirs) using mode 755.
|
||||||
|
# This is like GNU 'install' as of coreutils 8.32 (2020).
|
||||||
|
mkdir_umask=22
|
||||||
|
|
||||||
|
backupsuffix=
|
||||||
chgrpcmd=
|
chgrpcmd=
|
||||||
chmodcmd=$chmodprog
|
chmodcmd=$chmodprog
|
||||||
chowncmd=
|
chowncmd=
|
||||||
|
@ -99,18 +104,28 @@ Options:
|
||||||
--version display version info and exit.
|
--version display version info and exit.
|
||||||
|
|
||||||
-c (ignored)
|
-c (ignored)
|
||||||
-C install only if different (preserve the last data modification time)
|
-C install only if different (preserve data modification time)
|
||||||
-d create directories instead of installing files.
|
-d create directories instead of installing files.
|
||||||
-g GROUP $chgrpprog installed files to GROUP.
|
-g GROUP $chgrpprog installed files to GROUP.
|
||||||
-m MODE $chmodprog installed files to MODE.
|
-m MODE $chmodprog installed files to MODE.
|
||||||
-o USER $chownprog installed files to USER.
|
-o USER $chownprog installed files to USER.
|
||||||
|
-p pass -p to $cpprog.
|
||||||
-s $stripprog installed files.
|
-s $stripprog installed files.
|
||||||
|
-S SUFFIX attempt to back up existing files, with suffix SUFFIX.
|
||||||
-t DIRECTORY install into DIRECTORY.
|
-t DIRECTORY install into DIRECTORY.
|
||||||
-T report an error if DSTFILE is a directory.
|
-T report an error if DSTFILE is a directory.
|
||||||
|
|
||||||
Environment variables override the default commands:
|
Environment variables override the default commands:
|
||||||
CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
|
CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
|
||||||
RMPROG STRIPPROG
|
RMPROG STRIPPROG
|
||||||
|
|
||||||
|
By default, rm is invoked with -f; when overridden with RMPROG,
|
||||||
|
it's up to you to specify -f if you want it.
|
||||||
|
|
||||||
|
If -S is not specified, no backups are attempted.
|
||||||
|
|
||||||
|
Email bug reports to bug-automake@gnu.org.
|
||||||
|
Automake home page: https://www.gnu.org/software/automake/
|
||||||
"
|
"
|
||||||
|
|
||||||
while test $# -ne 0; do
|
while test $# -ne 0; do
|
||||||
|
@ -137,8 +152,13 @@ while test $# -ne 0; do
|
||||||
-o) chowncmd="$chownprog $2"
|
-o) chowncmd="$chownprog $2"
|
||||||
shift;;
|
shift;;
|
||||||
|
|
||||||
|
-p) cpprog="$cpprog -p";;
|
||||||
|
|
||||||
-s) stripcmd=$stripprog;;
|
-s) stripcmd=$stripprog;;
|
||||||
|
|
||||||
|
-S) backupsuffix="$2"
|
||||||
|
shift;;
|
||||||
|
|
||||||
-t)
|
-t)
|
||||||
is_target_a_directory=always
|
is_target_a_directory=always
|
||||||
dst_arg=$2
|
dst_arg=$2
|
||||||
|
@ -255,6 +275,10 @@ do
|
||||||
dstdir=$dst
|
dstdir=$dst
|
||||||
test -d "$dstdir"
|
test -d "$dstdir"
|
||||||
dstdir_status=$?
|
dstdir_status=$?
|
||||||
|
# Don't chown directories that already exist.
|
||||||
|
if test $dstdir_status = 0; then
|
||||||
|
chowncmd=""
|
||||||
|
fi
|
||||||
else
|
else
|
||||||
|
|
||||||
# Waiting for this to be detected by the "$cpprog $src $dsttmp" command
|
# Waiting for this to be detected by the "$cpprog $src $dsttmp" command
|
||||||
|
@ -301,22 +325,6 @@ do
|
||||||
if test $dstdir_status != 0; then
|
if test $dstdir_status != 0; then
|
||||||
case $posix_mkdir in
|
case $posix_mkdir in
|
||||||
'')
|
'')
|
||||||
# Create intermediate dirs using mode 755 as modified by the umask.
|
|
||||||
# This is like FreeBSD 'install' as of 1997-10-28.
|
|
||||||
umask=`umask`
|
|
||||||
case $stripcmd.$umask in
|
|
||||||
# Optimize common cases.
|
|
||||||
*[2367][2367]) mkdir_umask=$umask;;
|
|
||||||
.*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
|
|
||||||
|
|
||||||
*[0-7])
|
|
||||||
mkdir_umask=`expr $umask + 22 \
|
|
||||||
- $umask % 100 % 40 + $umask % 20 \
|
|
||||||
- $umask % 10 % 4 + $umask % 2
|
|
||||||
`;;
|
|
||||||
*) mkdir_umask=$umask,go-w;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
# With -d, create the new directory with the user-specified mode.
|
# With -d, create the new directory with the user-specified mode.
|
||||||
# Otherwise, rely on $mkdir_umask.
|
# Otherwise, rely on $mkdir_umask.
|
||||||
if test -n "$dir_arg"; then
|
if test -n "$dir_arg"; then
|
||||||
|
@ -326,52 +334,49 @@ do
|
||||||
fi
|
fi
|
||||||
|
|
||||||
posix_mkdir=false
|
posix_mkdir=false
|
||||||
case $umask in
|
# The $RANDOM variable is not portable (e.g., dash). Use it
|
||||||
*[123567][0-7][0-7])
|
# here however when possible just to lower collision chance.
|
||||||
# POSIX mkdir -p sets u+wx bits regardless of umask, which
|
tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
|
||||||
# is incompatible with FreeBSD 'install' when (umask & 300) != 0.
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
# Note that $RANDOM variable is not portable (e.g. dash); Use it
|
|
||||||
# here however when possible just to lower collision chance.
|
|
||||||
tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
|
|
||||||
|
|
||||||
trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0
|
trap '
|
||||||
|
ret=$?
|
||||||
|
rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null
|
||||||
|
exit $ret
|
||||||
|
' 0
|
||||||
|
|
||||||
# Because "mkdir -p" follows existing symlinks and we likely work
|
# Because "mkdir -p" follows existing symlinks and we likely work
|
||||||
# directly in world-writeable /tmp, make sure that the '$tmpdir'
|
# directly in world-writeable /tmp, make sure that the '$tmpdir'
|
||||||
# directory is successfully created first before we actually test
|
# directory is successfully created first before we actually test
|
||||||
# 'mkdir -p' feature.
|
# 'mkdir -p'.
|
||||||
if (umask $mkdir_umask &&
|
if (umask $mkdir_umask &&
|
||||||
$mkdirprog $mkdir_mode "$tmpdir" &&
|
$mkdirprog $mkdir_mode "$tmpdir" &&
|
||||||
exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1
|
exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1
|
||||||
then
|
then
|
||||||
if test -z "$dir_arg" || {
|
if test -z "$dir_arg" || {
|
||||||
# Check for POSIX incompatibilities with -m.
|
# Check for POSIX incompatibilities with -m.
|
||||||
# HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
|
# HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
|
||||||
# other-writable bit of parent directory when it shouldn't.
|
# other-writable bit of parent directory when it shouldn't.
|
||||||
# FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
|
# FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
|
||||||
test_tmpdir="$tmpdir/a"
|
test_tmpdir="$tmpdir/a"
|
||||||
ls_ld_tmpdir=`ls -ld "$test_tmpdir"`
|
ls_ld_tmpdir=`ls -ld "$test_tmpdir"`
|
||||||
case $ls_ld_tmpdir in
|
case $ls_ld_tmpdir in
|
||||||
d????-?r-*) different_mode=700;;
|
d????-?r-*) different_mode=700;;
|
||||||
d????-?--*) different_mode=755;;
|
d????-?--*) different_mode=755;;
|
||||||
*) false;;
|
*) false;;
|
||||||
esac &&
|
esac &&
|
||||||
$mkdirprog -m$different_mode -p -- "$test_tmpdir" && {
|
$mkdirprog -m$different_mode -p -- "$test_tmpdir" && {
|
||||||
ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"`
|
ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"`
|
||||||
test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
|
test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
then posix_mkdir=:
|
then posix_mkdir=:
|
||||||
fi
|
fi
|
||||||
rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir"
|
rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir"
|
||||||
else
|
else
|
||||||
# Remove any dirs left behind by ancient mkdir implementations.
|
# Remove any dirs left behind by ancient mkdir implementations.
|
||||||
rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null
|
rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null
|
||||||
fi
|
fi
|
||||||
trap '' 0;;
|
trap '' 0;;
|
||||||
esac;;
|
|
||||||
esac
|
esac
|
||||||
|
|
||||||
if
|
if
|
||||||
|
@ -382,7 +387,7 @@ do
|
||||||
then :
|
then :
|
||||||
else
|
else
|
||||||
|
|
||||||
# The umask is ridiculous, or mkdir does not conform to POSIX,
|
# mkdir does not conform to POSIX,
|
||||||
# or it failed possibly due to a race condition. Create the
|
# or it failed possibly due to a race condition. Create the
|
||||||
# directory the slow way, step by step, checking for races as we go.
|
# directory the slow way, step by step, checking for races as we go.
|
||||||
|
|
||||||
|
@ -411,7 +416,7 @@ do
|
||||||
prefixes=
|
prefixes=
|
||||||
else
|
else
|
||||||
if $posix_mkdir; then
|
if $posix_mkdir; then
|
||||||
(umask=$mkdir_umask &&
|
(umask $mkdir_umask &&
|
||||||
$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
|
$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
|
||||||
# Don't fail if two instances are running concurrently.
|
# Don't fail if two instances are running concurrently.
|
||||||
test -d "$prefix" || exit 1
|
test -d "$prefix" || exit 1
|
||||||
|
@ -488,6 +493,13 @@ do
|
||||||
then
|
then
|
||||||
rm -f "$dsttmp"
|
rm -f "$dsttmp"
|
||||||
else
|
else
|
||||||
|
# If $backupsuffix is set, and the file being installed
|
||||||
|
# already exists, attempt a backup. Don't worry if it fails,
|
||||||
|
# e.g., if mv doesn't support -f.
|
||||||
|
if test -n "$backupsuffix" && test -f "$dst"; then
|
||||||
|
$doit $mvcmd -f "$dst" "$dst$backupsuffix" 2>/dev/null
|
||||||
|
fi
|
||||||
|
|
||||||
# Rename the file to the real destination.
|
# Rename the file to the real destination.
|
||||||
$doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
|
$doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
|
||||||
|
|
||||||
|
@ -502,9 +514,9 @@ do
|
||||||
# file should still install successfully.
|
# file should still install successfully.
|
||||||
{
|
{
|
||||||
test ! -f "$dst" ||
|
test ! -f "$dst" ||
|
||||||
$doit $rmcmd -f "$dst" 2>/dev/null ||
|
$doit $rmcmd "$dst" 2>/dev/null ||
|
||||||
{ $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
|
{ $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
|
||||||
{ $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
|
{ $doit $rmcmd "$rmtmp" 2>/dev/null; :; }
|
||||||
} ||
|
} ||
|
||||||
{ echo "$0: cannot unlink or rename $dst" >&2
|
{ echo "$0: cannot unlink or rename $dst" >&2
|
||||||
(exit 1); exit 1
|
(exit 1); exit 1
|
||||||
|
|
|
@ -31,7 +31,7 @@
|
||||||
|
|
||||||
PROGRAM=libtool
|
PROGRAM=libtool
|
||||||
PACKAGE=libtool
|
PACKAGE=libtool
|
||||||
VERSION="2.4.6 Debian-2.4.6-14"
|
VERSION="2.4.6 Debian-2.4.6-15"
|
||||||
package_revision=2.4.6
|
package_revision=2.4.6
|
||||||
|
|
||||||
|
|
||||||
|
@ -2141,7 +2141,7 @@ include the following information:
|
||||||
compiler: $LTCC
|
compiler: $LTCC
|
||||||
compiler flags: $LTCFLAGS
|
compiler flags: $LTCFLAGS
|
||||||
linker: $LD (gnu? $with_gnu_ld)
|
linker: $LD (gnu? $with_gnu_ld)
|
||||||
version: $progname $scriptversion Debian-2.4.6-14
|
version: $progname $scriptversion Debian-2.4.6-15
|
||||||
automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q`
|
automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q`
|
||||||
autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q`
|
autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q`
|
||||||
|
|
||||||
|
|
|
@ -1071,11 +1071,11 @@ _LT_EOF
|
||||||
# to the OS version, if on x86, and 10.4, the deployment
|
# to the OS version, if on x86, and 10.4, the deployment
|
||||||
# target defaults to 10.4. Don't you love it?
|
# target defaults to 10.4. Don't you love it?
|
||||||
case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
|
case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
|
||||||
10.0,*86*-darwin8*|10.0,*-darwin[[91]]*)
|
10.0,*86*-darwin8*|10.0,*-darwin[[912]]*)
|
||||||
_lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
|
_lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
|
||||||
10.[[012]][[,.]]*)
|
10.[[012]][[,.]]*)
|
||||||
_lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
|
_lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
|
||||||
10.*)
|
10.*|11.*)
|
||||||
_lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
|
_lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
|
||||||
esac
|
esac
|
||||||
;;
|
;;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Makefile.in generated by automake 1.16.2 from Makefile.am.
|
# Makefile.in generated by automake 1.16.3 from Makefile.am.
|
||||||
# @configure_input@
|
# @configure_input@
|
||||||
|
|
||||||
# Copyright (C) 1994-2020 Free Software Foundation, Inc.
|
# Copyright (C) 1994-2020 Free Software Foundation, Inc.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#
|
#
|
||||||
# List of readers supported by the CCID driver
|
# List of readers supported by the CCID driver
|
||||||
# Generated: 2020-06-25
|
# Generated: 2021-01-20
|
||||||
#
|
#
|
||||||
# DO NOT EDIT BY HAND
|
# DO NOT EDIT BY HAND
|
||||||
|
|
||||||
|
@ -19,7 +19,6 @@
|
||||||
|
|
||||||
# Alcor Micro
|
# Alcor Micro
|
||||||
0x058F:0x9520:Alcor Micro AU9520
|
0x058F:0x9520:Alcor Micro AU9520
|
||||||
0x058F:0x9540:Alcor Micro AU9560
|
|
||||||
|
|
||||||
# Athena
|
# Athena
|
||||||
0x0DC3:0x1004:Athena ASE IIIe
|
0x0DC3:0x1004:Athena ASE IIIe
|
||||||
|
@ -135,6 +134,7 @@
|
||||||
0x072F:0x223B:ACS ACR1252 Dual Reader
|
0x072F:0x223B:ACS ACR1252 Dual Reader
|
||||||
0x072F:0x223E:ACS ACR1252 Reader
|
0x072F:0x223E:ACS ACR1252 Reader
|
||||||
0x072F:0x223F:ACS ACR1255U-J1
|
0x072F:0x223F:ACS ACR1255U-J1
|
||||||
|
0x072F:0x2259:ACS ACR1252IMP Reader
|
||||||
0x072F:0x8201:ACS APG8201 PINhandy 1
|
0x072F:0x8201:ACS APG8201 PINhandy 1
|
||||||
0x072F:0x8202:ACS APG8201 USB Reader
|
0x072F:0x8202:ACS APG8201 USB Reader
|
||||||
0x072F:0x8300:ACS ACR33 ICC Reader
|
0x072F:0x8300:ACS ACR33 ICC Reader
|
||||||
|
@ -142,6 +142,7 @@
|
||||||
0x072F:0xB000:ACS ACR3901U ICC Reader
|
0x072F:0xB000:ACS ACR3901U ICC Reader
|
||||||
0x072F:0xB100:ACS ACR39U ICC Reader
|
0x072F:0xB100:ACS ACR39U ICC Reader
|
||||||
0x072F:0xB106:ACS CryptoMate (T2)
|
0x072F:0xB106:ACS CryptoMate (T2)
|
||||||
|
0x072F:0xB112:ACS CryptoMate EVO
|
||||||
|
|
||||||
# AF Care
|
# AF Care
|
||||||
0x1C34:0xAFC0:AF Care One
|
0x1C34:0xAFC0:AF Care One
|
||||||
|
@ -159,6 +160,7 @@
|
||||||
# Aktiv
|
# Aktiv
|
||||||
0x0A89:0x0025:Aktiv Rutoken lite
|
0x0A89:0x0025:Aktiv Rutoken lite
|
||||||
0x0A89:0x0030:Aktiv Rutoken ECP
|
0x0A89:0x0030:Aktiv Rutoken ECP
|
||||||
|
0x0A89:0x0069:Aktiv Rutoken SCR 3001 Reader
|
||||||
0x0A89:0x0080:Aktiv PINPad Ex
|
0x0A89:0x0080:Aktiv PINPad Ex
|
||||||
0x0A89:0x0081:Aktiv PINPad In
|
0x0A89:0x0081:Aktiv PINPad In
|
||||||
0x0A89:0x0082:Aktiv Rutoken PINPad 2
|
0x0A89:0x0082:Aktiv Rutoken PINPad 2
|
||||||
|
@ -214,6 +216,8 @@
|
||||||
0x15CF:0x0019:Avtor SecureToken
|
0x15CF:0x0019:Avtor SecureToken
|
||||||
0x15CF:0x001D:Avtor SC Reader 371
|
0x15CF:0x001D:Avtor SC Reader 371
|
||||||
0x15CF:0x0020:Avtor SecureToken
|
0x15CF:0x0020:Avtor SecureToken
|
||||||
|
0x096E:0x0608:Avtor SC Reader KP382
|
||||||
|
0x096E:0x0624:Avtor KP-375BLE
|
||||||
|
|
||||||
# Axalto
|
# Axalto
|
||||||
0x04E6:0x511C:Axalto Reflex USB v3
|
0x04E6:0x511C:Axalto Reflex USB v3
|
||||||
|
@ -231,6 +235,7 @@
|
||||||
0x25DD:0x2321:Bit4id CKey4
|
0x25DD:0x2321:Bit4id CKey4
|
||||||
0x25DD:0x2341:Bit4id tokenME FIPS v3
|
0x25DD:0x2341:Bit4id tokenME FIPS v3
|
||||||
0x25DD:0x2351:Bit4id Digital DNA Key
|
0x25DD:0x2351:Bit4id Digital DNA Key
|
||||||
|
0x25DD:0x2354:Bit4id Digital-DNA Key
|
||||||
0x25DD:0x2361:Bit4id Digital-DNA Key BT
|
0x25DD:0x2361:Bit4id Digital-DNA Key BT
|
||||||
0x25DD:0x2362:Bit4id Digital-DNA Key
|
0x25DD:0x2362:Bit4id Digital-DNA Key
|
||||||
0x25DD:0x2371:Bit4id TokenME EVO v2
|
0x25DD:0x2371:Bit4id TokenME EVO v2
|
||||||
|
@ -238,6 +243,10 @@
|
||||||
0x25DD:0x3211:Bit4id miniLector AIR EVO
|
0x25DD:0x3211:Bit4id miniLector AIR EVO
|
||||||
0x25DD:0xB001:Bit4id miniLector Blue
|
0x25DD:0xB001:Bit4id miniLector Blue
|
||||||
|
|
||||||
|
# BIT4ID
|
||||||
|
0x25DD:0x3403:BIT4ID miniLector AIR NFC v3
|
||||||
|
0x25DD:0x3503:BIT4ID mLector AIR DI V3
|
||||||
|
|
||||||
# Bluink Ltd.
|
# Bluink Ltd.
|
||||||
0x2ABE:0x1003:Bluink Ltd. Bluink CCID
|
0x2ABE:0x1003:Bluink Ltd. Bluink CCID
|
||||||
|
|
||||||
|
@ -261,6 +270,9 @@
|
||||||
0x0783:0x0010:C3PO LTC32
|
0x0783:0x0010:C3PO LTC32
|
||||||
0x0783:0x0036:C3PO LTC36
|
0x0783:0x0036:C3PO LTC36
|
||||||
|
|
||||||
|
# Canokeys
|
||||||
|
0x20A0:0x42D4:Canokeys Canokey
|
||||||
|
|
||||||
# CASTLES
|
# CASTLES
|
||||||
0x0CA6:0x00A0:CASTLES EZCCID Smart Card Reader
|
0x0CA6:0x00A0:CASTLES EZCCID Smart Card Reader
|
||||||
|
|
||||||
|
@ -302,6 +314,10 @@
|
||||||
# DC.Ltd
|
# DC.Ltd
|
||||||
0x257B:0xC305:DC.Ltd DC4 5CCID READER
|
0x257B:0xC305:DC.Ltd DC4 5CCID READER
|
||||||
|
|
||||||
|
# DESKO GmbH
|
||||||
|
0x1AC2:0x0300:DESKO GmbH IDenty chrom
|
||||||
|
0x1AC2:0x0302:DESKO GmbH PENTA Scanner
|
||||||
|
|
||||||
# Doctolib
|
# Doctolib
|
||||||
0x1C34:0xAFD0:Doctolib SR
|
0x1C34:0xAFD0:Doctolib SR
|
||||||
0x1C34:0xAFD1:Doctolib SR
|
0x1C34:0xAFD1:Doctolib SR
|
||||||
|
@ -325,20 +341,20 @@
|
||||||
# F-Secure Foundry
|
# F-Secure Foundry
|
||||||
0x1209:0x2702:F-Secure Foundry USB Armory Mk II
|
0x1209:0x2702:F-Secure Foundry USB Armory Mk II
|
||||||
|
|
||||||
|
# Feitian
|
||||||
|
0x096E:0x060D:Feitian R502
|
||||||
|
0x096E:0x0621:Feitian BLE CCID Dongle
|
||||||
|
0x096E:0x0622:Feitian VR504 VHBR Contactless & Contact Card Reader
|
||||||
|
0x096E:0x0623:Feitian bR500
|
||||||
|
0x096E:0x0685:Feitian R805
|
||||||
|
0x096E:0x0807:Feitian ePass2003
|
||||||
|
0x096E:0x080F:Feitian eJAVA Token
|
||||||
|
|
||||||
# FEITIAN
|
# FEITIAN
|
||||||
0x096E:0x0619:FEITIAN iR301
|
0x096E:0x0619:FEITIAN iR301
|
||||||
0x096E:0x061A:FEITIAN bR301
|
0x096E:0x061A:FEITIAN bR301
|
||||||
0x096E:0x061C:FEITIAN iR301
|
0x096E:0x061C:FEITIAN iR301
|
||||||
|
|
||||||
# Feitian
|
|
||||||
0x096E:0x0608:Feitian 502-CL
|
|
||||||
0x096E:0x060D:Feitian R502
|
|
||||||
0x096E:0x0622:Feitian VR504 VHBR Contactless & Contact Card Reader
|
|
||||||
0x096E:0x0623:Feitian bR500
|
|
||||||
0x096E:0x0624:Feitian bR301
|
|
||||||
0x096E:0x0807:Feitian ePass2003
|
|
||||||
0x096E:0x080F:Feitian eJAVA Token
|
|
||||||
|
|
||||||
# Feitian Technologies
|
# Feitian Technologies
|
||||||
0x096E:0x0505:Feitian Technologies FT SCR310
|
0x096E:0x0505:Feitian Technologies FT SCR310
|
||||||
|
|
||||||
|
@ -351,6 +367,10 @@
|
||||||
0x096E:0x0855:FT CCID KB
|
0x096E:0x0855:FT CCID KB
|
||||||
0x096E:0x0856:FT U2F CCID
|
0x096E:0x0856:FT U2F CCID
|
||||||
0x096E:0x0859:FT CCID
|
0x096E:0x0859:FT CCID
|
||||||
|
0x096E:0x0867:FT Biopass FIDO2
|
||||||
|
0x096E:0x0868:FT Biopass KB FIDO CCID
|
||||||
|
0x096E:0x0869:FT Biopass KB CCID
|
||||||
|
0x096E:0x086C:FT Biopass CCID
|
||||||
|
|
||||||
# Fujitsu
|
# Fujitsu
|
||||||
0x0BF8:0x1022:Fujitsu Keyboard KB100 SCR
|
0x0BF8:0x1022:Fujitsu Keyboard KB100 SCR
|
||||||
|
@ -407,6 +427,9 @@
|
||||||
# GoldKey Security
|
# GoldKey Security
|
||||||
0x19C8:0x0012:GoldKey Security PIV Token
|
0x19C8:0x0012:GoldKey Security PIV Token
|
||||||
|
|
||||||
|
# GoTrust
|
||||||
|
0x32A3:0x3201:GoTrust Idem Key
|
||||||
|
|
||||||
# HDZB
|
# HDZB
|
||||||
0x1677:0x0025:HDZB uKeyCI800-K18
|
0x1677:0x0025:HDZB uKeyCI800-K18
|
||||||
|
|
||||||
|
@ -448,6 +471,7 @@
|
||||||
0x0B81:0x0220:id3 Semiconductors CL1356A_HID
|
0x0B81:0x0220:id3 Semiconductors CL1356A_HID
|
||||||
|
|
||||||
# Identiv
|
# Identiv
|
||||||
|
0x04E6:0x5612:Identiv uTrust 3720 Contactless Reader
|
||||||
0x04E6:0x5713:Identiv CLOUD 2980 F Smart Card Reader
|
0x04E6:0x5713:Identiv CLOUD 2980 F Smart Card Reader
|
||||||
0x04E6:0x5724:Identiv Identiv uTrust 4701 F Dual Interface Reader
|
0x04E6:0x5724:Identiv Identiv uTrust 4701 F Dual Interface Reader
|
||||||
0x04E6:0x5790:Identiv uTrust 3700 F CL Reader
|
0x04E6:0x5790:Identiv uTrust 3700 F CL Reader
|
||||||
|
@ -715,6 +739,9 @@
|
||||||
0x08DF:0x3117:Spyrus Inc WorkSafe Pro
|
0x08DF:0x3117:Spyrus Inc WorkSafe Pro
|
||||||
0x08DF:0x3201:Spyrus Inc PocketVault P-3X
|
0x08DF:0x3201:Spyrus Inc PocketVault P-3X
|
||||||
|
|
||||||
|
# Sunrex
|
||||||
|
0x05AF:0x605A:Sunrex HP USB Business Slim Smartcard CCID Keyboard
|
||||||
|
|
||||||
# Swissbit
|
# Swissbit
|
||||||
0x1370:0x0901:Swissbit Secure USB PU-50n SE/PE
|
0x1370:0x0901:Swissbit Secure USB PU-50n SE/PE
|
||||||
|
|
||||||
|
@ -724,6 +751,9 @@
|
||||||
# Sysking
|
# Sysking
|
||||||
0x0E6A:0x5083:Sysking MII136C
|
0x0E6A:0x5083:Sysking MII136C
|
||||||
|
|
||||||
|
# sysmocom - s.f.m.c. GmbH
|
||||||
|
0x1D50:0x6141:sysmocom - s.f.m.c. GmbH sysmoOCTSIM
|
||||||
|
|
||||||
# Teridian Semiconductors
|
# Teridian Semiconductors
|
||||||
0x1862:0x0000:Teridian Semiconductors TSC12xxFV.09
|
0x1862:0x0000:Teridian Semiconductors TSC12xxFV.09
|
||||||
|
|
||||||
|
@ -812,6 +842,7 @@
|
||||||
# Aladdin
|
# Aladdin
|
||||||
|
|
||||||
# Alcor Micro
|
# Alcor Micro
|
||||||
|
0x058F:0x9540:Alcor Micro AU9540
|
||||||
|
|
||||||
# Athena
|
# Athena
|
||||||
0x0DC3:0x100F:Athena IDProtect Flash
|
0x0DC3:0x100F:Athena IDProtect Flash
|
||||||
|
@ -966,6 +997,15 @@
|
||||||
#0x08E6:0x34C0:Gemalto Ezio Shield (Gemalto_Ezio_Shield.txt)
|
#0x08E6:0x34C0:Gemalto Ezio Shield (Gemalto_Ezio_Shield.txt)
|
||||||
#0x08E6:0x34C0:Gemalto Ezio Shield Pro SC (Gemalto_Ezio_Shield_Pro_SC.txt)
|
#0x08E6:0x34C0:Gemalto Ezio Shield Pro SC (Gemalto_Ezio_Shield_Pro_SC.txt)
|
||||||
|
|
||||||
|
#0x096E:0x0608:Avtor SC Reader KP382 (Avtor_SC_Reader_KP382.txt)
|
||||||
|
#0x096E:0x0608:Feitian 502-CL (Feitian_R502-CL.txt)
|
||||||
|
|
||||||
|
#0x096E:0x0622:Feitian VR504 VHBR Contactless & Contact Card Reader (Feitian_vR504.txt)
|
||||||
|
#0x096E:0x0622:Feitian vR504 Contactless Reader (Feitian_vR504_Contactless_Reader.txt)
|
||||||
|
|
||||||
|
#0x096E:0x0624:Avtor KP-375BLE (Avtor_KP-375BLE.txt)
|
||||||
|
#0x096E:0x0624:Feitian bR301 (Feitian_bR301_BLE.txt)
|
||||||
|
|
||||||
#0x0A5C:0x5802:Broadcom Corp 5880 (Broadcom_5880v3.txt)
|
#0x0A5C:0x5802:Broadcom Corp 5880 (Broadcom_5880v3.txt)
|
||||||
#0x0A5C:0x5802:Broadcom Corp 5880 (Broadcom_5880v4.txt)
|
#0x0A5C:0x5802:Broadcom Corp 5880 (Broadcom_5880v4.txt)
|
||||||
|
|
||||||
|
|
|
@ -14,6 +14,10 @@ ATTRS{idVendor}=="0d46", ATTRS{idProduct}=="4081", RUN+="/usr/sbin/Kobil_mIDenti
|
||||||
# Keep USB autosuspend off for the C3PO LTC31 v1 SmartCard Reader
|
# Keep USB autosuspend off for the C3PO LTC31 v1 SmartCard Reader
|
||||||
ATTR{idVendor}=="0783", ATTR{idProduct}=="0003", GOTO="pcscd_ccid_rules_end"
|
ATTR{idVendor}=="0783", ATTR{idProduct}=="0003", GOTO="pcscd_ccid_rules_end"
|
||||||
|
|
||||||
|
# same USB autosuspend problem with the AlcorMicro AU9520
|
||||||
|
ATTR{idVendor}=="058f", ATTR{idProduct}=="9520", GOTO="pcscd_ccid_rules_end"
|
||||||
|
|
||||||
|
|
||||||
# set USB power management to auto.
|
# set USB power management to auto.
|
||||||
ENV{ID_USB_INTERFACES}==":0b0000:", TEST=="power/control", ATTR{power/control}="auto"
|
ENV{ID_USB_INTERFACES}==":0b0000:", TEST=="power/control", ATTR{power/control}="auto"
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
<key>CFBundleExecutable</key>
|
<key>CFBundleExecutable</key>
|
||||||
<string>MAGIC_TARGET</string>
|
<string>MAGIC_TARGET</string>
|
||||||
<key>CFBundleIdentifier</key>
|
<key>CFBundleIdentifier</key>
|
||||||
<string>org.debian.alioth.pcsclite.smartcardccid</string>
|
<string>fr.apdu.ccid.smartcardccid</string>
|
||||||
<key>CFBundleInfoDictionaryVersion</key>
|
<key>CFBundleInfoDictionaryVersion</key>
|
||||||
<string>6.0</string>
|
<string>6.0</string>
|
||||||
MAGIC_CLASS
|
MAGIC_CLASS
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Makefile.in generated by automake 1.16.2 from Makefile.am.
|
# Makefile.in generated by automake 1.16.3 from Makefile.am.
|
||||||
# @configure_input@
|
# @configure_input@
|
||||||
|
|
||||||
# Copyright (C) 1994-2020 Free Software Foundation, Inc.
|
# Copyright (C) 1994-2020 Free Software Foundation, Inc.
|
||||||
|
|
|
@ -698,13 +698,8 @@ void ccid_error(int log_level, int error, const char *file, int line,
|
||||||
text = var_text;
|
text = var_text;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
#ifdef USE_OS_LOG
|
|
||||||
(log_level);
|
|
||||||
os_log_error(OS_LOG_DEFAULT, "%s:%d:%s %s", file, line, function, text);
|
|
||||||
#else
|
|
||||||
log_msg(log_level, "%s:%d:%s %s", file, line, function, text);
|
log_msg(log_level, "%s:%d:%s %s", file, line, function, text);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
|
||||||
|
|
||||||
} /* ccid_error */
|
} /* ccid_error */
|
||||||
|
|
||||||
|
|
|
@ -92,6 +92,11 @@ typedef struct
|
||||||
*/
|
*/
|
||||||
int cardProtocol;
|
int cardProtocol;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Reader protocols
|
||||||
|
*/
|
||||||
|
int dwProtocols;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* bInterfaceProtocol (CCID, ICCD-A, ICCD-B)
|
* bInterfaceProtocol (CCID, ICCD-A, ICCD-B)
|
||||||
*/
|
*/
|
||||||
|
@ -272,7 +277,7 @@ void ccid_error(int log_level, int error, const char *file, int line,
|
||||||
_ccid_descriptor *get_ccid_descriptor(unsigned int reader_index);
|
_ccid_descriptor *get_ccid_descriptor(unsigned int reader_index);
|
||||||
|
|
||||||
/* convert a 4 byte integer in USB format into an int */
|
/* convert a 4 byte integer in USB format into an int */
|
||||||
#define dw2i(a, x) (unsigned int)((((((a[x+3] << 8) + a[x+2]) << 8) + a[x+1]) << 8) + a[x])
|
#define dw2i(a, x) (unsigned int)(((((((unsigned int)a[x+3] << 8) + (unsigned int)a[x+2]) << 8) + (unsigned int)a[x+1]) << 8) + (unsigned int)a[x])
|
||||||
|
|
||||||
/* all the data rates specified by ISO 7816-3 Fi/Di tables */
|
/* all the data rates specified by ISO 7816-3 Fi/Di tables */
|
||||||
#define ISO_DATA_RATES 10753, 14337, 15625, 17204, \
|
#define ISO_DATA_RATES 10753, 14337, 15625, 17204, \
|
||||||
|
|
|
@ -621,6 +621,7 @@ static status_t set_ccid_descriptor(unsigned int reader_index,
|
||||||
serialDevice[reader_index].ccid.dwSlotStatus = IFD_ICC_PRESENT;
|
serialDevice[reader_index].ccid.dwSlotStatus = IFD_ICC_PRESENT;
|
||||||
serialDevice[reader_index].ccid.bVoltageSupport = 0x07; /* 1.8V, 3V and 5V */
|
serialDevice[reader_index].ccid.bVoltageSupport = 0x07; /* 1.8V, 3V and 5V */
|
||||||
serialDevice[reader_index].ccid.gemalto_firmware_features = NULL;
|
serialDevice[reader_index].ccid.gemalto_firmware_features = NULL;
|
||||||
|
serialDevice[reader_index].ccid.dwProtocols = SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1;
|
||||||
#ifdef ENABLE_ZLP
|
#ifdef ENABLE_ZLP
|
||||||
serialDevice[reader_index].ccid.zlp = FALSE;
|
serialDevice[reader_index].ccid.zlp = FALSE;
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -727,6 +727,7 @@ again:
|
||||||
usbDevice[reader_index].ccid.bVoltageSupport = device_descriptor[5];
|
usbDevice[reader_index].ccid.bVoltageSupport = device_descriptor[5];
|
||||||
usbDevice[reader_index].ccid.sIFD_serial_number = NULL;
|
usbDevice[reader_index].ccid.sIFD_serial_number = NULL;
|
||||||
usbDevice[reader_index].ccid.gemalto_firmware_features = NULL;
|
usbDevice[reader_index].ccid.gemalto_firmware_features = NULL;
|
||||||
|
usbDevice[reader_index].ccid.dwProtocols = dw2i(device_descriptor, 6);
|
||||||
#ifdef ENABLE_ZLP
|
#ifdef ENABLE_ZLP
|
||||||
usbDevice[reader_index].ccid.zlp = FALSE;
|
usbDevice[reader_index].ccid.zlp = FALSE;
|
||||||
#endif
|
#endif
|
||||||
|
@ -908,7 +909,7 @@ read_again:
|
||||||
DEBUG_XXD(debug_header, buffer, *length);
|
DEBUG_XXD(debug_header, buffer, *length);
|
||||||
|
|
||||||
#define BSEQ_OFFSET 6
|
#define BSEQ_OFFSET 6
|
||||||
if ((*length >= BSEQ_OFFSET)
|
if ((*length >= BSEQ_OFFSET +1)
|
||||||
&& (buffer[BSEQ_OFFSET] < *ccid_descriptor->pbSeq -1))
|
&& (buffer[BSEQ_OFFSET] < *ccid_descriptor->pbSeq -1))
|
||||||
{
|
{
|
||||||
duplicate_frame++;
|
duplicate_frame++;
|
||||||
|
@ -1451,7 +1452,8 @@ static void *Multi_PollingProc(void *p_ext)
|
||||||
if (NULL == transfer)
|
if (NULL == transfer)
|
||||||
{
|
{
|
||||||
rv = LIBUSB_ERROR_NO_MEM;
|
rv = LIBUSB_ERROR_NO_MEM;
|
||||||
DEBUG_COMM2("libusb_alloc_transfer err %d", rv);
|
DEBUG_COMM3("libusb_alloc_transfer err %d %s", rv,
|
||||||
|
libusb_error_name(rv));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1467,7 +1469,8 @@ static void *Multi_PollingProc(void *p_ext)
|
||||||
if (rv)
|
if (rv)
|
||||||
{
|
{
|
||||||
libusb_free_transfer(transfer);
|
libusb_free_transfer(transfer);
|
||||||
DEBUG_COMM2("libusb_submit_transfer err %d", rv);
|
DEBUG_COMM3("libusb_submit_transfer err %d %s", rv,
|
||||||
|
libusb_error_name(rv));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1479,7 +1482,8 @@ static void *Multi_PollingProc(void *p_ext)
|
||||||
rv = libusb_handle_events_completed(ctx, &completed);
|
rv = libusb_handle_events_completed(ctx, &completed);
|
||||||
if (rv < 0)
|
if (rv < 0)
|
||||||
{
|
{
|
||||||
DEBUG_COMM2("libusb_handle_events err %d", rv);
|
DEBUG_COMM3("libusb_handle_events err %d %s", rv,
|
||||||
|
libusb_error_name(rv));
|
||||||
|
|
||||||
if (rv == LIBUSB_ERROR_INTERRUPTED)
|
if (rv == LIBUSB_ERROR_INTERRUPTED)
|
||||||
continue;
|
continue;
|
||||||
|
@ -1579,9 +1583,10 @@ static void *Multi_PollingProc(void *p_ext)
|
||||||
|
|
||||||
if (rv < 0)
|
if (rv < 0)
|
||||||
{
|
{
|
||||||
DEBUG_CRITICAL4("Multi_PollingProc (%d/%d): error %d",
|
DEBUG_CRITICAL5("Multi_PollingProc (%d/%d): error %d %s",
|
||||||
usbDevice[msExt->reader_index].bus_number,
|
usbDevice[msExt->reader_index].bus_number,
|
||||||
usbDevice[msExt->reader_index].device_address, rv);
|
usbDevice[msExt->reader_index].device_address,
|
||||||
|
rv, libusb_error_name(rv));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Wake up the slot threads so they will exit as well */
|
/* Wake up the slot threads so they will exit as well */
|
||||||
|
|
|
@ -195,21 +195,24 @@ RESPONSECODE CmdPowerOn(unsigned int reader_index, unsigned int * nlength,
|
||||||
check_again:
|
check_again:
|
||||||
if ((1 == voltage) && !(bVoltageSupport & 1))
|
if ((1 == voltage) && !(bVoltageSupport & 1))
|
||||||
{
|
{
|
||||||
DEBUG_INFO1("5V requested but not support by reader");
|
DEBUG_INFO1("5V requested but not supported by reader");
|
||||||
voltage = 2; /* 3V */
|
voltage = 2; /* 3V */
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((2 == voltage) && !(bVoltageSupport & 2))
|
if ((2 == voltage) && !(bVoltageSupport & 2))
|
||||||
{
|
{
|
||||||
DEBUG_INFO1("3V requested but not support by reader");
|
DEBUG_INFO1("3V requested but not supported by reader");
|
||||||
voltage = 3; /* 1.8V */
|
voltage = 3; /* 1.8V */
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((3 == voltage) && !(bVoltageSupport & 4))
|
if ((3 == voltage) && !(bVoltageSupport & 4))
|
||||||
{
|
{
|
||||||
DEBUG_INFO1("1.8V requested but not support by reader");
|
DEBUG_INFO1("1.8V requested but not supported by reader");
|
||||||
voltage = 1; /* 5V */
|
voltage = 1; /* 5V */
|
||||||
goto check_again;
|
|
||||||
|
/* do not (infinite) loop if bVoltageSupport == 0 */
|
||||||
|
if (bVoltageSupport)
|
||||||
|
goto check_again;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
init_voltage = voltage;
|
init_voltage = voltage;
|
||||||
|
@ -232,7 +235,7 @@ again:
|
||||||
res = ReadPort(reader_index, nlength, buffer);
|
res = ReadPort(reader_index, nlength, buffer);
|
||||||
CHECK_STATUS(res)
|
CHECK_STATUS(res)
|
||||||
|
|
||||||
if (*nlength < STATUS_OFFSET+1)
|
if (*nlength < CCID_RESPONSE_HEADER_SIZE)
|
||||||
{
|
{
|
||||||
DEBUG_CRITICAL2("Not enough data received: %d bytes", *nlength);
|
DEBUG_CRITICAL2("Not enough data received: %d bytes", *nlength);
|
||||||
return IFD_COMMUNICATION_ERROR;
|
return IFD_COMMUNICATION_ERROR;
|
||||||
|
@ -286,11 +289,12 @@ again:
|
||||||
|
|
||||||
/* extract the ATR */
|
/* extract the ATR */
|
||||||
atr_len = dw2i(buffer, 1); /* ATR length */
|
atr_len = dw2i(buffer, 1); /* ATR length */
|
||||||
if (atr_len > *nlength)
|
if (atr_len > *nlength - 10)
|
||||||
atr_len = *nlength;
|
atr_len = *nlength - 10;
|
||||||
else
|
else
|
||||||
*nlength = atr_len;
|
*nlength = atr_len;
|
||||||
|
|
||||||
|
/* the buffer length should be 10 + MAX_ATR_SIZE */
|
||||||
memmove(buffer, buffer+10, atr_len);
|
memmove(buffer, buffer+10, atr_len);
|
||||||
|
|
||||||
return return_value;
|
return return_value;
|
||||||
|
@ -994,7 +998,7 @@ time_request:
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (length_out < STATUS_OFFSET+1)
|
if (length_out < CCID_RESPONSE_HEADER_SIZE)
|
||||||
{
|
{
|
||||||
free(cmd_out);
|
free(cmd_out);
|
||||||
DEBUG_CRITICAL2("Not enough data received: %d bytes", length_out);
|
DEBUG_CRITICAL2("Not enough data received: %d bytes", length_out);
|
||||||
|
@ -1109,7 +1113,7 @@ RESPONSECODE CmdPowerOff(unsigned int reader_index)
|
||||||
res = ReadPort(reader_index, &length, cmd);
|
res = ReadPort(reader_index, &length, cmd);
|
||||||
CHECK_STATUS(res)
|
CHECK_STATUS(res)
|
||||||
|
|
||||||
if (length < STATUS_OFFSET+1)
|
if (length < CCID_RESPONSE_HEADER_SIZE)
|
||||||
{
|
{
|
||||||
DEBUG_CRITICAL2("Not enough data received: %d bytes", length);
|
DEBUG_CRITICAL2("Not enough data received: %d bytes", length);
|
||||||
return IFD_COMMUNICATION_ERROR;
|
return IFD_COMMUNICATION_ERROR;
|
||||||
|
@ -1182,7 +1186,7 @@ again_status:
|
||||||
if (PROTOCOL_ICCD_B == ccid_descriptor->bInterfaceProtocol)
|
if (PROTOCOL_ICCD_B == ccid_descriptor->bInterfaceProtocol)
|
||||||
{
|
{
|
||||||
int r;
|
int r;
|
||||||
unsigned char buffer_tmp[3];
|
unsigned char buffer_tmp[3] = {0, 2, 0};
|
||||||
|
|
||||||
/* SlotStatus */
|
/* SlotStatus */
|
||||||
r = ControlUSB(reader_index, 0xA1, 0x81, 0, buffer_tmp,
|
r = ControlUSB(reader_index, 0xA1, 0x81, 0, buffer_tmp,
|
||||||
|
@ -1232,7 +1236,7 @@ again_status:
|
||||||
res = ReadPort(reader_index, &length, buffer);
|
res = ReadPort(reader_index, &length, buffer);
|
||||||
CHECK_STATUS(res)
|
CHECK_STATUS(res)
|
||||||
|
|
||||||
if (length < STATUS_OFFSET+1)
|
if (length < CCID_RESPONSE_HEADER_SIZE)
|
||||||
{
|
{
|
||||||
DEBUG_CRITICAL2("Not enough data received: %d bytes", length);
|
DEBUG_CRITICAL2("Not enough data received: %d bytes", length);
|
||||||
return IFD_COMMUNICATION_ERROR;
|
return IFD_COMMUNICATION_ERROR;
|
||||||
|
@ -1370,7 +1374,8 @@ RESPONSECODE CCID_Transmit(unsigned int reader_index, unsigned int tx_length,
|
||||||
cmd[8] = rx_length & 0xFF; /* Expected length, in character mode only */
|
cmd[8] = rx_length & 0xFF; /* Expected length, in character mode only */
|
||||||
cmd[9] = (rx_length >> 8) & 0xFF;
|
cmd[9] = (rx_length >> 8) & 0xFF;
|
||||||
|
|
||||||
memcpy(cmd+10, tx_buffer, tx_length);
|
if (tx_buffer)
|
||||||
|
memcpy(cmd+10, tx_buffer, tx_length);
|
||||||
|
|
||||||
ret = WritePort(reader_index, 10+tx_length, cmd);
|
ret = WritePort(reader_index, 10+tx_length, cmd);
|
||||||
CHECK_STATUS(ret)
|
CHECK_STATUS(ret)
|
||||||
|
@ -1523,7 +1528,7 @@ time_request:
|
||||||
ccid_descriptor -> readTimeout = old_timeout;
|
ccid_descriptor -> readTimeout = old_timeout;
|
||||||
CHECK_STATUS(ret)
|
CHECK_STATUS(ret)
|
||||||
|
|
||||||
if (length < STATUS_OFFSET+1)
|
if (length < CCID_RESPONSE_HEADER_SIZE)
|
||||||
{
|
{
|
||||||
DEBUG_CRITICAL2("Not enough data received: %d bytes", length);
|
DEBUG_CRITICAL2("Not enough data received: %d bytes", length);
|
||||||
return IFD_COMMUNICATION_ERROR;
|
return IFD_COMMUNICATION_ERROR;
|
||||||
|
@ -1553,6 +1558,12 @@ time_request:
|
||||||
case 0xFD: /* Parity error during exchange */
|
case 0xFD: /* Parity error during exchange */
|
||||||
return IFD_PARITY_ERROR;
|
return IFD_PARITY_ERROR;
|
||||||
|
|
||||||
|
case 0xFE: /* Card absent or mute */
|
||||||
|
if (2 == (cmd[STATUS_OFFSET] & 0x02)) /* No ICC */
|
||||||
|
return IFD_ICC_NOT_PRESENT;
|
||||||
|
else
|
||||||
|
return IFD_COMMUNICATION_ERROR;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return IFD_COMMUNICATION_ERROR;
|
return IFD_COMMUNICATION_ERROR;
|
||||||
}
|
}
|
||||||
|
@ -1595,7 +1606,8 @@ time_request:
|
||||||
return_value = IFD_COMMUNICATION_ERROR;
|
return_value = IFD_COMMUNICATION_ERROR;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
memcpy(rx_buffer, cmd+10, length);
|
if (length)
|
||||||
|
memcpy(rx_buffer, cmd+10, length);
|
||||||
|
|
||||||
/* Extended case?
|
/* Extended case?
|
||||||
* Only valid for RDR_to_PC_DataBlock frames */
|
* Only valid for RDR_to_PC_DataBlock frames */
|
||||||
|
@ -1852,6 +1864,9 @@ static RESPONSECODE T0ProcACK(unsigned int reader_index,
|
||||||
|
|
||||||
DEBUG_COMM2("Enter, is_rcv = %d", is_rcv);
|
DEBUG_COMM2("Enter, is_rcv = %d", is_rcv);
|
||||||
|
|
||||||
|
if (proc_len > 0x20000)
|
||||||
|
return IFD_COMMUNICATION_ERROR;
|
||||||
|
|
||||||
if (is_rcv == 1)
|
if (is_rcv == 1)
|
||||||
{ /* Receiving mode */
|
{ /* Receiving mode */
|
||||||
unsigned int remain_len;
|
unsigned int remain_len;
|
||||||
|
@ -1948,6 +1963,12 @@ static RESPONSECODE T0ProcACK(unsigned int reader_index,
|
||||||
if (return_value != IFD_SUCCESS)
|
if (return_value != IFD_SUCCESS)
|
||||||
return return_value;
|
return return_value;
|
||||||
|
|
||||||
|
if (proc_len > *snd_len)
|
||||||
|
{
|
||||||
|
DEBUG_CRITICAL("proc_len > snd_len");
|
||||||
|
return IFD_COMMUNICATION_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
*snd_len -= proc_len;
|
*snd_len -= proc_len;
|
||||||
*snd_buf += proc_len;
|
*snd_buf += proc_len;
|
||||||
}
|
}
|
||||||
|
@ -2280,7 +2301,7 @@ RESPONSECODE SetParameters(unsigned int reader_index, char protocol,
|
||||||
res = ReadPort(reader_index, &length, cmd);
|
res = ReadPort(reader_index, &length, cmd);
|
||||||
CHECK_STATUS(res)
|
CHECK_STATUS(res)
|
||||||
|
|
||||||
if (length < STATUS_OFFSET+1)
|
if (length < CCID_RESPONSE_HEADER_SIZE)
|
||||||
{
|
{
|
||||||
DEBUG_CRITICAL2("Not enough data received: %d bytes", length);
|
DEBUG_CRITICAL2("Not enough data received: %d bytes", length);
|
||||||
return IFD_COMMUNICATION_ERROR;
|
return IFD_COMMUNICATION_ERROR;
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
#define STATUS_OFFSET 7
|
#define STATUS_OFFSET 7
|
||||||
#define ERROR_OFFSET 8
|
#define ERROR_OFFSET 8
|
||||||
#define CHAIN_PARAMETER_OFFSET 9
|
#define CHAIN_PARAMETER_OFFSET 9
|
||||||
|
#define CCID_RESPONSE_HEADER_SIZE 10
|
||||||
|
|
||||||
RESPONSECODE CmdPowerOn(unsigned int reader_index, unsigned int * nlength,
|
RESPONSECODE CmdPowerOn(unsigned int reader_index, unsigned int * nlength,
|
||||||
/*@out@*/ unsigned char buffer[], int voltage);
|
/*@out@*/ unsigned char buffer[], int voltage);
|
||||||
|
|
|
@ -140,6 +140,9 @@ static RESPONSECODE CreateChannelByNameOrChannel(DWORD Lun,
|
||||||
else
|
else
|
||||||
CcidSlots[reader_index].readerName = strdup("no name");
|
CcidSlots[reader_index].readerName = strdup("no name");
|
||||||
|
|
||||||
|
/* init T=1 structure just in case */
|
||||||
|
t1_init(&CcidSlots[reader_index].t1, reader_index);
|
||||||
|
|
||||||
if (lpcDevice)
|
if (lpcDevice)
|
||||||
ret = OpenPortByName(reader_index, lpcDevice);
|
ret = OpenPortByName(reader_index, lpcDevice);
|
||||||
else
|
else
|
||||||
|
@ -147,11 +150,16 @@ static RESPONSECODE CreateChannelByNameOrChannel(DWORD Lun,
|
||||||
|
|
||||||
if (ret != STATUS_SUCCESS)
|
if (ret != STATUS_SUCCESS)
|
||||||
{
|
{
|
||||||
DEBUG_CRITICAL("failed");
|
|
||||||
if (STATUS_NO_SUCH_DEVICE == ret)
|
if (STATUS_NO_SUCH_DEVICE == ret)
|
||||||
|
{
|
||||||
|
DEBUG_INFO1("failed");
|
||||||
return_value = IFD_NO_SUCH_DEVICE;
|
return_value = IFD_NO_SUCH_DEVICE;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
|
DEBUG_CRITICAL("failed");
|
||||||
return_value = IFD_COMMUNICATION_ERROR;
|
return_value = IFD_COMMUNICATION_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
@ -723,6 +731,14 @@ EXTERNAL RESPONSECODE IFDHSetProtocolParameters(DWORD Lun, DWORD Protocol,
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* check the protocol is supported by the reader */
|
||||||
|
if (!(Protocol & ccid_desc->dwProtocols))
|
||||||
|
{
|
||||||
|
DEBUG_CRITICAL2("Protocol T=" DWORD_D " not supported by reader",
|
||||||
|
Protocol - SCARD_PROTOCOL_T0);
|
||||||
|
return IFD_ERROR_NOT_SUPPORTED;
|
||||||
|
}
|
||||||
|
|
||||||
/* Get ATR of the card */
|
/* Get ATR of the card */
|
||||||
atr_ret = ATR_InitFromArray(&atr, ccid_slot->pcATRBuffer,
|
atr_ret = ATR_InitFromArray(&atr, ccid_slot->pcATRBuffer,
|
||||||
ccid_slot->nATRLength);
|
ccid_slot->nATRLength);
|
||||||
|
@ -943,7 +959,8 @@ EXTERNAL RESPONSECODE IFDHSetProtocolParameters(DWORD Lun, DWORD Protocol,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Now we must set the reader parameters */
|
/* Now we must set the reader parameters */
|
||||||
(void)ATR_GetConvention(&atr, &convention);
|
if (ATR_MALFORMED == ATR_GetConvention(&atr, &convention))
|
||||||
|
return IFD_COMMUNICATION_ERROR;
|
||||||
|
|
||||||
/* specific mode and implicit parameters? (b5 of TA2) */
|
/* specific mode and implicit parameters? (b5 of TA2) */
|
||||||
if (atr.ib[1][ATR_INTERFACE_BYTE_TA].present
|
if (atr.ib[1][ATR_INTERFACE_BYTE_TA].present
|
||||||
|
@ -998,8 +1015,8 @@ EXTERNAL RESPONSECODE IFDHSetProtocolParameters(DWORD Lun, DWORD Protocol,
|
||||||
0x00, 0xFF, 0x81, 0x31, 0x80, 0x45, 0x00, 0x31,
|
0x00, 0xFF, 0x81, 0x31, 0x80, 0x45, 0x00, 0x31,
|
||||||
0xC1, 0x73, 0xC0, 0x01, 0x00, 0x00, 0x90, 0x00, 0xB1 };
|
0xC1, 0x73, 0xC0, 0x01, 0x00, 0x00, 0x90, 0x00, 0xB1 };
|
||||||
|
|
||||||
if (0 == memcmp(ccid_slot->pcATRBuffer, openpgp_atr,
|
if ((ccid_slot->nATRLength == sizeof openpgp_atr)
|
||||||
ccid_slot->nATRLength))
|
&& (0 == memcmp(ccid_slot->pcATRBuffer, openpgp_atr, ccid_slot->nATRLength)))
|
||||||
/* change BWI from 4 to 7 to increase BWT from
|
/* change BWI from 4 to 7 to increase BWT from
|
||||||
* 1.4s to 11s and avoid a timeout during on
|
* 1.4s to 11s and avoid a timeout during on
|
||||||
* board key generation (bogus card) */
|
* board key generation (bogus card) */
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <openct/buffer.h>
|
#include "buffer.h"
|
||||||
|
|
||||||
void
|
void
|
||||||
ct_buf_init(ct_buf_t *bp, void *mem, size_t len)
|
ct_buf_init(ct_buf_t *bp, void *mem, size_t len)
|
||||||
|
|
|
@ -409,7 +409,7 @@ static int ccid_parse_interface_descriptor(libusb_device_handle *handle,
|
||||||
{
|
{
|
||||||
int n;
|
int n;
|
||||||
|
|
||||||
/* See CCID 3.7.2 page 25 */
|
/* See CCID 5.3.2 page 24 */
|
||||||
n = libusb_control_transfer(handle,
|
n = libusb_control_transfer(handle,
|
||||||
0xA1, /* request type */
|
0xA1, /* request type */
|
||||||
0x02, /* GET CLOCK FREQUENCIES */
|
0x02, /* GET CLOCK FREQUENCIES */
|
||||||
|
@ -461,7 +461,7 @@ static int ccid_parse_interface_descriptor(libusb_device_handle *handle,
|
||||||
{
|
{
|
||||||
int n;
|
int n;
|
||||||
|
|
||||||
/* See CCID 3.7.3 page 25 */
|
/* See CCID 5.3.3 page 24 */
|
||||||
n = libusb_control_transfer(handle,
|
n = libusb_control_transfer(handle,
|
||||||
0xA1, /* request type */
|
0xA1, /* request type */
|
||||||
0x03, /* GET DATA RATES */
|
0x03, /* GET DATA RATES */
|
||||||
|
|
|
@ -98,7 +98,9 @@ PPS_Match (BYTE * request, unsigned len_request, BYTE * confirm, unsigned len_co
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
/* See if the card specifies other than default FI and D */
|
/* See if the card specifies other than default FI and D */
|
||||||
if ((PPS_HAS_PPS1 (confirm)) && (confirm[2] != request[2]))
|
if ((PPS_HAS_PPS1 (confirm))
|
||||||
|
&& (len_confirm > 2)
|
||||||
|
&& (confirm[2] != request[2]))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
Loading…
Reference in New Issue