import nacl.signing import nacl.encoding import base58 class Signer: def __init__(self, seed: bytes): if len(seed) != 32: raise ValueError("Seed must be 32 bytes") self.signing_key = nacl.signing.SigningKey(seed) self.verify_key = self.signing_key.verify_key def sign(self, data_bytes: bytes) -> str: signed_message = self.signing_key.sign(data_bytes) signature = signed_message.signature return base58.b58encode(signature).decode() def verify(self, data_bytes: bytes, signature: str) -> bool: signature_bytes = base58.b58decode(signature) try: self.verify_key.verify(data_bytes, signature_bytes) return True except nacl.exceptions.BadSignatureError: return False