What it checks
- Parses the receipt and rejects an unsupported spec version.
- Resolves
issuer.key_idagainst the issuer’s published key set, checks the key’s validity window, and verifies the Ed25519 signature over the receipt body. - Recomputes the claim digest and confirms it matches.
- If a
proofis present, verifies the Merkle inclusion proof — and, if you pass an RPC URL, verifies the on-chain anchor too (see anchoring). - Reports the achieved trust level and the verdict.
Running it
From a checkout of the qed-proof-core repository:--rpc to check everything except the anchor (signature, schema, and Merkle inclusion), which reports the
anchor as "not_checked_offline" rather than skipping it silently.
The tool prints a JSON report, for example:
valid is only true if every applicable check passes. achieved_trust_level is what the checker could actually
confirm — 2 requires both a verified inclusion proof and a verified on-chain anchor; without --rpc, the ceiling is
1.
Change entries and policy
The log holds a second kind of entry besides receipts: a change entry, recorded when something changed at a destination that no claim explained. It has no claim and no verdict, and it is signed under its own domain so it can never pass as a receipt. The same checker handles it; the report adds"entry_kind": "change" and has no claim_digest check.
A receipt or change entry made by a pipeline carries a policy: the pipeline’s id, version and digest. Give the checker the
pipeline document and it confirms the digest, id and version match:
"policy": true (or false, which makes the entry invalid). Without the document it reports
"policy": "not_checked" and the entry stays valid on its other checks.
In the browser
Until then, use the command-line checker above, or point any RFC 6962-compatible Merkle verifier and an Ed25519 signature check at the receipt’sbody, signature, and proof per the receipt spec.