Corobate
Open Receipt Verifier · runs entirely in your browser
Check a decision record
New here? A record (we call it a receipt) is one file that captures a single
decision: the question that was asked, the evidence in front of it, how far that evidence
could be trusted, what was decided, and who signed it off. This page opens that file and
works out every number in it again, from scratch. Nothing is sent anywhere. Nothing is
fetched. All of it happens on your own machine, in this tab.
What this page cannot tell you: whether the facts are true.
A record can come through every check and still be an honest note of the wrong thing.
What the checks show is that nothing has been changed since the file was sealed, and that
the conclusions really do follow from the evidence written on it.
Four answers
- PASS — recomputed, same answer.
- FAIL — recomputed, different answer.
- UNVERIFIABLE — the check ran and could not finish, because the file does not carry what it needs. Counted separately from a pass: these are the checks that would catch a rebuilt record.
- NOT APPLICABLE — the check never applied to this record. Named beside the part of the record it would have needed.
The last two are counted separately and never folded into the pass count.
Three absences, and they differ.
Not applicable — the check did not apply to this record. Unverifiable — it
applied, ran, and could not finish. Not implemented — this page does not perform
that check; the reference verifier
verify-receipt.js does, and its own table
lists which. Every check this page implements is reported on every record, whatever
version it is.Paste in your own record
Paste a record here and press "Check this record". It stays on your machine.
Try to fake it
Change something in the record and watch which check catches it. The last two buttons also re-seal the file — they take fresh fingerprints, so the first two checks go green again. A skilled forger gets that far. Working the evidence out again is where they stop.
This page works the record out again from the evidence written on it: the fingerprint of the
contents, the link to the record before it, the confidence and the rule that turned it into a
decision, the evidence cut-off, the rule book it was judged under, every trust score, the
follow-up results behind those scores, the ceilings on evidence borrowed from other records,
the sign-off requirement, any risk that was knowingly accepted, and whether anyone's
credentials had been withdrawn by the time they signed.
On an independent timestamp it does less than that, and says so. It reads the timestamp file and checks that the file stamps this record and no other. It will only call the signature good when it has been handed a certificate to check it against, from outside the file. It never trusts the certificate riding inside the file, because a file that vouches for itself vouches for nothing. To check one yourself:
Patent pending — U.S. Patent Application No. 19/747,068.
On an independent timestamp it does less than that, and says so. It reads the timestamp file and checks that the file stamps this record and no other. It will only call the signature good when it has been handed a certificate to check it against, from outside the file. It never trusts the certificate riding inside the file, because a file that vouches for itself vouches for nothing. To check one yourself:
openssl ts -verify -data head.bin -in head.tsr -CAfile ca.crt,
or use the published checker (verifyReceipt(r, {tsa_trust_anchors:[pem]}), the same
code as anchors.js::validateTimeStampResponse).Patent pending — U.S. Patent Application No. 19/747,068.