from __future__ import annotations from typing import List from cryptography.hazmat.primitives.asymmetric.ed25519 import Ed25519PrivateKey, Ed25519PublicKey from cryptography.hazmat.primitives import serialization import time class GovernanceLedger: """Tamper-evident ledger of governance decisions (signature-based).""" def __init__(self) -> None: self.entries: List[dict] = [] self._private_key = Ed25519PrivateKey.generate() self.public_key = self._private_key.public_key() def sign(self, message: bytes) -> bytes: return self._private_key.sign(message) def verify(self, message: bytes, signature: bytes) -> bool: try: self.public_key.verify(signature, message) return True except Exception: return False def add_entry(self, decision: str, contract_id: str) -> None: timestamp = time.time() payload = f"{decision}:{contract_id}:{timestamp}".encode() sig = self.sign(payload) self.entries.append({"decision": decision, "contract_id": contract_id, "timestamp": timestamp, "signature": sig.hex()})