"""Signing keys: identity in this system is a keypair, so these must be airtight.""" from __future__ import annotations import pytest from tests.helpers import generate_keypair, sign_message, signature_ok MESSAGE = b"the rules bind the rulers" def test_keypair_generation_yields_distinct_strings(): private_key, public_key = generate_keypair() assert isinstance(private_key, str) and private_key assert isinstance(public_key, str) and public_key assert private_key != public_key def test_two_keypairs_are_different(): _, pub_a = generate_keypair() _, pub_b = generate_keypair() assert pub_a != pub_b def test_sign_verify_roundtrip(): private_key, public_key = generate_keypair() signature = sign_message(private_key, MESSAGE) assert signature_ok(public_key, MESSAGE, signature) def test_tampered_message_fails_verification(): private_key, public_key = generate_keypair() signature = sign_message(private_key, MESSAGE) assert not signature_ok(public_key, b"the rulers bind the rules", signature) def test_wrong_key_fails_verification(): private_key, _ = generate_keypair() _, other_public = generate_keypair() signature = sign_message(private_key, MESSAGE) assert not signature_ok(other_public, MESSAGE, signature) def test_tampered_signature_fails_verification(): private_key, public_key = generate_keypair() signature = sign_message(private_key, MESSAGE) sig_text = signature if isinstance(signature, str) else bytes(signature).hex() flipped = ("0" if sig_text[0] != "0" else "1") + sig_text[1:] assert not signature_ok(public_key, MESSAGE, flipped) @pytest.mark.parametrize("payload", [b"", b"x", b"a" * 10_000]) def test_roundtrip_various_message_sizes(payload): private_key, public_key = generate_keypair() signature = sign_message(private_key, payload) assert signature_ok(public_key, payload, signature)