mivia-verify
Check a Mivia evidence pack yourself, without relying on Mivia.
Every recording registered with Mivia has a public Certificate of Registration. Its owner can download an evidence pack: a zip with the signed registration record, its Bitcoin timestamp and Mivia's signed, dated statement about the record. This tool checks every part of a pack and tells you, in plain language, what passed.
What a pack proves: what was registered, by which Mivia account, and that the record existed no later than a given Bitcoin block. What it does not prove: who wrote the music or who owns it. That is for contracts, registries and courts.
Install
Python 3.9 or later:
pip install mivia-verify
To compare an audio file by its acoustic fingerprint, also install Chromaprint's fpcalc (brew install chromaprint, apt install libchromaprint-tools, or https://acoustid.org/chromaprint).
Use
mivia-verify mivia-evidence-<id>-<date>.zip
mivia-verify mivia-evidence-<id>-<date>.zip --audio the-recording.wav
| Option | What it does |
|---|---|
--audio FILE |
Check whether FILE is the exact registered file, and whether it matches the registered recording by fingerprint |
--offline |
No network at all: skips comparing keys with mivia.co and looking up the Bitcoin block |
--bitcoin-node |
Look the block up with your own Bitcoin node (bitcoin-cli) instead of a public block explorer |
--json |
Machine-readable output |
The exit code is 0 when every check that could run passed, and 1 otherwise.
What it checks
- The record is intact. BLAKE3 of
1-registration/manifest.jsongives the record id, the same id as in the certificate addressmivia.co/c/<id>. - Signed by Mivia. The Ed25519 signature in
manifest.sigis valid for the record. - The keys are Mivia's. The keys in the pack match the copy pinned in this repository (
src/mivia_verify/keys.py) and the copy published at https://mivia.co/.well-known/mivia-keys.json. - The Bitcoin timestamp. The OpenTimestamps proof starts from the record's BLAKE3 hash and leads to the merkle root of a Bitcoin block, confirmed with a public block explorer or your own node. Nobody, including Mivia, can backdate it.
- The watermark payload (web registrations) points to this record and to Mivia's key. Reading the payload from audio needs Mivia's decoder or the public scan on mivia.co; this tool checks that the payload in the pack belongs to the record.
- Mivia's dated statement is signed by Mivia's statement key and lists every other file in the pack with its SHA-256, so nothing can be added, removed or changed. It is Mivia's account on the date shown (assurance level, warnings, creation history, lineage, scan dates); a later pack may say more.
- The audio (with
--audio):- exact file: for records registered from October 2026, the record contains the SHA-256 of the file that was uploaded; a creator who kept that file can prove it is the one;
- fingerprint: compared with the registered Chromaprint fingerprint. A similarity measure: it also matches re-encoded or edited copies.
A check that could not run (offline, no proof yet, no fingerprint) is shown as ----, not as a failure.
You do not have to trust this tool either: SPEC.md describes the pack precisely enough to write your own checker.
Licence
Apache-2.0. This repository contains the pack format and the checks only; Mivia's watermarking engine is not part of it.
Metadata
Release files for mivia-verify 1.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| mivia_verify-1.1.0.tar.gz | 18.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| mivia_verify-1.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 36.2 kB
Release files / mivia_verify-1.1.0.tar.gz
| Download URL | mivia_verify-1.1.0.tar.gz |
|---|---|
| Size | 18.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
9ecb110aa5ef24a1ba05e83f13c8e64846023328ecb5ea3671b8ecb5d8b09e5d
|
|
BLAKE2b-256 checksum How to use checksums |
ddb73537c1197a196d820a3ccf9a349f2c4ebfb37d6de591a3f7a9cf5689121e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 16, 2026.
Transparency logRelease files / mivia_verify-1.1.0-py3-none-any.whl
| Download URL | mivia_verify-1.1.0-py3-none-any.whl |
|---|---|
| Size | 17.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
4a0df3f981ffd4ce6f71b4334fe68ff3e2fd008ba7f143c164a4bc4635318581
|
|
BLAKE2b-256 checksum How to use checksums |
a5c9970a92199040e03eb30ef30d3d435c67a04107a78e3655111d1a926b01a7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 16, 2026.
Transparency log