File fix-ecparam-testing.patch of Package python-sigstore

From 66ed146adf7942da99c7e2d2b2051876e09c3faa Mon Sep 17 00:00:00 2001
From: Dustin Ingram <di@users.noreply.github.com>
Date: Wed, 5 Nov 2025 20:17:24 +0000
Subject: [PATCH 1/4] Update test to use supported public key algorithms

---
 test/unit/internal/test_key_details.py | 58 +++-----------------------
 1 file changed, 5 insertions(+), 53 deletions(-)

diff --git a/test/unit/internal/test_key_details.py b/test/unit/internal/test_key_details.py
index b5bdac802..a6b09a6d1 100644
--- a/test/unit/internal/test_key_details.py
+++ b/test/unit/internal/test_key_details.py
@@ -15,24 +15,17 @@
 from unittest.mock import Mock
 
 import pytest
-from cryptography.hazmat.primitives.asymmetric import dsa, ec, ed25519, padding, rsa
+from cryptography.hazmat.primitives.asymmetric import ec, ed25519, padding, rsa
 from sigstore_models.common.v1 import PublicKeyDetails
 
 from sigstore._internal.key_details import _get_key_details
 
 
+# The algorithms tested below are from https://github.com/sigstore/fulcio/blob/4a86d8bf45972b58051ba44d91cd96664cf74711/cmd/app/serve.go#L125-L133
 @pytest.mark.parametrize(
     "mock_certificate",
     [
         # ec
-        pytest.param(
-            Mock(
-                public_key=Mock(
-                    return_value=ec.generate_private_key(ec.SECP192R1()).public_key()
-                )
-            ),
-            marks=[pytest.mark.xfail(strict=True)],
-        ),
         Mock(
             public_key=Mock(
                 return_value=ec.generate_private_key(ec.SECP256R1()).public_key()
@@ -49,52 +42,21 @@
             )
         ),
         # rsa pkcs1
-        pytest.param(
-            Mock(
-                public_key=Mock(
-                    return_value=rsa.generate_private_key(
-                        public_exponent=65537, key_size=2048
-                    ).public_key()
-                ),
-                signature_algorithm_parameters=padding.PKCS1v15(),
-            ),
-            marks=[pytest.mark.xfail(strict=True)],
-        ),
-        Mock(
-            public_key=Mock(
-                return_value=rsa.generate_private_key(
-                    public_exponent=65537, key_size=3072
-                ).public_key()
-            ),
-            signature_algorithm_parameters=padding.PKCS1v15(),
-        ),
         Mock(
             public_key=Mock(
                 return_value=rsa.generate_private_key(
-                    public_exponent=65537, key_size=4096
+                    public_exponent=65537, key_size=2048
                 ).public_key()
             ),
             signature_algorithm_parameters=padding.PKCS1v15(),
         ),
-        # rsa pss
-        pytest.param(
-            Mock(
-                public_key=Mock(
-                    return_value=rsa.generate_private_key(
-                        public_exponent=65537, key_size=2048
-                    ).public_key()
-                ),
-                signature_algorithm_parameters=padding.PSS(None, 0),
-            ),
-            marks=[pytest.mark.xfail(strict=True)],
-        ),
         Mock(
             public_key=Mock(
                 return_value=rsa.generate_private_key(
                     public_exponent=65537, key_size=3072
                 ).public_key()
             ),
-            signature_algorithm_parameters=padding.PSS(None, 0),
+            signature_algorithm_parameters=padding.PKCS1v15(),
         ),
         Mock(
             public_key=Mock(
@@ -102,7 +64,7 @@
                     public_exponent=65537, key_size=4096
                 ).public_key()
             ),
-            signature_algorithm_parameters=padding.PSS(None, 0),
+            signature_algorithm_parameters=padding.PKCS1v15(),
         ),
         # ed25519
         Mock(
@@ -111,16 +73,6 @@
                 signature_algorithm_parameters=None,
             )
         ),
-        # unsupported
-        pytest.param(
-            Mock(
-                public_key=Mock(
-                    return_value=dsa.generate_private_key(key_size=1024).public_key()
-                ),
-                signature_algorithm_parameters=None,
-            ),
-            marks=[pytest.mark.xfail(strict=True)],
-        ),
     ],
 )
 def test_get_key_details(mock_certificate):

From f7b120b04605828dd6cd19358f1bec3e634cb7c8 Mon Sep 17 00:00:00 2001
From: Dustin Ingram <di@users.noreply.github.com>
Date: Wed, 5 Nov 2025 20:20:50 +0000
Subject: [PATCH 2/4] Drop support for unused key algorithms

---
 sigstore/_internal/key_details.py | 6 +-----
 1 file changed, 1 insertion(+), 5 deletions(-)

diff --git a/sigstore/_internal/key_details.py b/sigstore/_internal/key_details.py
index f9a53b975..f18a0a6fa 100644
--- a/sigstore/_internal/key_details.py
+++ b/sigstore/_internal/key_details.py
@@ -44,17 +44,13 @@ def _get_key_details(certificate: Certificate) -> PublicKeyDetails:
         if public_key.key_size == 3072:
             if isinstance(params, padding.PKCS1v15):
                 key_details = PublicKeyDetails.PKIX_RSA_PKCS1V15_3072_SHA256
-            elif isinstance(params, padding.PSS):
-                key_details = PublicKeyDetails.PKIX_RSA_PSS_3072_SHA256
             else:
                 raise ValueError(
                     f"Unsupported public key type, size, and padding: {type(public_key)}, {public_key.key_size}, {params}"
                 )
         elif public_key.key_size == 4096:
             if isinstance(params, padding.PKCS1v15):
-                key_details = PublicKeyDetails.PKIX_RSA_PKCS1V15_3072_SHA256
-            elif isinstance(params, padding.PSS):
-                key_details = PublicKeyDetails.PKIX_RSA_PSS_3072_SHA256
+                key_details = PublicKeyDetails.PKIX_RSA_PKCS1V15_4096_SHA256
             else:
                 raise ValueError(
                     f"Unsupported public key type, size, and padding: {type(public_key)}, {public_key.key_size}, {params}"

From 6fabe74648553416397f8fe75a73f4a60e20acd2 Mon Sep 17 00:00:00 2001
From: Dustin Ingram <di@users.noreply.github.com>
Date: Wed, 5 Nov 2025 20:21:25 +0000
Subject: [PATCH 3/4] Add support for PKIX_RSA_PKCS1V15_2048_SHA256

---
 sigstore/_internal/key_details.py | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/sigstore/_internal/key_details.py b/sigstore/_internal/key_details.py
index f18a0a6fa..d3717650a 100644
--- a/sigstore/_internal/key_details.py
+++ b/sigstore/_internal/key_details.py
@@ -41,7 +41,14 @@ def _get_key_details(certificate: Certificate) -> PublicKeyDetails:
         else:
             raise ValueError(f"Unsupported EC curve: {public_key.curve.name}")
     elif isinstance(public_key, rsa.RSAPublicKey):
-        if public_key.key_size == 3072:
+        if public_key.key_size == 2048:
+            if isinstance(params, padding.PKCS1v15):
+                key_details = PublicKeyDetails.PKIX_RSA_PKCS1V15_2048_SHA256
+            else:
+                raise ValueError(
+                    f"Unsupported public key type, size, and padding: {type(public_key)}, {public_key.key_size}, {params}"
+                )
+        elif public_key.key_size == 3072:
             if isinstance(params, padding.PKCS1v15):
                 key_details = PublicKeyDetails.PKIX_RSA_PKCS1V15_3072_SHA256
             else:

From 08b5ef0bf695db52664dfe3d22537c30a43e4df7 Mon Sep 17 00:00:00 2001
From: Dustin Ingram <di@users.noreply.github.com>
Date: Wed, 5 Nov 2025 20:27:47 +0000
Subject: [PATCH 4/4] Add tests for unsupported edge cases

---
 test/unit/internal/test_key_details.py | 89 +++++++++++++++++++++++++-
 1 file changed, 88 insertions(+), 1 deletion(-)

diff --git a/test/unit/internal/test_key_details.py b/test/unit/internal/test_key_details.py
index a6b09a6d1..23760cc2d 100644
--- a/test/unit/internal/test_key_details.py
+++ b/test/unit/internal/test_key_details.py
@@ -15,7 +15,8 @@
 from unittest.mock import Mock
 
 import pytest
-from cryptography.hazmat.primitives.asymmetric import ec, ed25519, padding, rsa
+from cryptography.hazmat.primitives import hashes
+from cryptography.hazmat.primitives.asymmetric import dsa, ec, ed25519, padding, rsa
 from sigstore_models.common.v1 import PublicKeyDetails
 
 from sigstore._internal.key_details import _get_key_details
@@ -81,3 +82,89 @@ def test_get_key_details(mock_certificate):
     """
     key_details = _get_key_details(mock_certificate)
     assert isinstance(key_details, PublicKeyDetails)
+
+
+@pytest.mark.parametrize(
+    "mock_certificate, error_msg",
+    [
+        # Unsupported EC curve
+        (
+            Mock(
+                public_key=Mock(
+                    return_value=ec.generate_private_key(ec.SECT163K1()).public_key()
+                )
+            ),
+            "Unsupported EC curve: sect163k1",
+        ),
+        # Unsupported RSA padding
+        (
+            Mock(
+                public_key=Mock(
+                    return_value=rsa.generate_private_key(
+                        public_exponent=65537, key_size=2048
+                    ).public_key()
+                ),
+                signature_algorithm_parameters=padding.PSS(
+                    mgf=padding.MGF1(hashes.SHA256()),
+                    salt_length=padding.PSS.MAX_LENGTH,
+                ),
+            ),
+            "Unsupported public key type, size, and padding",
+        ),
+        (
+            Mock(
+                public_key=Mock(
+                    return_value=rsa.generate_private_key(
+                        public_exponent=65537, key_size=3072
+                    ).public_key()
+                ),
+                signature_algorithm_parameters=padding.PSS(
+                    mgf=padding.MGF1(hashes.SHA256()),
+                    salt_length=padding.PSS.MAX_LENGTH,
+                ),
+            ),
+            "Unsupported public key type, size, and padding",
+        ),
+        (
+            Mock(
+                public_key=Mock(
+                    return_value=rsa.generate_private_key(
+                        public_exponent=65537, key_size=4096
+                    ).public_key()
+                ),
+                signature_algorithm_parameters=padding.PSS(
+                    mgf=padding.MGF1(hashes.SHA256()),
+                    salt_length=padding.PSS.MAX_LENGTH,
+                ),
+            ),
+            "Unsupported public key type, size, and padding",
+        ),
+        # Unsupported RSA key size
+        (
+            Mock(
+                public_key=Mock(
+                    return_value=rsa.generate_private_key(
+                        public_exponent=65537, key_size=1024
+                    ).public_key()
+                ),
+                signature_algorithm_parameters=padding.PKCS1v15(),
+            ),
+            "Unsupported RSA key size: 1024",
+        ),
+        # Unsupported key type
+        (
+            Mock(
+                public_key=Mock(
+                    return_value=dsa.generate_private_key(key_size=1024).public_key()
+                )
+            ),
+            "Unsupported public key type",
+        ),
+    ],
+)
+def test_get_key_details_unsupported(mock_certificate, error_msg):
+    """
+    Ensures that we raise a ValueError for unsupported key types and schemes.
+    """
+    with pytest.raises(ValueError, match=error_msg):
+        _get_key_details(mock_certificate)
openSUSE Build Service is sponsored by