{"issuer":"MIZAN","keys":[{"key_id":"2266fb495f83b0a0","alg":"Ed25519","use":"response-signature","public_key_b64":"DldoufXTa30rmfQINo1q6yAAF68Wk2qfG1A7c3OJ8yw=","format":"raw 32-byte Ed25519"},{"key_id":"eip712-a958c056","alg":"ES256K","use":"eip712-receipt","address":"0xA958c0569c9b812AAaeD104246A806d38BcE1A26","domain":{"name":"MIZAN","version":"1"},"type":"Receipt(address subject,bytes32 credential,uint64 issuedAt,uint64 expiresAt)","verify":"Solidity: MizanProof.isProven(subject, receipt, signature) · https://mizan.market/skill/MizanProof.sol","compact_secp256k1_public_key":"03f065c5f4163dd94703eacee3990585bdbcfb1ab9f9376f2c38513160a0d28370","compact":"mizan-compact/1 receipts: secp256k1 ECDSA over sha256(bytes) with compact_secp256k1_public_key; ed25519 over the bytes with the Ed25519 key above"}],"signed_over":"sha256-canonical JSON of the response body with provenance.signature removed (json.dumps(body, sort_keys=True, separators=(',',':'), ensure_ascii=False, default=str).encode('utf-8')); the signature is over these canonical bytes, not over their hash; canonical_sha256 is published for reference","verify":"python: Ed25519PublicKey.from_public_bytes(b64decode(public_key_b64)).verify(b64decode(sig), canonical)","scope":"studio.mizan.market REST, A2A, x402 and MCP tool results","rotation":"A rotated key is appended here; old key_ids stay listed with a retired_utc.","ceremony":{"policy":"keys rotate only by this published ceremony, never silently","successor_pubkey_sha256":"e45c250cdd41d8adbf3b1421c698cd7d974fd4b3569b64c7ce770111c1e13a36","rule":"at rotation the new key's raw 32-byte Ed25519 public key must sha256 to successor_pubkey_sha256, and a fresh successor hash is published in the same breath","emergency":"a compromised key is revoked by a signed statement from the successor key plus a leaf in the verdict log","doc":"https://mizan.market/standard/continuity/"}}