Skip to content

Commit 5c7ef18

Browse files
authored
Merge pull request #556 from lukpueh/improve-key-checks
signer API: improve graceful failure testing and fix thus revealed error handling bug
2 parents f3e3f12 + b1cf437 commit 5c7ef18

File tree

2 files changed

+54
-7
lines changed

2 files changed

+54
-7
lines changed

securesystemslib/signer/_key.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,7 @@ def verify_signature(self, signature: Signature, data: bytes) -> None:
175175
exceptions.CryptoError,
176176
exceptions.FormatError,
177177
exceptions.UnsupportedAlgorithmError,
178+
exceptions.UnsupportedLibraryError,
178179
) as e:
179180
logger.info("Key %s failed to verify sig: %s", self.keyid, str(e))
180181
raise exceptions.VerificationError(

tests/check_public_interfaces.py

Lines changed: 53 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,8 @@
4343
UnsupportedLibraryError,
4444
VerificationError,
4545
)
46-
from securesystemslib.signer import GPGKey, Signature
46+
from securesystemslib.signer import GPGKey, Key, Signature, SSlibKey
47+
from securesystemslib.signer._sigstore_signer import SigstoreKey
4748

4849

4950
class TestPublicInterfaces(
@@ -317,13 +318,58 @@ def test_gpg_functions(self):
317318
securesystemslib.gpg.functions.export_pubkey("f00")
318319
self.assertEqual(expected_error_msg, str(ctx.exception))
319320

320-
def test_signer(self):
321+
def test_signer_verify(self):
321322
"""Assert generic VerificationError from UnsupportedLibraryError."""
322-
key = GPGKey("aa", "rsa", "pgp+rsa-pkcsv1.5", {"public": "val"})
323-
sig = Signature("aa", "aaaaaaa", {"other_headers": "aaaaaa"})
324-
with self.assertRaises(VerificationError) as ctx:
325-
key.verify_signature(sig, b"data")
326-
self.assertIsInstance(ctx.exception.__cause__, UnsupportedLibraryError)
323+
keyid = "aa"
324+
sig = Signature(keyid, "aaaaaaaa", {"other_headers": "aaaaaa"})
325+
326+
keys = [
327+
GPGKey(keyid, "rsa", "pgp+rsa-pkcsv1.5", {"public": "val"}),
328+
SSlibKey(keyid, "rsa", "rsa-pkcs1v15-sha512", {"public": "val"}),
329+
SigstoreKey(
330+
keyid,
331+
"sigstore-oidc",
332+
"Fulcio",
333+
{"identity": "val", "issuer": "val"},
334+
),
335+
]
336+
337+
for key in keys:
338+
with self.assertRaises(VerificationError) as ctx:
339+
key.verify_signature(sig, b"data")
340+
341+
self.assertIsInstance(
342+
ctx.exception.__cause__, (UnsupportedLibraryError, ImportError)
343+
)
344+
345+
def test_signer_ed25519_fallback(self):
346+
"""Assert ed25519 signature verification works in pure Python."""
347+
data = b"The quick brown fox jumps over the lazy dog"
348+
keyid = "aaa"
349+
sig = Signature.from_dict(
350+
{
351+
"keyid": keyid,
352+
"sig": "2ec7a5e295fa6265e10f3da7f1a432e7742f041f081b4faecab3a12bf0fc8f366c919c90c267e9ed1dfdeb7a7556b959a96dd0dcfea17da358622d39af36bf09",
353+
}
354+
)
355+
356+
key = Key.from_dict(
357+
keyid,
358+
{
359+
"keytype": "ed25519",
360+
"scheme": "ed25519",
361+
"keyval": {
362+
"public": "beb75c268206554e963c45dcbf3c004140d1cb69bbfe9370ef736f19388c9b26"
363+
},
364+
},
365+
)
366+
367+
self.assertIsNone(key.verify_signature(sig, data))
368+
369+
with self.assertRaises(
370+
securesystemslib.exceptions.UnverifiedSignatureError
371+
):
372+
key.verify_signature(sig, b"NOT DATA")
327373

328374

329375
if __name__ == "__main__":

0 commit comments

Comments
 (0)