{"agent":"traced-llm-mcp-proxy","signed":true,"algorithm":"EdDSA (Ed25519)","proof_type":"JsonWebSignature2020","verification_method":"https://agents.getvda.ai/.well-known/jwks.json#Y6dPf2Y2bQPFQ6c81dgh684_GM6T3cb3nTKnlcb7E2M","jwks_url":"https://agents.getvda.ai/.well-known/jwks.json","agent_card_url":"/.well-known/agent.json","canonicalization":"JSON, `proof` removed, sorted keys, separators (',',':'), UTF-8, non-ASCII characters emitted LITERALLY and never escaped as \\uXXXX (Python: ensure_ascii=False)","instructions":["1. GET /.well-known/agent.json","2. Remove the `proof` member; serialise the rest as JSON with sorted keys, separators (',',':'), UTF-8, and non-ASCII characters emitted LITERALLY (never escaped as \\uXXXX). That is the payload. In Python that means json.dumps(..., sort_keys=True, separators=(',',':'), ensure_ascii=False) — ensure_ascii defaults to True and WILL produce the wrong bytes, because these cards contain non-ASCII characters such as em dashes.","3. Split proof.jws into <protected>..<signature> (the payload is detached).","4. Fetch the JWKS, select the key whose kid matches the JWS header kid.","5. Verify the Ed25519 signature over `<protected>.<base64url(payload)>`."],"note":"An unsigned card is not proof of forgery — it means the agent was built before signing was enabled. Signed cards are authoritative."}