{
  "description": "ORD-032 KAT: rootz.sign-mcp.v1 P-256-only (Secure Enclave device key) signer. TEST KEY, published on purpose.",
  "test_private_jwk": {
    "kty": "EC",
    "x": "mTJH5g1uTdEZ_SuUke-GaDrDr2HeFpYnyXQe-idFWe4",
    "y": "sv5KmVEphT6o9zpqGii-g9W_t5AX6ABOxjO913SmA0c",
    "crv": "P-256",
    "d": "5HlvAhDkI2B8x8Ofa5eJyYi_rzAT5AnMY-dNuEYIJmU"
  },
  "published_jwk": {
    "kty": "EC",
    "crv": "P-256",
    "x": "mTJH5g1uTdEZ_SuUke-GaDrDr2HeFpYnyXQe-idFWe4",
    "y": "sv5KmVEphT6o9zpqGii-g9W_t5AX6ABOxjO913SmA0c",
    "kid": "mXOSRSA6CSlhJ0I_qRfzk9YNAJ_RfI0qDVrVcRx9lhQ",
    "alg": "ecdsa-p256"
  },
  "body": {
    "kind": "ask-orders.checkpoint.v1",
    "log_id": "archive-free-kat-0001",
    "tree_size": 4,
    "root": "sha256:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
    "at": "2026-10-06T12:00:00.000Z",
    "signer": {
      "kid": "mXOSRSA6CSlhJ0I_qRfzk9YNAJ_RfI0qDVrVcRx9lhQ",
      "binding": "none",
      "evidence": null
    },
    "previous": null,
    "route": {
      "verifier": "https://receipts.rootz.global/verify",
      "resolver": "https://receipts.rootz.global/.well-known/origin-receipts/"
    }
  },
  "header_fields": {
    "v": 1,
    "iss": "archive-free-kat",
    "kid": "mXOSRSA6CSlhJ0I_qRfzk9YNAJ_RfI0qDVrVcRx9lhQ",
    "canon": "RFC8785",
    "payload": {
      "alg": "sha-256",
      "hash": "wrn9mQ5go13Cm49nEUOoAm0LcWmMzuQPsqlmreXjadY"
    },
    "ts": "2026-10-06T12:00:00Z",
    "exp": "2026-10-06T12:05:00Z",
    "nonce": "AAECAwQFBgcICQoLDA0ODw",
    "ctx": {
      "kind": "ask-orders.checkpoint.v1"
    },
    "algs": [
      "ecdsa-p256"
    ]
  },
  "expected": {
    "payload_hash_b64u": "wrn9mQ5go13Cm49nEUOoAm0LcWmMzuQPsqlmreXjadY",
    "signing_input_utf8": "{\"algs\":[\"ecdsa-p256\"],\"canon\":\"RFC8785\",\"ctx\":{\"kind\":\"ask-orders.checkpoint.v1\"},\"exp\":\"2026-10-06T12:05:00Z\",\"iss\":\"archive-free-kat\",\"kid\":\"mXOSRSA6CSlhJ0I_qRfzk9YNAJ_RfI0qDVrVcRx9lhQ\",\"nonce\":\"AAECAwQFBgcICQoLDA0ODw\",\"payload\":{\"alg\":\"sha-256\",\"hash\":\"wrn9mQ5go13Cm49nEUOoAm0LcWmMzuQPsqlmreXjadY\"},\"ts\":\"2026-10-06T12:00:00Z\",\"v\":1}",
    "signing_input_sha256_hex": "0a2ad0941ae89c69f35cd0736317fcc071da54fa94aafb74c64e51c7e5b82f53"
  },
  "reference_proof": {
    "suite": "rootz.sign-mcp.v1",
    "envelope": {
      "v": 1,
      "iss": "archive-free-kat",
      "kid": "mXOSRSA6CSlhJ0I_qRfzk9YNAJ_RfI0qDVrVcRx9lhQ",
      "canon": "RFC8785",
      "payload": {
        "alg": "sha-256",
        "hash": "wrn9mQ5go13Cm49nEUOoAm0LcWmMzuQPsqlmreXjadY"
      },
      "ts": "2026-10-06T12:00:00Z",
      "exp": "2026-10-06T12:05:00Z",
      "nonce": "AAECAwQFBgcICQoLDA0ODw",
      "ctx": {
        "kind": "ask-orders.checkpoint.v1"
      },
      "algs": [
        "ecdsa-p256"
      ],
      "sigs": {
        "ecdsa-p256": "MEQCIEw7Rv4_5BLsmWitkHbgGRu1fd71Ry5h-pAqIUTIlTOuAiBnTTxOfyIiMgQYADjSLz6RMW0B5P4GaKVWA6KZvcCMaA"
      }
    }
  },
  "verify_at": "2026-10-06T12:01:00Z",
  "notes": [
    "Sign the signing_input bytes (JCS of the header) with ECDSA P-256 / SHA-256; CryptoKit hashes internally, so pass the bytes, not a digest.",
    "Encode the signature as DER, then base64url without padding.",
    "Publish the device JWK WITH kid and alg \"ecdsa-p256\": the key lookup matches on alg and kid, and a JWK without kid matches ANY kid.",
    "kid here is the RFC 7638 thumbprint itself (raw base64url, no prefix). On-chain the line names it as kid=<kid> jkt-p256=<same value> role=device."
  ]
}
