The inspector brings their own weight.
When an inspector checks a market scale, they don't ask the vendor whether it is right. They bring a reference weight, put it on the pan and read the number. Then they check that the official seal is intact.
Same here. The verifier is the reference weight: a program you download, read and run without us. The public ledger is the seal: every package, and every version of the verifier itself, has its fingerprint written in a book that only grows, with the date proven on Bitcoin.
Together they close a chain. The file matches its seal, the seal is in the ledger, the ledger is signed by a key you kept beforehand, and the date is anchored somewhere we don't control.
Three thousand one-bit forgeries. How many get through?
We took an honest package and flipped a single bit at a random position, 3,000 times. Each time we also rewrote the package seal, as whoever controls the file would. Then we ran the verifier without the original data, on the package alone.
Most flips give themselves away: the file stops making sense or the index stops matching. But 4.1% get through with the series changed. In one case, a bit in byte 330 changed 70 readings by up to 15.5, in a series that runs from −10 to 10. Without the originals, nothing in the package shows it.
That is where the ledger comes in. Flip the switch: checking the seal against the public ledger, all 3,000 forgeries are rejected, because no rewritten seal is in it.
Before release, the first version hung on some tampered files: a decoder loop had no upper bound. Every read is now bounded, and any forged byte becomes a rejection with a reason. Tested with the 3,000 flips and one minute of random inputs, about 10,000, with no hang.
About 900 lines. Read before you trust.
The package holds both verifiers, a test corpus with public Mauna Loa CO₂ data (NOAA) and three synthetic series, and a script that checks everything end to end, including against the ledger published on this site. It needs Go 1.22 or newer and Python 3.
# download and check the fingerprint curl -O https://stickybit.com.br/static/verificadores/verificadores-v1.2.tar.gz shasum -a 256 verificadores-v1.2.tar.gz # 72b85f15d5c75aad… tar xzf verificadores-v1.2.tar.gz && cd verificadores-v1.2 # run the whole chain pip install cryptography ./verifica-tudo.sh --site
Ledger public key (Ed25519): e49648c5f81df74928259a016d5459dd2ca9bd07c1196ece89ab01fecebaa3a8
The fingerprint of the verifier package itself is also sealed in the ledger: v1 at entry 7, v1.1 at entry 8, v1.2 at entry 9. Swapping the program you download is as visible as swapping a data point.
What a "verified" does not prove.
Without originals, only consistency
Without the original data and without checking the seal in the ledger, the verifier only proves the package agrees with itself. It says so in its output and shows the next command.
The file verifier is not independent
It is our own decoder, extracted. A bug shared by the encoder and the decoder would pass both. The ledger verifier was rewritten in another language; the file verifier has no second implementation yet.
The key must arrive another way
Whoever swaps the whole folder swaps the key with it. Keep the key above, compare it with the one in the script and use the option that pins it.
The ledger has no witness yet
Only we sign it. The Bitcoin date stops anyone rewriting the past unseen, but not keeping two ledgers. The ledger already speaks the public witness network's protocol, and the verifier already checks cosignatures; an outside witness still has to accept the ledger.
The tolerance is the one we declare
The verifier checks that the tolerance was met, not that it is the right one for your standard. That question stays yours.
To check the verifier, read it
Using the downloaded program to check itself is going in circles. The ledger verifier is about 130 lines of Python: readable in an afternoon, or rewritable.
Want to run this on your data?
Tell us in two lines what you need to prove, and to whom. The first conversation is to see whether the verifier solves your case, and if it doesn't, we say so.