This page explains what verification checks and sends you to the verifier that
performs it. This page runs no cryptography itself. Paste a real session ID or
erasure-request ID and you will be handed to verify.dcsai.ai,
which fetches the chain from api.dcsai.ai and checks every Ed25519 signature and the
SHA-256 hash chain against our published public key.
The panel below is an illustration, not a verification. It replays the steps the verifier performs; it fetches nothing and checks nothing. Paste a real session ID (a UUID) and press Verify chain and you will be sent to the live verifier, which does the actual work. The published public key is ed25519:dcs-receipt-key-2026.
Paste a real session ID and press Verify chain to open it in the live verifier, or go straight there: verify.dcsai.ai ↗
Every R+2 receipt commits to its predecessor. A valid chain has matching signatures, matching hashes, and the bundle root checks out on R+3.
We pull the full receipt list (JSON) over plain HTTPS from api.dcsai.ai.
No streaming SSE, no auth handshake — anyone can fetch a chain by ID.
RFC 8785 JCS pins one deterministic JSON encoding so the signed bytes are byte-for-byte reproducible. Without this step "the same JSON" can have a different hash.
Each receipt's signature is checked against the published ed25519:dcs-
receipt-key-2026 public key.
Every receipt's prev_receipt_cid must equal the SHA-256 of the previous
receipt's canonical bytes. If anyone altered a historical receipt, the chain
breaks — visibly.
The verifier at verify.dcsai.ai checks every property below. This page does not.
RFC 8032 EdDSA over Curve25519, ~128-bit classical security. 32-byte public key, 64-byte signature. Verified against the published key.
Each receipt commits to the SHA-256 of the previous one. Tampering with any historical receipt invalidates every digest after it — visibly.
For an R+3 export, the SHA-256 binary Merkle tree is recomputed leaf-by-leaf and the root compared against the signed bundle root.
When present, the FIPS-204 ML-DSA-65 detached co-signature is verified alongside Ed25519 — a research-reference layer, not a quantum-product claim.
Every receipt's issued_at must be ≥ the previous one's. Out-of-order
timestamps mean a chain has been shuffled — an automatic fail.
Optional: if Storage is enabled, the bundle's content-addressed CID is verified against the published Filecoin deal — the bytes you verified are the bytes mirrored permanently.
One signing key, one Reputation SBT contract, one verifier package. Verifiable without contacting DCS.
npm, CLI or browser — same code path, same cryptography.
The same logic that runs in this page also runs at the command line and inside any CI pipeline. It has zero non-cryptographic dependencies and is MIT-licensed.
Not yet published. The package name below is reserved for this work and does not resolve on the npm registry today. Do not run an install command for it: a name that 404s is a name someone else can register.
@dcsplatform/r2-verify — name reserved, not published to npmSECURITY.md. Verify the key independently from either — we
deliberately don't ask you to trust this page. (A third location, a signed npm manifest,
will exist only once the verifier package is actually published.)R2_PQ_ENABLED (live in Wave-1). The
verifier checks it when present. It's a research reference — not a
quantum-product claim.verifyProof() takes the proof and the public statement and returns a
boolean. The reference prover is in the r4-standard repo.R-Series signs every action across the stack. Verify is how anyone audits it.
Paste a real session ID and you are handed to the live verifier, which checks every signature.