25 lines
682 B
Python
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"]
|