nebulaforge-offline-resilie.../nebulaforge/governance.py

29 lines
1.1 KiB
Python

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()})