import base64, json, time from cryptography.hazmat.primitives.asymmetric.ed25519 import Ed25519PublicKey def _b64u(s): return base64.urlsafe_b64decode(s + "=" * (-len(s) % 4)) def mizan_verdict_ok(req, keys, rule, token=None, now=None): """req: the x402 payment requirement the payer accepted (payTo, extra.mizan); keys: {kid: base64 Ed25519 public key}, your pinned copy of /.well-known/mizan-keys.json; rule: the rule hash you require (sha256:...). Offline. -> (ok, code)""" m = (req.get("extra") or {}).get("mizan") or {} t = token or m.get("token") or "" try: pre, body, sig = t.split(".") c = json.loads(_b64u(body)) Ed25519PublicKey.from_public_bytes(base64.b64decode(keys[c["kid"]])).verify(_b64u(sig), f"{pre}.{body}".encode("ascii")) except Exception: return False, "bad_token" norm = lambda s: str(s or "").lower() if str(s or "").lower().startswith("0x") else str(s or "") # noqa: E731 bt = c.get("bound_to") or {} if pre != "mzv1" or c.get("typ") != "mizan.verdict/1": return False, "malformed" if m.get("kid") and m["kid"] != c["kid"]: return False, "kid_mismatch" if not c.get("exp", 0) > (time.time() if now is None else now): return False, "expired" if not req.get("payTo") or norm(bt.get("payee")) != norm(req.get("payTo")): return False, "payee_mismatch" if bt.get("rule") != rule: return False, "rule_mismatch" return (True, "valid") if c.get("decision") == "ALLOW" else (False, "refused")