OpenChainGraph Suite · compliance_control

Visa TAP Agent Verification (RFC 9421 Web Bot Auth + Nonce + JWKS Pin)

Note (dated 2026-08-17): a chain composes independent computations performed in an analytical order. No step's output is carried into the next step by the execution model; each step computes from its own declared inputs. This is true of every chain on this site, including chains whose per-step copy below reads as a data handoff.

Verify the RFC 9421 Ed25519 Web Bot Auth signature base (art-129) → check the request's Visa TAP-shaped nonce for format, freshness, and caller-supplied replay-set membership (art-593) → confirm a caller-pinned SHA-256 digest matches the caller-supplied JWKS directory document (art-609) → validate the directory's own shape and keyid resolution (art-130, reused unmodified). Four independent verification facts about a caller-captured TAP-shaped request; zero network, zero key hosting, no facilitator role.

OpenChainGraph · 4 Steps compliance control RFC 9421 · Web Bot Auth · Ed25519 Visa TAP Hash-Anchored §4 chain_depth:4 · Zero PII
Chain Topology: Visa TAP Agent Verification (art-129→593→609→130)
art-129 WebBotAuth Sig Verifier art-593 Nonce & Replay-Window art-609 JWKS Pinned-Directory Check art-130 Sig Directory Validator ⊣
§4 Execution Hash · Chain Definition Anchor
execution_hash:computing…
Chain Stages · 4 Steps
1ROOTnode
Ed25519 signature verdict over the RFC 9421 signature base establishes whether the caller-captured request signature is genuine, ahead of the nonce and directory checks below.
MCP Call · verify_webbotauth_signature
{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "verify_webbotauth_signature",
    "arguments": {
      "covered_components": [
        { "name": "method", "value": "POST" },
        { "name": "@authority", "value": "api.example.com" },
        { "name": "@path", "value": "/agent/v1/execute" }
      ],
      "signature_params": "(\"method\" \"@authority\" \"@path\");created=1750000000;keyid=\"key-2026-06\";tag=\"web-bot-auth\";alg=\"ed25519\"",
      "signature_b64": "ruUab1uVdHazfuOcU0E4qLcTnOM2Z7zYHiluP5qxDZkKbw8EjPNarFHL7G2fS2DhnFH1xlpbihrIkOm8jwxIDA==",
      "public_key_jwk": { "kty": "OKP", "crv": "Ed25519", "x": "WrHvnND7oaWfvrGxUU3FNeJaQDwYj4K3e5fl0fH5p2g" },
      "alg": "ed25519",
      "expected_tag": "web-bot-auth",
      "created": 1750000000,
      "now_unix": 1750000060,
      "max_age_s": 3600
    }
  },
  "id": 1
}
2STEP 2node
Nonce format, the TAP created/expires spread, and caller-supplied replay-set membership are assessed next: a separate fact about the same captured request, independent of the signature verdict above.
MCP Call · check_webbotauth_nonce_replay
{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "check_webbotauth_nonce_replay",
    "arguments": {
      "nonce": "aB3dEfGhIjKlMnOpQrStUvWxYz012345",
      "created": 1750000000,
      "expires": 1750000300,
      "now_unix": 1750000060,
      "max_age_s": 3600,
      "seen_nonces": []
    }
  },
  "id": 2
}
3STEP 3node
The caller-supplied JWKS directory document's canonical digest is checked against the caller's own out-of-band pinned digest before the directory's internal shape is trusted by the next step.
MCP Call · check_jwks_pinned_directory
{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "check_jwks_pinned_directory",
    "arguments": {
      "directory_jwks": {
        "keys": [
          {
            "kty": "OKP",
            "crv": "Ed25519",
            "kid": "key-2026-06",
            "x": "WrHvnND7oaWfvrGxUU3FNeJaQDwYj4K3e5fl0fH5p2g"
          }
        ]
      },
      "pinned_digest": "45d28be3698cb02c2a658ecb15c292076254ca24cd797bc75a39dacd244a028d"
    }
  },
  "id": 3
}
4TERMINALnode
Terminal stage: JWKS directory shape and keyid resolution are validated on the same pinned document, completing the four-fact TAP verification surface.
MCP Call · validate_signature_directory
{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "validate_signature_directory",
    "arguments": {
      "well_known_path": "/.well-known/http-message-signatures-directory",
      "keyid": "key-2026-06",
      "directory_jwks": {
        "keys": [
          {
            "kty": "OKP",
            "crv": "Ed25519",
            "kid": "key-2026-06",
            "x": "WrHvnND7oaWfvrGxUU3FNeJaQDwYj4K3e5fl0fH5p2g"
          }
        ]
      }
    }
  },
  "id": 4
}
Export Artifacts
Download the §4 chain definition artifact or the §13.11 W3C VC view. Each of art-129, art-593, art-609, and art-130 individually support Policy Mandate JSON export.