Step-by-step guide

How to verify a ProofSnap evidence package

In 2026, anyone can verify a ProofSnap evidence package in three ways: in the ProofSnap side panel, in the free Trust Verifier on getproofsnap.com, or with the verify.sh and verify.ps1 scripts inside the ZIP. Each one recomputes the SHA-256 hash of every file, checks the RSA signature over manifest.json and reports the timestamps that show when the package existed.

Works for

Web, video, session and file packages

Three routes

Side panel, website, scripts

Account

Not needed on the website

By Radim Motycka, Founder and Lead Engineer, ProofSnap, who builds the verifier and the verification scripts

What a successful verification proves

Verifying a ProofSnap evidence package answers three separate questions. Integrity: every file still has the SHA-256 hash recorded in manifest.json. Coherence: the RSA signature in manifest.sig matches the manifest, so the list of hashes was not edited either. Time: an OpenTimestamps proof shows the manifest existed no later than a given Bitcoin block. An EU qualified timestamp from Disig a.s., a Qualified Trust Service Provider on the EU Trusted List, ties it to a date and time.

"The TSA's role is to time-stamp a datum to establish evidence indicating that a datum existed before a particular time."

IETF RFC 3161, Time-Stamp Protocol, section 1 (2001)

The signature proves integrity: its key is generated inside the package, and the timestamps prove time. The scripts verify.sh and verify.ps1 run the same four checks (file integrity, manifest signature, eIDAS token, Bitcoin anchor) and end with one of three exit codes: 0 for PASS, 1 for FAIL and 2 for INCOMPLETE.

The three routes compared

The side panel verifier reads packages up to about 1.8 GB, and browser memory can run short from about 900 MB. For larger packages, use verify.sh or verify.ps1, which check any size file by file.

A: side panelB: websiteC: scripts in the ZIP
Who uses itYou, before sendingAnyone you send it toAn expert on their own computer
ProofSnap accountRequiredNot neededNot needed
Runs onChrome or Edge with ProofSnapAny modern browsermacOS, Linux, Windows
Uses ProofSnap serversFor the two timestamp checksFor the two timestamp checksNo
Large videosUp to about 1.8 GBLimited by browser memoryNo size limit

Step 1, everyone

Work with the original ZIP

Every route below checks the ZIP exactly as ProofSnap produced it, whether it holds a web capture, a video, a multi-tab session or a file certification. That ZIP is also what you hand over to the other side, your lawyer or the court. Keep the original untouched and work on copies. What each file contains is explained in how to read an evidence package.

  1. 1The ZIP. Renaming the ZIP file itself is harmless: the checks look at the files inside. Do not add files to it, remove files from it or zip it again.
  2. 2manifest.json. The list of every file with its SHA-256 hash, signed in manifest.sig with the key in publickey.pem. When present, the Bitcoin and eIDAS timestamps are issued for this file.
  3. 3verification/. The scripts and the plain-text guide for checking the package without ProofSnap, see steps 8 to 10.
An example web capture package with OpenTimestamps and eIDAS, opened in a file manager (simplified). The exact list depends on the plan and the options.

Route A

Verify in the ProofSnap side panel

The Trust Verifier is built into the extension, next to the capture tools.

Step 2, in the side panel

Find the ProofSnap Trust Verifier

Open the ProofSnap side panel and scroll down past the capture options. The ProofSnap Trust Verifier card sits right above the File Certifier and starts collapsed. You need a ProofSnap account with a plan or credits to see it; anyone without ProofSnap uses the website (step 7).

  1. 1ProofSnap icon. Opens the side panel. The tab you have open does not matter.
  2. 2ProofSnap Trust Verifier. Click the title to open the card.
The Trust Verifier sits under the capture options and above the File Certifier. It works on any tab. Side panel built from the extension's own interface; plan and numbers are examples.

Step 3, in the side panel

Upload the ZIP and click Verify zip file

The verifier accepts a web capture or video package, a session package, a file certification, a combined certification of several files and a batch package with one ZIP per file. It works out the type from the manifest by itself.

  1. 1Click to upload or drag and drop. Pick the ZIP. Its name appears in blue under the drop area.
  2. 2Verify zip file. Runs all checks in your browser. The two timestamp checks query ProofSnap's verification service, so stay online. Very large packages (from about 900 MB, typically long videos) may run out of browser memory; above about 1.8 GB the verifier refers you to the scripts in step 8.
The card open, with the ZIP selected. Until you pick a file, the button stays grayed out and cannot be clicked.

Step 4, in the side panel

Read the verdict

The verdict sums up all checks in one line. Hover over it to see a short explanation.

  1. 1Integrity: match. All cryptographic checks passed: the files match the manifest, and the manifest matches the signature made with the key in the package. The verifier shows it only after it has actually checked the signature and recomputed the file hashes.
  2. 2Integrity: modified. The evidence has been altered or is incomplete: at least one check failed. See the section on what to do below.
  3. 3Show technical verification. Opens the individual checks (next step).
Top: an intact package. Bottom: the same place when a check failed.

Step 5, in the side panel

Open the technical verification

Each line is one check. A blue bar means passed or for information, a red bar means failed. Which lines appear depends on what the package contains.

  1. 1manifest.json. The RSA signature over the manifest checks out with the public key in the package. It proves the manifest has not changed since it was signed.
  2. 2File Integrity. Every file listed in the manifest is hashed again with SHA-256 and compared. The signature and the key are written after the manifest, so they are checked for presence. Session packages include the files of every tab, video packages the recording.
  3. 3Chain of custody. The capture time is plausible (not in the future, not older than 30 years), forensic_log.json matches the hash recorded in chain_of_custody.json, its hash chain is recomputed step by step, and the final chain hash matches. The line naming the ISO standard repeats what chain_of_custody.json declares; it is not an assessment.
  4. 4Capture context. Extension version, how many time servers confirmed the capture time, the device integrity score and the number of recorded operations. A session package also lists every tab it covers.

The timestamp lines

  1. 5OpenTimestamps. The Bitcoin block the manifest is anchored in and its date. Shortly after a capture this line says pending (see step 11). Not on Essential captures unless an eIDAS or Video SnapPack credit was used.
  2. 6EU Qualified Timestamp. The qualified timestamp is valid for this manifest: issuer and time in UTC. Disig a.s. is a Qualified Trust Service Provider on the EU Trusted List.
  3. 7EU Qualified Timestamp (LTV). A second check that needs no server: hash, signature, certificate chain and revocation status, all from eidas_validation.json in the package. If the eIDAS service cannot be reached, this check runs on its own.
  4. 8Issuer. A reminder that the signing key is generated inside the package: the signature proves integrity, the timestamps prove time.
Technical verification of the example package, a few hours after the capture. Values are examples.

Step 6, file certifications

Check the original file against the certificate

For a file certification the verifier adds a box that compares any file you drop on it with the certified hash. Use it to show that the copy you or the other side hold today is the very file that was certified. The file is hashed in your browser and not uploaded.

  1. 1The certification ZIP. Verify it first, as in steps 3 to 5.
  2. 2Verify original file matches certificate. Drop the original. File matches certificate means this file existed at the certified date and time. File does NOT match means the hash differs: this is not the file that was certified. You can drop several files at once, for example the originals of a combined certification.
  3. 3Verdict. Concerns the package itself, as for any other package.
  4. 4Package type. File Certification with the certified hash, or Combined File Certification with the number of files.
A file certification, with the original file dropped on the extra box. File name and hash are examples; the list goes on below.

Route B

Verify on the website

For anyone you send the package to. Nothing to install.

Step 7, on the website

Verify on getproofsnap.com, no account needed

The other side, a court or an expert can open the ProofSnap Trust Verifier on this website in any browser, without ProofSnap and without an account. It runs the same kinds of checks and lists every result line by line. The ZIP is opened in the browser; for the Bitcoin and eIDAS checks the page sends the manifest, its hash and the timestamp tokens to ProofSnap's verification service.

  1. 1Drop the ZIP. Or click to choose it.
  2. 2Verify Evidence Package. Starts the checks.
  3. 3Verification Results. A blue check mark means the check passed, a dark X that it failed.
  4. 4Package details. Type, ID and capture time from the manifest.
  5. 5Manifest signature verified. Same check as in the side panel.
  6. 6Hash matches. One line per file. A changed file shows Hash mismatch, a missing one File missing.
  7. 7Chain of custody. Forensic log hash, hash chain, standard and device integrity.
  8. 8Timestamps. The Bitcoin block with its date in your local time, the eIDAS timestamp and the offline LTV check. For a single-file certification the page also checks the original file inside the ZIP automatically.
The verifier on this website, simplified: browser and site header left out. Results of the same example package as in step 5.

Route C

Verify without ProofSnap

Every package carries its own verification scripts in the verification folder. They are listed in the signed manifest, so they are covered by the same signature as the evidence.

Step 8, without ProofSnap

Run verify.sh on macOS or Linux

For a check that relies on nothing from ProofSnap, unzip a copy of the package and run the script inside it. It needs only what macOS and Linux already have: a shell, awk and a SHA-256 tool (shasum, sha256sum or openssl), plus openssl for the signature and eIDAS steps. It writes nothing into the package.

  1. 1Start it. From the unzipped folder: bash verification/verify.sh.
  2. 2File integrity. Recomputes the SHA-256 of every file the manifest lists: OK, MISMATCH or MISSING. A file in the folder that the manifest does not list is reported as NOT COVERED.
  3. 3Manifest signature. Checks manifest.sig with openssl. Verified OK is openssl's own answer.
  4. 4eIDAS. Compares the hash inside the qualified token with manifest.json, checks the root certificate in the package against the published fingerprint of CA Disig QCA4 and checks the token's signature. It prints the openssl command for the full certificate chain.
  5. 5OpenTimestamps. Prints the command to check the Bitcoin anchor with the OpenTimestamps client (ots), which you install separately.
  6. 6RESULT. PASS (exit code 0), FAIL when a check ran and did not pass (1), or INCOMPLETE when a tool was missing (2), which does not count against the package.
Simplified terminal on Linux with OpenSSL 3. Every line below the command is printed by verify.sh as written; the folder name and the hash are examples.

Step 9, without ProofSnap

Run verify.ps1 on Windows

Unzip a copy of the package, open PowerShell (version 5 or later) in that folder and run the command below. The script runs the same four steps as verify.sh.

  1. 1Start it. powershell -ExecutionPolicy Bypass -File verification\verify.ps1 from the unzipped folder.
  2. 2File integrity. Uses Windows' own Get-FileHash and also compares the SHA-512 values the manifest carries. This part needs nothing else.
  3. 3Without OpenSSL. Windows ships without it, so the signature and eIDAS steps report that they could not run. Install OpenSSL 3 and run the script again for a full check.
  4. 4RESULT. The result is INCOMPLETE only because two checks could not run; everything that ran passed.
Simplified Windows PowerShell window on a computer without OpenSSL, which is the Windows default. Lines as verify.ps1 prints them; the folder is an example.

Step 10, without ProofSnap

Or follow VERIFICATION_GUIDE.txt by hand

Experts who prefer to type every command themselves, or who cannot run scripts, find the manual procedure in verification/VERIFICATION_GUIDE.txt. It is part of the signed package, like the scripts.

  1. 1Evidence ID. Ties the guide to this package.
  2. 2A) The scripts. The commands from steps 8 and 9.
  3. 3B) Online. The address of the Trust Verifier, step 7.
  4. 4C) By hand. Four steps, each with the exact command.
  5. 5Step 1. Recompute each file's SHA-256 and compare it with the manifest.
  6. 6Step 2. The openssl command for the manifest signature. Further down: the eIDAS command with notes on OpenSSL 3 versus the LibreSSL that macOS installs under the name openssl, and the OpenTimestamps command.
The start of the guide in a plain text viewer (simplified). It goes on with step 3 (eIDAS), step 4 (OpenTimestamps) and the hash chain. The evidence ID is an example.

How to verify the eIDAS and Bitcoin timestamps by hand

The eIDAS timestamp with OpenSSL

The qualified timestamp of a ProofSnap package is the file manifest.json.tsr.

  1. Copy the value of the rootCaPem field in eidas_validation.json into a file named tsa-root.pem.
  2. Compare it with the published fingerprint of CA Disig QCA4 that verify.sh prints.
  3. From the unzipped folder, run openssl ts -verify -in manifest.json.tsr -data manifest.json -CAfile tsa-root.pem.

Use OpenSSL 3, not the LibreSSL that macOS installs as openssl.

The Bitcoin anchor with the OpenTimestamps client

Install the OpenTimestamps client (ots) and run ots verify manifest.json.ots -f manifest.json. A confirmed proof names the Bitcoin block, which shows that the manifest existed no later than that block. A proof that is still pending needs another run a few hours later.

Results

Two results that need a second look

A pending Bitcoin timestamp, and a package reported as modified.

When the Bitcoin anchor is pending

Verify again a few hours later

A Bitcoin timestamp is final only once a Bitcoin block includes it. Right after a capture the proof is submitted but not yet confirmed. This is normal and does not change the verdict. To check an .ots proof on its own, see how to verify an OpenTimestamps file.

  1. 1Pending. Submitted: pending Bitcoin confirmation (typically 1-3 hours). On the website: OpenTimestamps: Proof submitted, pending confirmation.
  2. 2Verified. Verify the same, unchanged ZIP again after a few hours: the line now names the Bitcoin block. It shows that the package existed no later than that block. Do not try to update or replace the .ots file.

Minutes after the capture

A few hours later, same ZIP

The OpenTimestamps line in the side panel's technical verification. Block number and date are examples.

When the verdict is modified

Do not repair the ZIP: go back to the original

Open Show technical verification: the red line names the check and usually the file. Do not try to fix the package; any change makes it fail again. Verify the original download instead. The most common causes are harmless handling mistakes:

  1. 1A file was changed. Opening a file inside the package and saving it, even without visible edits, or renaming it, changes what the manifest vouches for.
  2. 2The package was unpacked and zipped again. Re-zipping often puts everything one folder deeper, so the verifier no longer finds manifest.json at the top of the ZIP. Some tools also add their own hidden files.

If the original download also shows modified, keep it as it is and write to support@getproofsnap.com with the red line from the technical verification.

A file inside was opened and saved again

The package was unpacked and zipped again

Top of the technical verification in two typical cases. File names are examples.

Common questions

Evidence anyone can check

Received a ProofSnap package? Check it in the Trust Verifier. Need to capture your own? Install ProofSnap.

Install ProofSnap, 7 days free

More guides: How to capture a web page · Long video evidence · How to certify a file · How to read an evidence package

Install ProofSnap, 7 days free