{
  "_comment": [
    "FROZEN TEST VECTORS for the Rootz response envelope.",
    "An implementer who cannot reproduce expected_payload_hash from raw_body_utf8 has",
    "the preimage rule wrong. See spec/VERIFYING-A-ROOTZ-ENVELOPE.md.",
    "These are generated ONCE and committed. Do not regenerate them: their whole purpose",
    "is to fail if the canonicalisation rule ever changes."
  ],
  "vectors": [
    {
      "name": "json-rpc-response",
      "raw_body_utf8": "{\"jsonrpc\":\"2.0\",\"id\":1,\"result\":\"0x598867c\"}\n",
      "raw_body_sha256_hex": "16ab303aff54c9d17592ff2971ddc98e9a75f8e991f6a8072a87931573b212c6",
      "signed_object": {
        "rpc_body_bytes": 46,
        "rpc_body_sha256": "16ab303aff54c9d17592ff2971ddc98e9a75f8e991f6a8072a87931573b212c6"
      },
      "jcs_of_signed_object_utf8": "{\"rpc_body_bytes\":46,\"rpc_body_sha256\":\"16ab303aff54c9d17592ff2971ddc98e9a75f8e991f6a8072a87931573b212c6\"}",
      "expected_payload_hash_b64url": "YgQV4E2FRcZ5xuIDBAAVCtjzN9-fdI4yym3Xl2ERK-Q",
      "note": "payload.hash is BASE64URL. certifiedKeysetDigest elsewhere is HEX. Same algorithm, different encoding — this is the single most common failure."
    },
    {
      "name": "empty-body",
      "raw_body_utf8": "",
      "raw_body_sha256_hex": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
      "signed_object": {
        "rpc_body_bytes": 0,
        "rpc_body_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
      },
      "jcs_of_signed_object_utf8": "{\"rpc_body_bytes\":0,\"rpc_body_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\"}",
      "expected_payload_hash_b64url": "t2GF_4cDVvcFNPWsi-A05BGBQ3RBq5S4Pb0HiE0HwKI"
    },
    {
      "name": "large-integer-body-must-not-be-reparsed",
      "raw_body_utf8": "{\"jsonrpc\":\"2.0\",\"id\":12345678901234567890,\"result\":\"0x1\"}",
      "note": "JSON.parse turns this id into 12345678901234567000. Hashing the WIRE BYTES is what makes the envelope survive it — re-encoding would change the hash.",
      "raw_body_sha256_hex": "9fbd445cf8795afd510783a1e7b4028968ea52001471aeb57ee2f4e56f223495",
      "signed_object": {
        "rpc_body_bytes": 58,
        "rpc_body_sha256": "9fbd445cf8795afd510783a1e7b4028968ea52001471aeb57ee2f4e56f223495"
      },
      "jcs_of_signed_object_utf8": "{\"rpc_body_bytes\":58,\"rpc_body_sha256\":\"9fbd445cf8795afd510783a1e7b4028968ea52001471aeb57ee2f4e56f223495\"}",
      "expected_payload_hash_b64url": "5uGZL2gbmhYZIc5fGc8gX9ehbDJTtrLRVvOuiz0INOw"
    }
  ],
  "envelope_example": {
    "v": 1,
    "iss": "node.rootz.global",
    "kid": "k-vectors-1",
    "canon": "RFC8785",
    "payload": {
      "alg": "sha-256",
      "hash": "YgQV4E2FRcZ5xuIDBAAVCtjzN9-fdI4yym3Xl2ERK-Q"
    },
    "ts": "2026-09-15T19:20:00Z",
    "exp": "2026-09-15T19:25:00Z",
    "nonce": "iOyHq17vwM2MatvwqVwduA",
    "ctx": {
      "node_id": "polygon-node-1",
      "tier": "unknown",
      "req_hash": ""
    },
    "algs": [
      "ecdsa-p256",
      "ed25519"
    ],
    "sigs": {
      "ecdsa-p256": "MEYCIQD0m038pIn1X_bWiEpJbaEt_doWIUsU8C7qF1vTlEt2zAIhAJz-2OLDAmEPPWOcfcNctMzWdYbXMDMaqLPhpMCeJ2Ux",
      "ed25519": "qetX7DNT9Vg7889Ad4s5cREu_uPqJmOaFLLla-ur8s2z_vr1CPkdYKAecMES79iDGNvMkl36BUey5tf3D3FSDg"
    }
  },
  "public_keyset_example": {
    "iss": "node.rootz.global",
    "kid": "k-vectors-1",
    "corpid": null,
    "keys": {
      "ed25519": {
        "pub": "-----BEGIN PUBLIC KEY-----\nMCowBQYDK2VwAyEAIKm8FshdJzqQP+d6g/CskntVdAYJ2C+qnOOLxMsZ+Wg=\n-----END PUBLIC KEY-----\n"
      },
      "ecdsa-p256": {
        "pub": "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEmZDleeFXLYvJ4oKY9XpgVJhU/qlx\n1IY3pDihN1qlu1j2hBSt5dHPjF/eFT4sjTAeXcTiOwHU2jHTI5TJ+9ogAQ==\n-----END PUBLIC KEY-----\n"
      }
    }
  }
}
