For publishers¶
A short page you can send to your editor ahead of delivery.
Your author is delivering their manuscript with a small companion document — a proof bundle — that demonstrates, independently verifiably, that the manuscript you are receiving is the same file they have been working on over time. This page explains what it is, what it is not, and what you will need to do to check it.
What you are getting¶
Alongside the manuscript, a single zip file — the proof bundle — containing four items:
- A PDF with a cover page, an attestation of authorship, a word-count-over-time chart, and a short cryptographic appendix. It contains no manuscript content.
- A canonical record (a small JSON file) with the cryptographic fingerprints of the author's saves, the dates on which they were registered, and the stamps from a public timestamping service.
- A signature file that shows the record came from BlindProof and has not been altered.
- A checking tool — a single small Python script — that verifies all of the above, on its own, with no call back to BlindProof.
What it proves¶
Run against the manuscript you have just received, the tool confirms three things in turn:
- The signature on the bundle is valid. The record has not been tampered with.
- The manuscript you hold matches an entry in the author's timeline. The fingerprint of the file you received appears in the record, on a specific date.
- The public registrar's stamp on that date is genuine. On a machine with a Bitcoin node, the tool confirms this against the blockchain directly — the part that cannot be faked retroactively. Without a node it instead corroborates the stamp against a public timestamp service: useful signal, but trust in that service rather than independent proof.
If all three are confirmed — with the registrar's stamp checked against the blockchain — you have a mathematically unambiguous statement: this exact manuscript, byte-for-byte, existed on these dates, registered at an external public service that cannot be backdated. A different manuscript of similar length would not match. Changing a single comma would break the check. That backdating-proof guarantee rests on the stamp being confirmed against the blockchain (the Bitcoin-node path described below); on an ordinary computer the first two checks still hold outright and the stamp is reported as corroborated rather than independently confirmed, while the overall result still reads PASS.
What it does not prove¶
It does not prove which human was at the keyboard. For that, your usual evidence still applies — contracts, editorial correspondence, your relationship with the author. The bundle is one additional piece, and the one hardest to invent after the fact.
How to run the check¶
You need a computer with Python 3.12 or later installed, and an internet connection for the parts of the check that reach the public registrar. On most macOS and Linux systems, Python is already available; Windows users can install it in a few minutes from python.org. For the Bitcoin anchor part, the strongest, fully independent confirmation uses specialist software (a Bitcoin node); without one, the tool uses your internet connection to cross-check the anchor against a public timestamp service and reports what it found as a note — useful corroboration, just short of independent proof. The other checks complete regardless; only on a computer with no connection at all is the anchor step reported as not confirmed here (see below), which is not a fault.
The bundle ships as a single zip file (typically named BlindProof-<date>.zip). First, unzip it — that exposes verify.py alongside bundle.json, bundle.sig.json, and bundle.pdf.
From a terminal, in the unzipped folder, run the structural check:
This confirms the signature and the timeline, and cross-checks the public timestamp's Bitcoin anchor over your internet connection (reported as a note — for the fullest, independent confirmation, see below). Then, to confirm the manuscript you received matches an entry in that timeline, add --manuscript:
(If you do not have uv installed, plain python verify.py … works too, after a one-line pip install opentimestamps-client cryptography.)
The tool prints a short report: one line per check, ending in PASS, pending, or FAIL. A "pending" OTS result for a very recent save simply means the public stamp has not yet been anchored — the author can produce another bundle in a day or two, or you can re-run the check when convenient. The tool cross-checks that public anchor automatically over your internet connection and reports what it found; a computer with no connection at all simply notes the anchor was not confirmed here and passes the remaining checks — expected, and not a fault in the bundle. For independent confirmation of the anchor — the strongest form — your technical team can re-run on a machine with a Bitcoin node, which validates the blockchain itself. Checking a receipt by hand at the public verifier opentimestamps.org is a useful additional cross-check, though it reads the block from a public explorer (the same trust model as the automatic check above), so it corroborates rather than independently confirms. A MATCHED manuscript line means the file you received is, byte-for-byte modulo line endings, one of the saves the author registered. NOT MATCHED means the file you received is not that version — contact the author.
If you need help¶
The checking tool is deliberately small, stdlib-only, and readable. Your technical team can audit it in an afternoon if they wish. BlindProof does not need to be involved in the verification — in fact, not needing us is the point. If you have questions about what a particular result means, or want a walkthrough with your IT team, we are happy to help without ever seeing the manuscript.