Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-securesystemslib for
openSUSE:Factory checked in at 2026-06-15 19:44:01
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-securesystemslib (Old)
and /work/SRC/openSUSE:Factory/.python-securesystemslib.new.1981 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-securesystemslib"
Mon Jun 15 19:44:01 2026 rev:8 rq:1359298 version:1.4.0
Changes:
--------
---
/work/SRC/openSUSE:Factory/python-securesystemslib/python-securesystemslib.changes
2025-11-10 19:19:46.330460764 +0100
+++
/work/SRC/openSUSE:Factory/.python-securesystemslib.new.1981/python-securesystemslib.changes
2026-06-15 19:47:15.352999027 +0200
@@ -1,0 +2,10 @@
+Sun Jun 14 19:18:58 UTC 2026 - Dirk Müller <[email protected]>
+
+- update to 1.4.0:
+ * HSMSigner: Fix usage with multi-byte keyids
+ * SigstoreSigner: Update to current sigstore-python API
+ * Deprecate Python 3.9 support
+ * Various testing changes -- note that AWS is currently not
+ tested in CI (see #1104)
+
+-------------------------------------------------------------------
Old:
----
securesystemslib-1.3.1.tar.gz
New:
----
securesystemslib-1.4.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-securesystemslib.spec ++++++
--- /var/tmp/diff_new_pack.T5DLxA/_old 2026-06-15 19:47:16.249036578 +0200
+++ /var/tmp/diff_new_pack.T5DLxA/_new 2026-06-15 19:47:16.249036578 +0200
@@ -1,7 +1,7 @@
#
# spec file for package python-securesystemslib
#
-# Copyright (c) 2025 SUSE LLC and contributors
+# Copyright (c) 2026 SUSE LLC and contributors
#
# 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 @@
%{?sle15_python_module_pythons}
Name: python-securesystemslib
-Version: 1.3.1
+Version: 1.4.0
Release: 0
Summary: Cryptographic and general routines for Secure Systems Lab
License: MIT
@@ -26,15 +26,15 @@
Source:
https://files.pythonhosted.org/packages/source/s/securesystemslib/securesystemslib-%{version}.tar.gz
BuildRequires: %{python_module PyKCS11}
BuildRequires: %{python_module asn1crypto}
-BuildRequires: %{python_module cryptography >= 3.3.2}
-BuildRequires: %{python_module hatchling}
+BuildRequires: %{python_module cryptography >= 40.0.0}
+BuildRequires: %{python_module hatchling >= 1.29.0}
BuildRequires: %{python_module pip}
BuildRequires: %{python_module pytest}
BuildRequires: fdupes
BuildRequires: python-rpm-macros
Requires: python-PyKCS11
Requires: python-asn1crypto
-Requires: python-cryptography
+Requires: python-cryptography >= 40.0.0
BuildArch: noarch
%python_subpackages
++++++ securesystemslib-1.3.1.tar.gz -> securesystemslib-1.4.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/securesystemslib-1.3.1/CHANGELOG.md
new/securesystemslib-1.4.0/CHANGELOG.md
--- old/securesystemslib-1.3.1/CHANGELOG.md 2020-02-02 01:00:00.000000000
+0100
+++ new/securesystemslib-1.4.0/CHANGELOG.md 2020-02-02 01:00:00.000000000
+0100
@@ -1,5 +1,18 @@
# Changelog
+## securesystemslib v1.4.0
+
+### Fixed
+
+* HSMSigner: Fix usage with multi-byte keyids (#1107)
+
+### Changed
+
+* SigstoreSigner: Update to current sigstore-python API (#1035)
+* Deprecate Python 3.9 support (#1069)
+* Various testing changes -- note that AWS is currently not tested
+ in CI (see #1104)
+
## securesystemslib v1.3.1
### Fixed
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/securesystemslib-1.3.1/PKG-INFO
new/securesystemslib-1.4.0/PKG-INFO
--- old/securesystemslib-1.3.1/PKG-INFO 2020-02-02 01:00:00.000000000 +0100
+++ new/securesystemslib-1.4.0/PKG-INFO 2020-02-02 01:00:00.000000000 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 2.4
Name: securesystemslib
-Version: 1.3.1
+Version: 1.4.0
Summary: A library that provides cryptographic and general-purpose routines
for Secure Systems Lab projects at NYU
Project-URL: Homepage, https://github.com/secure-systems-lab/securesystemslib
Project-URL: Source, https://github.com/secure-systems-lab/securesystemslib
@@ -17,15 +17,15 @@
Classifier: Operating System :: POSIX
Classifier: Operating System :: POSIX :: Linux
Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
+Classifier: Programming Language :: Python :: 3.14
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Topic :: Security
Classifier: Topic :: Software Development
-Requires-Python: ~=3.8
+Requires-Python: ~=3.10
Provides-Extra: awskms
Requires-Dist: boto3; extra == 'awskms'
Requires-Dist: botocore; extra == 'awskms'
@@ -46,7 +46,7 @@
Provides-Extra: pyspx
Requires-Dist: pyspx>=0.5.0; extra == 'pyspx'
Provides-Extra: sigstore
-Requires-Dist: sigstore~=3.0; extra == 'sigstore'
+Requires-Dist: sigstore<5,>=4; extra == 'sigstore'
Provides-Extra: vault
Requires-Dist: cryptography>=40.0.0; extra == 'vault'
Requires-Dist: hvac; extra == 'vault'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/securesystemslib-1.3.1/pyproject.toml
new/securesystemslib-1.4.0/pyproject.toml
--- old/securesystemslib-1.3.1/pyproject.toml 2020-02-02 01:00:00.000000000
+0100
+++ new/securesystemslib-1.4.0/pyproject.toml 2020-02-02 01:00:00.000000000
+0100
@@ -1,5 +1,5 @@
[build-system]
-requires = ["hatchling==1.27.0"]
+requires = ["hatchling==1.29.0"]
build-backend = "hatchling.build"
[project]
@@ -26,16 +26,16 @@
"Operating System :: MacOS :: MacOS X",
"Operating System :: Microsoft :: Windows",
"Programming Language :: Python :: 3",
- "Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
+ "Programming Language :: Python :: 3.14",
"Programming Language :: Python :: Implementation :: CPython",
"Topic :: Security",
"Topic :: Software Development",
]
-requires-python = "~=3.8"
+requires-python = "~=3.10"
dynamic = ["version"]
[project.urls]
@@ -50,7 +50,7 @@
awskms = ["boto3", "botocore", "cryptography>=40.0.0"]
hsm = ["asn1crypto", "cryptography>=40.0.0", "PyKCS11"]
PySPX = ["PySPX>=0.5.0"]
-sigstore = ["sigstore~=3.0"]
+sigstore = ["sigstore>=4,<5"]
vault = ["hvac", "cryptography>=40.0.0"]
[tool.hatch.version]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/securesystemslib-1.3.1/requirements-aws.txt
new/securesystemslib-1.4.0/requirements-aws.txt
--- old/securesystemslib-1.3.1/requirements-aws.txt 2020-02-02
01:00:00.000000000 +0100
+++ new/securesystemslib-1.4.0/requirements-aws.txt 2020-02-02
01:00:00.000000000 +0100
@@ -1,2 +1,2 @@
-boto3~=1.40.26
-botocore~=1.40.26
+boto3~=1.42.64
+botocore~=1.42.64
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/securesystemslib-1.3.1/requirements-build.txt
new/securesystemslib-1.4.0/requirements-build.txt
--- old/securesystemslib-1.3.1/requirements-build.txt 2020-02-02
01:00:00.000000000 +0100
+++ new/securesystemslib-1.4.0/requirements-build.txt 2020-02-02
01:00:00.000000000 +0100
@@ -1 +1 @@
-build==1.3.0
+build==1.5.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/securesystemslib-1.3.1/requirements-lint.txt
new/securesystemslib-1.4.0/requirements-lint.txt
--- old/securesystemslib-1.3.1/requirements-lint.txt 2020-02-02
01:00:00.000000000 +0100
+++ new/securesystemslib-1.4.0/requirements-lint.txt 2020-02-02
01:00:00.000000000 +0100
@@ -1,3 +1,3 @@
-mypy==1.18.2
-ruff==0.13.1
-zizmor==1.13.0
\ No newline at end of file
+mypy==1.20.2
+ruff==0.15.13
+zizmor==1.25.2
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/securesystemslib-1.3.1/requirements-pinned.txt
new/securesystemslib-1.4.0/requirements-pinned.txt
--- old/securesystemslib-1.3.1/requirements-pinned.txt 2020-02-02
01:00:00.000000000 +0100
+++ new/securesystemslib-1.4.0/requirements-pinned.txt 2020-02-02
01:00:00.000000000 +0100
@@ -6,13 +6,13 @@
#
asn1crypto==1.5.1
# via -r requirements.txt
-cffi==1.17.1
+cffi==2.0.0
# via
# cryptography
# pyspx
-cryptography==45.0.7
+cryptography==46.0.7
# via -r requirements.txt
-pycparser==2.22
+pycparser==3.0
# via cffi
pykcs11==1.5.18
# via -r requirements.txt
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/securesystemslib-1.3.1/requirements-sigstore.txt
new/securesystemslib-1.4.0/requirements-sigstore.txt
--- old/securesystemslib-1.3.1/requirements-sigstore.txt 2020-02-02
01:00:00.000000000 +0100
+++ new/securesystemslib-1.4.0/requirements-sigstore.txt 2020-02-02
01:00:00.000000000 +0100
@@ -1 +1 @@
-sigstore==3.6.5
+sigstore==4.2.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/securesystemslib-1.3.1/requirements-test.txt
new/securesystemslib-1.4.0/requirements-test.txt
--- old/securesystemslib-1.3.1/requirements-test.txt 2020-02-02
01:00:00.000000000 +0100
+++ new/securesystemslib-1.4.0/requirements-test.txt 2020-02-02
01:00:00.000000000 +0100
@@ -1,2 +1,2 @@
# additional test tools
-coverage==7.10.7
+coverage==7.13.5
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/securesystemslib-1.3.1/requirements-vault.txt
new/securesystemslib-1.4.0/requirements-vault.txt
--- old/securesystemslib-1.3.1/requirements-vault.txt 2020-02-02
01:00:00.000000000 +0100
+++ new/securesystemslib-1.4.0/requirements-vault.txt 2020-02-02
01:00:00.000000000 +0100
@@ -1 +1 @@
-hvac==2.3.0
+hvac==2.4.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/securesystemslib-1.3.1/securesystemslib/__init__.py
new/securesystemslib-1.4.0/securesystemslib/__init__.py
--- old/securesystemslib-1.3.1/securesystemslib/__init__.py 2020-02-02
01:00:00.000000000 +0100
+++ new/securesystemslib-1.4.0/securesystemslib/__init__.py 2020-02-02
01:00:00.000000000 +0100
@@ -1,6 +1,6 @@
import logging
-__version__ = "1.3.1"
+__version__ = "1.4.0"
# Configure a basic 'securesystemslib' top-level logger with a StreamHandler
# (print to console) and the WARNING log level (print messages of type
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/securesystemslib-1.3.1/securesystemslib/_vendor/test-ed25519-upstream.sh
new/securesystemslib-1.4.0/securesystemslib/_vendor/test-ed25519-upstream.sh
---
old/securesystemslib-1.3.1/securesystemslib/_vendor/test-ed25519-upstream.sh
2020-02-02 01:00:00.000000000 +0100
+++
new/securesystemslib-1.4.0/securesystemslib/_vendor/test-ed25519-upstream.sh
2020-02-02 01:00:00.000000000 +0100
@@ -12,7 +12,7 @@
# This commit matches our securesystemslib/_vendor/ed25519/ content.
# If upstream changes, we should review the changes, vendor them,
# and update the hash here
-pyca_ed25519_expected="08a7962a8059e4546a21b97f4a847f75cd1a1bbb"
+pyca_ed25519_expected="aab70bc53cae6a9f67dd1aab8552810d7a4ae382"
pyca_ed25519_git_url="https://github.com/pyca/ed25519.git"
pyca_ed25519_main_head=$(git ls-remote "$pyca_ed25519_git_url" main | cut -f1)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/securesystemslib-1.3.1/securesystemslib/formats.py
new/securesystemslib-1.4.0/securesystemslib/formats.py
--- old/securesystemslib-1.3.1/securesystemslib/formats.py 2020-02-02
01:00:00.000000000 +0100
+++ new/securesystemslib-1.4.0/securesystemslib/formats.py 2020-02-02
01:00:00.000000000 +0100
@@ -20,7 +20,7 @@
"""
-from typing import Callable, Optional, Union
+from collections.abc import Callable
from securesystemslib import exceptions
@@ -52,7 +52,7 @@
def _encode_canonical(
- object: Union[bool, None, str, int, tuple, list, dict], output_function:
Callable
+ object: bool | None | str | int | tuple | list | dict, output_function:
Callable
) -> None:
# Helper for encode_canonical. Older versions of json.encoder don't
# even let us replace the separators.
@@ -94,9 +94,9 @@
def encode_canonical(
- object: Union[bool, None, str, int, tuple, list, dict],
- output_function: Optional[Callable] = None,
-) -> Union[str, None]:
+ object: bool | None | str | int | tuple | list | dict,
+ output_function: Callable | None = None,
+) -> str | None:
"""
<Purpose>
Encoding an object so that it is always has the same string format
@@ -150,7 +150,7 @@
A string representing the 'object' encoded in canonical JSON form.
"""
- result: Union[None, list] = None
+ result: None | list = None
# If 'output_function' is unset, treat it as
# appending to a list.
if output_function is None:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/securesystemslib-1.3.1/securesystemslib/signer/_crypto_signer.py
new/securesystemslib-1.4.0/securesystemslib/signer/_crypto_signer.py
--- old/securesystemslib-1.3.1/securesystemslib/signer/_crypto_signer.py
2020-02-02 01:00:00.000000000 +0100
+++ new/securesystemslib-1.4.0/securesystemslib/signer/_crypto_signer.py
2020-02-02 01:00:00.000000000 +0100
@@ -3,7 +3,6 @@
import logging
import os
from dataclasses import astuple, dataclass
-from typing import Optional, Union
from urllib import parse
from securesystemslib.exceptions import UnsupportedLibraryError
@@ -116,7 +115,7 @@
def __init__(
self,
private_key: "PrivateKeyTypes",
- public_key: Optional[SSlibKey] = None,
+ public_key: SSlibKey | None = None,
):
if CRYPTO_IMPORT_ERROR:
raise UnsupportedLibraryError(CRYPTO_IMPORT_ERROR)
@@ -125,7 +124,7 @@
public_key = SSlibKey.from_crypto(private_key.public_key())
self._private_key: PrivateKeyTypes
- self._sign_args: Union[_RSASignArgs, _ECDSASignArgs, _NoSignArgs]
+ self._sign_args: _RSASignArgs | _ECDSASignArgs | _NoSignArgs
if public_key.keytype == "rsa" and public_key.scheme in [
"rsassa-pss-sha224",
@@ -195,7 +194,7 @@
cls,
priv_key_uri: str,
public_key: Key,
- secrets_handler: Optional[SecretsHandler] = None,
+ secrets_handler: SecretsHandler | None = None,
) -> "CryptoSigner":
"""Constructor for Signer to call
@@ -248,7 +247,7 @@
@staticmethod
def generate_ed25519(
- keyid: Optional[str] = None,
+ keyid: str | None = None,
) -> "CryptoSigner":
"""Generate new key pair as "ed25519" signer.
@@ -270,8 +269,8 @@
@staticmethod
def generate_rsa(
- keyid: Optional[str] = None,
- scheme: Optional[str] = "rsassa-pss-sha256",
+ keyid: str | None = None,
+ scheme: str | None = "rsassa-pss-sha256",
size: int = 3072,
) -> "CryptoSigner":
"""Generate new key pair as rsa signer.
@@ -299,7 +298,7 @@
@staticmethod
def generate_ecdsa(
- keyid: Optional[str] = None,
+ keyid: str | None = None,
) -> "CryptoSigner":
"""Generate new key pair as "ecdsa-sha2-nistp256" signer.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/securesystemslib-1.3.1/securesystemslib/signer/_hsm_signer.py
new/securesystemslib-1.4.0/securesystemslib/signer/_hsm_signer.py
--- old/securesystemslib-1.3.1/securesystemslib/signer/_hsm_signer.py
2020-02-02 01:00:00.000000000 +0100
+++ new/securesystemslib-1.4.0/securesystemslib/signer/_hsm_signer.py
2020-02-02 01:00:00.000000000 +0100
@@ -210,11 +210,13 @@
if key_type is None:
key_type = PyKCS11.CKO_PUBLIC_KEY
+ cka_id_filter = list(keyid.to_bytes((keyid.bit_length() + 7) // 8 or
1, "big"))
+
keys = session.findObjects(
[
(PyKCS11.CKA_CLASS, key_type),
(PyKCS11.CKA_KEY_TYPE, PyKCS11.CKK_ECDSA),
- (PyKCS11.CKA_ID, (keyid,)),
+ (PyKCS11.CKA_ID, cka_id_filter),
]
)
if not keys:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/securesystemslib-1.3.1/securesystemslib/signer/_signer.py
new/securesystemslib-1.4.0/securesystemslib/signer/_signer.py
--- old/securesystemslib-1.3.1/securesystemslib/signer/_signer.py
2020-02-02 01:00:00.000000000 +0100
+++ new/securesystemslib-1.4.0/securesystemslib/signer/_signer.py
2020-02-02 01:00:00.000000000 +0100
@@ -4,7 +4,7 @@
import logging
from abc import ABCMeta, abstractmethod
-from typing import Callable
+from collections.abc import Callable
from securesystemslib.signer._key import Key
from securesystemslib.signer._signature import Signature
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/securesystemslib-1.3.1/securesystemslib/signer/_sigstore_signer.py
new/securesystemslib-1.4.0/securesystemslib/signer/_sigstore_signer.py
--- old/securesystemslib-1.3.1/securesystemslib/signer/_sigstore_signer.py
2020-02-02 01:00:00.000000000 +0100
+++ new/securesystemslib-1.4.0/securesystemslib/signer/_sigstore_signer.py
2020-02-02 01:00:00.000000000 +0100
@@ -156,6 +156,7 @@
secrets_handler: SecretsHandler | None = None,
) -> SigstoreSigner:
try:
+ from sigstore.models import ClientTrustConfig
from sigstore.oidc import IdentityToken, Issuer, detect_credential
except ImportError as e:
raise UnsupportedLibraryError(IMPORT_ERROR) from e
@@ -174,7 +175,9 @@
if not ambient:
# TODO: Restrict oauth flow to use identity/issuer from public_key
# TODO: Use secrets_handler for identity_token() secret arg
- token = Issuer.production().identity_token()
+ trust_config = ClientTrustConfig.production()
+ issuer = Issuer(trust_config.signing_config.get_oidc_url())
+ token = issuer.identity_token()
else:
credential = detect_credential()
if not credential:
@@ -233,12 +236,15 @@
key. This method always uses the interactive authentication.
"""
try:
+ from sigstore.models import ClientTrustConfig
from sigstore.oidc import Issuer
except ImportError as e:
raise UnsupportedLibraryError(IMPORT_ERROR) from e
# authenticate to get the identity and issuer
- token = Issuer.production().identity_token()
+ trust_config = ClientTrustConfig.production()
+ issuer = Issuer(trust_config.signing_config.get_oidc_url())
+ token = issuer.identity_token()
return cls.import_(token.identity, token.federated_issuer, False)
def sign(self, payload: bytes) -> Signature:
@@ -257,11 +263,12 @@
"""
try:
+ from sigstore.models import ClientTrustConfig
from sigstore.sign import SigningContext
except ImportError as e:
raise UnsupportedLibraryError(IMPORT_ERROR) from e
- context = SigningContext.production()
+ context =
SigningContext.from_trust_config(ClientTrustConfig.production())
with context.signer(self._token) as sigstore_signer:
bundle = sigstore_signer.sign_artifact(payload)
# We want to access the actual signature, see
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/securesystemslib-1.3.1/tests/check_sigstore_signer.py
new/securesystemslib-1.4.0/tests/check_sigstore_signer.py
--- old/securesystemslib-1.3.1/tests/check_sigstore_signer.py 2020-02-02
01:00:00.000000000 +0100
+++ new/securesystemslib-1.4.0/tests/check_sigstore_signer.py 2020-02-02
01:00:00.000000000 +0100
@@ -9,16 +9,10 @@
tests.
"""
-import json
-import os
-import subprocess
-import time
+import functools
import unittest
-from base64 import b64decode
-from datetime import datetime, timedelta
-from pathlib import Path
-from tempfile import TemporaryDirectory
from unittest import mock
+from urllib import request
from securesystemslib.exceptions import (
UnverifiedSignatureError,
@@ -32,73 +26,24 @@
SIGNER_FOR_URI_SCHEME[SigstoreSigner.SCHEME] = SigstoreSigner
-TEST_IDENTITY = (
-
"https://github.com/sigstore-conformance/extremely-dangerous-public-oidc-beacon/.github/"
- "workflows/extremely-dangerous-oidc-beacon.yml@refs/heads/main"
-)
-TEST_ISSUER = "https://token.actions.githubusercontent.com"
-
+TEST_IDENTITY = "[email protected]"
+TEST_ISSUER = "https://accounts.google.com"
+TOKEN_URL =
"https://storage.googleapis.com/sigstore-conformance-testing-token/untrusted-testing-token.txt"
-def identity_token() -> str:
- """Return identity token for TEST_IDENTITY"""
- # following code is modified from extremely-dangerous-public-oidc-beacon
download-token.py.
- # Caching can be made smarter (to return the cached token only if it is
valid) if token
- # starts going invalid during runs
- min_validity = timedelta(seconds=5)
- max_retry_time = timedelta(minutes=5 if os.getenv("CI") else 1)
- retry_sleep_secs = 30 if os.getenv("CI") else 5
- git_url =
"https://github.com/sigstore-conformance/extremely-dangerous-public-oidc-beacon.git"
-
- def git_clone(url: str, dir_: str) -> None:
- base_cmd = [
- "git",
- "clone",
- "--quiet",
- "--branch",
- "current-token",
- "--depth",
- "1",
- ]
- subprocess.run(base_cmd + [url, dir_], check=True)
-
- def is_valid_at(token: str, reference_time: datetime) -> bool:
- # split token, b64 decode (with padding), parse as json, validate
expiry
- payload = token.split(".")[1]
- payload += "=" * (4 - len(payload) % 4)
- payload_json = json.loads(b64decode(payload))
-
- expiry = datetime.fromtimestamp(payload_json["exp"])
- return reference_time < expiry
-
- start_time = datetime.now()
- while datetime.now() <= start_time + max_retry_time:
- with TemporaryDirectory() as tempdir:
- git_clone(git_url, tempdir)
-
- with Path(tempdir, "oidc-token.txt").open(encoding="utf-8") as f:
- token = f.read().rstrip()
-
- if is_valid_at(token, datetime.now() + min_validity):
- return token
-
- print(
- f"Current token expires too early, retrying in {retry_sleep_secs}
seconds."
- )
- time.sleep(retry_sleep_secs)
- raise TimeoutError(f"Failed to find a valid token in {max_retry_time}")
[email protected]
+def token() -> str:
+ """Fetch and cache testing token"""
+ with request.urlopen(TOKEN_URL) as response:
+ return response.read().decode()
class TestSigstoreSigner(unittest.TestCase):
"""Test public key parsing, signature creation and verification."""
- @classmethod
- def setUpClass(cls):
- cls.token = identity_token()
-
- def test_sign(self):
+ def test_sign(self) -> None:
uri, public_key = SigstoreSigner.import_(TEST_IDENTITY, TEST_ISSUER)
- with mock.patch("sigstore.oidc.detect_credential",
return_value=self.token):
+ with mock.patch("sigstore.oidc.detect_credential",
return_value=token()):
signer = Signer.from_priv_key_uri(uri, public_key)
sig = signer.sign(b"data")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/securesystemslib-1.3.1/tests/test_hsm_signer.py
new/securesystemslib-1.4.0/tests/test_hsm_signer.py
--- old/securesystemslib-1.3.1/tests/test_hsm_signer.py 2020-02-02
01:00:00.000000000 +0100
+++ new/securesystemslib-1.4.0/tests/test_hsm_signer.py 2020-02-02
01:00:00.000000000 +0100
@@ -30,6 +30,7 @@
hsm_keyid = 1
hsm_keyid_default = 2
+ hsm_keyid_odd = 258
hsm_user_pin = "123456"
@staticmethod
@@ -37,6 +38,8 @@
"Create ecdsa key pair on hsm"
params = ECDomainParameters(name="named",
value=NamedCurve(curve.name)).dump()
+ cka_id = list(keyid.to_bytes((keyid.bit_length() + 7) // 8 or 1,
"big"))
+
public_template = [
(PyKCS11.CKA_CLASS, PyKCS11.CKO_PUBLIC_KEY),
(PyKCS11.CKA_PRIVATE, PyKCS11.CK_FALSE),
@@ -47,7 +50,7 @@
(PyKCS11.CKA_KEY_TYPE, PyKCS11.CKK_ECDSA),
(PyKCS11.CKA_EC_PARAMS, params),
(PyKCS11.CKA_LABEL, curve.name),
- (PyKCS11.CKA_ID, (keyid,)),
+ (PyKCS11.CKA_ID, cka_id),
]
private_template = [
(PyKCS11.CKA_CLASS, PyKCS11.CKO_PRIVATE_KEY),
@@ -58,7 +61,7 @@
(PyKCS11.CKA_SIGN, PyKCS11.CK_TRUE),
(PyKCS11.CKA_UNWRAP, PyKCS11.CK_FALSE),
(PyKCS11.CKA_LABEL, curve.name),
- (PyKCS11.CKA_ID, (keyid,)),
+ (PyKCS11.CKA_ID, cka_id),
]
session.generateKeyPair(
@@ -100,6 +103,7 @@
# Generate test ecdsa key pairs for curves secp256r1 and secp384r1 on
test token
cls._generate_key_pair(session, cls.hsm_keyid, SECP256R1)
cls._generate_key_pair(session, cls.hsm_keyid_default, SECP384R1)
+ cls._generate_key_pair(session, cls.hsm_keyid_odd, SECP256R1)
session.logout()
session.closeSession()
@@ -113,7 +117,7 @@
def test_hsm(self):
"""Test HSM key export and signing."""
- for hsm_keyid in [self.hsm_keyid, self.hsm_keyid_default]:
+ for hsm_keyid in [self.hsm_keyid, self.hsm_keyid_default,
self.hsm_keyid_odd]:
_, key = HSMSigner.import_(hsm_keyid, self.token_filter)
signer = HSMSigner(
hsm_keyid, self.token_filter, key, lambda sec:
self.hsm_user_pin
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/securesystemslib-1.3.1/tests/test_signer.py
new/securesystemslib-1.4.0/tests/test_signer.py
--- old/securesystemslib-1.3.1/tests/test_signer.py 2020-02-02
01:00:00.000000000 +0100
+++ new/securesystemslib-1.4.0/tests/test_signer.py 2020-02-02
01:00:00.000000000 +0100
@@ -7,7 +7,7 @@
import unittest
from contextlib import suppress
from pathlib import Path
-from typing import Any, Optional
+from typing import Any
from cryptography.hazmat.primitives.asymmetric.types import PrivateKeyTypes
from cryptography.hazmat.primitives.serialization import (
@@ -760,7 +760,7 @@
cls,
priv_key_uri: str,
public_key: Key,
- secrets_handler: Optional[SecretsHandler] = None,
+ secrets_handler: SecretsHandler | None = None,
) -> "CustomSigner":
return cls(key)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/securesystemslib-1.3.1/tox.ini
new/securesystemslib-1.4.0/tox.ini
--- old/securesystemslib-1.3.1/tox.ini 2020-02-02 01:00:00.000000000 +0100
+++ new/securesystemslib-1.4.0/tox.ini 2020-02-02 01:00:00.000000000 +0100
@@ -51,6 +51,8 @@
-r{toxinidir}/requirements-sigstore.txt
commands =
python -m tests.check_sigstore_signer
+passenv =
+ CI
# Check that importing securesystemslib._gpg.constants doesn't shell out.
[testenv:py-test-gpg-fails]