idea172-bevault-verifiable-.../idea172_bevault_verifiable_.../signing.py

25 lines
682 B
Python

"""Delta signing utilities for BeVault."""
from __future__ import annotations
import hashlib
import hmac
import json
from .core import HedgeDelta
def sign_delta(delta: HedgeDelta, key: bytes) -> str:
"""Sign a HedgeDelta deterministically using HMAC-SHA256."""
payload = json.dumps(delta.to_signable_dict(), sort_keys=True, separators=(",", ":"))
return hmac.new(key, payload.encode("utf-8"), hashlib.sha256).hexdigest()
def verify_delta(delta: HedgeDelta, key: bytes, signature: str) -> bool:
"""Verify a delta signature in a deterministic way."""
return hmac.compare_digest(sign_delta(delta, key), signature)
__all__ = ["sign_delta", "verify_delta"]