Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package yubico-piv-tool for openSUSE:Factory 
checked in at 2022-02-01 16:59:52
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/yubico-piv-tool (Old)
 and      /work/SRC/openSUSE:Factory/.yubico-piv-tool.new.1898 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "yubico-piv-tool"

Tue Feb  1 16:59:52 2022 rev:15 rq:950455 version:2.2.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/yubico-piv-tool/yubico-piv-tool.changes  
2021-03-02 14:32:52.250970335 +0100
+++ 
/work/SRC/openSUSE:Factory/.yubico-piv-tool.new.1898/yubico-piv-tool.changes    
    2022-02-01 17:00:03.828845965 +0100
@@ -1,0 +2,11 @@
+Mon Jan 31 20:31:47 UTC 2022 - Dirk M??ller <dmuel...@suse.com>
+
+- update to 2.2.1:
+  * ykpiv: Minor bug fixes
+  * ykcs11: Improved handling of object attributes
+  * ykcs11: Update flags for EC related mechanisms
+  * ykcs11: Minor bug fixes
+  * test: Improved testing
+  * doc: Improved documentation
+
+-------------------------------------------------------------------

Old:
----
  yubico-piv-tool-2.2.0.tar.gz
  yubico-piv-tool-2.2.0.tar.gz.sig

New:
----
  yubico-piv-tool-2.2.1.tar.gz
  yubico-piv-tool-2.2.1.tar.gz.sig

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ yubico-piv-tool.spec ++++++
--- /var/tmp/diff_new_pack.wdcLLb/_old  2022-02-01 17:00:04.488841324 +0100
+++ /var/tmp/diff_new_pack.wdcLLb/_new  2022-02-01 17:00:04.492841295 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package yubico-piv-tool
 #
-# Copyright (c) 2021 SUSE LLC
+# Copyright (c) 2022 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -18,7 +18,7 @@
 
 %define sover  2
 Name:           yubico-piv-tool
-Version:        2.2.0
+Version:        2.2.1
 Release:        0
 Summary:        Yubico YubiKey NEO CCID Manager
 License:        BSD-2-Clause

++++++ pthread-link.patch ++++++
--- /var/tmp/diff_new_pack.wdcLLb/_old  2022-02-01 17:00:04.532841014 +0100
+++ /var/tmp/diff_new_pack.wdcLLb/_new  2022-02-01 17:00:04.536840986 +0100
@@ -1,7 +1,7 @@
-Index: yubico-piv-tool-2.2.0/ykcs11/CMakeLists.txt
+Index: yubico-piv-tool-2.2.1/ykcs11/CMakeLists.txt
 ===================================================================
---- yubico-piv-tool-2.2.0.orig/ykcs11/CMakeLists.txt
-+++ yubico-piv-tool-2.2.0/ykcs11/CMakeLists.txt
+--- yubico-piv-tool-2.2.1.orig/ykcs11/CMakeLists.txt
++++ yubico-piv-tool-2.2.1/ykcs11/CMakeLists.txt
 @@ -60,6 +60,9 @@ if(${ENABLE_HARDWARE_TESTS})
      set(HW_TESTS 1)
  endif(${ENABLE_HARDWARE_TESTS})
@@ -19,6 +19,6 @@
 -target_link_libraries(ykcs11_shared ${LIBCRYPTO_LDFLAGS} ykpiv_shared)
 +target_link_libraries(ykcs11_shared ${LIBCRYPTO_LDFLAGS} ykpiv_shared 
Threads::Threads)
  set_target_properties(ykcs11_shared PROPERTIES SOVERSION ${SO_VERSION} 
VERSION ${VERSION})
- set_target_properties(ykcs11_shared PROPERTIES INSTALL_RPATH 
"${YKPIV_INSTALL_LIB_DIR}")
- if(WIN32)
+ if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
+     set_target_properties(ykcs11_shared PROPERTIES INSTALL_RPATH 
"${YKPIV_INSTALL_LIB_DIR}")
 

++++++ yubico-piv-tool-2.2.0.tar.gz -> yubico-piv-tool-2.2.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yubico-piv-tool-2.2.0/CMakeLists.txt 
new/yubico-piv-tool-2.2.1/CMakeLists.txt
--- old/yubico-piv-tool-2.2.0/CMakeLists.txt    2020-12-17 09:06:58.000000000 
+0100
+++ new/yubico-piv-tool-2.2.1/CMakeLists.txt    2021-09-03 00:10:22.000000000 
+0200
@@ -34,7 +34,7 @@
 
 set (yubico_piv_tool_VERSION_MAJOR 2)
 set (yubico_piv_tool_VERSION_MINOR 2)
-set (yubico_piv_tool_VERSION_PATCH 0)
+set (yubico_piv_tool_VERSION_PATCH 1)
 set (VERSION 
"${yubico_piv_tool_VERSION_MAJOR}.${yubico_piv_tool_VERSION_MINOR}.${yubico_piv_tool_VERSION_PATCH}")
 set (SO_VERSION 2)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yubico-piv-tool-2.2.0/NEWS 
new/yubico-piv-tool-2.2.1/NEWS
--- old/yubico-piv-tool-2.2.0/NEWS      2020-12-17 09:06:58.000000000 +0100
+++ new/yubico-piv-tool-2.2.1/NEWS      2021-09-03 00:10:22.000000000 +0200
@@ -1,5 +1,14 @@
 yubico-piv-tool NEWS -- History of user-visible changes.        -*- outline -*-
 
+* Version 2.2.1 (released 2021-09-07)
+
+** ykpiv: Minor bug fixes
+** ykcs11: Improved handling of object attributes
+** ykcs11: Update flags for EC related mechanisms
+** ykcs11: Minor bug fixes
+** test: Improved testing
+** doc: Improved documentation
+
 * Version 2.2.0 (released 2021-01-20)
 
 ** ykpiv: Increased SO version
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yubico-piv-tool-2.2.0/README 
new/yubico-piv-tool-2.2.1/README
--- old/yubico-piv-tool-2.2.0/README    2020-12-17 09:06:58.000000000 +0100
+++ new/yubico-piv-tool-2.2.1/README    2021-09-03 00:10:22.000000000 +0200
@@ -92,19 +92,23 @@
 
 === Building on Windows
 
-Building on Windows require MSBuild or Visual Studio and the MSVC compiler.
-
-On Windows, `getopt` is needed to read command line arguments. The path to 
`getopt`
-library and include file need to be specified as a command line argument to 
`cmake`.
-Also the path to OpenSSL need to be specified either as a command line 
argument to `cmake`
+Building on Windows requires MSBuild or Visual Studio and the MSVC compiler. 
It also requires
+building the binaries from the 
https://developers.yubico.com/yubico-piv-tool/Releases/[source release] package
+and not from the source checked out from the repository on GitHub. This is 
because some files that are part of
+the command line shell are generated but they cannot, currently, be generated 
on Windows. Those files are, however,
+included in the source release package.
+
+On Windows, `getopt` is needed to read command line arguments. The easiest way 
to install `getopt`
+is with the 
https://docs.microsoft.com/en-us/cpp/build/vcpkg?view=msvc-160[`vcpkg` package 
manager]. The
+path to `getopt` DLL library and include file need to be specified as a 
command line argument to `cmake`.
+Also the path to OpenSSL needs to be specified either as a command line 
argument to `cmake`
 or by setting the environment variable `OPENSSL_ROOT_DIR`
 
-The command line examples bellow are for `PowerShell` and the prerequisites
-were installed from source.
+The command line examples bellow are for `PowerShell` and the prerequisites 
were installed from source (using `vcpkg`).
 
     $ env:OPENSSL_ROOT_DIR ="PATH/TO/OPENSSL_DIR"
     $ mkdir build; cd build
-    $ cmake -A ARCH -DGETOPT_LIB_DIR="PATH/TO/GETOPT_DIR/lib" 
-DGETOPT_INCLUDE_DIR="PATH/TO/GETOPT_DIR/include ..
+    $ cmake -A <ARCH> -DGETOPT_LIB_DIR="PATH/TO/GETOPT_DIR/lib" 
-DGETOPT_INCLUDE_DIR="PATH/TO/GETOPT_DIR/include ..
     $ cmake --build .
 
 To run the tests, `check` is used. The path to the `check` directory needs to 
be
@@ -113,7 +117,7 @@
 
     $ env:OPENSSL_ROOT_DIR ="PATH/TO/OPENSSL_DIR"
     $ mkdir build; cd build
-    $ cmake -A ARCH -DGETOPT_LIB_DIR="PATH/TO/GETOPT_DIR/lib" 
-DGETOPT_INCLUDE_DIR="PATH/TO/GETOPT_DIR/include 
-DCHECK_PATH="PATH/TO/CHECK_DIR" ..
+    $ cmake -A <ARCH> -DGETOPT_LIB_DIR="PATH/TO/GETOPT_DIR/lib" 
-DGETOPT_INCLUDE_DIR="PATH/TO/GETOPT_DIR/include 
-DCHECK_PATH="PATH/TO/CHECK_DIR" ..
     $ cmake --build .
     $ $env:Path 
+=";PATH/TO//CHECK_DIR/bin;PATH/TO/OPENSSL_DIR/bin;PATH/TO/build\lib\Debug;PATH/TO/build\ykcs11\Debug"
     $ ctest.exe -C Debug
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yubico-piv-tool-2.2.0/cmake/help2man.cmake 
new/yubico-piv-tool-2.2.1/cmake/help2man.cmake
--- old/yubico-piv-tool-2.2.0/cmake/help2man.cmake      2020-12-17 
09:06:58.000000000 +0100
+++ new/yubico-piv-tool-2.2.1/cmake/help2man.cmake      2021-09-03 
00:10:22.000000000 +0200
@@ -30,9 +30,9 @@
     message (FATAL_ERROR "Cannot find help2man. Please install it.")
 ENDIF ()
 
-MACRO (add_help2man_manpage file command)
+MACRO (add_help2man_manpage file command description)
     add_custom_command (OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/${file}
-            COMMAND  ${HELP2MAN_LOCATION} ARGS -s1 -N -o 
${CMAKE_CURRENT_SOURCE_DIR}/${file} ./${command}
+            COMMAND  ${HELP2MAN_LOCATION} ARGS -s1 -N -n ${description} -o 
${CMAKE_CURRENT_SOURCE_DIR}/${file} ./${command}
             DEPENDS ${command}
             COMMENT "Building manpage for ${command}")
-ENDMACRO ()
\ No newline at end of file
+ENDMACRO ()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yubico-piv-tool-2.2.0/debian/changelog 
new/yubico-piv-tool-2.2.1/debian/changelog
--- old/yubico-piv-tool-2.2.0/debian/changelog  2020-12-17 09:06:58.000000000 
+0100
+++ new/yubico-piv-tool-2.2.1/debian/changelog  2021-09-03 00:10:22.000000000 
+0200
@@ -1,3 +1,9 @@
+yubico-piv-tool (2.2.1) stable; urgency=medium
+
+  * 2.2.1 release
+
+ -- Aveen Ismail <aveen.ism...@yubico.com>  Thu, 2 Sep 2021 13:14:40 +0100
+
 yubico-piv-tool (2.2.0) stable; urgency=medium
 
   * 2.2.0 release
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yubico-piv-tool-2.2.0/doc/YKCS11/Functions_and_values.adoc 
new/yubico-piv-tool-2.2.1/doc/YKCS11/Functions_and_values.adoc
--- old/yubico-piv-tool-2.2.0/doc/YKCS11/Functions_and_values.adoc      
2020-12-17 09:06:58.000000000 +0100
+++ new/yubico-piv-tool-2.2.1/doc/YKCS11/Functions_and_values.adoc      
2021-09-03 00:10:22.000000000 +0200
@@ -152,43 +152,43 @@
 
 |82 | Private key for Retired Key 1 | Public key for Retired Key 1 | X.509 
Certificate for Retired Key 1 |X.509 Certificate for PIV Attestation 82 |X.509 
Certificate for Retired Key 1 
 
-|83 | Private key for Retired Key 2 | Public key for Retired Key 2 | X.509 
Certificate for Retired Key 2 | X.509 Certificate for PIV Attestation 82 |X.509 
Certificate for Retired Key 2 
+|83 | Private key for Retired Key 2 | Public key for Retired Key 2 | X.509 
Certificate for Retired Key 2 | X.509 Certificate for PIV Attestation 83 |X.509 
Certificate for Retired Key 2
 
-|84 | Private key for Retired Key 3 | Public key for Retired Key 3 | X.509 
Certificate for Retired Key 3 | X.509 Certificate for PIV Attestation 83 |X.509 
Certificate for Retired Key 3 
+|84 | Private key for Retired Key 3 | Public key for Retired Key 3 | X.509 
Certificate for Retired Key 3 | X.509 Certificate for PIV Attestation 84 |X.509 
Certificate for Retired Key 3
 
-|85 | Private key for Retired Key 4 | Public key for Retired Key 4 | X.509 
Certificate for Retired Key 4 | X.509 Certificate for PIV Attestation 84 | 
X.509 Certificate for Retired Key 4 
+|85 | Private key for Retired Key 4 | Public key for Retired Key 4 | X.509 
Certificate for Retired Key 4 | X.509 Certificate for PIV Attestation 85 | 
X.509 Certificate for Retired Key 4
 
-|86 | Private key for Retired Key 5 | Public key for Retired Key 5 | X.509 
Certificate for Retired Key 5 | X.509 Certificate for PIV Attestation 85 | 
X.509 Certificate for Retired Key 5 
+|86 | Private key for Retired Key 5 | Public key for Retired Key 5 | X.509 
Certificate for Retired Key 5 | X.509 Certificate for PIV Attestation 86 | 
X.509 Certificate for Retired Key 5
 
-|87 | Private key for Retired Key 6 | Public key for Retired Key 6 | X.509 
Certificate for Retired Key 6 | X.509 Certificate for PIV Attestation 86| X.509 
Certificate for Retired Key 6 
+|87 | Private key for Retired Key 6 | Public key for Retired Key 6 | X.509 
Certificate for Retired Key 6 | X.509 Certificate for PIV Attestation 87| X.509 
Certificate for Retired Key 6
 
-|88 | Private key for Retired Key 7 | Public key for Retired Key 7 | X.509 
Certificate for Retired Key 7 | X.509 Certificate for PIV Attestation 87 | 
X.509 Certificate for Retired Key 7 
+|88 | Private key for Retired Key 7 | Public key for Retired Key 7 | X.509 
Certificate for Retired Key 7 | X.509 Certificate for PIV Attestation 88 | 
X.509 Certificate for Retired Key 7
 
-|89 | Private key for Retired Key 8 | Public key for Retired Key 8 | X.509 
Certificate for Retired Key 8 | X.509 Certificate for PIV Attestation 88 | 
X.509 Certificate for Retired Key 8 
+|89 | Private key for Retired Key 8 | Public key for Retired Key 8 | X.509 
Certificate for Retired Key 8 | X.509 Certificate for PIV Attestation 89 | 
X.509 Certificate for Retired Key 8
 
-|8a | Private key for Retired Key 9 | Public key for Retired Key 9 | X.509 
Certificate for Retired Key 9 | X.509 Certificate for PIV Attestation 89 | 
X.509 Certificate for Retired Key 9 
+|8a | Private key for Retired Key 9 | Public key for Retired Key 9 | X.509 
Certificate for Retired Key 9 | X.509 Certificate for PIV Attestation 8a | 
X.509 Certificate for Retired Key 9
 
-|8b | Private key for Retired Key 10 | Public key for Retired Key 10 | X.509 
Certificate for Retired Key 10 | X.509 Certificate for PIV Attestation 8a | 
X.509 Certificate for Retired Key 10 
+|8b | Private key for Retired Key 10 | Public key for Retired Key 10 | X.509 
Certificate for Retired Key 10 | X.509 Certificate for PIV Attestation 8b | 
X.509 Certificate for Retired Key 10
 
-|8c | Private key for Retired Key 11 | Public key for Retired Key 11 | X.509 
Certificate for Retired Key 11 | X.509 Certificate for PIV Attestation 8b | 
X.509 Certificate for Retired Key 11 
+|8c | Private key for Retired Key 11 | Public key for Retired Key 11 | X.509 
Certificate for Retired Key 11 | X.509 Certificate for PIV Attestation 8c | 
X.509 Certificate for Retired Key 11
 
-|8d | Private key for Retired Key 12 | Public key for Retired Key 12 | X.509 
Certificate for Retired Key 12 | X.509 Certificate for PIV Attestation 8c | 
X.509 Certificate for Retired Key 12 
+|8d | Private key for Retired Key 12 | Public key for Retired Key 12 | X.509 
Certificate for Retired Key 12 | X.509 Certificate for PIV Attestation 8d | 
X.509 Certificate for Retired Key 12
 
-|8e | Private key for Retired Key 13 | Public key for Retired Key 13 | X.509 
Certificate for Retired Key 13 | X.509 Certificate for PIV Attestation 8d | 
X.509 Certificate for Retired Key 13 
+|8e | Private key for Retired Key 13 | Public key for Retired Key 13 | X.509 
Certificate for Retired Key 13 | X.509 Certificate for PIV Attestation 8e | 
X.509 Certificate for Retired Key 13
 
-|8f | Private key for Retired Key 14 | Public key for Retired Key 14 | X.509 
Certificate for Retired Key 14 | X.509 Certificate for PIV Attestation 8e | 
X.509 Certificate for Retired Key 14 
+|8f | Private key for Retired Key 14 | Public key for Retired Key 14 | X.509 
Certificate for Retired Key 14 | X.509 Certificate for PIV Attestation 8f | 
X.509 Certificate for Retired Key 14
 
-|90 | Private key for Retired Key 15 | Public key for Retired Key 15 | X.509 
Certificate for Retired Key 15 | X.509 Certificate for PIV Attestation 8f | 
X.509 Certificate for Retired Key 15 
+|90 | Private key for Retired Key 15 | Public key for Retired Key 15 | X.509 
Certificate for Retired Key 15 | X.509 Certificate for PIV Attestation 90 | 
X.509 Certificate for Retired Key 15
 
-|91 | Private key for Retired Key 16 | Public key for Retired Key 16 | X.509 
Certificate for Retired Key 16 | X.509 Certificate for PIV Attestation 90 | 
X.509 Certificate for Retired Key 16 
+|91 | Private key for Retired Key 16 | Public key for Retired Key 16 | X.509 
Certificate for Retired Key 16 | X.509 Certificate for PIV Attestation 91 | 
X.509 Certificate for Retired Key 16
 
-|92 | Private key for Retired Key 17 | Public key for Retired Key 17 | X.509 
Certificate for Retired Key 17 | X.509 Certificate for PIV Attestation 91 | 
X.509 Certificate for Retired Key 17 
+|92 | Private key for Retired Key 17 | Public key for Retired Key 17 | X.509 
Certificate for Retired Key 17 | X.509 Certificate for PIV Attestation 92 | 
X.509 Certificate for Retired Key 17
 
-|93 | Private key for Retired Key 18 | Public key for Retired Key 18 | X.509 
Certificate for Retired Key 18 | X.509 Certificate for PIV Attestation 92 | 
X.509 Certificate for Retired Key 18 
+|93 | Private key for Retired Key 18 | Public key for Retired Key 18 | X.509 
Certificate for Retired Key 18 | X.509 Certificate for PIV Attestation 93 | 
X.509 Certificate for Retired Key 18
 
-|94 | Private key for Retired Key 19 | Public key for Retired Key 19 | X.509 
Certificate for Retired Key 19 | X.509 Certificate for PIV Attestation 93 | 
X.509 Certificate for Retired Key 19 
+|94 | Private key for Retired Key 19 | Public key for Retired Key 19 | X.509 
Certificate for Retired Key 19 | X.509 Certificate for PIV Attestation 94 | 
X.509 Certificate for Retired Key 19
 
-|95 | Private key for Retired Key 20 | Public key for Retired Key 20 | X.509 
Certificate for Retired Key 20 | X.509 Certificate for PIV Attestation 94 | 
X.509 Certificate for Retired Key 20 
+|95 | Private key for Retired Key 20 | Public key for Retired Key 20 | X.509 
Certificate for Retired Key 20 | X.509 Certificate for PIV Attestation 95 | 
X.509 Certificate for Retired Key 20
 
-|f9 | Private key for PIV Attestation | Public key for PIV Attestation | X.509 
Certificate for PIV Attestation | X.509 Certificate for PIV Attestation 95 | 
X.509 Certificate for PIV Attestation 
+|f9 | Private key for PIV Attestation | Public key for PIV Attestation | X.509 
Certificate for PIV Attestation | X.509 Certificate for PIV Attestation f9 | 
X.509 Certificate for PIV Attestation
 |=================================
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yubico-piv-tool-2.2.0/doc/YKCS11/index.adoc 
new/yubico-piv-tool-2.2.1/doc/YKCS11/index.adoc
--- old/yubico-piv-tool-2.2.0/doc/YKCS11/index.adoc     2020-12-17 
09:06:58.000000000 +0100
+++ new/yubico-piv-tool-2.2.1/doc/YKCS11/index.adoc     2021-09-03 
00:10:22.000000000 +0200
@@ -38,7 +38,7 @@
 
 3- Under System Variables, highlight ???Path??? and click ???Edit??????
 
-4- Click ???New??? and add the absolute path to yubico-piv-tool/bin
+4- Click ???New??? and add the absolute path to `Yubico PIV Tool\bin` 
 
 If setting the system path is not desirable, the `libykpiv.dll` and 
`libcrypto-1_1.dll` can be copied into the same
 directory as the application that needs to access the ykcs11 module.
@@ -132,4 +132,4 @@
   $ make
   $ sudo make install
 
-It is also possible to use 
https://github.com/OpenSC/OpenSC/wiki/Using-OpenSC[PKCS#11 Spy], as provided by 
OpenSC, to inspect the PKCS#11 communication.
\ No newline at end of file
+It is also possible to use 
https://github.com/OpenSC/OpenSC/wiki/Using-OpenSC[PKCS#11 Spy], as provided by 
OpenSC, to inspect the PKCS#11 communication.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yubico-piv-tool-2.2.0/lib/CMakeLists.txt 
new/yubico-piv-tool-2.2.1/lib/CMakeLists.txt
--- old/yubico-piv-tool-2.2.0/lib/CMakeLists.txt        2020-12-17 
09:06:58.000000000 +0100
+++ new/yubico-piv-tool-2.2.1/lib/CMakeLists.txt        2021-09-03 
00:10:22.000000000 +0200
@@ -63,7 +63,9 @@
 add_library(ykpiv_shared SHARED ${SOURCE})
 target_link_libraries(ykpiv_shared ${LIBCRYPTO_LIBRARIES} ${PCSC_LIBRARIES} 
${PCSC_WIN_LIBS} ${PCSC_MACOSX_LIBS} ${PCSC_CUSTOM_LIBS})
 set_target_properties(ykpiv_shared PROPERTIES SOVERSION ${SO_VERSION} VERSION 
${VERSION})
-set_target_properties(ykpiv_shared PROPERTIES INSTALL_RPATH 
"${YKPIV_INSTALL_LIB_DIR}")
+if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
+    set_target_properties(ykpiv_shared PROPERTIES INSTALL_RPATH 
"${YKPIV_INSTALL_LIB_DIR}")
+endif()
 if(WIN32)
     set_target_properties(ykpiv_shared PROPERTIES OUTPUT_NAME libykpiv)
 else(WIN32)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yubico-piv-tool-2.2.0/lib/ykpiv-config.h 
new/yubico-piv-tool-2.2.1/lib/ykpiv-config.h
--- old/yubico-piv-tool-2.2.0/lib/ykpiv-config.h        2020-12-17 
09:07:52.000000000 +0100
+++ new/yubico-piv-tool-2.2.1/lib/ykpiv-config.h        2021-09-03 
00:10:51.000000000 +0200
@@ -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 "2.2.0"
+#define YKPIV_VERSION_STRING "2.2.1"
 
        /**
         * YKPIV_VERSION_NUMBER
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yubico-piv-tool-2.2.0/lib/ykpiv.pc 
new/yubico-piv-tool-2.2.1/lib/ykpiv.pc
--- old/yubico-piv-tool-2.2.0/lib/ykpiv.pc      2020-12-17 09:07:52.000000000 
+0100
+++ new/yubico-piv-tool-2.2.1/lib/ykpiv.pc      2021-09-03 00:10:51.000000000 
+0200
@@ -33,7 +33,7 @@
 Name: yubico-piv-tool
 Description: Yubico PIV C Library
 URL: https://www.yubico.com/
-Version: 2.2.0
+Version: 2.2.1
 Requires.private: libcrypto
 Libs: -L${libdir} -lykpiv
 Cflags: -I${includedir}/ykpiv
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yubico-piv-tool-2.2.0/resources/macos/make_universal_binaries.sh 
new/yubico-piv-tool-2.2.1/resources/macos/make_universal_binaries.sh
--- old/yubico-piv-tool-2.2.0/resources/macos/make_universal_binaries.sh        
1970-01-01 01:00:00.000000000 +0100
+++ new/yubico-piv-tool-2.2.1/resources/macos/make_universal_binaries.sh        
2021-09-03 00:10:22.000000000 +0200
@@ -0,0 +1,34 @@
+#!/bin/bash
+
+# Script to produce universal binaries for OSX by combining 2 binary sets
+if [ "$#" -ne 2 ]; then
+    echo "This script combines x86_64 and arm64 binaries into universal 
binaries for MacOS"
+    echo ""
+    echo "      Usage: ./make_universal_binaries.sh <path/to/x86_64_binaries> 
<path/to/arm64_binaries>"
+    echo "";
+    exit 0
+fi
+
+X86_64_PATH=$1
+ARM64_PATH=$2
+UNIVERSAL_PATH=universal
+
+set -x
+
+mkdir -p universal/usr/local/bin universal/usr/local/lib
+
+for f in $X86_64_PATH/usr/local/bin/*; do
+  filename="$(basename $f)"
+  lipo -create -output $UNIVERSAL_PATH/usr/local/bin/$filename  
$X86_64_PATH/usr/local/bin/$filename $ARM64_PATH/usr/local/bin/$filename
+done
+
+for f in $X86_64_PATH/usr/local/lib/*.dylib; do
+  filename="$(basename $f)"
+  lipo -create -output $UNIVERSAL_PATH/usr/local/lib/$filename 
$X86_64_PATH/usr/local/lib/$filename $ARM64_PATH/usr/local/lib/$filename
+done
+
+cp -r $X86_64_PATH/usr/local/share $UNIVERSAL_PATH/usr/local/
+cp -r $X86_64_PATH/usr/local/licenses $UNIVERSAL_PATH/usr/local/
+cp -r $X86_64_PATH/usr/local/include $UNIVERSAL_PATH/usr/local/
+
+set +x
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yubico-piv-tool-2.2.0/resources/scripts/cmdline_test.sh 
new/yubico-piv-tool-2.2.1/resources/scripts/cmdline_test.sh
--- old/yubico-piv-tool-2.2.0/resources/scripts/cmdline_test.sh 2020-12-17 
09:06:58.000000000 +0100
+++ new/yubico-piv-tool-2.2.1/resources/scripts/cmdline_test.sh 2021-09-03 
00:10:22.000000000 +0200
@@ -10,8 +10,11 @@
   BIN=$1 # path to the yubico-piv-tool command line tool
 fi
 
+
+SLOTS=('9a' '9c' '9d' '9e' '82' '83' '84' '85' '86' '87' '88' '89' '8a' '8b' 
'8c' '8d' '8e' '8f' '90' '91' '92' '93' '94' '95')
+
 set -e
-set -x
+#set -x
 
 if [ -e yubico-piv-tool_test_dir ];
 then
@@ -38,132 +41,133 @@
 $BIN -achange-puk -P000000 -N00000000 || true
 $BIN -areset
 
-echo "********************** Generate ECCP256 in 9a ********************* "
+echo "********************** Generate ECCP256 in all slots 
********************* "
 
-# Generate key on-board, issue certificate, and verify it
-$BIN -agenerate -s9a -AECCP256 -o key_9a.pub
-$BIN -averify -P123456 -s9a 
-S'/CN=YubicoTestECCP256/OU=YubicoGenerated/O=yubico.com/' -aselfsign -i 
key_9a.pub -o cert_9a.pem
-$BIN -averify -P123456 -s9a -atest-signature -i cert_9a.pem
-$BIN -aimport-certificate -P123456 -s9a -i cert_9a.pem
-
-# Read status and validate fields
-STATUS=$($BIN -astatus)
-echo "$STATUS"
-ALGO_9A=$(echo "$STATUS" |grep "Slot 9a" -A 6 |grep "Algorithm" |tr -d 
"[:blank:]")
-if [ "x$ALGO_9A" != "xAlgorithm:ECCP256" ]; then
-    echo "$ALGO_9A"
+for slot in "${SLOTS[@]}"
+do
+  echo "Generating ECCP256 on slot $slot"
+  $BIN -agenerate -s $slot -AECCP256 -o key.pub
+  $BIN -averify -P123456 -s$slot 
-S'/CN=YubicoTestECCP256/OU=YubicoGenerated/O=yubico.com/' --valid-days '5' 
-aselfsign -i key.pub -o cert.pem
+  $BIN -averify -P123456 -s$slot -atest-signature -i cert.pem
+  $BIN -aimport-certificate -P123456 -s$slot -i cert.pem
+
+  # Read status and validate fields
+  STATUS=$($BIN -astatus)
+  echo "$STATUS"
+  ALGO=$(echo "$STATUS" |grep "Slot $slot" -A 6 |grep "Algorithm" |tr -d 
"[:blank:]")
+  if [ "x$ALGO" != "xAlgorithm:ECCP256" ]; then
+    echo "$ALGO"
     echo "Generated algorithm incorrect." >/dev/stderr
     exit 1
-fi
+  fi
 
-SUBJECT_9A=$(echo "$STATUS" |grep "Slot 9a" -A 6 |grep "Subject DN" |tr -d 
"[:blank:]")
-if [ "x$SUBJECT_9A" != 
"xSubjectDN:CN=YubicoTestECCP256,OU=YubicoGenerated,O=yubico.com" ]; then
-    echo "$SUBJECT_9A"
+  SUBJECT=$(echo "$STATUS" |grep "Slot $slot" -A 6 |grep "Subject DN" |tr -d 
"[:blank:]")
+  if [ "x$SUBJECT" != 
"xSubjectDN:CN=YubicoTestECCP256,OU=YubicoGenerated,O=yubico.com" ]; then
+    echo "$SUBJECT"
     echo "Certificate subject incorrect." >/dev/stderr
     exit 1
-fi
+  fi
 
-$BIN -a verify-pin -P123456 --sign -s 9a -A ECCP256 -i data.txt -o data.sig
-exitcode=$?
-if [ "$exitcode" != "0" ]; then
-    exit $exitcode
-fi
+  $BIN -a verify-pin -P123456 --sign -s $slot -A ECCP256 -i data.txt -o 
data.sig
+done
 
-echo "********************** Generate ECCP384 in 9c ********************* "
 
-# Generate key on-board, issue certificate, and verify it
-$BIN -agenerate -s9c -AECCP384 -o key_9c.pub
-$BIN -averify -P123456 -s9c 
-S'/CN=YubicoTestECCP384/OU=YubicoGenerated/O=yubico.com/' -aselfsign -i 
key_9c.pub -o cert_9c.pem
-$BIN -averify -P123456 -s9c -atest-signature -i cert_9c.pem
-$BIN -aimport-certificate -P123456 -s9c -i cert_9c.pem
-
-# Read status and validate fields
-STATUS=$($BIN -astatus)
-echo "$STATUS"
-ALGO_9C=$(echo "$STATUS" |grep "Slot 9c" -A 6 |grep "Algorithm" |tr -d 
"[:blank:]")
-if [ "x$ALGO_9C" != "xAlgorithm:ECCP384" ]; then
-    echo "$ALGO_9C"
+echo "********************** Generate ECCP384 in all ********************* "
+
+for slot in "${SLOTS[@]}"
+do
+  # Generate key on-board, issue certificate, and verify it
+  $BIN -agenerate -s$slot -AECCP384 -o key.pub
+  $BIN -averify -P123456 -s$slot 
-S'/CN=YubicoTestECCP384/OU=YubicoGenerated/O=yubico.com/' -aselfsign -i 
key.pub -o cert.pem
+  $BIN -averify -P123456 -s$slot -atest-signature -i cert.pem
+  $BIN -aimport-certificate -P123456 -s$slot -i cert.pem
+
+  # Read status and validate fields
+  STATUS=$($BIN -astatus)
+  echo "$STATUS"
+  ALGO=$(echo "$STATUS" |grep "Slot $slot" -A 6 |grep "Algorithm" |tr -d 
"[:blank:]")
+  if [ "x$ALGO" != "xAlgorithm:ECCP384" ]; then
+    echo "$ALGO"
     echo "Generated algorithm incorrect." >/dev/stderr
     exit 1
-fi
+  fi
 
-SUBJECT_9C=$(echo "$STATUS" |grep "Slot 9c" -A 6 |grep "Subject DN" |tr -d 
"[:blank:]")
-if [ "x$SUBJECT_9C" != 
"xSubjectDN:CN=YubicoTestECCP384,OU=YubicoGenerated,O=yubico.com" ]; then
-    echo "$SUBJECT_9C"
+  SUBJECT=$(echo "$STATUS" |grep "Slot $slot" -A 6 |grep "Subject DN" |tr -d 
"[:blank:]")
+  if [ "x$SUBJECT" != 
"xSubjectDN:CN=YubicoTestECCP384,OU=YubicoGenerated,O=yubico.com" ]; then
+    echo "$SUBJECT"
     echo "Certificate subject incorrect." >/dev/stderr
     exit 1
-fi
+  fi
 
-$BIN -a verify-pin -P123456 --sign -s 9c -A ECCP384 -i data.txt -o data.sig
-exitcode=$?
-if [ "$exitcode" != "0" ]; then
-    exit $exitcode
-fi
+  $BIN -a verify-pin -P123456 --sign -s $slot -A ECCP384 -i data.txt -o 
data.sig
+done
 
-echo "********************** Generate RSA1024 in 9d ********************* "
+echo "********************** Generate RSA1024 in all slots 
********************* "
 
-# Generate key on-board, issue certificate, and verify it
-$BIN -agenerate -s9d -ARSA1024 -o key_9d.pub
-$BIN -averify -P123456 -s9d 
-S'/CN=YubicoTestRSA1024/OU=YubicoGenerated/O=yubico.com/' -aselfsign -i 
key_9d.pub -o cert_9d.pem
-$BIN -averify -P123456 -s9d -atest-signature -i cert_9d.pem
-$BIN -aimport-certificate -P123456 -s9d -i cert_9d.pem
-
-# Read status and validate fields
-STATUS=$($BIN -astatus)
-echo "$STATUS"
-ALGO_9D=$(echo "$STATUS" |grep "Slot 9d" -A 6 |grep "Algorithm" |tr -d 
"[:blank:]")
-if [ "x$ALGO_9D" != "xAlgorithm:RSA1024" ]; then
-    echo "$ALGO_9D"
+for slot in "${SLOTS[@]}"
+do
+  # Generate key on-board, issue certificate, and verify it
+  $BIN -agenerate -s$slot -ARSA1024 -o key.pub
+  $BIN -averify -P123456 -s$slot 
-S'/CN=YubicoTestRSA1024/OU=YubicoGenerated/O=yubico.com/' -aselfsign -i 
key.pub -o cert.pem
+  $BIN -averify -P123456 -s$slot -atest-signature -i cert.pem
+  $BIN -aimport-certificate -P123456 -s$slot -i cert.pem
+
+  # Read status and validate fields
+  STATUS=$($BIN -astatus)
+  echo "$STATUS"
+  ALGO=$(echo "$STATUS" |grep "Slot $slot" -A 6 |grep "Algorithm" |tr -d 
"[:blank:]")
+  if [ "x$ALGO" != "xAlgorithm:RSA1024" ]; then
+    echo "$ALGO"
     echo "Generated algorithm incorrect." >/dev/stderr
     exit 1
-fi
+  fi
 
-SUBJECT_9D=$(echo "$STATUS" |grep "Slot 9d" -A 6 |grep "Subject DN" |tr -d 
"[:blank:]")
-if [ "x$SUBJECT_9D" != 
"xSubjectDN:CN=YubicoTestRSA1024,OU=YubicoGenerated,O=yubico.com" ]; then
-    echo "$SUBJECT_9D"
+  SUBJECT=$(echo "$STATUS" |grep "Slot $slot" -A 6 |grep "Subject DN" |tr -d 
"[:blank:]")
+  if [ "x$SUBJECT" != 
"xSubjectDN:CN=YubicoTestRSA1024,OU=YubicoGenerated,O=yubico.com" ]; then
+    echo "$SUBJECT"
     echo "Certificate subject incorrect." >/dev/stderr
     exit 1
-fi
+  fi
 
-$BIN -a verify-pin -P123456 --sign -s 9d -A RSA1024 -i data.txt -o data.sig
-exitcode=$?
-if [ "$exitcode" != "0" ]; then
-    exit $exitcode
-fi
+  $BIN -a verify-pin -P123456 --sign -s $slot -A RSA1024 -i data.txt -o 
data.sig
+done
 
-echo "********************** Generate RSA2048 in 9e ********************* "
+echo "********************** Generate RSA2048 in all slots 
********************* "
 
-# Generate key on-board, issue certificate, and verify it
-$BIN -agenerate -s9e -ARSA2048 -o key_9e.pub
-$BIN -averify -P123456 -s9e 
-S'/CN=YubicoTestRSA2048/OU=YubicoGenerated/O=yubico.com/' -aselfsign -i 
key_9e.pub -o cert_9e.pem
-$BIN -averify -P123456 -s9e -atest-signature -i cert_9e.pem
-$BIN -aimport-certificate -P123456 -s9e -i cert_9e.pem
-
-# Read status and validate fields
-STATUS=$($BIN -astatus)
-echo "$STATUS"
-ALGO_9E=$(echo "$STATUS" |grep "Slot 9e" -A 6 |grep "Algorithm" |tr -d 
"[:blank:]")
-if [ "x$ALGO_9E" != "xAlgorithm:RSA2048" ]; then
-    echo "$ALGO_9E"
+for slot in "${SLOTS[@]}"
+do
+  # Generate key on-board, issue certificate, and verify it
+  $BIN -agenerate -s$slot -ARSA2048 -o key.pub
+  $BIN -averify -P123456 -s$slot 
-S'/CN=YubicoTestRSA2048/OU=YubicoGenerated/O=yubico.com/' -aselfsign -i 
key.pub -o cert.pem
+  $BIN -averify -P123456 -s$slot -atest-signature -i cert.pem
+  $BIN -aimport-certificate -P123456 -s$slot -i cert.pem
+
+  # Read status and validate fields
+  STATUS=$($BIN -astatus)
+  echo "$STATUS"
+  ALGO=$(echo "$STATUS" |grep "Slot $slot" -A 6 |grep "Algorithm" |tr -d 
"[:blank:]")
+  if [ "x$ALGO" != "xAlgorithm:RSA2048" ]; then
+    echo "$ALGO"
     echo "Generated algorithm incorrect." >/dev/stderr
     exit 1
-fi
+  fi
 
-SUBJECT_9E=$(echo "$STATUS" |grep "Slot 9e" -A 6 |grep "Subject DN" |tr -d 
"[:blank:]")
-if [ "x$SUBJECT_9E" != 
"xSubjectDN:CN=YubicoTestRSA2048,OU=YubicoGenerated,O=yubico.com" ]; then
-    echo "$SUBJECT_9E"
+  SUBJECT=$(echo "$STATUS" |grep "Slot $slot" -A 6 |grep "Subject DN" |tr -d 
"[:blank:]")
+  if [ "x$SUBJECT" != 
"xSubjectDN:CN=YubicoTestRSA2048,OU=YubicoGenerated,O=yubico.com" ]; then
+    echo "$SUBJECT"
     echo "Certificate subject incorrect." >/dev/stderr
     exit 1
-fi
+  fi
+
+  $BIN -a verify-pin -P123456 --sign -s $slot -A RSA2048 -i data.txt -o 
data.sig
+done
+
+
+
 
-$BIN -a verify-pin -P123456 --sign -s 9e -A RSA2048 -i data.txt -o data.sig
-exitcode=$?
-if [ "$exitcode" != "0" ]; then
-    exit $exitcode
-fi
 
 cd ..
 rm -r yubico-piv-tool_test_dir
 
-set +x
+#set +x
 set +e
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yubico-piv-tool-2.2.0/resources/win/yubico-piv-tool_x64.wxs 
new/yubico-piv-tool-2.2.1/resources/win/yubico-piv-tool_x64.wxs
--- old/yubico-piv-tool-2.2.0/resources/win/yubico-piv-tool_x64.wxs     
2020-12-17 09:06:58.000000000 +0100
+++ new/yubico-piv-tool-2.2.1/resources/win/yubico-piv-tool_x64.wxs     
2021-09-03 00:10:22.000000000 +0200
@@ -1,6 +1,6 @@
 <?xml version="1.0"?>
 <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"; 
xmlns:util="http://schemas.microsoft.com/wix/UtilExtension";>
-  <?define ProductVersion="2.1.0" ?>
+  <?define ProductVersion="2.2.1" ?>
   <?define ProductName="Yubico PIV Tool (x64)" ?>
 
    <Product Id="*" UpgradeCode="e4f980c4-5dd5-4d39-95b7-c6362ae65be8" 
Name="$(var.ProductName)" Version="$(var.ProductVersion)" Manufacturer="Yubico 
AB" Language="1033">
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yubico-piv-tool-2.2.0/resources/win/yubico-piv-tool_x86.wxs 
new/yubico-piv-tool-2.2.1/resources/win/yubico-piv-tool_x86.wxs
--- old/yubico-piv-tool-2.2.0/resources/win/yubico-piv-tool_x86.wxs     
2020-12-17 09:06:58.000000000 +0100
+++ new/yubico-piv-tool-2.2.1/resources/win/yubico-piv-tool_x86.wxs     
2021-09-03 00:10:22.000000000 +0200
@@ -1,6 +1,6 @@
 <?xml version="1.0"?>
 <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"; 
xmlns:util="http://schemas.microsoft.com/wix/UtilExtension";>
-  <?define ProductVersion="2.1.0" ?>
+  <?define ProductVersion="2.2.1" ?>
   <?define ProductName="Yubico PIV Tool (x86)" ?>
 
    <Product Id="*" UpgradeCode="1aa2f085-add9-4556-9e21-299b078e6273" 
Name="$(var.ProductName)" Version="$(var.ProductVersion)" Manufacturer="Yubico 
AB" Language="1033">
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yubico-piv-tool-2.2.0/tool/CMakeLists.txt 
new/yubico-piv-tool-2.2.1/tool/CMakeLists.txt
--- old/yubico-piv-tool-2.2.0/tool/CMakeLists.txt       2020-12-17 
09:06:58.000000000 +0100
+++ new/yubico-piv-tool-2.2.1/tool/CMakeLists.txt       2021-09-03 
00:10:22.000000000 +0200
@@ -57,7 +57,10 @@
 target_link_libraries(yubico-piv-tool ${LIBCRYPTO_LDFLAGS} ${LINK_LIBS_WIN} 
ykpiv_shared)
 add_coverage(yubico-piv-tool)
 
-set_target_properties(yubico-piv-tool PROPERTIES INSTALL_RPATH 
"${YKPIV_INSTALL_LIB_DIR}")
+if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
+    set_target_properties(yubico-piv-tool PROPERTIES INSTALL_RPATH 
"${YKPIV_INSTALL_LIB_DIR}")
+endif()
+
 install(
         TARGETS yubico-piv-tool
         ARCHIVE DESTINATION "${YKPIV_INSTALL_LIB_DIR}"
@@ -66,7 +69,7 @@
 
 if (GENERATE_MAN_PAGES)
     include (${CMAKE_SOURCE_DIR}/cmake/help2man.cmake)
-    add_help2man_manpage (yubico-piv-tool.1 yubico-piv-tool)
+    add_help2man_manpage (yubico-piv-tool.1 yubico-piv-tool "Tool for managing 
Personal Identity Verification credentials on Yubikeys")
 
     add_custom_target (yubico-piv-tool-man ALL DEPENDS 
${CMAKE_CURRENT_SOURCE_DIR}/yubico-piv-tool.1)
     install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/yubico-piv-tool.1" DESTINATION 
"${YKPIV_INSTALL_MAN_DIR}/man1")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yubico-piv-tool-2.2.0/tool/cmdline.c 
new/yubico-piv-tool-2.2.1/tool/cmdline.c
--- old/yubico-piv-tool-2.2.0/tool/cmdline.c    2020-12-17 09:07:52.000000000 
+0100
+++ new/yubico-piv-tool-2.2.1/tool/cmdline.c    2021-09-03 00:10:51.000000000 
+0200
@@ -1,7 +1,7 @@
 /*
   File autogenerated by gengetopt version 2.23
   generated with the following command:
-  gengetopt --conf-parser -i 
/home/aveen/yubico_workspace/yubico-piv-tool-2.2.0/yubico-piv-tool/tool/cmdline.ggo
 --output-dir 
/home/aveen/yubico_workspace/yubico-piv-tool-2.2.0/yubico-piv-tool/tool 
+  gengetopt --conf-parser -i 
/home/aveen/yubico_workspace/yubico-piv-tool-2.2.1/yubico-piv-tool/tool/cmdline.ggo
 --output-dir 
/home/aveen/yubico_workspace/yubico-piv-tool-2.2.1/yubico-piv-tool/tool 
 
   The developers of gengetopt consider the fixed text that goes in all
   gengetopt output files to be in the public domain:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yubico-piv-tool-2.2.0/tool/yubico-piv-tool.1 
new/yubico-piv-tool-2.2.1/tool/yubico-piv-tool.1
--- old/yubico-piv-tool-2.2.0/tool/yubico-piv-tool.1    2020-12-17 
09:07:59.000000000 +0100
+++ new/yubico-piv-tool-2.2.1/tool/yubico-piv-tool.1    2021-09-03 
00:10:57.000000000 +0200
@@ -1,7 +1,7 @@
 .\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.47.13.
-.TH YUBICO-PIV-TOOL "1" "December 2020" "yubico-piv-tool 2.2.0" "User Commands"
+.TH YUBICO-PIV-TOOL "1" "September 2021" "yubico-piv-tool 2.2.1" "User 
Commands"
 .SH NAME
-yubico-piv-tool \- manual page for yubico-piv-tool 2.2.0
+yubico-piv-tool \- Tool for managing Personal Identity Verification 
credentials on Yubikeys
 .SH SYNOPSIS
 .B yubico-piv-tool
 [\fI\,OPTION\/\fR]...
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yubico-piv-tool-2.2.0/ykcs11/CMakeLists.txt 
new/yubico-piv-tool-2.2.1/ykcs11/CMakeLists.txt
--- old/yubico-piv-tool-2.2.0/ykcs11/CMakeLists.txt     2020-12-17 
09:06:58.000000000 +0100
+++ new/yubico-piv-tool-2.2.1/ykcs11/CMakeLists.txt     2021-09-03 
00:10:22.000000000 +0200
@@ -75,7 +75,9 @@
 add_library(ykcs11_shared SHARED ${SOURCE})
 target_link_libraries(ykcs11_shared ${LIBCRYPTO_LDFLAGS} ykpiv_shared)
 set_target_properties(ykcs11_shared PROPERTIES SOVERSION ${SO_VERSION} VERSION 
${VERSION})
-set_target_properties(ykcs11_shared PROPERTIES INSTALL_RPATH 
"${YKPIV_INSTALL_LIB_DIR}")
+if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
+    set_target_properties(ykcs11_shared PROPERTIES INSTALL_RPATH 
"${YKPIV_INSTALL_LIB_DIR}")
+endif()
 if(WIN32)
     set_target_properties(ykcs11_shared PROPERTIES OUTPUT_NAME libykcs11)
 else(WIN32)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yubico-piv-tool-2.2.0/ykcs11/mechanisms.c 
new/yubico-piv-tool-2.2.1/ykcs11/mechanisms.c
--- old/yubico-piv-tool-2.2.0/ykcs11/mechanisms.c       2020-12-17 
09:06:58.000000000 +0100
+++ new/yubico-piv-tool-2.2.1/ykcs11/mechanisms.c       2021-09-03 
00:10:22.000000000 +0200
@@ -706,9 +706,23 @@
       break;
 
     case CKA_SENSITIVE:
+      if (*((CK_BBOOL *)templ[i].pValue) != CK_TRUE) {
+        DBG("CKA_SENSITIVE must be TRUE or omitted");
+        return CKR_ATTRIBUTE_VALUE_INVALID;
+      }
+      break;
+
+    case CKA_EXTRACTABLE:
+      if (*((CK_BBOOL *)templ[i].pValue) != CK_FALSE) {
+        DBG("CKA_EXTRACTABLE must be FALSE or omitted");
+        return CKR_ATTRIBUTE_VALUE_INVALID;
+      }
+      break;
+
     case CKA_DECRYPT:
     case CKA_UNWRAP:
     case CKA_SIGN:
+    case CKA_SIGN_RECOVER:
     case CKA_PRIVATE:
     case CKA_TOKEN:
     case CKA_DERIVE:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yubico-piv-tool-2.2.0/ykcs11/objects.c 
new/yubico-piv-tool-2.2.1/ykcs11/objects.c
--- old/yubico-piv-tool-2.2.0/ykcs11/objects.c  2020-12-17 09:06:58.000000000 
+0100
+++ new/yubico-piv-tool-2.2.1/ykcs11/objects.c  2021-09-03 00:10:22.000000000 
+0200
@@ -560,8 +560,8 @@
   case CKA_ID:
     DBG("ID");
     len = sizeof(CK_BYTE);
-    ul_tmp = piv_objects[obj].sub_id;
-    data = (CK_BYTE_PTR) &ul_tmp;
+    b_tmp[0] = piv_objects[obj].sub_id;
+    data = b_tmp;
     break;
 
   case CKA_SENSITIVE:
@@ -722,6 +722,13 @@
     data = b_tmp;
     break;
 
+  case CKA_SIGN_RECOVER:
+    DBG("SIGN_RECOVER");
+    len = sizeof(CK_BBOOL);
+    b_tmp[0] = CK_FALSE;
+    data = b_tmp;
+    break;
+
   default:
     DBG("UNKNOWN ATTRIBUTE %lx (%lu)", template[0].type, template[0].type);
     template->ulValueLen = CK_UNAVAILABLE_INFORMATION;
@@ -1576,10 +1583,23 @@
 
       break;
 
+    case CKA_SENSITIVE:
+      if (*((CK_BBOOL *)templ[i].pValue) != CK_TRUE) {
+        DBG("CKA_SENSITIVE must be TRUE or omitted");
+        return CKR_ATTRIBUTE_VALUE_INVALID;
+      }
+      break;
+
+    case CKA_EXTRACTABLE:
+      if (*((CK_BBOOL *)templ[i].pValue) != CK_FALSE) {
+        DBG("CKA_EXTRACTABLE must be FALSE or omitted");
+        return CKR_ATTRIBUTE_VALUE_INVALID;
+      }
+      break;
+
     case CKA_TOKEN:
     case CKA_LABEL:
     case CKA_SUBJECT:
-    case CKA_SENSITIVE:
     case CKA_DERIVE:
       // Ignore other attributes
       break;
@@ -1689,10 +1709,23 @@
 
       break;
 
+    case CKA_SENSITIVE:
+      if (*((CK_BBOOL *)templ[i].pValue) != CK_TRUE) {
+        DBG("CKA_SENSITIVE must be TRUE or omitted");
+        return CKR_ATTRIBUTE_VALUE_INVALID;
+      }
+      break;
+
+    case CKA_EXTRACTABLE:
+      if (*((CK_BBOOL *)templ[i].pValue) != CK_FALSE) {
+        DBG("CKA_EXTRACTABLE must be FALSE or omitted");
+        return CKR_ATTRIBUTE_VALUE_INVALID;
+      }
+      break;
+
     case CKA_TOKEN:
     case CKA_LABEL:
     case CKA_SUBJECT:
-    case CKA_SENSITIVE:
     case CKA_DERIVE:
       // Ignore other attributes
       break;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yubico-piv-tool-2.2.0/ykcs11/openssl_utils.c 
new/yubico-piv-tool-2.2.1/ykcs11/openssl_utils.c
--- old/yubico-piv-tool-2.2.0/ykcs11/openssl_utils.c    2020-12-17 
09:06:58.000000000 +0100
+++ new/yubico-piv-tool-2.2.1/ykcs11/openssl_utils.c    2021-09-03 
00:10:22.000000000 +0200
@@ -482,6 +482,9 @@
 
 CK_KEY_TYPE do_get_key_type(ykcs11_pkey_t *key) {
 
+  if(!key) // EVP_PKEY_base_id doesn't handle NULL
+    return CKK_VENDOR_DEFINED; // Actually an error
+
   switch (EVP_PKEY_base_id(key)) {
   case EVP_PKEY_RSA:
     return CKK_RSA;
@@ -538,7 +541,6 @@
 CK_RV do_get_modulus(ykcs11_pkey_t *key, CK_BYTE_PTR data, CK_ULONG_PTR len) {
   RSA *rsa = NULL;
   const BIGNUM *n = NULL;
-  CK_RV rv;
 
   rsa = EVP_PKEY_get0_RSA(key);
   if (rsa == NULL)
@@ -546,25 +548,18 @@
 
   RSA_get0_key(rsa, &n, NULL, NULL);
   if ((CK_ULONG)BN_num_bytes(n) > *len) {
-    rv = CKR_BUFFER_TOO_SMALL;
-    goto get_mod_cleanup;
+    return CKR_BUFFER_TOO_SMALL;
   }
 
   *len = (CK_ULONG)BN_bn2bin(n, data);
 
   return CKR_OK;
-get_mod_cleanup:
-  if(n != NULL) {
-    BN_free(n);
-  }
-  return rv;
 }
 
 CK_RV do_get_public_exponent(ykcs11_pkey_t *key, CK_BYTE_PTR data, 
CK_ULONG_PTR len) {
 
   RSA *rsa = NULL;
   const BIGNUM *bn_e;
-  CK_RV rv;
 
   rsa = EVP_PKEY_get0_RSA(key);
   if (rsa == NULL)
@@ -572,17 +567,11 @@
 
   RSA_get0_key(rsa, NULL, &bn_e, NULL);
   if ((CK_ULONG)BN_num_bytes(bn_e) > *len) {
-    rv = CKR_BUFFER_TOO_SMALL;
-    goto get_pubexp_cleanup;
+    return CKR_BUFFER_TOO_SMALL;
   }
 
   *len = (CK_ULONG)BN_bn2bin(bn_e, data);
   return CKR_OK;
-get_pubexp_cleanup:
-  if(bn_e != NULL) {
-    BN_free(bn_e);
-  }
-  return rv;
 }
 
 /* #include <stdio.h> */
@@ -768,8 +757,7 @@
     goto strip_der_cleanup;
   }
 
-  ECDSA_SIG_free(sig);
-  return CKR_OK;
+  rv = CKR_OK;
 strip_der_cleanup:
   ECDSA_SIG_free(sig);
   return rv;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yubico-piv-tool-2.2.0/ykcs11/tests/ykcs11_tests.c 
new/yubico-piv-tool-2.2.1/ykcs11/tests/ykcs11_tests.c
--- old/yubico-piv-tool-2.2.0/ykcs11/tests/ykcs11_tests.c       2020-12-17 
09:06:58.000000000 +0100
+++ new/yubico-piv-tool-2.2.1/ykcs11/tests/ykcs11_tests.c       2021-09-03 
00:10:22.000000000 +0200
@@ -81,9 +81,9 @@
 
 static void init_connection() {
   asrt(funcs->C_Initialize(NULL), CKR_OK, "INITIALIZE");
-  CK_SLOT_ID pSlotList;
+  CK_SLOT_ID pSlotList[16];
   CK_ULONG pulCount = 16;
-  asrt(funcs->C_GetSlotList(true, &pSlotList, &pulCount), CKR_OK, 
"GETSLOTLIST");
+  asrt(funcs->C_GetSlotList(true, pSlotList, &pulCount), CKR_OK, 
"GETSLOTLIST");
 }
 
 static void test_lib_info() {
@@ -217,13 +217,13 @@
     {1024, 2048, CKF_HW | CKF_SIGN | CKF_VERIFY},
     {1024, 2048, CKF_HW | CKF_SIGN | CKF_VERIFY},
     {1024, 2048, CKF_HW | CKF_SIGN | CKF_VERIFY},
-    {256, 384, CKF_HW | CKF_GENERATE_KEY_PAIR},
-    {256, 384, CKF_HW | CKF_SIGN | CKF_VERIFY},
-    {256, 384, CKF_HW | CKF_SIGN | CKF_VERIFY},
-    {256, 384, CKF_HW | CKF_SIGN | CKF_VERIFY},
-    {256, 384, CKF_HW | CKF_SIGN | CKF_VERIFY},
-    {256, 384, CKF_HW | CKF_SIGN | CKF_VERIFY},
-    {256, 384, CKF_HW | CKF_DERIVE},
+    {256, 384, CKF_HW | CKF_GENERATE_KEY_PAIR | CKF_EC_F_P | CKF_EC_NAMEDCURVE 
| CKF_EC_UNCOMPRESS},
+    {256, 384, CKF_HW | CKF_SIGN | CKF_VERIFY | CKF_EC_F_P | CKF_EC_NAMEDCURVE 
| CKF_EC_UNCOMPRESS},
+    {256, 384, CKF_HW | CKF_SIGN | CKF_VERIFY | CKF_EC_F_P | CKF_EC_NAMEDCURVE 
| CKF_EC_UNCOMPRESS},
+    {256, 384, CKF_HW | CKF_SIGN | CKF_VERIFY | CKF_EC_F_P | CKF_EC_NAMEDCURVE 
| CKF_EC_UNCOMPRESS},
+    {256, 384, CKF_HW | CKF_SIGN | CKF_VERIFY | CKF_EC_F_P | CKF_EC_NAMEDCURVE 
| CKF_EC_UNCOMPRESS},
+    {256, 384, CKF_HW | CKF_SIGN | CKF_VERIFY | CKF_EC_F_P | CKF_EC_NAMEDCURVE 
| CKF_EC_UNCOMPRESS},
+    {256, 384, CKF_HW | CKF_DERIVE | CKF_EC_F_P | CKF_EC_NAMEDCURVE | 
CKF_EC_UNCOMPRESS},
     {0, 0, CKF_DIGEST},
     {0, 0, CKF_DIGEST},
     {0, 0, CKF_DIGEST},
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yubico-piv-tool-2.2.0/ykcs11/tests/ykcs11_tests_util.c 
new/yubico-piv-tool-2.2.1/ykcs11/tests/ykcs11_tests_util.c
--- old/yubico-piv-tool-2.2.0/ykcs11/tests/ykcs11_tests_util.c  2020-12-17 
09:06:58.000000000 +0100
+++ new/yubico-piv-tool-2.2.1/ykcs11/tests/ykcs11_tests_util.c  2021-09-03 
00:10:22.000000000 +0200
@@ -1332,6 +1332,7 @@
   CK_BBOOL obj_decrypt;
   CK_BBOOL obj_unwrap;
   CK_BBOOL obj_sign;
+  CK_BBOOL obj_sign_recover;
   CK_BBOOL obj_derive;
   CK_ULONG obj_modulus_bits;
   CK_BBOOL obj_always_authenticate;
@@ -1352,6 +1353,7 @@
     {CKA_DECRYPT, &obj_decrypt, sizeof(CK_BBOOL)},
     {CKA_UNWRAP, &obj_unwrap, sizeof(CK_BBOOL)},
     {CKA_SIGN, &obj_sign, sizeof(CK_BBOOL)},
+    {CKA_SIGN_RECOVER, &obj_sign_recover, sizeof(CK_BBOOL)},
     {CKA_DERIVE, &obj_derive, sizeof(CK_BBOOL)},
     {CKA_MODULUS_BITS, &obj_modulus_bits, sizeof(CK_ULONG)},
     {CKA_ALWAYS_AUTHENTICATE, &obj_always_authenticate, sizeof(CK_BBOOL)},
@@ -1362,7 +1364,7 @@
     {CKA_LABEL, obj_label, sizeof(obj_label)}
   };
 
-  asrt(funcs->C_GetAttributeValue(session, privkey, template, 16), CKR_OK, 
"GET BASIC ATTRIBUTES");
+  asrt(funcs->C_GetAttributeValue(session, privkey, template, 17), CKR_OK, 
"GET BASIC ATTRIBUTES");
   asrt(obj_class, CKO_PRIVATE_KEY, "CLASS");
   asrt(obj_token, CK_TRUE, "TOKEN");
   asrt(obj_private, CK_TRUE, "PRIVATE");
@@ -1375,6 +1377,7 @@
   asrt(obj_decrypt, CK_TRUE, "DECRYPT");
   asrt(obj_unwrap, CK_FALSE, "UNWRAP");
   asrt(obj_sign, CK_TRUE, "SIGN");
+  asrt(obj_sign_recover, CK_FALSE, "SIGN_RECOVER");
   asrt(obj_derive, CK_FALSE, "DERIVE");
   asrt(obj_modulus_bits, key_size, "MODULUS BITS");
   asrt(obj_always_authenticate, always_authenticate, "ALWAYS AUTHENTICATE");
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yubico-piv-tool-2.2.0/ykcs11/token.c 
new/yubico-piv-tool-2.2.1/ykcs11/token.c
--- old/yubico-piv-tool-2.2.0/ykcs11/token.c    2020-12-17 09:06:58.000000000 
+0100
+++ new/yubico-piv-tool-2.2.1/ykcs11/token.c    2021-09-03 00:10:22.000000000 
+0200
@@ -59,14 +59,14 @@
   CKM_SHA256_RSA_PKCS_PSS, {MIN_RSA_KEY_SIZE, MAX_RSA_KEY_SIZE, CKF_HW | 
CKF_SIGN | CKF_VERIFY},
   CKM_SHA384_RSA_PKCS_PSS, {MIN_RSA_KEY_SIZE, MAX_RSA_KEY_SIZE, CKF_HW | 
CKF_SIGN | CKF_VERIFY},
   CKM_SHA512_RSA_PKCS_PSS, {MIN_RSA_KEY_SIZE, MAX_RSA_KEY_SIZE, CKF_HW | 
CKF_SIGN | CKF_VERIFY},
-  CKM_EC_KEY_PAIR_GEN, {MIN_ECC_KEY_SIZE, MAX_ECC_KEY_SIZE, CKF_HW | 
CKF_GENERATE_KEY_PAIR},
-  //CKM_ECDSA_KEY_PAIR_GEN, {MIN_ECC_KEY_SIZE, MAX_ECC_KEY_SIZE, CKF_HW | 
CKF_GENERATE_KEY_PAIR}, //Same as CKM_EC_KEY_PAIR_GEN, deprecated in 2.11
-  CKM_ECDSA, {MIN_ECC_KEY_SIZE, MAX_ECC_KEY_SIZE, CKF_HW | CKF_SIGN | 
CKF_VERIFY},
-  CKM_ECDSA_SHA1, {MIN_ECC_KEY_SIZE, MAX_ECC_KEY_SIZE, CKF_HW | CKF_SIGN | 
CKF_VERIFY},
-  CKM_ECDSA_SHA224, {MIN_ECC_KEY_SIZE, MAX_ECC_KEY_SIZE, CKF_HW | CKF_SIGN | 
CKF_VERIFY},
-  CKM_ECDSA_SHA256, {MIN_ECC_KEY_SIZE, MAX_ECC_KEY_SIZE, CKF_HW | CKF_SIGN | 
CKF_VERIFY},
-  CKM_ECDSA_SHA384, {MIN_ECC_KEY_SIZE, MAX_ECC_KEY_SIZE, CKF_HW | CKF_SIGN | 
CKF_VERIFY},
-  CKM_ECDH1_DERIVE, {MIN_ECC_KEY_SIZE, MAX_ECC_KEY_SIZE, CKF_HW | CKF_DERIVE},
+  CKM_EC_KEY_PAIR_GEN, {MIN_ECC_KEY_SIZE, MAX_ECC_KEY_SIZE, CKF_HW | 
CKF_GENERATE_KEY_PAIR | CKF_EC_F_P | CKF_EC_NAMEDCURVE | CKF_EC_UNCOMPRESS},
+  //CKM_ECDSA_KEY_PAIR_GEN, {MIN_ECC_KEY_SIZE, MAX_ECC_KEY_SIZE, CKF_HW | 
CKF_GENERATE_KEY_PAIR | CKF_EC_F_P | CKF_EC_NAMEDCURVE | CKF_EC_UNCOMPRESS}, 
//Same as CKM_EC_KEY_PAIR_GEN, deprecated in 2.11
+  CKM_ECDSA, {MIN_ECC_KEY_SIZE, MAX_ECC_KEY_SIZE, CKF_HW | CKF_SIGN | 
CKF_VERIFY | CKF_EC_F_P | CKF_EC_NAMEDCURVE | CKF_EC_UNCOMPRESS},
+  CKM_ECDSA_SHA1, {MIN_ECC_KEY_SIZE, MAX_ECC_KEY_SIZE, CKF_HW | CKF_SIGN | 
CKF_VERIFY | CKF_EC_F_P | CKF_EC_NAMEDCURVE | CKF_EC_UNCOMPRESS},
+  CKM_ECDSA_SHA224, {MIN_ECC_KEY_SIZE, MAX_ECC_KEY_SIZE, CKF_HW | CKF_SIGN | 
CKF_VERIFY | CKF_EC_F_P | CKF_EC_NAMEDCURVE | CKF_EC_UNCOMPRESS},
+  CKM_ECDSA_SHA256, {MIN_ECC_KEY_SIZE, MAX_ECC_KEY_SIZE, CKF_HW | CKF_SIGN | 
CKF_VERIFY | CKF_EC_F_P | CKF_EC_NAMEDCURVE | CKF_EC_UNCOMPRESS},
+  CKM_ECDSA_SHA384, {MIN_ECC_KEY_SIZE, MAX_ECC_KEY_SIZE, CKF_HW | CKF_SIGN | 
CKF_VERIFY | CKF_EC_F_P | CKF_EC_NAMEDCURVE | CKF_EC_UNCOMPRESS},
+  CKM_ECDH1_DERIVE, {MIN_ECC_KEY_SIZE, MAX_ECC_KEY_SIZE, CKF_HW | CKF_DERIVE | 
CKF_EC_F_P | CKF_EC_NAMEDCURVE | CKF_EC_UNCOMPRESS},
   CKM_SHA_1, {0, 0, CKF_DIGEST},
   CKM_SHA256, {0, 0, CKF_DIGEST},
   CKM_SHA384, {0, 0, CKF_DIGEST},
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yubico-piv-tool-2.2.0/ykcs11/ykcs11-config.h 
new/yubico-piv-tool-2.2.1/ykcs11/ykcs11-config.h
--- old/yubico-piv-tool-2.2.0/ykcs11/ykcs11-config.h    2020-12-17 
09:07:52.000000000 +0100
+++ new/yubico-piv-tool-2.2.1/ykcs11/ykcs11-config.h    2021-09-03 
00:10:51.000000000 +0200
@@ -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 "2.2.0"
+#define YKCS11_VERSION_STRING "2.2.1"
 
        /**
         * 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 2.2.0
+#define YKCS11_VERSION_NUMBER 2.2.1
 
        /**
         * YKCS11_VERSION_MAJOR
@@ -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 0
+#define YKCS11_VERSION_PATCH 1
 
     /**
      * _WIN32
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yubico-piv-tool-2.2.0/ykcs11/ykcs11.pc 
new/yubico-piv-tool-2.2.1/ykcs11/ykcs11.pc
--- old/yubico-piv-tool-2.2.0/ykcs11/ykcs11.pc  2020-12-17 09:07:52.000000000 
+0100
+++ new/yubico-piv-tool-2.2.1/ykcs11/ykcs11.pc  2021-09-03 00:10:51.000000000 
+0200
@@ -33,5 +33,5 @@
 Name: yubico-piv-tool
 Description: Yubico PIV PKCS#11 Module
 URL: https://www.yubico.com/
-Version: 2.2.0
+Version: 2.2.1
 Libs: -L${libdir} -lykcs11

Reply via email to