diff -Nru yubico-piv-tool-1.6.2/ChangeLog yubico-piv-tool-1.7.0/ChangeLog --- yubico-piv-tool-1.6.2/ChangeLog 2018-09-14 07:33:28.000000000 +0000 +++ yubico-piv-tool-1.7.0/ChangeLog 2019-04-03 07:53:53.000000000 +0000 @@ -1,3 +1,156 @@ +2019-04-03 Klas Lindfors + + * NEWS, configure.ac: NEWS for 1.7.0 + +2019-04-03 Klas Lindfors + + * : commit 7b64528cf7ba87e803a3ed29c8ca877e88796e24 Author: Dave + Pate Date: Tue Jan 22 13:59:06 2019 -0800 + +2019-01-22 Dave Pate + + * lib/internal.h, lib/ykpiv.c: lib: tlv length buffer checks + +2019-01-22 Dave Pate + + * lib/util.c: lib: handle realloc failures safely + +2019-01-22 Dave Pate + + * lib/util.c: lib: clear secrets in set_protected_mgm + +2019-01-22 Dave Pate + + * lib/ykpiv.c: lib: clear secrets in ykpiv_import_private_key + +2019-01-21 Dave Pate + + * lib/internal.h, lib/util.c: lib: correct zero memory defines, + correct overflow checks in _write_certificate + +2019-01-17 Dave Pate + + * lib/ykpiv.c: lib: clear secrets in auth api + +2019-01-17 Dave Pate + + * lib/ykpiv.c: lib: check that serial/version checks occur during + select + +2019-01-07 Dave Pate + + * lib/internal.c, lib/internal.h, lib/ykpiv.c: lib: define constant + for max pin len magic numbers lib: clear pin buffers when no longer + used + +2019-01-07 Dave Pate + + * lib/ykpiv.c: lib: check internal authentication crypt errors + +2019-01-07 Dave Pate + + * lib/internal.c, lib/ykpiv.c: lib: clear buffers containing key + material + +2019-01-07 Dave Pate + + * lib/internal.h, lib/util.c: lib: use secure zero memory platform + functions + +2019-01-07 Dave Pate + + * lib/util.c, lib/ykpiv.c: lib: resolves potential reads of + uninitialized data + +2019-03-06 pedro martelletto + + * doc/YubiKey_PIV_introduction.adoc: doc: set LC_CTYPE=C; fixes + ef81d164 on MacOS + +2019-03-06 Alessio Di Mauro + + * : Merge pull request #187 from Yubico/pvs_remove_warnings Remove some warnings + +2019-03-06 Gabriel Kihlman + + * ykcs11/ykcs11.c: Do not assign variable twice + +2019-03-06 Gabriel Kihlman + + * ykcs11/ykcs11.c: Remove duplicate check on op_info.type != + YKCS11_SIGN + +2019-03-05 Klas Lindfors + + * : commit ef81d1646536d5d9f2056cdc78a4a1052e8851a7 Author: pedro + martelletto Date: Tue Mar 5 07:58:09 2019 +0100 + +2019-02-20 Alessio Di Mauro + + * : Merge PR#184 + +2019-02-18 Klas Lindfors + + * windows.mk: bump openssl version and don't include check binaries + +2019-02-15 Alessio Di Mauro + + * : Merge PR#183 + +2019-02-15 Alessio Di Mauro + + * : Merge PR #182 + +2019-01-07 Alessio Di Mauro + + * ykcs11/ykcs11.c: ykcs11: use a large enough buffer when writing EC + signatures + +2019-01-02 Klas Lindfors + + * : commit 811ddbb22d293aea6508d69bb7b98d8386fc8071 Author: Stacey + Sheldon Date: Tue Jan 1 01:43:51 2019 + -0500 + +2019-01-01 Stacey Sheldon + + * tools/fasc.pl: FASC-N: correct encoding of the packed 4-bit + decimal format with odd parity The BCD digits in the FASC-N credential are sent lsb first followed + by an odd parity. Since this perl script is simply packing the bits + in their expected order, the encodings should exactly match figure 7 + in "Technical Implementation Guidance: Smart Card Enabled Physical + Access Control Systems Version 2.2". + +2018-12-18 Klas Lindfors + + * tools/fasc.pl: fix fasc-n value of 1 relates #177 + +2018-09-21 Klas Lindfors + + * : commit 898b85821cbfa2c0b841e46d39a45b42e9891bfd Author: Klas + Lindfors Date: Tue Sep 18 08:38:57 2018 +0200 + +2018-09-14 Dave Pate + + * configure.ac, lib/internal.c, lib/internal.h, lib/util.c, + lib/ykpiv.c, lib/ykpiv.h, lib/ykpiv.map, tool/yubico-piv-tool.c: + libykpiv/piv-tool 1.6.3 lib: promote get_serial to base API lib: add + ykpiv_get_serial to external API tool: add serial number/version to + status command build: fix msvc build of case insensitive-reader + (missing strncasecmp and cast warnings) lib: consolidate neo/yk4 + + yk5 serial number routines lib: fix GCC 8 compilier warnings lib: + reimplement deauthenticate to select mgmt aid build: disable + -Waggregate-return lib: fix warning differences between gcc and msvc + lib: add option to disable implicit card transactions lib: remove + application reselect prior to crypt operations build: fix msvc + warnings wrt length checking logic fixes lib: fix error condition + logic in untransacted internal functions lib: create internal + transactionless ykpiv_transfer_data + +2018-09-14 Klas Lindfors + + * NEWS, configure.ac: bump version to 1.6.3 + 2018-09-14 Klas Lindfors * NEWS: NEWS for 1.6.2 diff -Nru yubico-piv-tool-1.6.2/configure yubico-piv-tool-1.7.0/configure --- yubico-piv-tool-1.6.2/configure 2018-09-14 07:21:38.000000000 +0000 +++ yubico-piv-tool-1.7.0/configure 2019-04-03 07:53:50.000000000 +0000 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for yubico-piv-tool 1.6.2. +# Generated by GNU Autoconf 2.69 for yubico-piv-tool 1.7.0. # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. @@ -587,8 +587,8 @@ # Identity of this package. PACKAGE_NAME='yubico-piv-tool' PACKAGE_TARNAME='yubico-piv-tool' -PACKAGE_VERSION='1.6.2' -PACKAGE_STRING='yubico-piv-tool 1.6.2' +PACKAGE_VERSION='1.7.0' +PACKAGE_STRING='yubico-piv-tool 1.7.0' PACKAGE_BUGREPORT='' PACKAGE_URL='' @@ -1430,7 +1430,7 @@ # 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 yubico-piv-tool 1.6.2 to adapt to many kinds of systems. +\`configure' configures yubico-piv-tool 1.7.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1501,7 +1501,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of yubico-piv-tool 1.6.2:";; + short | recursive ) echo "Configuration of yubico-piv-tool 1.7.0:";; esac cat <<\_ACEOF @@ -1649,7 +1649,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -yubico-piv-tool configure 1.6.2 +yubico-piv-tool configure 1.7.0 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2014,7 +2014,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by yubico-piv-tool $as_me 1.6.2, which was +It was created by yubico-piv-tool $as_me 1.7.0, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2397,11 +2397,11 @@ # Interfaces changed/added/removed: CURRENT++ REVISION=0 # Interfaces added: AGE++ # Interfaces removed: AGE=0 -LT_CURRENT=5 +LT_CURRENT=6 -LT_REVISION=4 +LT_REVISION=0 -LT_AGE=4 +LT_AGE=5 am__api_version='1.15' @@ -2890,7 +2890,7 @@ # Define the identity of the package. PACKAGE='yubico-piv-tool' - VERSION='1.6.2' + VERSION='1.7.0' cat >>confdefs.h <<_ACEOF @@ -15433,6 +15433,7 @@ nw="$nw -Wconversion" # Too many warnings for now nw="$nw -Wsuggest-attribute=pure" # Is it worth using attributes? nw="$nw -Wsuggest-attribute=const" # Is it worth using attributes? + nw="$nw -Waggregate-return" # returning structs shouldn't be a problem @@ -16435,7 +16436,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by yubico-piv-tool $as_me 1.6.2, which was +This file was extended by yubico-piv-tool $as_me 1.7.0, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -16492,7 +16493,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -yubico-piv-tool config.status 1.6.2 +yubico-piv-tool config.status 1.7.0 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff -Nru yubico-piv-tool-1.6.2/configure.ac yubico-piv-tool-1.7.0/configure.ac --- yubico-piv-tool-1.6.2/configure.ac 2018-08-17 07:45:01.000000000 +0000 +++ yubico-piv-tool-1.7.0/configure.ac 2019-04-03 07:49:28.000000000 +0000 @@ -25,7 +25,7 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -AC_INIT([yubico-piv-tool], [1.6.2]) +AC_INIT([yubico-piv-tool], [1.7.0]) AC_CONFIG_AUX_DIR([build-aux]) AC_CONFIG_MACRO_DIR([m4]) @@ -33,9 +33,9 @@ # Interfaces changed/added/removed: CURRENT++ REVISION=0 # Interfaces added: AGE++ # Interfaces removed: AGE=0 -AC_SUBST([LT_CURRENT], 5) -AC_SUBST([LT_REVISION], 4) -AC_SUBST([LT_AGE], 4) +AC_SUBST([LT_CURRENT], 6) +AC_SUBST([LT_REVISION], 0) +AC_SUBST([LT_AGE], 5) AM_INIT_AUTOMAKE([-Wall -Werror foreign]) AM_SILENT_RULES([yes]) @@ -224,6 +224,7 @@ nw="$nw -Wconversion" # Too many warnings for now nw="$nw -Wsuggest-attribute=pure" # Is it worth using attributes? nw="$nw -Wsuggest-attribute=const" # Is it worth using attributes? + nw="$nw -Waggregate-return" # returning structs shouldn't be a problem gl_MANYWARN_ALL_GCC([ws]) gl_MANYWARN_COMPLEMENT(ws, [$ws], [$nw]) diff -Nru yubico-piv-tool-1.6.2/debian/changelog yubico-piv-tool-1.7.0/debian/changelog --- yubico-piv-tool-1.6.2/debian/changelog 2018-09-25 09:40:12.000000000 +0000 +++ yubico-piv-tool-1.7.0/debian/changelog 2019-04-03 07:55:44.000000000 +0000 @@ -1,90 +1,98 @@ -yubico-piv-tool (1.6.2-1) unstable; urgency=high +yubico-piv-tool (1.7.0-1~ppa1~disco1) disco; urgency=medium - * New upstream version 1.6.2. - * Update Standards-Version from 4.2.0 to 4.2.1. + * New upstream version. + + -- Klas Lindfors Wed, 03 Apr 2019 09:55:44 +0200 + +yubico-piv-tool (1.6.2-1~ppa1~disco1) disco; urgency=medium + + * New upstream version. + + -- Klas Lindfors Fri, 14 Sep 2018 10:06:16 +0200 + +yubico-piv-tool (1.6.1-1~ppa1~disco1) disco; urgency=medium + + * New upstream version. + + -- Klas Lindfors Fri, 17 Aug 2018 09:27:54 +0200 + +yubico-piv-tool (1.5.0-1~ppa2~disco1) disco; urgency=medium + + * Fixup build-depends, now additional dependency on check. + + -- Klas Lindfors Wed, 29 Nov 2017 12:59:54 +0100 + +yubico-piv-tool (1.5.0-1~ppa1~disco1) disco; urgency=medium - -- Simon Josefsson Tue, 25 Sep 2018 11:40:12 +0200 + * New upstream version. -yubico-piv-tool (1.6.1-1) unstable; urgency=high + -- Klas Lindfors Wed, 29 Nov 2017 12:55:33 +0100 - [ Nicolas Braud-Santoni ] - * New upstream version 1.6.1 (2018-08-17) - Fixes a potential buffer overflow (CVE-2018-14779, CVE-2018-14780) - Closes: #906128 +yubico-piv-tool (1.4.4-1~ppa1~disco1) disco; urgency=medium - * Update upstream signing keys & move them to debian/upstream - * debian/copyright: Solve duplicate license in DEP-5 format - * debian/control - + Sort the Uploaders list. - + Add myself to Uploaders. - + Declare compliance with policy 4.2.0. - No change required + * New upstream version. - [ Simon Josefsson ] - * Update URLs to reflect move of dpkg git to salsa. + -- Klas Lindfors Tue, 17 Oct 2017 14:09:16 +0200 - -- Nicolas Braud-Santoni Sun, 19 Aug 2018 12:38:11 +0200 +yubico-piv-tool (1.4.3-1~ppa1~disco1) disco; urgency=medium -yubico-piv-tool (1.5.0-1) unstable; urgency=medium + * New upstream version. - * New upstream version. Closes: #810284. - - Replace libssl1.0 with libssl1.1. Closes: #859838. - - Depend on check. - * Use https URLs in debian/copyright. - * Update Standards-Version from 3.9.8 to 4.1.4. - - Priority optional instead of extra. - * Use compat level 11. - - Drop no longer needed --parallel. - - Drop no longer needed --with autoreconf. - - Drop no longer needed --disable-silent-rules. - - Drop no longer needed --builddirectory. - - Drop no longer needed dh-autoreconf. + -- Klas Lindfors Tue, 18 Apr 2017 13:14:00 +0200 - -- Simon Josefsson Mon, 11 Jun 2018 21:56:06 +0200 +yubico-piv-tool (1.4.2-1~ppa2~disco1) disco; urgency=medium -yubico-piv-tool (1.4.2-2) unstable; urgency=medium + * Fixup that ykcs11 installed without any files. - * Fix openssl 1.1 ftbfs. Closes: #828616. + -- Klas Lindfors Fri, 02 Sep 2016 08:59:54 +0200 - -- Simon Josefsson Sun, 08 Jan 2017 12:41:03 +0100 +yubico-piv-tool (1.4.2-1~ppa1~disco1) disco; urgency=medium -yubico-piv-tool (1.4.2-1) unstable; urgency=medium + * New upstream version. + + -- Klas Lindfors Fri, 12 Aug 2016 16:06:04 +0200 + +yubico-piv-tool (1.4.0-1~ppa1~disco1) disco; urgency=medium * New upstream version. - * Clarify debian/copyright wrt ykcs11/pkcs11.h. - -- Simon Josefsson Sun, 14 Aug 2016 22:28:46 +0200 + -- Klas Lindfors Tue, 03 May 2016 09:45:47 +0200 -yubico-piv-tool (1.4.1-1) unstable; urgency=medium +yubico-piv-tool (1.3.1-1~ppa1~disco1) disco; urgency=medium * New upstream version. - -- Simon Josefsson Fri, 12 Aug 2016 13:57:11 +0200 + -- Klas Lindfors Tue, 19 Apr 2016 07:42:18 +0200 + +yubico-piv-tool (1.3.0-1~ppa1~disco1) disco; urgency=medium -yubico-piv-tool (1.4.0-1) unstable; urgency=medium + * New upstream version. + + -- Klas Lindfors Fri, 19 Feb 2016 12:41:05 +0100 - [ Simon Josefsson ] - * Use https URLs in Vcs-Git. - * Update Standards-Version from 3.9.6 to 3.9.8. - * Build with hardening=+all. - * Improve package descriptions (lintian duplicate-short-description). +yubico-piv-tool (1.2.2-1~ppa1~disco1) disco; urgency=medium - [ Klas Lindfors ] - * New upstream version. Closes: #810284. + * New upstream version. - -- Simon Josefsson Thu, 04 Aug 2016 12:05:28 +0200 + -- Klas Lindfors Tue, 08 Dec 2015 14:15:29 +0100 -yubico-piv-tool (1.1.2-1) unstable; urgency=low +yubico-piv-tool (1.2.1-1~ppa1~disco1) disco; urgency=medium - * New upstram version. + * New upstream version. - -- Alessio Di Mauro Fri, 13 Nov 2015 16:16:09 +0100 + -- Klas Lindfors Tue, 08 Dec 2015 13:21:22 +0100 -yubico-piv-tool (1.1.1-1) unstable; urgency=low +yubico-piv-tool (1.2.0-1~ppa1~disco1) disco; urgency=medium * New upstream version. - -- Alessio Di Mauro Wed, 11 Nov 2015 18:58:58 +0100 + -- Klas Lindfors Mon, 07 Dec 2015 09:50:53 +0100 + +yubico-piv-tool (1.1.0-1~ppa3~disco1) disco; urgency=medium + + * PPA package with conflicts/replaces on libykpiv0 + + -- Klas Lindfors Tue, 10 Nov 2015 09:36:44 +0100 yubico-piv-tool (1.1.0-1) unstable; urgency=low diff -Nru yubico-piv-tool-1.6.2/debian/compat yubico-piv-tool-1.7.0/debian/compat --- yubico-piv-tool-1.6.2/debian/compat 2018-09-25 09:38:58.000000000 +0000 +++ yubico-piv-tool-1.7.0/debian/compat 2015-11-10 08:33:53.000000000 +0000 @@ -1 +1 @@ -11 +9 diff -Nru yubico-piv-tool-1.6.2/debian/control yubico-piv-tool-1.7.0/debian/control --- yubico-piv-tool-1.6.2/debian/control 2018-09-25 09:40:12.000000000 +0000 +++ yubico-piv-tool-1.7.0/debian/control 2017-11-29 11:59:40.000000000 +0000 @@ -1,18 +1,13 @@ Source: yubico-piv-tool Maintainer: Debian Authentication Maintainers -Uploaders: - Nicolas Braud-Santoni , - Alessio Di Mauro , - Simon Josefsson , - Klas Lindfors , - Dain Nilsson +Uploaders: Simon Josefsson , Klas Lindfors , Dain Nilsson , Alessio Di Mauro Section: utils -Priority: optional -Build-Depends: debhelper (>= 11), pkg-config, libpcsclite-dev, check, libssl-dev, gengetopt, help2man, chrpath -Standards-Version: 4.2.1 +Priority: extra +Build-Depends: debhelper (>= 9), pkg-config, libpcsclite-dev, libssl-dev, gengetopt, help2man, dh-autoreconf, chrpath, check +Standards-Version: 3.9.6 Homepage: https://developers.yubico.com/yubico-piv-tool/ -Vcs-Browser: https://salsa.debian.org/auth-team/yubico-piv-tool -Vcs-Git: https://salsa.debian.org/auth-team/yubico-piv-tool.git +Vcs-Git: https://github.com/Yubico/yubico-piv-tool-dpkg.git +Vcs-Browser: https://github.com/Yubico/yubico-piv-tool-dpkg Package: libykpiv1 Architecture: any @@ -22,12 +17,12 @@ Recommends: pcscd Replaces: libykpiv0 Conflicts: libykpiv0 -Description: Library for communication with the YubiKey PIV smartcard - The Yubico PIV tool is used for interacting with the Personal - Identity Verification Card (PIV) application on a YubiKey. With it - you may generate keys on the device, import keys and certificates, - create certificate requests, and other operations. A shared library, - a PKCS#11 module a command-line tool are included. +Description: Library for communication with the YubiKey PIV + application. The Yubico PIV tool is used for interacting with the + Personal Identity Verification Card (PIV) application on a YubiKey. + With it you may generate keys on the device, import keys and + certificates, create certificate requests, and other operations. A + shared library, a PKCS#11 module a command-line tool are included. . This package contains the run-time shared library. You normally don't need to install it manually. @@ -36,36 +31,47 @@ Architecture: any Section: libdevel Depends: ${shlibs:Depends}, ${misc:Depends}, libykpiv1 (= ${binary:Version}) -Description: Development files for the YubiKey PIV Library - The Yubico PIV tool is used for interacting with the Personal - Identity Verification Card (PIV) application on a YubiKey. With it - you may generate keys on the device, import keys and certificates, - create certificate requests, and other operations. A shared library, - a PKCS#11 module a command-line tool are included. +Description: Library for communication with the YubiKey PIV + application. The Yubico PIV tool is used for interacting with the + Personal Identity Verification Card (PIV) application on a YubiKey. + With it you may generate keys on the device, import keys and + certificates, create certificate requests, and other operations. A + shared library, a PKCS#11 module and a command-line tool are + included. . This package contains the development files for the library. -Package: yubico-piv-tool -Architecture: any -Depends: ${shlibs:Depends}, ${misc:Depends} -Description: Command line tool for the YubiKey PIV applet - The Yubico PIV tool is used for interacting with the Personal - Identity Verification Card (PIV) application on a YubiKey. With it - you may generate keys on the device, import keys and certificates, - create certificate requests, and other operations. A shared library, - a PKCS#11 module a command-line tool are included. - . - This package contains the command-line tool. - Package: ykcs11 Architecture: any Section: libs Depends: ${shlibs:Depends}, ${misc:Depends}, libykpiv1 (= ${binary:Version}) -Description: PKCS#11 module for the YubiKey PIV applet - The Yubico PIV tool is used for interacting with the Personal - Identity Verification Card (PIV) application on a YubiKey. With it - you may generate keys on the device, import keys and certificates, - create certificate requests, and other operations. A shared library, - a PKCS#11 module a command-line tool are included. +Breaks: libykcs11-1 (<< 1.4.1~) +Replaces: libykcs11-1 (<< 1.4.1~) +Description: PKCS#11 module for communication with the YubiKey PIV + application. The Yubico PIV tool is used for interacting with the + Personal Identity Verification Card (PIV) application on a YubiKey. + With it you may generate keys on the device, import keys and + certificates, create certificate requests, and other operations. A + shared library, a PKCS#11 module and a command-line tool are + included. . This package contains the PKCS#11 module. + +Package: libykcs11-1 +Architecture: all +Section: oldlibs +Depends: ykcs11, ${misc:Depends} +Description: transitional package + This is a transitional package. It can safely be removed. + +Package: yubico-piv-tool +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends} +Description: Command line tool for the YubiKey PIV application. The + Yubico PIV tool is used for interacting with the Personal Identity + Verification Card (PIV) application on a YubiKey. With it you may + generate keys on the device, import keys and certificates, create + certificate requests, and other operations. A shared library, a + PKCS#11 module and command-line tool are included. + . + This package contains the command-line tool. diff -Nru yubico-piv-tool-1.6.2/debian/copyright yubico-piv-tool-1.7.0/debian/copyright --- yubico-piv-tool-1.6.2/debian/copyright 2018-09-25 09:38:58.000000000 +0000 +++ yubico-piv-tool-1.7.0/debian/copyright 2015-11-10 08:33:53.000000000 +0000 @@ -1,31 +1,9 @@ -Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: yubico-piv-tool Source: https://developers.yubico.com/yubico-piv-tool/ Files: * -Copyright: Copyright (c) 2014-2016 Yubico AB -License: BSD-2-clause - -Files: ykcs11/pkcs11.h -Copyright: Copyright (c) 2015-2016 Yubico AB - Copyright 2006, 2007 g10 Code GmbH - Copyright 2006 Andreas Jellinghaus -License: BSD-2-clause and permissive - -License: permissive - This file is free software; as a special exception the author gives - unlimited permission to copy and/or distribute it, with or without - modifications, as long as this notice is preserved. - . - This file is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY, to the extent permitted by law; without even - the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR - PURPOSE. */ - . - * Please submit changes back to the Scute project at - http://www.scute.org/ (or send them to marcus@g10code.com), so that - they can be picked up by other projects from there as well. */ - +Copyright: Copyright (c) 2014 Yubico AB License: BSD-2-clause Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are diff -Nru yubico-piv-tool-1.6.2/debian/libykpiv1.symbols yubico-piv-tool-1.7.0/debian/libykpiv1.symbols --- yubico-piv-tool-1.6.2/debian/libykpiv1.symbols 2018-09-25 09:38:58.000000000 +0000 +++ yubico-piv-tool-1.7.0/debian/libykpiv1.symbols 2015-11-10 08:33:53.000000000 +0000 @@ -1,12 +1,7 @@ libykpiv.so.1 libykpiv1 #MINVER# YKPIV_0.1.0@YKPIV_0.1.0 0.1.0 YKPIV_0.2.0@YKPIV_0.2.0 1.0.0 - YKPIV_1.1.0@YKPIV_1.1.0 1.4.0 - YKPIV_1.2.0@YKPIV_1.2.0 1.4.0 - YKPIV_1.3.0@YKPIV_1.3.0 1.4.0 ykpiv_authenticate@YKPIV_0.1.0 0.1.0 - ykpiv_change_pin@YKPIV_1.3.0 1.4.0 - ykpiv_change_puk@YKPIV_1.3.0 1.4.0 ykpiv_check_version@YKPIV_0.1.0 0.1.0 ykpiv_connect@YKPIV_0.1.0 0.1.0 ykpiv_decipher_data@YKPIV_0.2.0 1.0.0 @@ -15,48 +10,11 @@ ykpiv_fetch_object@YKPIV_0.1.0 0.1.0 ykpiv_get_version@YKPIV_0.1.0 0.1.0 ykpiv_hex_decode@YKPIV_0.1.0 0.1.0 - ykpiv_import_private_key@YKPIV_1.2.0 1.4.0 ykpiv_init@YKPIV_0.1.0 0.1.0 - ykpiv_list_readers@YKPIV_1.1.0 1.4.0 ykpiv_save_object@YKPIV_0.1.0 0.1.0 - ykpiv_set_mgmkey2@YKPIV_1.1.0 1.4.0 ykpiv_set_mgmkey@YKPIV_0.1.0 0.1.0 ykpiv_sign_data@YKPIV_0.1.0 0.1.0 ykpiv_strerror@YKPIV_0.1.0 0.1.0 ykpiv_strerror_name@YKPIV_0.1.0 0.1.0 ykpiv_transfer_data@YKPIV_0.1.0 0.1.0 - ykpiv_unblock_pin@YKPIV_1.3.0 1.4.0 ykpiv_verify@YKPIV_0.1.0 0.1.0 - YKPIV_1.5.0@YKPIV_1.5.0 1.5.0 - ykpiv_attest@YKPIV_1.5.0 1.5.0 - ykpiv_auth_getchallenge@YKPIV_1.5.0 1.5.0 - ykpiv_auth_verifyresponse@YKPIV_1.5.0 1.5.0 - ykpiv_connect_with_external_card@YKPIV_1.5.0 1.5.0 - ykpiv_done_with_external_card@YKPIV_1.5.0 1.5.0 - ykpiv_get_pin_retries@YKPIV_1.5.0 1.5.0 - ykpiv_init_with_allocator@YKPIV_1.5.0 1.5.0 - ykpiv_set_pin_retries@YKPIV_1.5.0 1.5.0 - ykpiv_util_block_puk@YKPIV_1.5.0 1.5.0 - ykpiv_util_delete_cert@YKPIV_1.5.0 1.5.0 - ykpiv_util_devicemodel@YKPIV_1.5.0 1.5.0 - ykpiv_util_free@YKPIV_1.5.0 1.5.0 - ykpiv_util_generate_key@YKPIV_1.5.0 1.5.0 - ykpiv_util_get_cardid@YKPIV_1.5.0 1.5.0 - ykpiv_util_get_cccid@YKPIV_1.5.0 1.5.0 - ykpiv_util_get_config@YKPIV_1.5.0 1.5.0 - ykpiv_util_get_derived_mgm@YKPIV_1.5.0 1.5.0 - ykpiv_util_get_protected_mgm@YKPIV_1.5.0 1.5.0 - ykpiv_util_list_keys@YKPIV_1.5.0 1.5.0 - ykpiv_util_read_cert@YKPIV_1.5.0 1.5.0 - ykpiv_util_read_mscmap@YKPIV_1.5.0 1.5.0 - ykpiv_util_read_msroots@YKPIV_1.5.0 1.5.0 - ykpiv_util_reset@YKPIV_1.5.0 1.5.0 - ykpiv_util_set_cardid@YKPIV_1.5.0 1.5.0 - ykpiv_util_set_cccid@YKPIV_1.5.0 1.5.0 - ykpiv_util_set_pin_last_changed@YKPIV_1.5.0 1.5.0 - ykpiv_util_set_protected_mgm@YKPIV_1.5.0 1.5.0 - ykpiv_util_slot_object@YKPIV_1.5.0 1.5.0 - ykpiv_util_write_cert@YKPIV_1.5.0 1.5.0 - ykpiv_util_write_mscmap@YKPIV_1.5.0 1.5.0 - ykpiv_util_write_msroots@YKPIV_1.5.0 1.5.0 - ykpiv_verify_select@YKPIV_1.5.0 1.5.0 diff -Nru yubico-piv-tool-1.6.2/debian/rules yubico-piv-tool-1.7.0/debian/rules --- yubico-piv-tool-1.6.2/debian/rules 2018-09-25 09:38:58.000000000 +0000 +++ yubico-piv-tool-1.7.0/debian/rules 2015-11-10 08:33:53.000000000 +0000 @@ -1,9 +1,7 @@ #!/usr/bin/make -f -export DEB_BUILD_MAINT_OPTIONS = hardening=+all - %: - dh $@ + dh $@ --parallel --with autoreconf --builddirectory=build override_dh_install: chrpath -d $(CURDIR)/debian/tmp/usr/bin/* @@ -13,3 +11,6 @@ find debian/tmp -name libykcs11.a -delete find debian/tmp -name ykcs11-version.h -delete dh_install --fail-missing + +override_dh_auto_configure: + dh_auto_configure -- --disable-silent-rules diff -Nru yubico-piv-tool-1.6.2/debian/upstream/signing-key.asc yubico-piv-tool-1.7.0/debian/upstream/signing-key.asc --- yubico-piv-tool-1.6.2/debian/upstream/signing-key.asc 2018-09-25 09:38:58.000000000 +0000 +++ yubico-piv-tool-1.7.0/debian/upstream/signing-key.asc 1970-01-01 00:00:00.000000000 +0000 @@ -1,964 +0,0 @@ ------BEGIN PGP PUBLIC KEY BLOCK----- - -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 -anmp/oiwYIcL0yHQuqRp+hY+aB1CFf3+zJyZStsKnue5nIhnCG/8csxqSRmBMPYu -l/2aepF8tWIlc3yo5A8L3dY+/hKcnlo7Hvb8rEedgwgTzaNuvOVV6a4pF+LljSuw -hCq+kfK8OeJOlo9mR4UnyKnN7G36L/B6kjPkRQkEym5WzQtaT4OPbWK3QbNZhJHR -aduh0zVNUGD9bGaDQ5EX6s/TO5j//Ncq5Rmp6JucQBaMvrAiHDxg/y6iEas1T9TE -JULHOM21IbPWZO1PWbYfXbBVzweiIwJFTJ/Vo5yAXm1kCPvpQp73cgyHLqGxGRwc -NCD/y1ZLPZf/mA1NsdG2dTHxhVlurye1nT7tVlTDyJJHSrggp8vDXpmCO3Lrmlqt -80p9hKYSaZiHSNbj6WePzYL2g6lS/vd0UHVsh7I9oxNet25qpxqpU1Nnv4jjQRiG -XmVyRKx6TrHTO3Vg3pmJJpTnIeqkRJkB4QRUz5BHAQ6gp3oJdz9WyDtnxbtX7bbL -OMI6ge1taRO0S8uN83VesvGKHB3xYbcocb1DFb6h6HwKFnYOTqFonW+0lBfHIdwI -SFa0qRQdxwXfpG5wyAsU5YUqvGrpAnw/8jxBPF05wMvKQN/Qka3PDYF5DD/x34uu -Oux0X5MUKigswBOPC4uzCtPj+ji2ytJB3A7/U4wxcVz5ABGJFEeRhXKrWWSHI23l -RugufkogjPBY+iabhN6o9TBDKtKw8tSz+mD4WHKimpSj/nhRSoKh8F8w+dhL27cs -vVKW2jqRcDu5pdQ1+nJG0iGr4TGJ1YFHdHZCpVjbWbY8GHCAUn8smh4AmfMK5jD9 -LZ4tF9pUjHQUoMh1vvMsv02r8fKr64idRlPA3nd49RpMjuf8L80nnkgR41GUTzVp -6KbbXT517LAkc7PCg1Ws9GmBOv9En9ZqhjVqNmV28EPmLunXqJXmJSxF5M2Yxqzp -57R7PYTWhSPFp55T7qOhqA6VvM8mn+bTTVojEcvZWvqlknb/KkbyQASGXsvUZOhs -x5pCmndNovaa2J/wPY2oau5Z4Z4ydb+5mDMwGzMv1dGT0NbNmjefproUwpSYFKrz -ztg6HHyLk6gOxdlOIioBruVdqQURABEBAAG0HUplYW4gUGF1bCBHYWxlYSA8anBA -Z2FsZWEuc2U+iQIOBBMBCgAkAhsDCAsJCAcNDAsKBRUKCQgLAh4BAheABQJaZf72 -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 -=o33d ------END PGP PUBLIC KEY BLOCK----- diff -Nru yubico-piv-tool-1.6.2/debian/upstream/signing-key.sh yubico-piv-tool-1.7.0/debian/upstream/signing-key.sh --- yubico-piv-tool-1.6.2/debian/upstream/signing-key.sh 2018-09-25 09:38:58.000000000 +0000 +++ yubico-piv-tool-1.7.0/debian/upstream/signing-key.sh 1970-01-01 00:00:00.000000000 +0000 @@ -1,17 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -KEYS=( - 0A3B0262BCA1705307D5FF06BCA00FD4B2168C0A # Klas Lindfors - 20EE325B86A81BCBD3E56798F04367096FBA95E8 # Dain Nilsson - B70D62AA6A31AD6B9E4F9F4BDC8888925D25CA7A # Alessio Di Mauro - FF8AF719AE5828181B894D831CE39268A0973948 # Tommaso De Orchi - B6042E2BD1FDBC2BCA8588B2FF8D3B45B7B875A9 # Jean Paul Galea - 8D0B4EBA9345254BCEC0E843514F078FF4AB24C3 # Dag Heyman - 57A9DEED4C6D962A923BB691816F3ED99921835E # Emil Lundberg - 268583B64786F50F807456DA8CED3A80D41C0DCB # Trevor Bentley - EE90AE0D19774C8386628FAAB428949EF7914718 # Pedro Martelletto -) - -exec gpg --export --export-options export-minimal -a -o signing-key.asc --yes \ - "${KEYS[@]}" diff -Nru yubico-piv-tool-1.6.2/debian/upstream-signing-key.pgp yubico-piv-tool-1.7.0/debian/upstream-signing-key.pgp --- yubico-piv-tool-1.6.2/debian/upstream-signing-key.pgp 1970-01-01 00:00:00.000000000 +0000 +++ yubico-piv-tool-1.7.0/debian/upstream-signing-key.pgp 2015-11-10 08:33:53.000000000 +0000 @@ -0,0 +1,1451 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1 + +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 +=4aFG +-----END PGP PUBLIC KEY BLOCK----- diff -Nru yubico-piv-tool-1.6.2/doc/YubiKey_PIV_introduction.adoc yubico-piv-tool-1.7.0/doc/YubiKey_PIV_introduction.adoc --- yubico-piv-tool-1.6.2/doc/YubiKey_PIV_introduction.adoc 2017-10-17 08:17:18.000000000 +0000 +++ yubico-piv-tool-1.7.0/doc/YubiKey_PIV_introduction.adoc 2019-04-03 07:44:44.000000000 +0000 @@ -37,30 +37,30 @@ software will ask for key/pin to be input. For the management key option (-k) this is achieved by leaving out the value but will specifying -k. - $ key=`dd if=/dev/random bs=1 count=24 2>/dev/null | hexdump -v -e '/1 "%02X"'` - $ echo $key - $ yubico-piv-tool -aset-mgm-key -n$key + $ key=$(export LC_CTYPE=C; dd if=/dev/urandom 2>/dev/null | tr -d '[:lower:]' | tr -cd '[:xdigit:]' | fold -w48 | head -1) + $ echo ${key} + $ yubico-piv-tool -aset-mgm-key -n${key} The PIN and PUK should be changed as well. - $ pin=`dd if=/dev/random bs=1 count=6 2>/dev/null | hexdump -v -e '/1 "%u"'|cut -c1-6` - $ echo $pin + $ pin=$(export LC_CTYPE=C; dd if=/dev/urandom 2>/dev/null | tr -cd '[:digit:]' | fold -w6 | head -1) + $ echo ${pin} - $ puk=`dd if=/dev/random bs=1 count=6 2>/dev/null | hexdump -v -e '/1 "%u"'|cut -c1-8` - $ echo $puk + $ puk=$(export LC_CTYPE=C; dd if=/dev/urandom 2>/dev/null | tr -cd '[:digit:]' | fold -w8 | head -1) + $ echo ${puk} - $ yubico-piv-tool -achange-pin -P123456 -N$pin - $ yubico-piv-tool -achange-puk -P12345678 -N$puk + $ yubico-piv-tool -achange-pin -P123456 -N${pin} + $ yubico-piv-tool -achange-puk -P12345678 -N${puk} === Other useful commands To generate a new private key: - $ yubico-piv-tool -k$key -agenerate -s9c + $ yubico-piv-tool -k${key} -agenerate -s9c To reset PIN/PUK retry counter AND codes (default pin 123456 puk 12345678): - $ yubico-piv-tool -k$key -averify -P$pin -apin-retries --pin-retries=3 --puk-retries=3 + $ yubico-piv-tool -k${key} -averify -P${pin} -apin-retries --pin-retries=3 --puk-retries=3 To reset the application (PIN/PUK need to be blocked hence trying a couple of times -- you need to modify this if you have changed the default diff -Nru yubico-piv-tool-1.6.2/lib/internal.c yubico-piv-tool-1.7.0/lib/internal.c --- yubico-piv-tool-1.6.2/lib/internal.c 2018-08-09 08:23:52.000000000 +0000 +++ yubico-piv-tool-1.7.0/lib/internal.c 2019-04-03 07:47:54.000000000 +0000 @@ -241,6 +241,7 @@ EXIT: #ifdef _WINDOWS if (pbSessionBlob) { + yc_memzero(pbSessionBlob, cbSessionBlob); free(pbSessionBlob); pbSessionBlob = NULL; } @@ -304,8 +305,11 @@ #else +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wcast-qual" /* openssl returns void */ DES_ecb3_encrypt((const_DES_cblock *)in, (DES_cblock*)out, &(key->ks1), &(key->ks2), &(key->ks3), 1); +#pragma GCC diagnostic pop #endif @@ -336,8 +340,11 @@ #else +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wcast-qual" /* openssl returns void */ DES_ecb3_encrypt((const_DES_cblock*)in, (DES_cblock*)out, &(key->ks1), &(key->ks2), &(key->ks3), 0); +#pragma GCC diagnostic pop #endif @@ -347,6 +354,7 @@ bool yk_des_is_weak_key(const unsigned char *key, const size_t cb_key) { #ifdef _WINDOWS + bool rv = false; /* defined weak keys, borrowed from openssl to be consistent across platforms */ static const unsigned char weak_keys[][DES_LEN_DES] = { /* weak keys */ @@ -394,13 +402,20 @@ if ((0 == memcmp(weak_keys[i], tmp, DES_LEN_DES)) || (0 == memcmp(weak_keys[i], tmp + DES_LEN_DES, DES_LEN_DES)) || (0 == memcmp(weak_keys[i], tmp + 2*DES_LEN_DES, DES_LEN_DES))) { - return true; + rv = true; + break; } } - return false; + yc_memzero(tmp, DES_LEN_3DES); + return rv; #else + (void)cb_key; /* unused */ + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wcast-qual" return DES_is_weak_key((const_DES_cblock *)key); +#pragma GCC diagnostic pop #endif } @@ -431,7 +446,7 @@ return rc; } -pkcs5_rc pkcs5_pbkdf2_sha1(const unsigned char* password, const size_t cb_password, const unsigned char* salt, const size_t cb_salt, unsigned long long iterations, unsigned char* key, const size_t cb_key) { +pkcs5_rc pkcs5_pbkdf2_sha1(const uint8_t* password, const size_t cb_password, const uint8_t* salt, const size_t cb_salt, uint64_t iterations, const uint8_t* key, const size_t cb_key) { pkcs5_rc rc = PKCS5_OK; #ifdef _WINDOWS @@ -447,6 +462,8 @@ */ if (STATUS_SUCCESS == BCryptOpenAlgorithmProvider(&hAlg, BCRYPT_SHA1_ALGORITHM, NULL, BCRYPT_ALG_HANDLE_HMAC_FLAG)) { + /* suppress const qualifier warning b/c BCrypt doesn't take const input buffers */ +#pragma warning(suppress: 4090) if (STATUS_SUCCESS != BCryptDeriveKeyPBKDF2(hAlg, (PUCHAR)password, (ULONG)cb_password, (PUCHAR)salt, (ULONG)cb_salt, iterations, key, (ULONG)cb_key, 0)) { rc = PKCS5_GENERAL_ERROR; } @@ -459,8 +476,11 @@ #else +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wcast-qual" /* for some reason openssl always returns 1 for PBKDF2 */ - PKCS5_PBKDF2_HMAC_SHA1((const char*)password, cb_password, salt, cb_salt, iterations, cb_key, key); + PKCS5_PBKDF2_HMAC_SHA1((const char*)password, cb_password, salt, cb_salt, iterations, cb_key, (unsigned char*)key); +#pragma GCC diagnostic pop #endif @@ -491,7 +511,6 @@ #ifdef _WIN32 HKEY hKey = 0; - DWORD dwErr = 0; DWORD dwValue = 0; DWORD dwType = 0; DWORD cbValue = sizeof(dwValue); diff -Nru yubico-piv-tool-1.6.2/lib/internal.h yubico-piv-tool-1.7.0/lib/internal.h --- yubico-piv-tool-1.6.2/lib/internal.h 2018-05-08 07:52:22.000000000 +0000 +++ yubico-piv-tool-1.7.0/lib/internal.h 2019-04-03 07:47:54.000000000 +0000 @@ -126,6 +126,7 @@ #define CB_OBJ_TAG_MIN 2 // 1 byte tag + 1 byte len #define CB_OBJ_TAG_MAX (CB_OBJ_TAG_MIN + 2) // 1 byte tag + 3 bytes len +#define CB_PIN_MAX 8 #define member_size(type, member) sizeof(((type*)0)->member) typedef enum { @@ -178,21 +179,21 @@ typedef union u_APDU APDU; typedef struct des_key des_key; -extern unsigned const char aid[]; - des_rc des_import_key(const int type, const unsigned char* keyraw, const size_t keyrawlen, des_key** key); des_rc des_destroy_key(des_key* key); des_rc des_encrypt(des_key* key, const unsigned char* in, const size_t inlen, unsigned char* out, size_t* outlen); des_rc des_decrypt(des_key* key, const unsigned char* in, const size_t inlen, unsigned char* out, size_t* outlen); -pkcs5_rc pkcs5_pbkdf2_sha1(const unsigned char* password, const size_t cb_password, const unsigned char* salt, const size_t cb_salt, unsigned long long iterations, unsigned char* key, const size_t cb_key); +pkcs5_rc pkcs5_pbkdf2_sha1(const uint8_t* password, const size_t cb_password, const uint8_t* salt, const size_t cb_salt, uint64_t iterations, const uint8_t* key, const size_t cb_key); bool yk_des_is_weak_key(const unsigned char *key, const size_t cb_key); prng_rc _ykpiv_prng_generate(unsigned char *buffer, const size_t cb_req); ykpiv_rc _ykpiv_begin_transaction(ykpiv_state *state); ykpiv_rc _ykpiv_end_transaction(ykpiv_state *state); ykpiv_rc _ykpiv_ensure_application_selected(ykpiv_state *state); -int _ykpiv_set_length(unsigned char *buffer, size_t length); -int _ykpiv_get_length(const unsigned char *buffer, size_t *len); +ykpiv_rc _ykpiv_select_application(ykpiv_state *state); +unsigned int _ykpiv_set_length(unsigned char *buffer, size_t length); +unsigned int _ykpiv_get_length(const unsigned char *buffer, size_t *len); +bool _ykpiv_has_valid_length(const unsigned char* buffer, size_t len); void* _ykpiv_alloc(ykpiv_state *state, size_t size); void* _ykpiv_realloc(ykpiv_state *state, void *address, size_t size); @@ -200,8 +201,14 @@ ykpiv_rc _ykpiv_save_object(ykpiv_state *state, int object_id, unsigned char *indata, size_t len); ykpiv_rc _ykpiv_fetch_object(ykpiv_state *state, int object_id, unsigned char *data, unsigned long *len); ykpiv_rc _send_data(ykpiv_state *state, APDU *apdu, unsigned char *data, uint32_t *recv_len, int *sw); -ykpiv_rc _ykpiv_get_version(ykpiv_state *state, ykpiv_version_t *p_version); -ykpiv_rc _ykpiv_util_get_serial(ykpiv_state *state, uint32_t *p_serial, bool f_force); +ykpiv_rc _ykpiv_transfer_data( + ykpiv_state *state, + const unsigned char *templ, + const unsigned char *in_data, + long in_len, + unsigned char *out_data, + unsigned long *out_len, + int *sw); /* authentication functions not ready for public api */ ykpiv_rc ykpiv_auth_getchallenge(ykpiv_state *state, uint8_t *challenge, const size_t challenge_len); @@ -231,6 +238,21 @@ void yc_log_event(uint32_t id, yc_log_level_t level, const char *sz_format, ...); +#ifdef _WIN32 +#include +#define yc_memzero SecureZeroMemory +#elif defined(BSD) +#include +#define yc_memzero explicit_bzero +#elif defined(__linux__) +#include +#define yc_memzero OPENSSL_cleanse +#else +#define __STDC_WANT_LIB_EXT1__ 1 +#include +#define yc_memzero(_p, _n) (void)memset_s(_p, (rsize_t)_n, 0, (rsize_t)_n) +#endif + #ifdef __cplusplus } #endif diff -Nru yubico-piv-tool-1.6.2/lib/util.c yubico-piv-tool-1.7.0/lib/util.c --- yubico-piv-tool-1.6.2/lib/util.c 2018-08-09 08:23:52.000000000 +0000 +++ yubico-piv-tool-1.7.0/lib/util.c 2019-04-03 07:47:54.000000000 +0000 @@ -57,8 +57,8 @@ */ const uint8_t CHUID_TMPL[] = { 0x30, 0x19, 0xd4, 0xe7, 0x39, 0xda, 0x73, 0x9c, 0xed, 0x39, 0xce, 0x73, 0x9d, - 0x83, 0x68, 0x58, 0x21, 0x08, 0x42, 0x10, 0x84, 0x21, 0x38, 0x42, 0x10, 0xc3, - 0xf5, 0x34, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x83, 0x68, 0x58, 0x21, 0x08, 0x42, 0x10, 0x84, 0x21, 0xc8, 0x42, 0x10, 0xc3, + 0xeb, 0x34, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0x08, 0x32, 0x30, 0x33, 0x30, 0x30, 0x31, 0x30, 0x31, 0x3e, 0x00, 0xfe, 0x00, }; @@ -208,8 +208,9 @@ } ykpiv_devmodel ykpiv_util_devicemodel(ykpiv_state *state) { - if (!state || state->context == SCARD_E_INVALID_HANDLE) + if (!state || !state->context || (state->context == (uintptr_t)-1)) { return DEVTYPE_UNKNOWN; + } return (state->isNEO ? DEVTYPE_NEOr3 : DEVTYPE_YK4); } @@ -217,6 +218,7 @@ ykpiv_rc res = YKPIV_OK; ykpiv_key *pKey = NULL; uint8_t *pData = NULL; + uint8_t *pTemp = NULL; size_t cbData = 0; size_t offset = 0; uint8_t buf[CB_BUF_MAX]; @@ -273,17 +275,21 @@ for (i = 0; i < sizeof(SLOTS); i++) { cbBuf = sizeof(buf); + res = _read_certificate(state, SLOTS[i], buf, &cbBuf); - if (YKPIV_OK == (res = _read_certificate(state, SLOTS[i], buf, &cbBuf))) { + if ((res == YKPIV_OK) && (cbBuf > 0)) { // add current slot to result, grow result buffer if necessary cbRealloc = (sizeof(ykpiv_key) + cbBuf - 1) > (cbData - offset) ? MAX((sizeof(ykpiv_key) + cbBuf - 1) - (cbData - offset), CB_PAGE) : 0; if (0 != cbRealloc) { - if (NULL == (pData = _ykpiv_realloc(state, pData, cbData + cbRealloc))) { + if (!(pTemp = _ykpiv_realloc(state, pData, cbData + cbRealloc))) { + /* realloc failed, pData will be freed in cleanup */ res = YKPIV_MEMORY_ERROR; goto Cleanup; } + pData = pTemp; + pTemp = NULL; } cbData += cbRealloc; @@ -343,7 +349,15 @@ *data_len = 0; if (YKPIV_OK == (res = _read_certificate(state, slot, buf, &cbBuf))) { - if (NULL == (*data = _ykpiv_alloc(state, cbBuf))) { + + /* handle those who write empty certificate blobs to PIV objects */ + if (cbBuf == 0) { + *data = NULL; + *data_len = 0; + goto Cleanup; + } + + if (!(*data = _ykpiv_alloc(state, cbBuf))) { res = YKPIV_MEMORY_ERROR; goto Cleanup; } @@ -415,7 +429,7 @@ memcpy(&flags, p_item, cb_item); } else { - if (state->verbose) { fprintf(stderr, "admin flags exist, but are incorrect size = %zu", cb_item); } + if (state->verbose) { fprintf(stderr, "admin flags exist, but are incorrect size = %lu", (unsigned long)cb_item); } } } } @@ -454,17 +468,17 @@ if (YKPIV_OK == (res = _ykpiv_fetch_object(state, YKPIV_OBJ_MSCMAP, buf, (unsigned long*)&cbBuf))) { ptr = buf; - // check that object contents are at least large enough to read the header + /* check that object contents are at least large enough to read the header */ if (cbBuf < CB_OBJ_TAG_MIN) { res = YKPIV_OK; goto Cleanup; } if (*ptr++ == TAG_MSCMAP) { - ptr += _ykpiv_get_length(ptr, &len); + ptr += (unsigned long)_ykpiv_get_length(ptr, &len); - // check that decoded length represents object contents - if (len > (cbBuf - (ptr - buf))) { + /* check that decoded length represents object contents */ + if (len > (cbBuf - (size_t)(ptr - buf))) { res = YKPIV_OK; goto Cleanup; } @@ -474,7 +488,7 @@ goto Cleanup; } - // should check if container map isn't corrupt + /* should check if container map isn't corrupt */ memcpy(*containers, ptr, len); *n_containers = len / sizeof(ykpiv_container); @@ -516,7 +530,7 @@ // encode object data for storage // calculate the required length of the encoded object - req_len = 1 /* data tag */ + _ykpiv_set_length(buf, data_len) + data_len; + req_len = 1 /* data tag */ + (unsigned long)_ykpiv_set_length(buf, data_len) + data_len; if (req_len > _obj_size_max(state)) { res = YKPIV_SIZE_ERROR; @@ -546,6 +560,7 @@ int object_id = 0; uint8_t tag = 0; uint8_t *pData = NULL; + uint8_t *pTemp = NULL; size_t cbData = 0; size_t cbRealloc = 0; size_t offset = 0; @@ -588,7 +603,7 @@ ptr += _ykpiv_get_length(ptr, &len); // check that decoded length represents object contents - if (len > (cbBuf - (ptr - buf))) { + if (len > (cbBuf - (size_t)(ptr - buf))) { res = YKPIV_OK; goto Cleanup; } @@ -596,10 +611,13 @@ cbRealloc = len > (cbData - offset) ? len - (cbData - offset) : 0; if (0 != cbRealloc) { - if (NULL == (pData = _ykpiv_realloc(state, pData, cbData + cbRealloc))) { + if (!(pTemp = _ykpiv_realloc(state, pData, cbData + cbRealloc))) { + /* realloc failed, pData will be freed in cleanup */ res = YKPIV_MEMORY_ERROR; goto Cleanup; } + pData = pTemp; + pTemp = NULL; } cbData += cbRealloc; @@ -671,14 +689,14 @@ offset = 0; data_chunk = MIN(cb_obj_max - CB_OBJ_TAG_MAX, data_len - data_offset); - // encode object data for storage + /* encode object data for storage */ buf[offset++] = (i == (n_objs - 1)) ? TAG_MSROOTS_END : TAG_MSROOTS_MID; offset += _ykpiv_set_length(buf + offset, data_chunk); memcpy(buf + offset, data + data_offset, data_chunk); offset += data_chunk; - // write onto device - res = _ykpiv_save_object(state, YKPIV_OBJ_MSROOTS1 + i, buf, offset); + /* write onto device */ + res = _ykpiv_save_object(state, (int)(YKPIV_OBJ_MSROOTS1 + i), buf, offset); if (YKPIV_OK != res) { goto Cleanup; @@ -811,7 +829,7 @@ *in_ptr++ = touch_policy; } - if (YKPIV_OK != (res = ykpiv_transfer_data(state, templ, in_data, (long)(in_ptr - in_data), data, &recv_len, &sw))) { + if (YKPIV_OK != (res = _ykpiv_transfer_data(state, templ, in_data, (long)(in_ptr - in_data), data, &recv_len, &sw))) { if (state->verbose) { fprintf(stderr, "Failed to communicate.\n"); } goto Cleanup; } @@ -1084,7 +1102,7 @@ if (YKPIV_OK == (res = _read_metadata(state, TAG_ADMIN, data, &cb_data))) { if (YKPIV_OK == (res = _get_metadata_item(data, cb_data, TAG_ADMIN_SALT, &p_item, &cb_item))) { if (cb_item != CB_ADMIN_SALT) { - if (state->verbose) fprintf(stderr, "derived mgm salt exists, but is incorrect size = %zu\n", cb_item); + if (state->verbose) fprintf(stderr, "derived mgm salt exists, but is incorrect size = %lu\n", (unsigned long)cb_item); res = YKPIV_GENERIC_ERROR; goto Cleanup; } @@ -1127,7 +1145,7 @@ } if (cb_item != member_size(ykpiv_mgm, data)) { - if (state->verbose) fprintf(stderr, "protected data contains mgm, but is the wrong size = %zu\n", cb_item); + if (state->verbose) fprintf(stderr, "protected data contains mgm, but is the wrong size = %lu\n", (unsigned long)cb_item); res = YKPIV_AUTHENTICATION_ERROR; goto Cleanup; } @@ -1136,7 +1154,7 @@ Cleanup: - memset(data, 0, sizeof(data)); + yc_memzero(data, sizeof(data)); _ykpiv_end_transaction(state); return res; @@ -1174,7 +1192,7 @@ } } - if (YKPIV_OK != (res = _ykpiv_begin_transaction(state))) return YKPIV_PCSC_ERROR; + if (YKPIV_OK != (res = _ykpiv_begin_transaction(state))) { res = YKPIV_PCSC_ERROR; goto Cleanup; } if (YKPIV_OK != (res = _ykpiv_ensure_application_selected(state))) goto Cleanup; /* try to set the mgm key as long as we don't encounter a fatal error */ @@ -1245,7 +1263,7 @@ memcpy(&flags_1, p_item, cb_item); } else { - if (state->verbose) fprintf(stderr, "admin data flags are an incorrect size = %zu\n", cb_item); + if (state->verbose) fprintf(stderr, "admin data flags are an incorrect size = %lu\n", (unsigned long)cb_item); } /* remove any existing salt */ @@ -1269,8 +1287,8 @@ Cleanup: - memset(data, 0, sizeof(data)); - memset(mgm_key, 0, sizeof(mgm_key)); + yc_memzero(data, sizeof(data)); + yc_memzero(mgm_key, sizeof(mgm_key)); _ykpiv_end_transaction(state); return res; @@ -1303,7 +1321,7 @@ object_id = YKPIV_OBJ_SIGNATURE; break; - case YKPIV_KEY_KEYMGM: + case YKPIV_KEY_KEYMGM: object_id = YKPIV_OBJ_KEY_MANAGEMENT; break; @@ -1322,88 +1340,13 @@ break; } - return object_id; -} - -/* caller must make sure that this is wrapped in a transaction for synchronized operation */ -ykpiv_rc _ykpiv_util_get_serial(ykpiv_state *state, uint32_t *p_serial, bool f_force) { - ykpiv_rc res = YKPIV_OK; - APDU apdu; - const uint8_t yk_applet[] = { 0xa0, 0x00, 0x00, 0x05, 0x27, 0x20, 0x01, 0x01 }; - unsigned char data[0xff]; - uint32_t recv_len = sizeof(data); - int sw; - uint8_t *p_temp = NULL; - - if (!state) { - return YKPIV_ARGUMENT_ERROR; - } - - if (!f_force && (state->serial != 0)) { - if (p_serial) *p_serial = state->serial; - return YKPIV_OK; - } - - /* this function does not use ykpiv_transfer_data because it requires two apdus and selects a different app */ - - memset(apdu.raw, 0, sizeof(apdu)); - apdu.st.ins = YKPIV_INS_SELECT_APPLICATION; - apdu.st.p1 = 0x04; - apdu.st.lc = sizeof(yk_applet); - memcpy(apdu.st.data, yk_applet, sizeof(yk_applet)); - - if ((res = _send_data(state, &apdu, data, &recv_len, &sw)) < YKPIV_OK) { - if (state->verbose) { - fprintf(stderr, "Failed communicating with card: '%s'\n", ykpiv_strerror(res)); - } - goto Cleanup; - } - else if (sw != SW_SUCCESS) { - if (state->verbose) { - fprintf(stderr, "Failed selecting yk application: %04x\n", sw); - } - res = YKPIV_GENERIC_ERROR; - goto Cleanup; - } - - recv_len = sizeof(data); - memset(apdu.raw, 0, sizeof(apdu)); - apdu.st.ins = 0x01; - apdu.st.p1 = 0x10; - apdu.st.lc = 0x00; - - if ((res = _send_data(state, &apdu, data, &recv_len, &sw)) < YKPIV_OK) { - if (state->verbose) { - fprintf(stderr, "Failed communicating with card: '%s'\n", ykpiv_strerror(res)); - } - goto Cleanup; - } - else if (sw != SW_SUCCESS) { - if (state->verbose) { - fprintf(stderr, "Failed retrieving serial number: %04x\n", sw); - } - res = YKPIV_GENERIC_ERROR; - goto Cleanup; - } - - p_temp = (uint8_t*)(&state->serial); - - *p_temp++ = data[3]; - *p_temp++ = data[2]; - *p_temp++ = data[1]; - *p_temp++ = data[0]; - - if (p_serial) *p_serial = state->serial; - -Cleanup: - - return res; + return (uint32_t)object_id; } static ykpiv_rc _read_certificate(ykpiv_state *state, uint8_t slot, uint8_t *buf, size_t *buf_len) { ykpiv_rc res = YKPIV_OK; uint8_t *ptr = NULL; - int object_id = ykpiv_util_slot_object(slot); + int object_id = (int)ykpiv_util_slot_object(slot); size_t len = 0; if (-1 == object_id) return YKPIV_INVALID_OBJECT; @@ -1423,7 +1366,7 @@ ptr += _ykpiv_get_length(ptr, &len); // check that decoded length represents object contents - if (len > (*buf_len - (ptr - buf))) { + if (len > (*buf_len - (size_t)(ptr - buf))) { *buf_len = 0; return YKPIV_OK; } @@ -1441,7 +1384,7 @@ static ykpiv_rc _write_certificate(ykpiv_state *state, uint8_t slot, uint8_t *data, size_t data_len, uint8_t certinfo) { uint8_t buf[CB_OBJ_MAX]; - int object_id = ykpiv_util_slot_object(slot); + int object_id = (int)ykpiv_util_slot_object(slot); size_t offset = 0; size_t req_len = 0; @@ -1464,8 +1407,10 @@ // calculate the required length of the encoded object req_len = 1 /* cert tag */ + 3 /* compression tag + data*/ + 2 /* lrc */; req_len += _ykpiv_set_length(buf, data_len); + req_len += data_len; - if (req_len > _obj_size_max(state)) return YKPIV_SIZE_ERROR; + if (req_len < data_len) return YKPIV_SIZE_ERROR; /* detect overflow of unsigned size_t */ + if (req_len > _obj_size_max(state)) return YKPIV_SIZE_ERROR; /* obj_size_max includes limits for TLV encoding */ buf[offset++] = TAG_CERT; offset += _ykpiv_set_length(buf + offset, data_len); @@ -1512,6 +1457,11 @@ while (p_temp < (data + cb_data)) { tag_temp = *p_temp++; + + if (!_ykpiv_has_valid_length(p_temp, (data + cb_data - p_temp))) { + return YKPIV_SIZE_ERROR; + } + p_temp += _ykpiv_get_length(p_temp, &cb_temp); if (tag_temp == tag) { @@ -1579,16 +1529,24 @@ /* length doesn't match, expand/shrink to fit */ p_next = p_temp + cb_temp; - cb_moved = (long)cb_item - (long)cb_temp + ((long)(cb_item != 0 ? _get_length_size(cb_item) : -1 /* for tag, if deleting */) - (long)cb_len); /* accounts for different length encoding */ + cb_moved = (long)cb_item - (long)cb_temp + + ((long)(cb_item != 0 ? _get_length_size(cb_item) : -1 /* for tag, if deleting */) - + (long)cb_len); /* accounts for different length encoding */ /* length would cause buffer overflow, return error */ - if (*pcb_data + cb_moved > cb_data_max) { +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wsign-conversion" + if ((size_t)(*pcb_data + cb_moved) > cb_data_max) { return YKPIV_GENERIC_ERROR; } +#pragma GCC diagnostic pop /* move remaining data */ - memmove(p_next + cb_moved, p_next, *pcb_data - (p_next - data)); + memmove(p_next + cb_moved, p_next, *pcb_data - (size_t)(p_next - data)); +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wsign-conversion" *pcb_data += cb_moved; +#pragma GCC diagnostic pop /* re-encode item and insert */ if (cb_item != 0) { @@ -1598,7 +1556,7 @@ } return YKPIV_OK; - } //if tag found + } /* if tag found */ p_temp += cb_temp; } @@ -1610,7 +1568,7 @@ // we did not find an existing tag, append p_temp = data + *pcb_data; - cb_len = _get_length_size(cb_item); + cb_len = (size_t)_get_length_size(cb_item); // length would cause buffer overflow, return error if (*pcb_data + cb_len + cb_item > cb_data_max) { @@ -1666,7 +1624,7 @@ p_temp += _ykpiv_get_length(p_temp, pcb_data); - if (*pcb_data > ((size_t)cb_temp - (p_temp - data))) { + if (*pcb_data > (cb_temp - (size_t)(p_temp - data))) { *pcb_data = 0; return YKPIV_GENERIC_ERROR; } @@ -1712,7 +1670,7 @@ memcpy(pTemp, data, cb_data); pTemp += cb_data; - res = _ykpiv_save_object(state, obj_id, buf, pTemp - buf); + res = _ykpiv_save_object(state, obj_id, buf, (size_t)(pTemp - buf)); } return res; diff -Nru yubico-piv-tool-1.6.2/lib/ykpiv.c yubico-piv-tool-1.7.0/lib/ykpiv.c --- yubico-piv-tool-1.6.2/lib/ykpiv.c 2018-09-07 12:18:43.000000000 +0000 +++ yubico-piv-tool-1.7.0/lib/ykpiv.c 2019-04-03 07:47:54.000000000 +0000 @@ -76,11 +76,36 @@ #define ENABLE_APPLICATION_RESELECTION 0 #endif + +/** + * ENABLE_IMPLICIT_TRANSACTIONS - call SCardBeginTransaction for all public API calls + * + * If this is enabled, every public call (prefixed with \r ykpiv_) will call + * SCardBeginTransaction on entry and SCardEndTransaction on exit. + * + * For applications that do not do their own transaction management, like the piv tool + * itself, retaining the default setting of enabled can allow other applications and + * threads to make calls to CCID that can interfere with multi-block data sent to the + * card via SCardTransmitData. + */ +#ifndef ENABLE_IMPLICIT_TRANSACTIONS +#define ENABLE_IMPLICIT_TRANSACTIONS 1 +#endif + +/** + * Platform specific definitions + */ +#ifdef _MSC_VER +#define strncasecmp _strnicmp +#endif + #define YKPIV_MGM_DEFAULT "\x01\x02\x03\x04\x05\x06\x07\x08\x01\x02\x03\x04\x05\x06\x07\x08\x01\x02\x03\x04\x05\x06\x07\x08" static ykpiv_rc _cache_pin(ykpiv_state *state, const char *pin, size_t len); +static ykpiv_rc _ykpiv_get_serial(ykpiv_state *state, uint32_t *p_serial, bool force); +static ykpiv_rc _ykpiv_get_version(ykpiv_state *state, ykpiv_version_t *p_version); -unsigned const char aid[] = { +static unsigned const char aid[] = { 0xa0, 0x00, 0x00, 0x03, 0x08 }; @@ -130,7 +155,7 @@ } } -int _ykpiv_set_length(unsigned char *buffer, size_t length) { +unsigned int _ykpiv_set_length(unsigned char *buffer, size_t length) { if(length < 0x80) { *buffer++ = (unsigned char)length; return 1; @@ -146,7 +171,7 @@ } } -int _ykpiv_get_length(const unsigned char *buffer, size_t *len) { +unsigned int _ykpiv_get_length(const unsigned char *buffer, size_t *len) { if(buffer[0] < 0x81) { *len = buffer[0]; return 1; @@ -161,6 +186,19 @@ return 0; } +bool _ykpiv_has_valid_length(const unsigned char* buffer, size_t len) { + if ((buffer[0] < 0x81) && (len > 0)) { + return true; + } + else if (((*buffer & 0x7f) == 1) && (len > 1)) { + return true; + } + else if (((*buffer & 0x7f) == 2) && (len > 2)) { + return true; + } + return false; +} + static unsigned char *set_object(int object_id, unsigned char *buffer) { *buffer++ = 0x5c; if(object_id == YKPIV_OBJ_DISCOVERY) { @@ -193,7 +231,7 @@ s->pin = NULL; s->allocator = *allocator; s->verbose = verbose; - s->context = SCARD_E_INVALID_HANDLE; + s->context = (SCARDCONTEXT)-1; *state = s; return YKPIV_OK; } @@ -226,7 +264,7 @@ if(SCardIsValidContext(state->context) == SCARD_S_SUCCESS) { SCardReleaseContext(state->context); - state->context = SCARD_E_INVALID_HANDLE; + state->context = (SCARDCONTEXT)-1; } return YKPIV_OK; @@ -239,8 +277,6 @@ int sw; ykpiv_rc res = YKPIV_OK; - _ykpiv_util_get_serial(state, NULL, false); - memset(apdu.raw, 0, sizeof(apdu)); apdu.st.ins = YKPIV_INS_SELECT_APPLICATION; apdu.st.p1 = 0x04; @@ -260,7 +296,16 @@ return YKPIV_GENERIC_ERROR; } - _ykpiv_get_version(state, NULL); + /* now that the PIV application is selected, retrieve the version + * and serial number. Previously the NEO/YK4 required switching + * to the yk applet to retrieve the serial, YK5 implements this + * as a PIV applet command. Unfortunately, this change requires + * that we retrieve the version number first, so that get_serial + * can determine how to get the serial number, which for the NEO/Yk4 + * will result in another selection of the PIV applet. */ + + res = _ykpiv_get_version(state, NULL); + if (res == YKPIV_OK) res = _ykpiv_get_serial(state, NULL, false); return res; } @@ -284,6 +329,7 @@ return res; #else + (void)state; return res; #endif } @@ -456,7 +502,7 @@ fprintf (stderr, "error: SCardListReaders failed, rc=%08lx\n", rc); } SCardReleaseContext(state->context); - state->context = SCARD_E_INVALID_HANDLE; + state->context = (SCARDCONTEXT)-1; return YKPIV_PCSC_ERROR; } @@ -471,7 +517,7 @@ fprintf (stderr, "error: SCardListReaders failed, rc=%08lx\n", rc); } SCardReleaseContext(state->context); - state->context = SCARD_E_INVALID_HANDLE; + state->context = (SCARDCONTEXT)-1; return YKPIV_PCSC_ERROR; } @@ -481,12 +527,13 @@ } ykpiv_rc _ykpiv_begin_transaction(ykpiv_state *state) { +#if ENABLE_IMPLICIT_TRANSACTIONS long rc; - ykpiv_rc res; rc = SCardBeginTransaction(state->card); - if((rc & 0xFFFFFFFF) == SCARD_W_RESET_CARD) { - if((res = reconnect(state)) != YKPIV_OK) { + if((long)((unsigned long)rc & 0xFFFFFFFF) == SCARD_W_RESET_CARD) { + ykpiv_rc res = YKPIV_OK; + if((res = reconnect(state)) != YKPIV_OK) { return res; } rc = SCardBeginTransaction(state->card); @@ -497,27 +544,33 @@ } return YKPIV_PCSC_ERROR; } +#endif /* ENABLE_IMPLICIT_TRANSACTIONS */ + return YKPIV_OK; } ykpiv_rc _ykpiv_end_transaction(ykpiv_state *state) { +#if ENABLE_IMPLICIT_TRANSACTIONS long rc = SCardEndTransaction(state->card, SCARD_LEAVE_CARD); if(rc != SCARD_S_SUCCESS && state->verbose) { fprintf(stderr, "error: Failed to end pcsc transaction, rc=%08lx\n", rc); return YKPIV_PCSC_ERROR; } +#endif /* ENABLE_IMPLICIT_TRANSACTIONS */ return YKPIV_OK; } -ykpiv_rc ykpiv_transfer_data(ykpiv_state *state, const unsigned char *templ, - const unsigned char *in_data, long in_len, - unsigned char *out_data, unsigned long *out_len, int *sw) { +ykpiv_rc _ykpiv_transfer_data(ykpiv_state *state, const unsigned char *templ, + const unsigned char *in_data, + long in_len, + unsigned char *out_data, + unsigned long *out_len, + int *sw) { const unsigned char *in_ptr = in_data; unsigned long max_out = *out_len; ykpiv_rc res; *out_len = 0; - if (YKPIV_OK != (res = _ykpiv_begin_transaction(state))) return YKPIV_PCSC_ERROR; do { size_t this_size = 0xff; unsigned char data[261]; @@ -587,6 +640,19 @@ } } Cleanup: + return res; +} + +ykpiv_rc ykpiv_transfer_data(ykpiv_state *state, const unsigned char *templ, + const unsigned char *in_data, long in_len, + unsigned char *out_data, unsigned long *out_len, int *sw) { + ykpiv_rc res; + + if ((res = _ykpiv_begin_transaction(state)) != YKPIV_OK) { + *out_len = 0; + return YKPIV_PCSC_ERROR; + } + res = _ykpiv_transfer_data(state, templ, in_data, in_len, out_data, out_len, sw); _ykpiv_end_transaction(state); return res; } @@ -631,6 +697,7 @@ uint32_t recv_len = sizeof(data); int sw; ykpiv_rc res; + des_rc drc = DES_OK; des_key* mgm_key = NULL; size_t out_len = 0; @@ -675,7 +742,12 @@ unsigned char *dataptr = apdu.st.data; unsigned char response[8]; out_len = sizeof(response); - des_decrypt(mgm_key, challenge, sizeof(challenge), response, &out_len); + drc = des_decrypt(mgm_key, challenge, sizeof(challenge), response, &out_len); + + if (drc != DES_OK) { + res = YKPIV_AUTHENTICATION_ERROR; + goto Cleanup; + } recv_len = sizeof(data); memset(apdu.raw, 0, sizeof(apdu)); @@ -713,7 +785,13 @@ { unsigned char response[8]; out_len = sizeof(response); - des_encrypt(mgm_key, challenge, sizeof(challenge), response, &out_len); + drc = des_encrypt(mgm_key, challenge, sizeof(challenge), response, &out_len); + + if (drc != DES_OK) { + res = YKPIV_AUTHENTICATION_ERROR; + goto Cleanup; + } + if (memcmp(response, data + 4, 8) == 0) { res = YKPIV_OK; } @@ -785,6 +863,7 @@ res = YKPIV_GENERIC_ERROR; Cleanup: + yc_memzero(&apdu, sizeof(APDU)); _ykpiv_end_transaction(state); return res; } @@ -838,24 +917,26 @@ switch(algorithm) { case YKPIV_ALGO_RSA1024: key_len = 128; + // fall through case YKPIV_ALGO_RSA2048: if(key_len == 0) { - key_len = 256; + key_len = 256; } if(in_len != key_len) { - return YKPIV_SIZE_ERROR; + return YKPIV_SIZE_ERROR; } break; case YKPIV_ALGO_ECCP256: key_len = 32; + // fall through case YKPIV_ALGO_ECCP384: if(key_len == 0) { - key_len = 48; + key_len = 48; } if(!decipher && in_len > key_len) { - return YKPIV_SIZE_ERROR; + return YKPIV_SIZE_ERROR; } else if(decipher && in_len != (key_len * 2) + 1) { - return YKPIV_SIZE_ERROR; + return YKPIV_SIZE_ERROR; } break; default: @@ -932,11 +1013,12 @@ if (NULL == state) return YKPIV_GENERIC_ERROR; if (YKPIV_OK != (res = _ykpiv_begin_transaction(state))) return YKPIV_PCSC_ERROR; - if (YKPIV_OK != (res = _ykpiv_ensure_application_selected(state))) goto Cleanup; + /* don't attempt to reselect in crypt operations to avoid problems with PIN_ALWAYS */ + /*if (YKPIV_OK != (res = _ykpiv_ensure_application_selected(state))) goto Cleanup;*/ res = _general_authenticate(state, raw_in, in_len, sign_out, out_len, algorithm, key, false); -Cleanup: +/* Cleanup: */ _ykpiv_end_transaction(state); return res; } @@ -949,19 +1031,19 @@ if (NULL == state) return YKPIV_GENERIC_ERROR; if (YKPIV_OK != (res = _ykpiv_begin_transaction(state))) return YKPIV_PCSC_ERROR; - if (YKPIV_OK != (res = _ykpiv_ensure_application_selected(state))) goto Cleanup; - + /* don't attempt to reselect in crypt operations to avoid problems with PIN_ALWAYS */ + /*if (YKPIV_OK != (res = _ykpiv_ensure_application_selected(state))) goto Cleanup;*/ res = _general_authenticate(state, in, in_len, out, out_len, algorithm, key, true); -Cleanup: +/* Cleanup: */ _ykpiv_end_transaction(state); return res; } -ykpiv_rc _ykpiv_get_version(ykpiv_state *state, ykpiv_version_t *p_version) { +static ykpiv_rc _ykpiv_get_version(ykpiv_state *state, ykpiv_version_t *p_version) { APDU apdu; unsigned char data[261]; uint32_t recv_len = sizeof(data); @@ -988,6 +1070,12 @@ if((res = _send_data(state, &apdu, data, &recv_len, &sw)) != YKPIV_OK) { return res; } else if(sw == SW_SUCCESS) { + + /* check that we received enough data for the verson number */ + if (recv_len < 3) { + return YKPIV_SIZE_ERROR; + } + state->ver.major = data[0]; state->ver.minor = data[1]; state->ver.patch = data[2]; @@ -1022,6 +1110,143 @@ return res; } +/* caller must make sure that this is wrapped in a transaction for synchronized operation */ +static ykpiv_rc _ykpiv_get_serial(ykpiv_state *state, uint32_t *p_serial, bool f_force) { + ykpiv_rc res = YKPIV_OK; + APDU apdu; + const uint8_t yk_applet[] = { 0xa0, 0x00, 0x00, 0x05, 0x27, 0x20, 0x01, 0x01 }; + unsigned char data[0xff]; + uint32_t recv_len = sizeof(data); + int sw; + uint8_t *p_temp = NULL; + + if (!state) { + return YKPIV_ARGUMENT_ERROR; + } + + if (!f_force && (state->serial != 0)) { + if (p_serial) *p_serial = state->serial; + return YKPIV_OK; + } + + if (state->ver.major < 5) { + /* get serial from neo/yk4 devices using the otp applet */ + uint8_t temp[0xff]; + + recv_len = sizeof(temp); + memset(apdu.raw, 0, sizeof(apdu)); + apdu.st.ins = YKPIV_INS_SELECT_APPLICATION; + apdu.st.p1 = 0x04; + apdu.st.lc = sizeof(yk_applet); + memcpy(apdu.st.data, yk_applet, sizeof(yk_applet)); + + if ((res = _send_data(state, &apdu, temp, &recv_len, &sw)) < YKPIV_OK) { + if (state->verbose) { + fprintf(stderr, "Failed communicating with card: '%s'\n", ykpiv_strerror(res)); + } + goto Cleanup; + } + else if (sw != SW_SUCCESS) { + if (state->verbose) { + fprintf(stderr, "Failed selecting yk application: %04x\n", sw); + } + res = YKPIV_GENERIC_ERROR; + goto Cleanup; + } + + recv_len = sizeof(data); + memset(apdu.raw, 0, sizeof(apdu)); + apdu.st.ins = 0x01; + apdu.st.p1 = 0x10; + apdu.st.lc = 0x00; + + if ((res = _send_data(state, &apdu, data, &recv_len, &sw)) < YKPIV_OK) { + if (state->verbose) { + fprintf(stderr, "Failed communicating with card: '%s'\n", ykpiv_strerror(res)); + } + goto Cleanup; + } + else if (sw != SW_SUCCESS) { + if (state->verbose) { + fprintf(stderr, "Failed retrieving serial number: %04x\n", sw); + } + res = YKPIV_GENERIC_ERROR; + goto Cleanup; + } + + recv_len = sizeof(temp); + memset(apdu.raw, 0, sizeof(apdu)); + apdu.st.ins = YKPIV_INS_SELECT_APPLICATION; + apdu.st.p1 = 0x04; + apdu.st.lc = (unsigned char)sizeof(aid); + memcpy(apdu.st.data, aid, sizeof(aid)); + + if((res = _send_data(state, &apdu, temp, &recv_len, &sw)) < YKPIV_OK) { + if(state->verbose) { + fprintf(stderr, "Failed communicating with card: '%s'\n", ykpiv_strerror(res)); + } + return res; + } + else if(sw != SW_SUCCESS) { + if(state->verbose) { + fprintf(stderr, "Failed selecting application: %04x\n", sw); + } + return YKPIV_GENERIC_ERROR; + } + } + else { + /* get serial from yk5 and later devices using the f8 command */ + + memset(apdu.raw, 0, sizeof(apdu)); + apdu.st.ins = YKPIV_INS_GET_SERIAL; + + if ((res = _send_data(state, &apdu, data, &recv_len, &sw) != YKPIV_OK)) { + if(state->verbose) { + fprintf(stderr, "Failed communicating with card: '%s'\n", ykpiv_strerror(res)); + } + return res; + } + else if(sw != SW_SUCCESS) { + if(state->verbose) { + fprintf(stderr, "Failed retrieving serial number: %04x\n", sw); + } + return YKPIV_GENERIC_ERROR; + } + } + + /* check that we received enough data for the serial number */ + if (recv_len < 4) { + return YKPIV_SIZE_ERROR; + } + + p_temp = (uint8_t*)(&state->serial); + + *p_temp++ = data[3]; + *p_temp++ = data[2]; + *p_temp++ = data[1]; + *p_temp++ = data[0]; + + if (p_serial) *p_serial = state->serial; + +Cleanup: + + return res; +} + +ykpiv_rc ykpiv_get_serial(ykpiv_state *state, uint32_t *p_serial) { + ykpiv_rc res = YKPIV_OK; + + if ((res = _ykpiv_begin_transaction(state)) != YKPIV_OK) return YKPIV_PCSC_ERROR; + if ((res = _ykpiv_ensure_application_selected(state)) != YKPIV_OK) goto Cleanup; + + res = _ykpiv_get_serial(state, p_serial, false); + +Cleanup: + + _ykpiv_end_transaction(state); + return res; +} + static ykpiv_rc _cache_pin(ykpiv_state *state, const char *pin, size_t len) { #if DISABLE_PIN_CACHE // Some embedded applications of this library may not want to keep the PIN @@ -1034,6 +1259,7 @@ return YKPIV_OK; } if (state->pin) { + yc_memzero(state->pin, strnlen(state->pin, CB_PIN_MAX)); _ykpiv_free(state, state->pin); state->pin = NULL; } @@ -1056,7 +1282,7 @@ int sw; ykpiv_rc res; - if (pin_len > 8) { + if (pin_len > CB_PIN_MAX) { return YKPIV_SIZE_ERROR; } @@ -1067,27 +1293,36 @@ apdu.st.lc = pin ? 0x08 : 0; if (pin) { memcpy(apdu.st.data, pin, pin_len); - if (pin_len < 8) { - memset(apdu.st.data + pin_len, 0xff, 8 - pin_len); + if (pin_len < CB_PIN_MAX) { + memset(apdu.st.data + pin_len, 0xff, CB_PIN_MAX - pin_len); } } - if ((res = _send_data(state, &apdu, data, &recv_len, &sw)) != YKPIV_OK) { + + res = _send_data(state, &apdu, data, &recv_len, &sw); + yc_memzero(&apdu, sizeof(apdu)); + + if (res != YKPIV_OK) { return res; - } else if (sw == SW_SUCCESS) { + } + else if (sw == SW_SUCCESS) { if (pin && pin_len) { // Intentionally ignore errors. If the PIN fails to save, it will only // be a problem if a reconnect is attempted. Failure deferred until then. _cache_pin(state, pin, pin_len); } + if (tries) *tries = (sw & 0xf); return YKPIV_OK; - } else if ((sw >> 8) == 0x63) { + } + else if ((sw >> 8) == 0x63) { if (tries) *tries = (sw & 0xf); return YKPIV_WRONG_PIN; - } else if (sw == SW_ERR_AUTH_BLOCKED) { + } + else if (sw == SW_ERR_AUTH_BLOCKED) { if (tries) *tries = 0; return YKPIV_WRONG_PIN; - } else { + } + else { return YKPIV_GENERIC_ERROR; } } @@ -1173,10 +1408,10 @@ unsigned char data[0xff]; unsigned long recv_len = sizeof(data); ykpiv_rc res; - if (current_pin_len > 8) { + if (current_pin_len > CB_PIN_MAX) { return YKPIV_SIZE_ERROR; } - if (new_pin_len > 8) { + if (new_pin_len > CB_PIN_MAX) { return YKPIV_SIZE_ERROR; } if(action == CHREF_ACT_UNBLOCK_PIN) { @@ -1186,14 +1421,17 @@ templ[3] = 0x81; } memcpy(indata, current_pin, current_pin_len); - if(current_pin_len < 8) { - memset(indata + current_pin_len, 0xff, 8 - current_pin_len); + if(current_pin_len < CB_PIN_MAX) { + memset(indata + current_pin_len, 0xff, CB_PIN_MAX - current_pin_len); } - memcpy(indata + 8, new_pin, new_pin_len); - if(new_pin_len < 8) { - memset(indata + 8 + new_pin_len, 0xff, 8 - new_pin_len); + memcpy(indata + CB_PIN_MAX, new_pin, new_pin_len); + if(new_pin_len < CB_PIN_MAX) { + memset(indata + CB_PIN_MAX + new_pin_len, 0xff, CB_PIN_MAX - new_pin_len); } + res = ykpiv_transfer_data(state, templ, indata, sizeof(indata), data, &recv_len, &sw); + yc_memzero(indata, sizeof(indata)); + if(res != YKPIV_OK) { return res; } else if(sw != SW_SUCCESS) { @@ -1289,14 +1527,20 @@ } if(sw == SW_SUCCESS) { - size_t outlen; - int offs = _ykpiv_get_length(data + 1, &outlen); + size_t outlen = 0; + unsigned int offs = 0; + + if ((*len < 2) || !_ykpiv_has_valid_length(data + 1, *len - 1)) { + return YKPIV_SIZE_ERROR; + } + + offs = _ykpiv_get_length(data + 1, &outlen); if(offs == 0) { return YKPIV_SIZE_ERROR; } if(outlen + offs + 1 != *len) { if(state->verbose) { - fprintf(stderr, "Invalid length indicated in object, total objlen is %lu, indicated length is %lu.", *len, outlen); + fprintf(stderr, "Invalid length indicated in object, total objlen is %lu, indicated length is %lu.", *len, (unsigned long)outlen); } return YKPIV_SIZE_ERROR; } @@ -1322,8 +1566,11 @@ return res; } -ykpiv_rc _ykpiv_save_object(ykpiv_state *state, int object_id, - unsigned char *indata, size_t len) { +ykpiv_rc _ykpiv_save_object( + ykpiv_state *state, + int object_id, + unsigned char *indata, + size_t len) { unsigned char data[CB_BUF_MAX]; unsigned char *dataptr = data; unsigned char templ[] = {0, YKPIV_INS_PUT_DATA, 0x3f, 0xff}; @@ -1343,7 +1590,7 @@ memcpy(dataptr, indata, len); dataptr += len; - if((res = ykpiv_transfer_data(state, templ, data, (long)(dataptr - data), NULL, &outlen, + if((res = _ykpiv_transfer_data(state, templ, data, (long)(dataptr - data), NULL, &outlen, &sw)) != YKPIV_OK) { return res; } @@ -1436,10 +1683,13 @@ } else if (algorithm == YKPIV_ALGO_ECCP256 || algorithm == YKPIV_ALGO_ECCP384) { +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wtype-limits" if ((size_t)ec_data_len >= sizeof(key_data)) { - // This can never be true, but check to be explicit. + /* This can never be true, but check to be explicit. */ return YKPIV_SIZE_ERROR; } +#pragma GCC diagnostic pop if (algorithm == YKPIV_ALGO_ECCP256) elem_len = 32; @@ -1464,7 +1714,8 @@ padding = elem_len - lens[i]; remaining = (uintptr_t)key_data + sizeof(key_data) - (uintptr_t)in_ptr; if (padding > remaining) { - return YKPIV_ALGORITHM_ERROR; + res = YKPIV_ALGORITHM_ERROR; + goto Cleanup; } memset(in_ptr, 0, padding); in_ptr += padding; @@ -1499,6 +1750,7 @@ } Cleanup: + yc_memzero(key_data, sizeof(key_data)); _ykpiv_end_transaction(state); return res; } @@ -1617,15 +1869,50 @@ Cleanup: + yc_memzero(&apdu, sizeof(apdu)); _ykpiv_end_transaction(state); return res; } +static const uint8_t MGMT_AID[] = { 0xa0, 0x00, 0x00, 0x05, 0x27, 0x47, 0x11, 0x17 }; + +/* deauthenticates the user pin and mgm key */ ykpiv_rc ykpiv_auth_deauthenticate(ykpiv_state *state) { ykpiv_rc res = YKPIV_OK; + APDU apdu; + unsigned char data[0xff]; + uint32_t recv_len = sizeof(data); + int sw; + if (!state) { + return YKPIV_ARGUMENT_ERROR; + } + + /* this function does not use ykpiv_transfer_data because it selects a different app */ if ((res = _ykpiv_begin_transaction(state)) < YKPIV_OK) return res; - _ykpiv_util_get_serial(state, NULL, true); + + memset(apdu.raw, 0, sizeof(apdu)); + apdu.st.ins = YKPIV_INS_SELECT_APPLICATION; + apdu.st.p1 = 0x04; + apdu.st.lc = sizeof(MGMT_AID); + memcpy(apdu.st.data, MGMT_AID, sizeof(MGMT_AID)); + + if ((res = _send_data(state, &apdu, data, &recv_len, &sw)) < YKPIV_OK) { + if (state->verbose) { + fprintf(stderr, "Failed communicating with card: '%s'\n", ykpiv_strerror(res)); + } + goto Cleanup; + } + else if (sw != SW_SUCCESS) { + if (state->verbose) { + fprintf(stderr, "Failed selecting mgmt application: %04x\n", sw); + } + res = YKPIV_GENERIC_ERROR; + goto Cleanup; + } + +Cleanup: + _ykpiv_end_transaction(state); return res; } diff -Nru yubico-piv-tool-1.6.2/lib/ykpiv.h yubico-piv-tool-1.7.0/lib/ykpiv.h --- yubico-piv-tool-1.6.2/lib/ykpiv.h 2017-11-29 08:42:14.000000000 +0000 +++ yubico-piv-tool-1.7.0/lib/ykpiv.h 2018-10-25 13:27:06.000000000 +0000 @@ -194,6 +194,19 @@ */ ykpiv_rc ykpiv_verify_select(ykpiv_state *state, const char *pin, const size_t pin_len, int *tries, bool force_select); + /** + * Get serial number + * + * The card must be connected to call this function. + * + * @param state [in] State handle + * @param p_serial [out] uint32 to store retrieved serial number + * + * @return ykpiv_rc error code + * + */ + ykpiv_rc ykpiv_get_serial(ykpiv_state *state, uint32_t* p_serial); + //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// @@ -492,7 +505,7 @@ * @param state state * @param ccc Unique Card ID to set. If NULL, randomly generate. * - * @return ypiv_rc error code + * @return ykpiv_rc error code * */ ykpiv_rc ykpiv_util_set_cccid(ykpiv_state *state, const ykpiv_cccid *ccc); @@ -647,6 +660,7 @@ #define YKPIV_INS_RESET 0xfb #define YKPIV_INS_SET_PIN_RETRIES 0xfa #define YKPIV_INS_ATTEST 0xf9 +#define YKPIV_INS_GET_SERIAL 0xf8 #define YKPIV_PINPOLICY_TAG 0xaa #define YKPIV_PINPOLICY_DEFAULT 0 @@ -671,12 +685,15 @@ #define YKPIV_ATR_NEO_R3 "\x3b\xfc\x13\x00\x00\x81\x31\xfe\x15\x59\x75\x62\x69\x6b\x65\x79\x4e\x45\x4f\x72\x33\xe1" #define YKPIV_ATR_YK4 "\x3b\xf8\x13\x00\x00\x81\x31\xfe\x15\x59\x75\x62\x69\x6b\x65\x79\x34\xd4" +#define YKPIV_ATR_YK5_P1 "\x3b\xf8\x13\x00\x00\x81\x31\xfe\x15\x01\x59\x75\x62\x69\x4b\x65\x79\xc1" +#define YKPIV_ATR_YK5 "\x3b\xfd\x13\x00\x00\x81\x31\xfe\x15\x80\x73\xc0\x21\xc0\x57\x59\x75\x62\x69\x4b\x65\x79\x40" #define DEVTYPE_UNKNOWN 0x00000000 #define DEVTYPE_NEO 0x4E450000 //"NE" #define DEVTYPE_YK 0x594B0000 //"YK" #define DEVTYPE_NEOr3 (DEVTYPE_NEO | 0x00007233) //"r3" #define DEVTYPE_YK4 (DEVTYPE_YK | 0x00000034) // "4" +#define DEVYTPE_YK5 (DEVTYPE_YK | 0x00000035) // "5" #ifdef __cplusplus } diff -Nru yubico-piv-tool-1.6.2/lib/ykpiv.map yubico-piv-tool-1.7.0/lib/ykpiv.map --- yubico-piv-tool-1.6.2/lib/ykpiv.map 2017-11-29 08:42:14.000000000 +0000 +++ yubico-piv-tool-1.7.0/lib/ykpiv.map 2018-10-25 13:27:06.000000000 +0000 @@ -113,3 +113,9 @@ ykpiv_util_write_msroots; ykpiv_verify_select; } YKPIV_1.3.0; + +YKPIV_1.6.0 +{ +global: + ykpiv_get_serial; +} YKPIV_1.5.0; diff -Nru yubico-piv-tool-1.6.2/lib/ykpiv-version.h yubico-piv-tool-1.7.0/lib/ykpiv-version.h --- yubico-piv-tool-1.6.2/lib/ykpiv-version.h 2018-09-14 07:33:13.000000000 +0000 +++ yubico-piv-tool-1.7.0/lib/ykpiv-version.h 2019-04-03 07:53:52.000000000 +0000 @@ -43,7 +43,7 @@ * version number. Used together with ykneomgr_check_version() to verify * header file and run-time library consistency. */ -#define YKPIV_VERSION_STRING "1.6.2" +#define YKPIV_VERSION_STRING "1.7.0" /** * YKPIV_VERSION_NUMBER @@ -53,7 +53,7 @@ * this symbol will have the value 0x01020300. The last two digits * are only used between public releases, and will otherwise be 00. */ -#define YKPIV_VERSION_NUMBER 0x010602 +#define YKPIV_VERSION_NUMBER 0x010700 /** * YKPIV_VERSION_MAJOR @@ -71,7 +71,7 @@ * level of the header file version number. For example, when the * header version is 1.2.3 this symbol will be 2. */ -#define YKPIV_VERSION_MINOR 6 +#define YKPIV_VERSION_MINOR 7 /** * YKPIV_VERSION_PATCH @@ -80,7 +80,7 @@ * level of the header file version number. For example, when the * header version is 1.2.3 this symbol will be 3. */ -#define YKPIV_VERSION_PATCH 2 +#define YKPIV_VERSION_PATCH 0 const char *ykpiv_check_version (const char *req_version); diff -Nru yubico-piv-tool-1.6.2/Makefile.in yubico-piv-tool-1.7.0/Makefile.in --- yubico-piv-tool-1.6.2/Makefile.in 2018-09-14 07:21:39.000000000 +0000 +++ yubico-piv-tool-1.7.0/Makefile.in 2019-04-03 07:53:50.000000000 +0000 @@ -197,7 +197,7 @@ $(top_srcdir)/build-aux/ltmain.sh \ $(top_srcdir)/build-aux/missing COPYING ChangeLog NEWS README \ build-aux/ar-lib build-aux/compile build-aux/config.guess \ - build-aux/config.rpath build-aux/config.sub \ + build-aux/config.rpath build-aux/config.sub build-aux/depcomp \ build-aux/install-sh build-aux/ltmain.sh build-aux/missing DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) diff -Nru yubico-piv-tool-1.6.2/NEWS yubico-piv-tool-1.7.0/NEWS --- yubico-piv-tool-1.6.2/NEWS 2018-09-14 07:23:34.000000000 +0000 +++ yubico-piv-tool-1.7.0/NEWS 2019-04-03 07:53:25.000000000 +0000 @@ -1,5 +1,23 @@ yubico-piv-tool NEWS -- History of user-visible changes. -*- outline -*- +* Version 1.7.0 (released 2019-04-03) + +** Add ykpiv_get_serial() to API. + +** Add version and serial to status output. + +** FASC-N fixes for CHUID. + +** ykcs11: Fix ECDSA signatures. + +** Make selfsigned X.509 extensions have correct extensions to match openssl. + +** Security fixes. + +** Documentation fixes. + +** Try to clear memory that might contain secrets. + * Version 1.6.2 (released 2018-09-14) ** Compare reader names case insensitive. diff -Nru yubico-piv-tool-1.6.2/tool/yubico-piv-tool.1 yubico-piv-tool-1.7.0/tool/yubico-piv-tool.1 --- yubico-piv-tool-1.6.2/tool/yubico-piv-tool.1 2018-09-10 08:19:44.000000000 +0000 +++ yubico-piv-tool-1.7.0/tool/yubico-piv-tool.1 2019-04-03 07:53:55.000000000 +0000 @@ -1,12 +1,12 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.6. -.TH YUBICO-PIV-TOOL "1" "September 2018" "yubico-piv-tool 1.6.2" "User Commands" +.TH YUBICO-PIV-TOOL "1" "April 2019" "yubico-piv-tool 1.7.0" "User Commands" .SH NAME yubico-piv-tool \- Yubico PIV tool .SH SYNOPSIS .B yubico-piv-tool [\fI\,OPTIONS\/\fR]... .SH DESCRIPTION -yubico\-piv\-tool 1.6.2 +yubico\-piv\-tool 1.7.0 .TP \fB\-h\fR, \fB\-\-help\fR Print help and exit diff -Nru yubico-piv-tool-1.6.2/tool/yubico-piv-tool.c yubico-piv-tool-1.7.0/tool/yubico-piv-tool.c --- yubico-piv-tool-1.6.2/tool/yubico-piv-tool.c 2018-09-10 08:19:42.000000000 +0000 +++ yubico-piv-tool-1.7.0/tool/yubico-piv-tool.c 2019-04-03 07:44:44.000000000 +0000 @@ -49,12 +49,12 @@ #include #include #include +#include #include "cmdline.h" #include "util.h" #define MAX(a,b) (a) > (b) ? (a) : (b) -#define MIN(a,b) (a) < (b) ? (a) : (b) #define CHUID 0 #define CCC 1 @@ -450,11 +450,11 @@ } rc = ykpiv_import_private_key(state, key, algorithm, - p, element_len, - q, element_len, - dmp1, element_len, - dmq1, element_len, - iqmp, element_len, + p, (size_t)element_len, + q, (size_t)element_len, + dmp1, (size_t)element_len, + dmq1, (size_t)element_len, + iqmp, (size_t)element_len, NULL, 0, pp, tp); } @@ -586,7 +586,7 @@ } else { i2d_X509(cert, &certptr); } - if ((res = ykpiv_util_write_cert(state, get_slot_hex(slot), certdata, cert_len, compress)) != YKPIV_OK) { + if ((res = ykpiv_util_write_cert(state, get_slot_hex(slot), certdata, (size_t)cert_len, compress)) != YKPIV_OK) { fprintf(stderr, "Failed commands with device: %s\n", ykpiv_strerror(res)); } else { ret = true; @@ -797,6 +797,16 @@ return ret; } +static const struct { + int nid; + const char *ext; + int critical; +} selfsign_extensions[] = { + {NID_subject_key_identifier, "hash", 0}, + {NID_authority_key_identifier, "keyid", 0}, + {NID_basic_constraints, "CA:true", 1}, +}; + static bool selfsign_certificate(ykpiv_state *state, enum enum_key_format key_format, const char *input_file_name, enum enum_slot slot, char *subject, enum enum_hash hash, const int *serial, int validDays, const char *output_file_name) { @@ -921,6 +931,48 @@ if(nid == 0) { goto selfsign_out; } + + { + X509V3_CTX ctx; + int i; + X509V3_set_ctx(&ctx, x509, x509, NULL, NULL, 0); + + for(i = 0; i < sizeof(selfsign_extensions) / sizeof(selfsign_extensions[0]); i++) { + X509_EXTENSION *ext = NULL; + void *ext_struc; + const X509V3_EXT_METHOD *method = X509V3_EXT_get_nid(selfsign_extensions[i].nid); + + if(!method) { + fprintf(stderr, "Failed to get extension method for nid %d.\n", selfsign_extensions[i].nid); + goto selfsign_out; + } + if(method->v2i) { + STACK_OF(CONF_VALUE) *nval = X509V3_parse_list(selfsign_extensions[i].ext); + if(!nval) { + fprintf(stderr, "Failed parsing extension value for nid %d.\n", selfsign_extensions[i].nid); + goto selfsign_out; + } + ext_struc = method->v2i(method, &ctx, nval); + } else if(method->s2i) { + ext_struc = method->s2i(method, &ctx, selfsign_extensions[i].ext); + } else { + fprintf(stderr, "Unknown way to construct extension for nid %d.\n", selfsign_extensions[i].nid); + goto selfsign_out; + } + + if(!ext_struc) { + fprintf(stderr, "Failed constructing extension value for nid %d.\n", selfsign_extensions[i].nid); + goto selfsign_out; + } + + ext = X509V3_EXT_i2d(selfsign_extensions[i].nid, selfsign_extensions[i].critical, ext_struc); + if(!X509_add_ext(x509, ext, -1)) { + fprintf(stderr, "Failed adding extension %d (%d).\n", i, selfsign_extensions[i].nid); + goto selfsign_out; + } + } + } + #if (OPENSSL_VERSION_NUMBER < 0x10100000L) || defined(LIBRESSL_VERSION_NUMBER) null_parameter.type = V_ASN1_NULL; null_parameter.value.ptr = NULL; @@ -1067,6 +1119,9 @@ op = ykpiv_change_puk; } res = op(state, pin, pin_len, new_pin, new_len, &tries); + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wswitch-enum" switch (res) { case YKPIV_OK: return true; @@ -1088,6 +1143,7 @@ fprintf(stderr, "Failed changing/unblocking code, error: %s\n", ykpiv_strerror(res)); return false; } +#pragma GCC diagnostic pop } static bool delete_certificate(ykpiv_state *state, enum enum_slot slot) { @@ -1258,7 +1314,7 @@ static void print_cert_info(ykpiv_state *state, enum enum_slot slot, const EVP_MD *md, FILE *output) { - int object = ykpiv_util_slot_object(get_slot_hex(slot)); + int object = (int)ykpiv_util_slot_object(get_slot_hex(slot)); int slot_name; unsigned char data[3072]; const unsigned char *ptr = data; @@ -1376,7 +1432,9 @@ unsigned char buf[3072]; long unsigned len = sizeof(buf); int i; + uint32_t serial = 0; FILE *output_file = open_file(output_file_name, OUTPUT_TEXT); + if(!output_file) { return false; } @@ -1386,6 +1444,20 @@ return false; } + fprintf(output_file, "Version:\t"); + if (ykpiv_get_version(state, (char*)buf, (size_t)len) != YKPIV_OK) { + fprintf(output_file, "No data available\n"); + } else { + fprintf(output_file, "%s\n", (char*)buf); + } + + fprintf(output_file, "Serial Number:\t"); + if (ykpiv_get_serial(state, &serial) != YKPIV_OK) { + fprintf(output_file, "No data available\n"); + } else { + fprintf(output_file, "%d\n", serial); + } + fprintf(output_file, "CHUID:\t"); if(ykpiv_fetch_object(state, YKPIV_OBJ_CHUID, buf, &len) != YKPIV_OK) { fprintf(output_file, "No data available\n"); @@ -1714,7 +1786,7 @@ static bool attest(ykpiv_state *state, enum enum_slot slot, enum enum_key_format key_format, const char *output_file_name) { unsigned char data[2048]; - unsigned long len = sizeof(data); + size_t len = sizeof(data); bool ret = false; X509 *x509 = NULL; int key; @@ -1736,7 +1808,7 @@ if(key_format == key_format_arg_PEM) { const unsigned char *ptr = data; - int len2 = len; + int len2 = (int)len; x509 = X509_new(); if(!x509) { fprintf(stderr, "Failed allocating x509 structure.\n"); @@ -1787,7 +1859,7 @@ } if(verbosity) { - fprintf(stderr, "Writing %lu bytes of data to object %x.\n", len, id); + fprintf(stderr, "Writing %lu bytes of data to object %x.\n", (long unsigned int)len, id); } if((res = ykpiv_save_object(state, id, data, len)) != YKPIV_OK) { @@ -1858,6 +1930,7 @@ cmdline_parser_action_values[action]); return EXIT_FAILURE; } + /* fall through */ case action_arg_generate: case action_arg_importMINUS_key: case action_arg_importMINUS_certificate: @@ -1929,6 +2002,7 @@ } password = pwbuf; } + /* fall through */ case action_arg_generate: case action_arg_setMINUS_mgmMINUS_key: case action_arg_pinMINUS_retries: diff -Nru yubico-piv-tool-1.6.2/tools/fasc.pl yubico-piv-tool-1.7.0/tools/fasc.pl --- yubico-piv-tool-1.6.2/tools/fasc.pl 2017-02-03 15:17:05.000000000 +0000 +++ yubico-piv-tool-1.7.0/tools/fasc.pl 2019-01-02 07:50:49.000000000 +0000 @@ -31,7 +31,7 @@ # S9999F9999F999999F0F1F0000000000300001E # and outputs that in hex, encoded in the 5-bit form described in # "Technical Implementation Guidance: Smart Card Enabled Physical Access -# Control Systems" +# Control Systems Version 2.2", Section 6.2, Figure 7. use strict; use Bit::Vector; @@ -39,16 +39,16 @@ my %encoding = ( 0 => "00001", 1 => "10000", - 2 => "00100", - 3 => "00111", - 4 => "01000", - 5 => "01011", + 2 => "01000", + 3 => "11001", + 4 => "00100", + 5 => "10101", 6 => "01101", - 7 => "01110", - 8 => "10000", + 7 => "11100", + 8 => "00010", 9 => "10011", - S => "11010", # the examples and definitions of S and F differ - F => "10110", # but we'll go with the examples here.. + S => "11010", + F => "10110", E => "11111", ); diff -Nru yubico-piv-tool-1.6.2/windows.mk yubico-piv-tool-1.7.0/windows.mk --- yubico-piv-tool-1.6.2/windows.mk 2018-08-17 07:24:46.000000000 +0000 +++ yubico-piv-tool-1.7.0/windows.mk 2019-04-03 07:44:44.000000000 +0000 @@ -26,7 +26,7 @@ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. PACKAGE=yubico-piv-tool -OPENSSLVERSION=1.0.2p +OPENSSLVERSION=1.0.2q CHECKVERSION=0.12.0 all: usage 32bit 64bit @@ -72,6 +72,9 @@ rm -rf $(PWD)/tmp$(ARCH)/root/lib/pkgconfig/ && \ cp COPYING $(PWD)/tmp$(ARCH)/root/licenses/$(PACKAGE).txt && \ cd .. && \ + cd check-$(CHECKVERSION) && \ + make uninstall && \ + cd .. && \ cd root && \ zip -r ../../$(PACKAGE)-$(VERSION)-win$(ARCH).zip * diff -Nru yubico-piv-tool-1.6.2/ykcs11/Makefile.am yubico-piv-tool-1.7.0/ykcs11/Makefile.am --- yubico-piv-tool-1.6.2/ykcs11/Makefile.am 2017-02-03 15:17:05.000000000 +0000 +++ yubico-piv-tool-1.7.0/ykcs11/Makefile.am 2018-10-25 13:27:06.000000000 +0000 @@ -30,6 +30,7 @@ AM_CFLAGS = $(WERROR_CFLAGS) $(WARN_CFLAGS) AM_CPPFLAGS = $(OPENSSL_CFLAGS) $(PCSC_CFLAGS) AM_CPPFLAGS += -I$(top_srcdir)/lib -I$(top_builddir)/lib +AM_CPPFLAGS += -I$(top_srcdir)/tool -I$(top_builddir)/tool lib_LTLIBRARIES = libykcs11.la diff -Nru yubico-piv-tool-1.6.2/ykcs11/Makefile.in yubico-piv-tool-1.7.0/ykcs11/Makefile.in --- yubico-piv-tool-1.6.2/ykcs11/Makefile.in 2018-09-14 07:21:39.000000000 +0000 +++ yubico-piv-tool-1.7.0/ykcs11/Makefile.in 2019-04-03 07:53:50.000000000 +0000 @@ -453,7 +453,8 @@ SUBDIRS = . tests AM_CFLAGS = $(WERROR_CFLAGS) $(WARN_CFLAGS) $(am__append_3) AM_CPPFLAGS = $(OPENSSL_CFLAGS) $(PCSC_CFLAGS) -I$(top_srcdir)/lib \ - -I$(top_builddir)/lib + -I$(top_builddir)/lib -I$(top_srcdir)/tool \ + -I$(top_builddir)/tool lib_LTLIBRARIES = libykcs11.la libykcs11_la_SOURCES = ykcs11.c ykcs11.pc.in ykcs11.map ykcs11.h \ debug.h vendors.c vendors.h vendor_ids.h slot_vendors.c \ diff -Nru yubico-piv-tool-1.6.2/ykcs11/objects.c yubico-piv-tool-1.7.0/ykcs11/objects.c --- yubico-piv-tool-1.6.2/ykcs11/objects.c 2018-05-22 11:30:29.000000000 +0000 +++ yubico-piv-tool-1.7.0/ykcs11/objects.c 2019-04-03 07:44:44.000000000 +0000 @@ -306,7 +306,7 @@ buf[(*n)++] = 0x80 | (CK_BYTE)l; } -static void asn1_encode_oid(CK_CHAR_PTR oid, CK_BYTE_PTR asn1_oid, CK_ULONG_PTR len) { +static CK_RV asn1_encode_oid(CK_CHAR_PTR oid, CK_BYTE_PTR asn1_oid, CK_ULONG_PTR len) { CK_CHAR_PTR tmp = (CK_BYTE_PTR) strdup((char *)oid); CK_CHAR_PTR p = tmp; CK_BYTE_PTR q = NULL; @@ -315,6 +315,10 @@ CK_ULONG l = 0; CK_ULONG nodes; + if (tmp == NULL) { + return CKR_HOST_MEMORY; + } + q = p; *len = 0; nodes = 1; @@ -360,6 +364,8 @@ } free(tmp); + + return CKR_OK; } static CK_KEY_TYPE get_key_type(EVP_PKEY *key) { @@ -395,6 +401,7 @@ CK_BYTE_PTR data; CK_BYTE tmp[64]; CK_ULONG len = 0; + CK_RV rv; DBG("For data object %lu, get ", obj); switch (template->type) { @@ -439,7 +446,9 @@ case CKA_OBJECT_ID: // TODO: how about just storing the OID in DER ? DBG("OID"); memcpy((char *)tmp, data_objects[piv_objects[obj].sub_id].oid, sizeof(tmp)); - asn1_encode_oid(tmp, tmp, &len); + if ((rv = asn1_encode_oid(tmp, tmp, &len)) != CKR_OK) { + return rv; + } data = tmp; break; diff -Nru yubico-piv-tool-1.6.2/ykcs11/ykcs11.c yubico-piv-tool-1.7.0/ykcs11/ykcs11.c --- yubico-piv-tool-1.6.2/ykcs11/ykcs11.c 2017-11-29 08:42:14.000000000 +0000 +++ yubico-piv-tool-1.7.0/ykcs11/ykcs11.c 2019-04-03 07:44:44.000000000 +0000 @@ -1695,7 +1695,7 @@ CK_KEY_TYPE type = 0; CK_ULONG key_len = 0; CK_BYTE exp[3]; - CK_BYTE buf[1024]; + CK_BYTE buf[1024] = {0}; CK_ATTRIBUTE template[] = { {CKA_KEY_TYPE, &type, sizeof(type)}, {CKA_MODULUS_BITS, &key_len, sizeof(key_len)}, @@ -1863,12 +1863,6 @@ goto sign_out; } - if (op_info.type != YKCS11_SIGN) { - DBG("Operation not initialized"); - rv = CKR_OPERATION_NOT_INITIALIZED; - goto sign_out; - } - if (session.info.state == CKS_RO_PUBLIC_SESSION || session.info.state == CKS_RW_PUBLIC_SESSION) { DBG("User is not logged in"); @@ -1942,7 +1936,7 @@ *pulSignatureLen = sizeof(op_info.buf); - piv_rv = ykpiv_sign_data(piv_state, op_info.buf, op_info.buf_len, pSignature, pulSignatureLen, op_info.op.sign.algo, op_info.op.sign.key_id); + piv_rv = ykpiv_sign_data(piv_state, op_info.buf, op_info.buf_len, op_info.buf, pulSignatureLen, op_info.op.sign.algo, op_info.op.sign.key_id); if (piv_rv != YKPIV_OK) { if (piv_rv == YKPIV_AUTHENTICATION_ERROR) { DBG("Operation requires authentication or touch"); @@ -1958,13 +1952,13 @@ DBG("Got %lu bytes back", *pulSignatureLen); #if YKCS11_DBG == 1 - dump_data(pSignature, *pulSignatureLen, stderr, CK_TRUE, format_arg_hex); + dump_data(op_info.buf, *pulSignatureLen, stderr, CK_TRUE, format_arg_hex); #endif if (!is_RSA_mechanism(op_info.mechanism.mechanism)) { // ECDSA, we must remove the DER encoding and only return R,S // as required by the specs - strip_DER_encoding_from_ECSIG(pSignature, pulSignatureLen); + strip_DER_encoding_from_ECSIG(op_info.buf, pulSignatureLen); DBG("After removing DER encoding %lu", *pulSignatureLen); #if YKCS11_DBG == 1 @@ -1972,7 +1966,7 @@ #endif } - op_info.type = YKCS11_NOOP; + memcpy(pSignature, op_info.buf, *pulSignatureLen); rv = CKR_OK; diff -Nru yubico-piv-tool-1.6.2/ykcs11/ykcs11-version.h yubico-piv-tool-1.7.0/ykcs11/ykcs11-version.h --- yubico-piv-tool-1.6.2/ykcs11/ykcs11-version.h 2018-09-14 07:33:13.000000000 +0000 +++ yubico-piv-tool-1.7.0/ykcs11/ykcs11-version.h 2019-04-03 07:53:52.000000000 +0000 @@ -43,7 +43,7 @@ * version number. Used together with ykneomgr_check_version() to verify * header file and run-time library consistency. */ -#define YKCS11_VERSION_STRING "1.6.2" +#define YKCS11_VERSION_STRING "1.7.0" /** * YKCS11_VERSION_NUMBER @@ -53,7 +53,7 @@ * this symbol will have the value 0x01020300. The last two digits * are only used between public releases, and will otherwise be 00. */ -#define YKCS11_VERSION_NUMBER 0x010602 +#define YKCS11_VERSION_NUMBER 0x010700 /** * YKCS11_VERSION_MAJOR @@ -71,7 +71,7 @@ * level of the header file version number. For example, when the * header version is 1.2.3 this symbol will be 2. */ -#define YKCS11_VERSION_MINOR 6 +#define YKCS11_VERSION_MINOR 7 /** * YKCS11_VERSION_PATCH @@ -80,7 +80,7 @@ * level of the header file version number. For example, when the * header version is 1.2.3 this symbol will be 3. */ -#define YKCS11_VERSION_PATCH 2 +#define YKCS11_VERSION_PATCH 0 #ifdef __cplusplus }