|
43 | 43 | UnsupportedLibraryError,
|
44 | 44 | VerificationError,
|
45 | 45 | )
|
46 |
| -from securesystemslib.signer import GPGKey, Signature |
| 46 | +from securesystemslib.signer import GPGKey, Key, Signature, SSlibKey |
| 47 | +from securesystemslib.signer._sigstore_signer import SigstoreKey |
47 | 48 |
|
48 | 49 |
|
49 | 50 | class TestPublicInterfaces(
|
@@ -317,13 +318,58 @@ def test_gpg_functions(self):
|
317 | 318 | securesystemslib.gpg.functions.export_pubkey("f00")
|
318 | 319 | self.assertEqual(expected_error_msg, str(ctx.exception))
|
319 | 320 |
|
320 |
| - def test_signer(self): |
| 321 | + def test_signer_verify(self): |
321 | 322 | """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") |
327 | 373 |
|
328 | 374 |
|
329 | 375 | if __name__ == "__main__":
|
|
0 commit comments