Verify a price evidence file

Load a .json evidence file exported by the checker. This page recomputes every hash, checks the chain and the signature, and can print the file as a readable report. Nothing is uploaded.

By Adam Hale · updated 2026-10-12

Workflow aid, not legal advice. The rules were checked against the official texts on 2026-10-12; each page links them. Your files are processed in your browser and never uploaded.

What is checked

  1. Every entry's SHA-256 hash is recomputed from its sequence number, type, the previous hash and its data, serialised as canonical JSON (keys sorted, no whitespace).
  2. Each entry must point to the hash of the entry before it; the first points to 64 zeros. Removing, reordering or editing any entry breaks the chain.
  3. The final hash must match the file's head and the ECDSA P-256 / SHA-256 signature must verify against the public key in the file. The key id is the first 16 hex characters of the SHA-256 of that public key.

What a valid file proves, and what it does not

A valid file was not changed after export, and was signed by the browser key with that id. Files exported from the same browser share the key id, which links them to one another. The file does not prove when it was made (the date inside is the exporting computer's clock), who made it, or that the input CSV files were truthful. For an independent date, store the file somewhere that records dates, such as an email to yourself or your document system, or have it timestamped. To check the input files, compare their SHA-256 hashes with the ones listed in the file (on most systems: sha256sum file.csv or certutil -hashfile file.csv SHA256).

File format

The format is price-evidence-dossier/1: { format, createdAt, head, chain: [{ seq, type, prev, data, hash }], signature: { alg, keyId, publicKeyJwk, signed: "head", value } }. Entry types are meta (generator, rules version, settings, the rules and sources per country), input (file name, size, rows, SHA-256), result (one per checked price, with every price period used) and summary. The signature value is base64url of the raw 64-byte r‖s signature over the UTF-8 bytes of the head hash.