{
  "kind": "agent-card-signature-forms-v1",
  "card": "https://gate.horizonshield.dev/.well-known/agent-card.json",
  "jwks": "https://gate.horizonshield.dev/.well-known/jwks.json",
  "kid": "hs-2026-09",
  "alg": "ES256",
  "signing_input": "BASE64URL(protected) || '.' || BASE64URL(payload), ES256 (RFC 7518 section 3.4, r || s)",
  "signatures": [
    {
      "index": 0,
      "form": "served-rfc8785",
      "payload": "RFC 8785 of the card exactly as served at https://gate.horizonshield.dev/.well-known/agent-card.json, with the top-level signatures member removed",
      "covers": "every member the card serves, including those outside the A2A AgentCard schema (url, protocolVersion, preferredTransport, securityRequirements, compensation, provider.legalEntity)",
      "payload_sha256": "c577d9bbd59c868dd3ad09ea56d97d9ed5990e3ffb356f9716eae6359f95dfac"
    },
    {
      "index": 1,
      "form": "a2a-sdk-proto",
      "payload": "the card with signatures removed, passed through canonicalizeAgentCard in @a2a-js/sdk 1.1.0 (a protobuf fromJSON/toJSON round trip of the AgentCard message), then RFC 8785",
      "covers": "the members the A2A AgentCard schema keeps; members outside the schema, and members at their default value such as required: false, are not covered",
      "payload_sha256": "093ed47a1c1d9f559dd4f616d46cf35661c9d166de09372d1495db15b8090b20"
    }
  ],
  "reading": "Both signatures are by the same key. A verifier that implements the official SDK form accepts the card through the a2a-sdk-proto signature; a verifier that checks the served bytes accepts it through the served-rfc8785 signature. Only the served-rfc8785 signature covers compensation and provider.legalEntity: a card edited in those members after signing still verifies through the other signature, so a reader who relies on them must check the served-rfc8785 one. Order in the card is not part of what is signed.",
  "found_by": "https://github.com/probityai/agent-evidence-vectors/issues/55"
}