Publish the check, not the promise
A tool that claims provenance and ships unverifiable is not credible.
So here is the check itself. This page fetches the signed list of hashes, verifies the signature in front of you, and then hashes a copy you hold — in this tab, on your machine. The file you choose is never uploaded, and there is nothing here to upload it to.
Step one — does this verifier work at all?
Before it is allowed to report anything, the Ed25519 implementation on this page is run against the three published test vectors in RFC 8032, and against a signature and a message that have each been deliberately altered. It has to accept the first and reject the others.
running…
Step two — is the published list signed?
The list names every file in the release and its SHA-256, and ends with the hash of the archive itself. The signature covers the exact bytes of that list.
waiting for step one…
Step three — check your copy
Drop the archive here, or click to choose it. It is read in this tab and hashed by your browser.
What this proves, and what it does not
It proves the files match a list, and that the list was signed by whoever holds that key.
It does not prove the key is ours. If you took the key from the same place you took the archive, then anyone who controlled that place controlled both, and all you have established is that the copy is internally consistent — which a wholly substituted release would also be.
To close it: get the key fingerprint from somewhere else. A second machine on a different network, someone who already holds it, or a copy you kept from an earlier release. That paragraph is the reason this page exists; a verification step that overstates what it checked is worse than none, because it ends your suspicion early.
The same check, offline
The kit ships its own verifier, so none of this depends on this website being up or honest:
python3 verify.py
It re-hashes every file, checks the signature, and reports anything listed but missing or present but unlisted. And the archive is built reproducibly — fixed timestamps, fixed permissions, sorted order — so you can rebuild it from source and compare hashes rather than trusting either of us:
python3 tools/release.py --version 1.0.0