Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-pynitrokey for
openSUSE:Factory checked in at 2025-05-22 16:56:08
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-pynitrokey (Old)
and /work/SRC/openSUSE:Factory/.python-pynitrokey.new.2732 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-pynitrokey"
Thu May 22 16:56:08 2025 rev:17 rq:1278934 version:0.8.4
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-pynitrokey/python-pynitrokey.changes
2025-05-08 18:22:15.485712705 +0200
+++
/work/SRC/openSUSE:Factory/.python-pynitrokey.new.2732/python-pynitrokey.changes
2025-05-22 16:56:23.116684867 +0200
@@ -1,0 +2,7 @@
+Wed May 21 05:20:25 UTC 2025 - Johannes Kastl
<[email protected]>
+
+- update to 0.8.4:
+ * PIV certificate list properties by @mmerklinger in #648
+ * Windows certificate mapping for PIV by @mmerklinger in #649
+
+-------------------------------------------------------------------
Old:
----
pynitrokey-0.8.3.tar.gz
New:
----
pynitrokey-0.8.4.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-pynitrokey.spec ++++++
--- /var/tmp/diff_new_pack.LedrjG/_old 2025-05-22 16:56:25.424782709 +0200
+++ /var/tmp/diff_new_pack.LedrjG/_new 2025-05-22 16:56:25.452783896 +0200
@@ -18,7 +18,7 @@
%{?sle15_python_module_pythons}
Name: python-pynitrokey
-Version: 0.8.3
+Version: 0.8.4
Release: 0
Summary: Python Library for Nitrokey devices
License: Apache-2.0 OR MIT
++++++ pynitrokey-0.8.3.tar.gz -> pynitrokey-0.8.4.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pynitrokey-0.8.3/PKG-INFO
new/pynitrokey-0.8.4/PKG-INFO
--- old/pynitrokey-0.8.3/PKG-INFO 1970-01-01 01:00:00.000000000 +0100
+++ new/pynitrokey-0.8.4/PKG-INFO 1970-01-01 01:00:00.000000000 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 2.4
Name: pynitrokey
-Version: 0.8.3
+Version: 0.8.4
Summary: Python Library for Nitrokey devices.
Author-email: Nitrokey <[email protected]>
Requires-Python: >=3.9
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pynitrokey-0.8.3/pynitrokey/VERSION
new/pynitrokey-0.8.4/pynitrokey/VERSION
--- old/pynitrokey-0.8.3/pynitrokey/VERSION 2025-05-06 16:06:04.000000000
+0200
+++ new/pynitrokey-0.8.4/pynitrokey/VERSION 2025-05-20 15:32:33.000000000
+0200
@@ -1 +1 @@
-0.8.3
+0.8.4
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pynitrokey-0.8.3/pynitrokey/cli/nk3/piv.py
new/pynitrokey-0.8.4/pynitrokey/cli/nk3/piv.py
--- old/pynitrokey-0.8.3/pynitrokey/cli/nk3/piv.py 2025-05-06
16:06:04.000000000 +0200
+++ new/pynitrokey-0.8.4/pynitrokey/cli/nk3/piv.py 2025-05-20
15:32:33.000000000 +0200
@@ -779,7 +779,7 @@
def list_certificates() -> None:
device = PivApp()
- headers = ["Slot", "Algorithm", "Subject"]
+ headers = ["Slot", "Algorithm", "Subject", "Serial Number", "Issuer"]
data = []
for key, slot in KEY_TO_CERT_OBJ_ID_MAP.items():
@@ -791,6 +791,8 @@
key,
parsed_cert.signature_algorithm_oid._name,
parsed_cert.subject.rfc4514_string(),
+ f"{parsed_cert.serial_number:x}",
+ parsed_cert.issuer.rfc4514_string(),
]
)
@@ -799,6 +801,50 @@
else:
local_print("No certificate found.")
+ @piv.command(help="Get Windows authentication certificate mapping.")
+ def get_windows_auth_mapping() -> None:
+ device = PivApp()
+
+ cert =
device.cert(bytes(bytearray.fromhex(KEY_TO_CERT_OBJ_ID_MAP["9A"])))
+ if cert is not None:
+ parsed_cert = x509.load_der_x509_certificate(cert)
+
+ issuer_name = parsed_cert.issuer
+ issuer_name.rdns.reverse()
+ issuer_name_reversed = issuer_name.rfc4514_string()
+
+ serial_number = bytearray.fromhex(f"{parsed_cert.serial_number:x}")
+ serial_number.reverse()
+ serial_number_reversed = serial_number.hex()
+
+ subject_key_identifier: Union[None, str]
+ try:
+ subject_key_identifier =
parsed_cert.extensions.get_extension_for_class(
+ x509.SubjectKeyIdentifier
+ ).value.digest.hex()
+ except x509.ExtensionNotFound:
+ subject_key_identifier = None
+
+ public_key = parsed_cert.public_bytes(Encoding.DER)
+ digest = hashes.Hash(hashes.SHA1())
+ digest.update(public_key)
+ public_key_hash = digest.finalize()
+ sha1_public_key = public_key_hash.hex()
+
+ local_print(
+ "Set mapping in 'altSecurityIdentities' attribute to one of
the following:"
+ )
+ local_print(
+ f"X509IssuerSerialNumber:
X509:<I>{issuer_name_reversed}<SR>{serial_number_reversed}"
+ )
+ if subject_key_identifier:
+ local_print(
+ f" X509SKI:
X509:<SKI>{subject_key_identifier}"
+ )
+ local_print(f" X509SHA1PublicKey:
X509:<SHA1-PUKEY>{sha1_public_key}")
+ else:
+ local_print("No certificate found.")
+
except ImportError:
from pynitrokey.cli.nk3.pcsc_absent import PCSC_ABSENT