Evidence verifier

Has this capture been altered?

Every Snappy evidence bundle carries a SHA-256 fingerprint taken at the moment of capture. Drop the bundle below and the fingerprint is recomputed and compared, entirely in your browser.

Drop the evidence bundle here

The .zip Snappy downloaded, or the image and its .evidence.json as two separate files

🔒 Files never leave your device. This page makes no network requests and works offline.

How verification works

  1. When evidence mode is on, Snappy computes the SHA-256 hash of the final image at the moment it is saved and writes it into the .evidence.json manifest beside the image.
  2. This page recomputes the hash of the image you drop in, using your browser's built-in cryptography (crypto.subtle), and compares the two.
  3. If even one pixel was changed after the manifest was written, the hashes will not match. A match means the image is byte-for-byte identical to the image this manifest describes.

The manifest also records the page URL, the exact capture time and timezone, who captured it, and whether anything was redacted, so a screenshot carries its context with it.

What a match proves, and what it doesn't

A match proves the image is byte-for-byte the one this manifest's fingerprint was computed from. Nothing edited, re-saved, or corrupted it afterward; even a one-pixel change breaks the match. If you got the fingerprint from somewhere you trust (see below), the image in front of you is the capture it was recorded for.

A match can't prove who created the bundle. The manifest is plain JSON, so anyone can write one for any image and its hash will match. The recorded tool, time, and page are records, not cryptographic proof, and a match says nothing about whether the page showed truthful content when it was captured.

So when a capture matters, keep a copy of the SHA-256 from the .evidence.json somewhere that can't be edited later: the audit ticket, an email to the auditor, your team chat. If anyone questions the image months on, this page can show it still matches the hash you recorded at the time.