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
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
You have to create or edit the file /etc/reader.conf. The file should
|
||||
contain something like:
|
||||
You have to create a file in the /etc/reader.conf.d/ directory. The file
|
||||
should contain something like:
|
||||
|
||||
# Gemalto reader with serial communication
|
||||
# - n is the serial port to use n in [0..3]
|
||||
|
@ -90,6 +90,7 @@ DEVICENAME field. Supported values are:
|
|||
- GemCoreSIMPro2 for IDBridge CR30
|
||||
- GemPCPinPad for GemPC PinPad
|
||||
- GemPCTwin for GemPC Twin (default value)
|
||||
- SEC1210 for Microchip SEC1210
|
||||
|
||||
You will then have something like:
|
||||
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@
|
||||
|
||||
# Copyright (C) 1994-2020 Free Software Foundation, Inc.
|
||||
|
@ -202,6 +202,8 @@ am__relativize = \
|
|||
GZIP_ENV = --best
|
||||
DIST_ARCHIVES = $(distdir).tar.bz2
|
||||
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
|
||||
am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
|
||||
| sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
|
||||
|
@ -681,7 +683,7 @@ distcheck: dist
|
|||
$(DISTCHECK_CONFIGURE_FLAGS) \
|
||||
--srcdir=../.. --prefix="$$dc_install_base" \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) dvi \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) $(AM_DISTCHECK_DVI_TARGET) \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) check \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) install \
|
||||
&& $(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:
|
||||
========
|
||||
|
||||
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
|
||||
- Add support of
|
||||
- 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.
|
||||
|
||||
|
@ -311,7 +311,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION],
|
|||
[am__api_version='1.16'
|
||||
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.
|
||||
m4_if([$1], [1.16.2], [],
|
||||
m4_if([$1], [1.16.3], [],
|
||||
[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.
|
||||
# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
|
||||
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_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
|
||||
_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_AUX_FILE([missing])dnl
|
||||
if test x"${MISSING+set}" != xset; then
|
||||
case $am_aux_dir in
|
||||
*\ * | *\ *)
|
||||
MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
|
||||
*)
|
||||
MISSING="\${SHELL} $am_aux_dir/missing" ;;
|
||||
esac
|
||||
MISSING="\${SHELL} '$am_aux_dir/missing'"
|
||||
fi
|
||||
# Use eval to expand $SHELL
|
||||
if eval "$MISSING --is-lightweight"; then
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#! /bin/sh
|
||||
# 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.
|
||||
|
@ -587,8 +587,8 @@ MAKEFLAGS=
|
|||
# Identity of this package.
|
||||
PACKAGE_NAME='ccid'
|
||||
PACKAGE_TARNAME='ccid'
|
||||
PACKAGE_VERSION='1.4.33'
|
||||
PACKAGE_STRING='ccid 1.4.33'
|
||||
PACKAGE_VERSION='1.4.34'
|
||||
PACKAGE_STRING='ccid 1.4.34'
|
||||
PACKAGE_BUGREPORT=''
|
||||
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.
|
||||
# This message is too long to be a string in the A/UX 3.1 sh.
|
||||
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]...
|
||||
|
||||
|
@ -1450,7 +1450,7 @@ fi
|
|||
|
||||
if test -n "$ac_init_help"; then
|
||||
case $ac_init_help in
|
||||
short | recursive ) echo "Configuration of ccid 1.4.33:";;
|
||||
short | recursive ) echo "Configuration of ccid 1.4.34:";;
|
||||
esac
|
||||
cat <<\_ACEOF
|
||||
|
||||
|
@ -1597,7 +1597,7 @@ fi
|
|||
test -n "$ac_init_help" && exit $ac_status
|
||||
if $ac_init_version; then
|
||||
cat <<\_ACEOF
|
||||
ccid configure 1.4.33
|
||||
ccid configure 1.4.34
|
||||
generated by GNU Autoconf 2.69
|
||||
|
||||
Copyright (C) 2012 Free Software Foundation, Inc.
|
||||
|
@ -2016,7 +2016,7 @@ cat >config.log <<_ACEOF
|
|||
This file contains any messages produced by compilers while
|
||||
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
|
||||
|
||||
$ $0 $@
|
||||
|
@ -2570,12 +2570,7 @@ program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
|
|||
am_aux_dir=`cd "$ac_aux_dir" && pwd`
|
||||
|
||||
if test x"${MISSING+set}" != xset; then
|
||||
case $am_aux_dir in
|
||||
*\ * | *\ *)
|
||||
MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
|
||||
*)
|
||||
MISSING="\${SHELL} $am_aux_dir/missing" ;;
|
||||
esac
|
||||
MISSING="\${SHELL} '$am_aux_dir/missing'"
|
||||
fi
|
||||
# Use eval to expand $SHELL
|
||||
if eval "$MISSING --is-lightweight"; then
|
||||
|
@ -2880,7 +2875,7 @@ fi
|
|||
|
||||
# Define the identity of the package.
|
||||
PACKAGE='ccid'
|
||||
VERSION='1.4.33'
|
||||
VERSION='1.4.34'
|
||||
|
||||
|
||||
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
|
||||
# target defaults to 10.4. Don't you love it?
|
||||
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' ;;
|
||||
10.[012][,.]*)
|
||||
_lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
|
||||
10.*)
|
||||
10.*|11.*)
|
||||
_lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
|
||||
esac
|
||||
;;
|
||||
|
@ -14734,7 +14729,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
|
|||
# report actual input values of CONFIG_FILES etc. instead of their
|
||||
# values after options handling.
|
||||
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
|
||||
|
||||
CONFIG_FILES = $CONFIG_FILES
|
||||
|
@ -14800,7 +14795,7 @@ _ACEOF
|
|||
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
|
||||
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
|
||||
ac_cs_version="\\
|
||||
ccid config.status 1.4.33
|
||||
ccid config.status 1.4.34
|
||||
configured by $0, generated by GNU Autoconf 2.69,
|
||||
with options \\"\$ac_cs_config\\"
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
# Require autoconf 2.61
|
||||
AC_PREREQ([2.69])
|
||||
|
||||
AC_INIT([ccid],[1.4.33])
|
||||
AC_INIT([ccid],[1.4.34])
|
||||
AC_CONFIG_SRCDIR(src/ifdhandler.c)
|
||||
AC_CONFIG_AUX_DIR([.])
|
||||
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@
|
||||
|
||||
# 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@
|
||||
|
||||
# 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@
|
||||
|
||||
# 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@
|
||||
|
||||
# Copyright (C) 1994-2020 Free Software Foundation, Inc.
|
||||
|
|
144
install-sh
144
install-sh
|
@ -1,7 +1,7 @@
|
|||
#!/bin/sh
|
||||
# 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
|
||||
# later released in X11R6 (xc/config/util/install.sh) with the
|
||||
|
@ -69,6 +69,11 @@ posix_mkdir=
|
|||
# Desired mode of installed file.
|
||||
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=
|
||||
chmodcmd=$chmodprog
|
||||
chowncmd=
|
||||
|
@ -99,18 +104,28 @@ Options:
|
|||
--version display version info and exit.
|
||||
|
||||
-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.
|
||||
-g GROUP $chgrpprog installed files to GROUP.
|
||||
-m MODE $chmodprog installed files to MODE.
|
||||
-o USER $chownprog installed files to USER.
|
||||
-p pass -p to $cpprog.
|
||||
-s $stripprog installed files.
|
||||
-S SUFFIX attempt to back up existing files, with suffix SUFFIX.
|
||||
-t DIRECTORY install into DIRECTORY.
|
||||
-T report an error if DSTFILE is a directory.
|
||||
|
||||
Environment variables override the default commands:
|
||||
CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
|
||||
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
|
||||
|
@ -137,8 +152,13 @@ while test $# -ne 0; do
|
|||
-o) chowncmd="$chownprog $2"
|
||||
shift;;
|
||||
|
||||
-p) cpprog="$cpprog -p";;
|
||||
|
||||
-s) stripcmd=$stripprog;;
|
||||
|
||||
-S) backupsuffix="$2"
|
||||
shift;;
|
||||
|
||||
-t)
|
||||
is_target_a_directory=always
|
||||
dst_arg=$2
|
||||
|
@ -255,6 +275,10 @@ do
|
|||
dstdir=$dst
|
||||
test -d "$dstdir"
|
||||
dstdir_status=$?
|
||||
# Don't chown directories that already exist.
|
||||
if test $dstdir_status = 0; then
|
||||
chowncmd=""
|
||||
fi
|
||||
else
|
||||
|
||||
# Waiting for this to be detected by the "$cpprog $src $dsttmp" command
|
||||
|
@ -301,22 +325,6 @@ do
|
|||
if test $dstdir_status != 0; then
|
||||
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.
|
||||
# Otherwise, rely on $mkdir_umask.
|
||||
if test -n "$dir_arg"; then
|
||||
|
@ -326,52 +334,49 @@ do
|
|||
fi
|
||||
|
||||
posix_mkdir=false
|
||||
case $umask in
|
||||
*[123567][0-7][0-7])
|
||||
# POSIX mkdir -p sets u+wx bits regardless of umask, which
|
||||
# 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-$$
|
||||
# The $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
|
||||
# directly in world-writeable /tmp, make sure that the '$tmpdir'
|
||||
# directory is successfully created first before we actually test
|
||||
# 'mkdir -p' feature.
|
||||
if (umask $mkdir_umask &&
|
||||
$mkdirprog $mkdir_mode "$tmpdir" &&
|
||||
exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1
|
||||
then
|
||||
if test -z "$dir_arg" || {
|
||||
# Check for POSIX incompatibilities with -m.
|
||||
# HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
|
||||
# other-writable bit of parent directory when it shouldn't.
|
||||
# FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
|
||||
test_tmpdir="$tmpdir/a"
|
||||
ls_ld_tmpdir=`ls -ld "$test_tmpdir"`
|
||||
case $ls_ld_tmpdir in
|
||||
d????-?r-*) different_mode=700;;
|
||||
d????-?--*) different_mode=755;;
|
||||
*) false;;
|
||||
esac &&
|
||||
$mkdirprog -m$different_mode -p -- "$test_tmpdir" && {
|
||||
ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"`
|
||||
test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
|
||||
}
|
||||
}
|
||||
then posix_mkdir=:
|
||||
fi
|
||||
rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir"
|
||||
else
|
||||
# Remove any dirs left behind by ancient mkdir implementations.
|
||||
rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null
|
||||
fi
|
||||
trap '' 0;;
|
||||
esac;;
|
||||
# Because "mkdir -p" follows existing symlinks and we likely work
|
||||
# directly in world-writeable /tmp, make sure that the '$tmpdir'
|
||||
# directory is successfully created first before we actually test
|
||||
# 'mkdir -p'.
|
||||
if (umask $mkdir_umask &&
|
||||
$mkdirprog $mkdir_mode "$tmpdir" &&
|
||||
exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1
|
||||
then
|
||||
if test -z "$dir_arg" || {
|
||||
# Check for POSIX incompatibilities with -m.
|
||||
# HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
|
||||
# other-writable bit of parent directory when it shouldn't.
|
||||
# FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
|
||||
test_tmpdir="$tmpdir/a"
|
||||
ls_ld_tmpdir=`ls -ld "$test_tmpdir"`
|
||||
case $ls_ld_tmpdir in
|
||||
d????-?r-*) different_mode=700;;
|
||||
d????-?--*) different_mode=755;;
|
||||
*) false;;
|
||||
esac &&
|
||||
$mkdirprog -m$different_mode -p -- "$test_tmpdir" && {
|
||||
ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"`
|
||||
test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
|
||||
}
|
||||
}
|
||||
then posix_mkdir=:
|
||||
fi
|
||||
rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir"
|
||||
else
|
||||
# Remove any dirs left behind by ancient mkdir implementations.
|
||||
rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null
|
||||
fi
|
||||
trap '' 0;;
|
||||
esac
|
||||
|
||||
if
|
||||
|
@ -382,7 +387,7 @@ do
|
|||
then :
|
||||
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
|
||||
# directory the slow way, step by step, checking for races as we go.
|
||||
|
||||
|
@ -411,7 +416,7 @@ do
|
|||
prefixes=
|
||||
else
|
||||
if $posix_mkdir; then
|
||||
(umask=$mkdir_umask &&
|
||||
(umask $mkdir_umask &&
|
||||
$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
|
||||
# Don't fail if two instances are running concurrently.
|
||||
test -d "$prefix" || exit 1
|
||||
|
@ -488,6 +493,13 @@ do
|
|||
then
|
||||
rm -f "$dsttmp"
|
||||
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.
|
||||
$doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
|
||||
|
||||
|
@ -502,9 +514,9 @@ do
|
|||
# file should still install successfully.
|
||||
{
|
||||
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 $rmcmd -f "$rmtmp" 2>/dev/null; :; }
|
||||
{ $doit $rmcmd "$rmtmp" 2>/dev/null; :; }
|
||||
} ||
|
||||
{ echo "$0: cannot unlink or rename $dst" >&2
|
||||
(exit 1); exit 1
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
|
||||
PROGRAM=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
|
||||
|
||||
|
||||
|
@ -2141,7 +2141,7 @@ include the following information:
|
|||
compiler: $LTCC
|
||||
compiler flags: $LTCFLAGS
|
||||
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`
|
||||
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
|
||||
# target defaults to 10.4. Don't you love it?
|
||||
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' ;;
|
||||
10.[[012]][[,.]]*)
|
||||
_lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
|
||||
10.*)
|
||||
10.*|11.*)
|
||||
_lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
|
||||
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@
|
||||
|
||||
# Copyright (C) 1994-2020 Free Software Foundation, Inc.
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#
|
||||
# List of readers supported by the CCID driver
|
||||
# Generated: 2020-06-25
|
||||
# Generated: 2021-01-20
|
||||
#
|
||||
# DO NOT EDIT BY HAND
|
||||
|
||||
|
@ -19,7 +19,6 @@
|
|||
|
||||
# Alcor Micro
|
||||
0x058F:0x9520:Alcor Micro AU9520
|
||||
0x058F:0x9540:Alcor Micro AU9560
|
||||
|
||||
# Athena
|
||||
0x0DC3:0x1004:Athena ASE IIIe
|
||||
|
@ -135,6 +134,7 @@
|
|||
0x072F:0x223B:ACS ACR1252 Dual Reader
|
||||
0x072F:0x223E:ACS ACR1252 Reader
|
||||
0x072F:0x223F:ACS ACR1255U-J1
|
||||
0x072F:0x2259:ACS ACR1252IMP Reader
|
||||
0x072F:0x8201:ACS APG8201 PINhandy 1
|
||||
0x072F:0x8202:ACS APG8201 USB Reader
|
||||
0x072F:0x8300:ACS ACR33 ICC Reader
|
||||
|
@ -142,6 +142,7 @@
|
|||
0x072F:0xB000:ACS ACR3901U ICC Reader
|
||||
0x072F:0xB100:ACS ACR39U ICC Reader
|
||||
0x072F:0xB106:ACS CryptoMate (T2)
|
||||
0x072F:0xB112:ACS CryptoMate EVO
|
||||
|
||||
# AF Care
|
||||
0x1C34:0xAFC0:AF Care One
|
||||
|
@ -159,6 +160,7 @@
|
|||
# Aktiv
|
||||
0x0A89:0x0025:Aktiv Rutoken lite
|
||||
0x0A89:0x0030:Aktiv Rutoken ECP
|
||||
0x0A89:0x0069:Aktiv Rutoken SCR 3001 Reader
|
||||
0x0A89:0x0080:Aktiv PINPad Ex
|
||||
0x0A89:0x0081:Aktiv PINPad In
|
||||
0x0A89:0x0082:Aktiv Rutoken PINPad 2
|
||||
|
@ -214,6 +216,8 @@
|
|||
0x15CF:0x0019:Avtor SecureToken
|
||||
0x15CF:0x001D:Avtor SC Reader 371
|
||||
0x15CF:0x0020:Avtor SecureToken
|
||||
0x096E:0x0608:Avtor SC Reader KP382
|
||||
0x096E:0x0624:Avtor KP-375BLE
|
||||
|
||||
# Axalto
|
||||
0x04E6:0x511C:Axalto Reflex USB v3
|
||||
|
@ -231,6 +235,7 @@
|
|||
0x25DD:0x2321:Bit4id CKey4
|
||||
0x25DD:0x2341:Bit4id tokenME FIPS v3
|
||||
0x25DD:0x2351:Bit4id Digital DNA Key
|
||||
0x25DD:0x2354:Bit4id Digital-DNA Key
|
||||
0x25DD:0x2361:Bit4id Digital-DNA Key BT
|
||||
0x25DD:0x2362:Bit4id Digital-DNA Key
|
||||
0x25DD:0x2371:Bit4id TokenME EVO v2
|
||||
|
@ -238,6 +243,10 @@
|
|||
0x25DD:0x3211:Bit4id miniLector AIR EVO
|
||||
0x25DD:0xB001:Bit4id miniLector Blue
|
||||
|
||||
# BIT4ID
|
||||
0x25DD:0x3403:BIT4ID miniLector AIR NFC v3
|
||||
0x25DD:0x3503:BIT4ID mLector AIR DI V3
|
||||
|
||||
# Bluink Ltd.
|
||||
0x2ABE:0x1003:Bluink Ltd. Bluink CCID
|
||||
|
||||
|
@ -261,6 +270,9 @@
|
|||
0x0783:0x0010:C3PO LTC32
|
||||
0x0783:0x0036:C3PO LTC36
|
||||
|
||||
# Canokeys
|
||||
0x20A0:0x42D4:Canokeys Canokey
|
||||
|
||||
# CASTLES
|
||||
0x0CA6:0x00A0:CASTLES EZCCID Smart Card Reader
|
||||
|
||||
|
@ -302,6 +314,10 @@
|
|||
# DC.Ltd
|
||||
0x257B:0xC305:DC.Ltd DC4 5CCID READER
|
||||
|
||||
# DESKO GmbH
|
||||
0x1AC2:0x0300:DESKO GmbH IDenty chrom
|
||||
0x1AC2:0x0302:DESKO GmbH PENTA Scanner
|
||||
|
||||
# Doctolib
|
||||
0x1C34:0xAFD0:Doctolib SR
|
||||
0x1C34:0xAFD1:Doctolib SR
|
||||
|
@ -325,20 +341,20 @@
|
|||
# F-Secure Foundry
|
||||
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
|
||||
0x096E:0x0619:FEITIAN iR301
|
||||
0x096E:0x061A:FEITIAN bR301
|
||||
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
|
||||
0x096E:0x0505:Feitian Technologies FT SCR310
|
||||
|
||||
|
@ -351,6 +367,10 @@
|
|||
0x096E:0x0855:FT CCID KB
|
||||
0x096E:0x0856:FT U2F 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
|
||||
0x0BF8:0x1022:Fujitsu Keyboard KB100 SCR
|
||||
|
@ -407,6 +427,9 @@
|
|||
# GoldKey Security
|
||||
0x19C8:0x0012:GoldKey Security PIV Token
|
||||
|
||||
# GoTrust
|
||||
0x32A3:0x3201:GoTrust Idem Key
|
||||
|
||||
# HDZB
|
||||
0x1677:0x0025:HDZB uKeyCI800-K18
|
||||
|
||||
|
@ -448,6 +471,7 @@
|
|||
0x0B81:0x0220:id3 Semiconductors CL1356A_HID
|
||||
|
||||
# Identiv
|
||||
0x04E6:0x5612:Identiv uTrust 3720 Contactless Reader
|
||||
0x04E6:0x5713:Identiv CLOUD 2980 F Smart Card Reader
|
||||
0x04E6:0x5724:Identiv Identiv uTrust 4701 F Dual Interface Reader
|
||||
0x04E6:0x5790:Identiv uTrust 3700 F CL Reader
|
||||
|
@ -715,6 +739,9 @@
|
|||
0x08DF:0x3117:Spyrus Inc WorkSafe Pro
|
||||
0x08DF:0x3201:Spyrus Inc PocketVault P-3X
|
||||
|
||||
# Sunrex
|
||||
0x05AF:0x605A:Sunrex HP USB Business Slim Smartcard CCID Keyboard
|
||||
|
||||
# Swissbit
|
||||
0x1370:0x0901:Swissbit Secure USB PU-50n SE/PE
|
||||
|
||||
|
@ -724,6 +751,9 @@
|
|||
# Sysking
|
||||
0x0E6A:0x5083:Sysking MII136C
|
||||
|
||||
# sysmocom - s.f.m.c. GmbH
|
||||
0x1D50:0x6141:sysmocom - s.f.m.c. GmbH sysmoOCTSIM
|
||||
|
||||
# Teridian Semiconductors
|
||||
0x1862:0x0000:Teridian Semiconductors TSC12xxFV.09
|
||||
|
||||
|
@ -812,6 +842,7 @@
|
|||
# Aladdin
|
||||
|
||||
# Alcor Micro
|
||||
0x058F:0x9540:Alcor Micro AU9540
|
||||
|
||||
# Athena
|
||||
0x0DC3:0x100F:Athena IDProtect Flash
|
||||
|
@ -966,6 +997,15 @@
|
|||
#0x08E6:0x34C0:Gemalto Ezio Shield (Gemalto_Ezio_Shield.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_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
|
||||
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.
|
||||
ENV{ID_USB_INTERFACES}==":0b0000:", TEST=="power/control", ATTR{power/control}="auto"
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
<key>CFBundleExecutable</key>
|
||||
<string>MAGIC_TARGET</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>org.debian.alioth.pcsclite.smartcardccid</string>
|
||||
<string>fr.apdu.ccid.smartcardccid</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
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@
|
||||
|
||||
# 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;
|
||||
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);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
} /* ccid_error */
|
||||
|
||||
|
|
|
@ -92,6 +92,11 @@ typedef struct
|
|||
*/
|
||||
int cardProtocol;
|
||||
|
||||
/*
|
||||
* Reader protocols
|
||||
*/
|
||||
int dwProtocols;
|
||||
|
||||
/*
|
||||
* 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);
|
||||
|
||||
/* 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 */
|
||||
#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.bVoltageSupport = 0x07; /* 1.8V, 3V and 5V */
|
||||
serialDevice[reader_index].ccid.gemalto_firmware_features = NULL;
|
||||
serialDevice[reader_index].ccid.dwProtocols = SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1;
|
||||
#ifdef ENABLE_ZLP
|
||||
serialDevice[reader_index].ccid.zlp = FALSE;
|
||||
#endif
|
||||
|
|
|
@ -727,6 +727,7 @@ again:
|
|||
usbDevice[reader_index].ccid.bVoltageSupport = device_descriptor[5];
|
||||
usbDevice[reader_index].ccid.sIFD_serial_number = NULL;
|
||||
usbDevice[reader_index].ccid.gemalto_firmware_features = NULL;
|
||||
usbDevice[reader_index].ccid.dwProtocols = dw2i(device_descriptor, 6);
|
||||
#ifdef ENABLE_ZLP
|
||||
usbDevice[reader_index].ccid.zlp = FALSE;
|
||||
#endif
|
||||
|
@ -908,7 +909,7 @@ read_again:
|
|||
DEBUG_XXD(debug_header, buffer, *length);
|
||||
|
||||
#define BSEQ_OFFSET 6
|
||||
if ((*length >= BSEQ_OFFSET)
|
||||
if ((*length >= BSEQ_OFFSET +1)
|
||||
&& (buffer[BSEQ_OFFSET] < *ccid_descriptor->pbSeq -1))
|
||||
{
|
||||
duplicate_frame++;
|
||||
|
@ -1451,7 +1452,8 @@ static void *Multi_PollingProc(void *p_ext)
|
|||
if (NULL == transfer)
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -1467,7 +1469,8 @@ static void *Multi_PollingProc(void *p_ext)
|
|||
if (rv)
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -1479,7 +1482,8 @@ static void *Multi_PollingProc(void *p_ext)
|
|||
rv = libusb_handle_events_completed(ctx, &completed);
|
||||
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)
|
||||
continue;
|
||||
|
@ -1579,9 +1583,10 @@ static void *Multi_PollingProc(void *p_ext)
|
|||
|
||||
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].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 */
|
||||
|
|
|
@ -195,21 +195,24 @@ RESPONSECODE CmdPowerOn(unsigned int reader_index, unsigned int * nlength,
|
|||
check_again:
|
||||
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 */
|
||||
}
|
||||
|
||||
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 */
|
||||
}
|
||||
|
||||
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 */
|
||||
goto check_again;
|
||||
|
||||
/* do not (infinite) loop if bVoltageSupport == 0 */
|
||||
if (bVoltageSupport)
|
||||
goto check_again;
|
||||
}
|
||||
}
|
||||
init_voltage = voltage;
|
||||
|
@ -232,7 +235,7 @@ again:
|
|||
res = ReadPort(reader_index, nlength, buffer);
|
||||
CHECK_STATUS(res)
|
||||
|
||||
if (*nlength < STATUS_OFFSET+1)
|
||||
if (*nlength < CCID_RESPONSE_HEADER_SIZE)
|
||||
{
|
||||
DEBUG_CRITICAL2("Not enough data received: %d bytes", *nlength);
|
||||
return IFD_COMMUNICATION_ERROR;
|
||||
|
@ -286,11 +289,12 @@ again:
|
|||
|
||||
/* extract the ATR */
|
||||
atr_len = dw2i(buffer, 1); /* ATR length */
|
||||
if (atr_len > *nlength)
|
||||
atr_len = *nlength;
|
||||
if (atr_len > *nlength - 10)
|
||||
atr_len = *nlength - 10;
|
||||
else
|
||||
*nlength = atr_len;
|
||||
|
||||
/* the buffer length should be 10 + MAX_ATR_SIZE */
|
||||
memmove(buffer, buffer+10, atr_len);
|
||||
|
||||
return return_value;
|
||||
|
@ -994,7 +998,7 @@ time_request:
|
|||
goto end;
|
||||
}
|
||||
|
||||
if (length_out < STATUS_OFFSET+1)
|
||||
if (length_out < CCID_RESPONSE_HEADER_SIZE)
|
||||
{
|
||||
free(cmd_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);
|
||||
CHECK_STATUS(res)
|
||||
|
||||
if (length < STATUS_OFFSET+1)
|
||||
if (length < CCID_RESPONSE_HEADER_SIZE)
|
||||
{
|
||||
DEBUG_CRITICAL2("Not enough data received: %d bytes", length);
|
||||
return IFD_COMMUNICATION_ERROR;
|
||||
|
@ -1182,7 +1186,7 @@ again_status:
|
|||
if (PROTOCOL_ICCD_B == ccid_descriptor->bInterfaceProtocol)
|
||||
{
|
||||
int r;
|
||||
unsigned char buffer_tmp[3];
|
||||
unsigned char buffer_tmp[3] = {0, 2, 0};
|
||||
|
||||
/* SlotStatus */
|
||||
r = ControlUSB(reader_index, 0xA1, 0x81, 0, buffer_tmp,
|
||||
|
@ -1232,7 +1236,7 @@ again_status:
|
|||
res = ReadPort(reader_index, &length, buffer);
|
||||
CHECK_STATUS(res)
|
||||
|
||||
if (length < STATUS_OFFSET+1)
|
||||
if (length < CCID_RESPONSE_HEADER_SIZE)
|
||||
{
|
||||
DEBUG_CRITICAL2("Not enough data received: %d bytes", length);
|
||||
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[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);
|
||||
CHECK_STATUS(ret)
|
||||
|
@ -1523,7 +1528,7 @@ time_request:
|
|||
ccid_descriptor -> readTimeout = old_timeout;
|
||||
CHECK_STATUS(ret)
|
||||
|
||||
if (length < STATUS_OFFSET+1)
|
||||
if (length < CCID_RESPONSE_HEADER_SIZE)
|
||||
{
|
||||
DEBUG_CRITICAL2("Not enough data received: %d bytes", length);
|
||||
return IFD_COMMUNICATION_ERROR;
|
||||
|
@ -1553,6 +1558,12 @@ time_request:
|
|||
case 0xFD: /* Parity error during exchange */
|
||||
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:
|
||||
return IFD_COMMUNICATION_ERROR;
|
||||
}
|
||||
|
@ -1595,7 +1606,8 @@ time_request:
|
|||
return_value = IFD_COMMUNICATION_ERROR;
|
||||
}
|
||||
else
|
||||
memcpy(rx_buffer, cmd+10, length);
|
||||
if (length)
|
||||
memcpy(rx_buffer, cmd+10, length);
|
||||
|
||||
/* Extended case?
|
||||
* 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);
|
||||
|
||||
if (proc_len > 0x20000)
|
||||
return IFD_COMMUNICATION_ERROR;
|
||||
|
||||
if (is_rcv == 1)
|
||||
{ /* Receiving mode */
|
||||
unsigned int remain_len;
|
||||
|
@ -1948,6 +1963,12 @@ static RESPONSECODE T0ProcACK(unsigned int reader_index,
|
|||
if (return_value != IFD_SUCCESS)
|
||||
return return_value;
|
||||
|
||||
if (proc_len > *snd_len)
|
||||
{
|
||||
DEBUG_CRITICAL("proc_len > snd_len");
|
||||
return IFD_COMMUNICATION_ERROR;
|
||||
}
|
||||
|
||||
*snd_len -= proc_len;
|
||||
*snd_buf += proc_len;
|
||||
}
|
||||
|
@ -2280,7 +2301,7 @@ RESPONSECODE SetParameters(unsigned int reader_index, char protocol,
|
|||
res = ReadPort(reader_index, &length, cmd);
|
||||
CHECK_STATUS(res)
|
||||
|
||||
if (length < STATUS_OFFSET+1)
|
||||
if (length < CCID_RESPONSE_HEADER_SIZE)
|
||||
{
|
||||
DEBUG_CRITICAL2("Not enough data received: %d bytes", length);
|
||||
return IFD_COMMUNICATION_ERROR;
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
#define STATUS_OFFSET 7
|
||||
#define ERROR_OFFSET 8
|
||||
#define CHAIN_PARAMETER_OFFSET 9
|
||||
#define CCID_RESPONSE_HEADER_SIZE 10
|
||||
|
||||
RESPONSECODE CmdPowerOn(unsigned int reader_index, unsigned int * nlength,
|
||||
/*@out@*/ unsigned char buffer[], int voltage);
|
||||
|
|
|
@ -140,6 +140,9 @@ static RESPONSECODE CreateChannelByNameOrChannel(DWORD Lun,
|
|||
else
|
||||
CcidSlots[reader_index].readerName = strdup("no name");
|
||||
|
||||
/* init T=1 structure just in case */
|
||||
t1_init(&CcidSlots[reader_index].t1, reader_index);
|
||||
|
||||
if (lpcDevice)
|
||||
ret = OpenPortByName(reader_index, lpcDevice);
|
||||
else
|
||||
|
@ -147,11 +150,16 @@ static RESPONSECODE CreateChannelByNameOrChannel(DWORD Lun,
|
|||
|
||||
if (ret != STATUS_SUCCESS)
|
||||
{
|
||||
DEBUG_CRITICAL("failed");
|
||||
if (STATUS_NO_SUCH_DEVICE == ret)
|
||||
{
|
||||
DEBUG_INFO1("failed");
|
||||
return_value = IFD_NO_SUCH_DEVICE;
|
||||
}
|
||||
else
|
||||
{
|
||||
DEBUG_CRITICAL("failed");
|
||||
return_value = IFD_COMMUNICATION_ERROR;
|
||||
}
|
||||
|
||||
goto error;
|
||||
}
|
||||
|
@ -723,6 +731,14 @@ EXTERNAL RESPONSECODE IFDHSetProtocolParameters(DWORD Lun, DWORD Protocol,
|
|||
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 */
|
||||
atr_ret = ATR_InitFromArray(&atr, ccid_slot->pcATRBuffer,
|
||||
ccid_slot->nATRLength);
|
||||
|
@ -943,7 +959,8 @@ EXTERNAL RESPONSECODE IFDHSetProtocolParameters(DWORD Lun, DWORD Protocol,
|
|||
}
|
||||
|
||||
/* 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) */
|
||||
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,
|
||||
0xC1, 0x73, 0xC0, 0x01, 0x00, 0x00, 0x90, 0x00, 0xB1 };
|
||||
|
||||
if (0 == memcmp(ccid_slot->pcATRBuffer, openpgp_atr,
|
||||
ccid_slot->nATRLength))
|
||||
if ((ccid_slot->nATRLength == sizeof openpgp_atr)
|
||||
&& (0 == memcmp(ccid_slot->pcATRBuffer, openpgp_atr, ccid_slot->nATRLength)))
|
||||
/* change BWI from 4 to 7 to increase BWT from
|
||||
* 1.4s to 11s and avoid a timeout during on
|
||||
* board key generation (bogus card) */
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
#include <string.h>
|
||||
#endif
|
||||
|
||||
#include <openct/buffer.h>
|
||||
#include "buffer.h"
|
||||
|
||||
void
|
||||
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;
|
||||
|
||||
/* See CCID 3.7.2 page 25 */
|
||||
/* See CCID 5.3.2 page 24 */
|
||||
n = libusb_control_transfer(handle,
|
||||
0xA1, /* request type */
|
||||
0x02, /* GET CLOCK FREQUENCIES */
|
||||
|
@ -461,7 +461,7 @@ static int ccid_parse_interface_descriptor(libusb_device_handle *handle,
|
|||
{
|
||||
int n;
|
||||
|
||||
/* See CCID 3.7.3 page 25 */
|
||||
/* See CCID 5.3.3 page 24 */
|
||||
n = libusb_control_transfer(handle,
|
||||
0xA1, /* request type */
|
||||
0x03, /* GET DATA RATES */
|
||||
|
|
|
@ -98,7 +98,9 @@ PPS_Match (BYTE * request, unsigned len_request, BYTE * confirm, unsigned len_co
|
|||
return FALSE;
|
||||
|
||||
/* 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 TRUE;
|
||||
|
|
Loading…
Reference in New Issue