Verify · offline, in this tab
Don't trust us. Check the signature.
Everything Mirror says is a signed record - every verdict, the refusal list, the roadmap, even the time. Put one on the bench and watch each check run in your browser against the published key. The page loads its own scripts and fonts, and nothing else: its security policy has no connect-src, so once it has loaded it cannot call out, and what you give it stays in this tab.
The bench
Pick a record. Run the checks.
1 · A record
Or bring your own
2 · The key
3 · The checks
What each check proves
None of these checks needs Mirror.
Each is arithmetic on the record and a public key. A supervisor can run the same checks with the network unplugged, years from now, and get the same answer.
Canonical form
The record is written one agreed way, byte for byte - recursively sorted keys, no whitespace - so the signer and the checker hash exactly the same bytes (SPEC §8.2).
The right key
The proof names its key id; the check selects that key from the published set, never "the first key". A record whose key is not published is not evidence of anything.
ES256
ECDSA on P-256 over the canonical text, with the browser's own WebCrypto. Change one character anywhere in the record and it fails.
One signature form
Every Mirror signature is low-S. A high-S twin of a valid signature is the same signing, never a second record - so a verdict cannot circulate under two strings.
The refusal scan
A valid signature proves the bytes are unaltered, not that they are allowed. The verifier refuses a record carrying a filing decision, a score, a fee on volume, a settlement instruction or a secret - even one the operator signed.
The record's own rules
A webhook delivery must be addressed to you and its id must derive from its subscription and record; a signed time is bound to your nonce; the roadmap pins its page by hash; provenance is checked over the DSSE encoding.
From your own machine
The same checks, in a few lines of Node.
Save mirror-kit.js - the verification kernels, bundled, the same file this page runs - and the operator's keys. Nothing else is needed, and nothing is fetched.
The SDK and the other languages# the keys, and any record the operator signed OP=https://mirror-operator.vasileburuian94.workers.dev curl $OP/jwks > jwks.json curl $OP/roadmap > roadmap.json # verify offline node -e 'const kit = require("./mirror-kit.js"); kit.sign.verifyRecord(require("./roadmap.json"), require("./jwks.json")) .then((v) => console.log(v.valid ? "authentic" : v.reason))'