Skip to content

Learn · Audit & evidence

Verify a pack yourself

Four checks a recipient runs against the file, with no access to us.

Checked against the product on · written for people who need the evidence

A pack is verifiable by anyone holding it. The four checks below run against the file. Three of them take no secret at all.

The four checks

  1. Check the content hash.

    Take SHA-256 over the record stream exactly as delivered and compare it to the manifest content hash. A mismatch means a line changed, moved, or was removed.

  2. Recompute every entry hash.

    For each ledger_entry record, render the payload as canonical JSON, hash it, join the previous hash, the payload hash, the index, the time and the scope with vertical bars, and hash that. Compare to the hash on the record.

  3. Check the evidence bindings.

    Each evidence record captured the entry hash at the moment the link was made. Compare it to the hash on the entry it points at. A mismatch means a link was pointed at a different entry after the fact.

  4. Check the signature, when one is present.

    Compute the keyed hash over the content hash with the shared key and compare it to the signature. This check establishes who built the pack.

Note. A runnable verifier ships in the repository at examples/verify_audit_pack.py. It uses the standard library alone and prints one line per check.
What each check rules out.
CheckRules outNeeds a key
Content hashA line added, removed, reordered, or edited.No.
Entry hashesA payload or a timestamp altered inside an entry.No.
Evidence bindingsA control re-pointed at a different entry.No.
SignatureA pack built by someone else.Yes.
What does a pack prove?
That the entries it carries are the ones written at the time, in that order, and that each control points at the entry it pointed at when the link was made.
What does a pack leave open?
It carries the entries it was built from. Confirming that a chain is complete takes the whole chain, which the logbook export provides.
Can a recipient verify without contacting us?
Yes, for the first three checks. The signature check takes the shared key.