In-browser · offline · zero trust

Verify a record.
Trust no one.

A Sealed Evidence Record carries its own proof. Paste one below and this page re-derives the payload hash, the record commitment, and the evidence id from the record itself, then checks them against the values the record claims. If a single byte changed after sealing, the recomputed hash diverges and verification fails.

This runs entirely in your browser using @verdict/core — the record never touches a Verdict server. The point of a cryptographic seal is that you do not have to trust us to check it.

835 bytesverified in your browser · never sent to a server
What this proves
01
Re-hash the record

The record is canonicalized (deterministic JSON) and SHA-256 hashed. This recomputed payload hash is compared to the one the record claims.

02
Re-derive the commitment

The record commitment is sha256('verdict-ser-v0.1:' + recomputed hash). Because it derives from the recomputed hash — never the claimed one — a forged self-consistent hash set still fails.

03
Re-derive the id

The evidence record id is 'ser_' + the first 32 hex of the recomputed hash. Any mismatch across these checks means the record is not the one that was sealed.

Integrity vs. inclusion

This check proves integrity — that the record is byte-for-byte what was sealed. To additionally prove inclusionin a public transparency log, resolve the record’s Sigstore Rekor URL. Seal a fresh record at /live-seal, then paste it back here.

Same check, everywhere

Verify from Claude.

The exact verification logic on this page also ships as an MCP tool, so Claude — or any MCP client — can verify a record mid-workflow. Byte-for-byte identical to the in-browser check and to the verdict-edge Rust crate that runs on edge inference nodes.

# Claude can call this on any sealed record:
verdict_verify_evidence_record({ evidence_record_id, schema, payload_hash, merkle_root, record })
# → { valid, verdict, failed_checks, checks[] }

Install the Verdict connector for Claude →