25 lines
800 B
Python
25 lines
800 B
Python
import base58
|
|
import nacl.encoding
|
|
import nacl.signing
|
|
|
|
|
|
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
|