{
  "$comment": "Probity evidence-signing public keys for offline verification. A Probity evidence bundle is a DSSE/in-toto envelope (payloadType application/vnd.in-toto+json) signed with Ed25519 over the DSSE PAEv1 pre-image; the keyid is the lowercase-hex SHA-256 of the RFC 7638 JWK thumbprint of the public key. Re-derive any bundle yourself, offline, with the standalone verifier published at https://getprobity.dev/verify/probity-verify.py against the key at https://getprobity.dev/verify/probity.pub. This registry is the TRUST ANCHOR: each key carries the set of predicate types (and, for non-in-toto trace artifacts, payload types) it is authorized to sign. A verifier MUST reject a bundle whose predicateType is not in the signing key's authorized_predicates, so a trace key cannot mint an evidence bundle even though both verify under Ed25519. Predicate specifications: https://getprobity.dev/predicate/v1 (adversarial-execution-evidence carries its in-toto attestation-namespace URI).",
  "$comment_matching": "The entries in authorized_predicates and authorized_payload_types are matched as EXACT, VERSION-COMPLETE URIs. There is no prefix rule, no wildcard, and no implicit acceptance of a later version: /v0.6 and /v0.7 of one predicate are two different authorizations, because a predicate version change is a change to what a verifier must recompute, and a key authorized to sign a shape nobody implements authorizes nothing useful while widening its own scope. What that obliges, and the obligation runs to us and not to the reader: shipping a new predicate version means adding its URI here IN THE SAME CHANGE as the first bundle that carries it, and removing the URI of a version no shipped verifier implements. Until that lands, this anchor rejects our own artifacts -- which is the rule doing its job on the wrong target. It is enforced against the artifacts actually served, not against a list, by website/test/trust-anchor-authorizes-served-bundles.test.ts, which walks every DSSE envelope under public/ and refuses when any of them fails this MUST. A consumer holding an archived bundle whose predicate version is no longer listed here has a bundle this trust anchor no longer authorizes; that is deliberate, and the historical registry state is recoverable from this file's git history.",
  "scheme": "dsse-pae-v1+ed25519",
  "keyid_algorithm": "rfc7638-jwk-thumbprint-sha256-hex",
  "predicate_base": "https://getprobity.dev/predicate/v1/",
  "keys": [
    {
      "keyid": "427a109244697aacd5075f0a36e3e4f3c16eb9176c41e3f43bd7bb9989e57a86",
      "kty": "OKP",
      "crv": "Ed25519",
      "x": "w9_Z_uDQiU-oIjDCxsGiD1yR1raXNPsCRyQ7xrglC2A",
      "use": "verify",
      "role": "adversarial-execution-evidence-signer",
      "status": "active",
      "not_before": "2026-06-01T00:00:00Z",
      "authorized_predicates": [
        "https://in-toto.io/attestation/adversarial-execution-evidence/v0.7",
        "https://getprobity.dev/predicate/v1/security-verdict",
        "https://getprobity.dev/predicate/v1/static-scan-verdict",
        "https://getprobity.dev/predicate/v1/signed-evidence",
        "https://getprobity.dev/predicate/v1/substrate-integrity",
        "https://getprobity.dev/predicate/v1/sut-provenance",
        "https://getprobity.dev/predicate/v1/ml-bom",
        "https://getprobity.dev/predicate/v2/mesh-quiescence",
        "https://getprobity.dev/predicate/v2/a2a-mesh-scorecard",
        "https://getprobity.dev/predicate/v1/evidence-scope-disclosure"
      ],
      "pem": "-----BEGIN PUBLIC KEY-----\nMCowBQYDK2VwAyEAw9/Z/uDQiU+oIjDCxsGiD1yR1raXNPsCRyQ7xrglC2A=\n-----END PUBLIC KEY-----\n"
    },
    {
      "keyid": "aa3868a33353f9907beee6cae79ba57c494815b592c41f55776b266bff6e7bff",
      "kty": "OKP",
      "crv": "Ed25519",
      "x": "0bFeG0xnfSrIo1HjFhqBBW4Ng0eRdbW2LYlrj1i8p7M",
      "use": "verify",
      "role": "trace-record-signer",
      "status": "active",
      "not_before": "2026-06-01T00:00:00Z",
      "authorized_predicates": [],
      "authorized_payload_types": [
        "application/vnd.probity.catch-record.v2+json",
        "application/vnd.probity.catch-batch-root.v1",
        "application/vnd.probity.freeze-binding.v1+json"
      ],
      "pem": "-----BEGIN PUBLIC KEY-----\nMCowBQYDK2VwAyEA0bFeG0xnfSrIo1HjFhqBBW4Ng0eRdbW2LYlrj1i8p7M=\n-----END PUBLIC KEY-----\n"
    }
  ]
}
