Skip to main content

aevum-verify

Standalone sigchain verifier for Aevum. aevum-verify shares no code with aevum-core — every cryptographic primitive (the signing-digest construction, payload hashing, chain hashing, RFC 6962 Merkle inclusion and consistency proofs, tree-head signatures, and TSA certificate-chain validation) is reimplemented directly from the public spec, docs/spec/aevum-signing-v1.md, not derived from or imported from the chain producer's runtime.

This means signature verification no longer trusts the operator's runtime: any third party — an auditor, a regulator, opposing counsel — can confirm that an exported chain is internally consistent and matches its claimed signatures using an implementation that imports nothing from the system that produced the chain. aevum-verify is tamper-evident, not tamper-proof — it detects whether an exported chain has been altered after the fact; it makes no claim about events that were never recorded or about the integrity of the system that generated the chain in the first place.

Independence

  • Zero runtime dependency on aevum-coreaevum-verify's own package metadata does not declare it, and aevum-verify's wheel does not pull it in.
  • Zero imports of any aevum.core.* module from _core.py or _format.py, enforced by an AST-level test (test_merkle_sth.py::TestMerkleIndependence) that fails the build if either file ever imports from the producer again.
  • The only inputs trusted are the pinned public key bytes the caller supplies out-of-band, and the chain file itself.

Tests are the one place this package still touches aevum-core: fixtures use the real Sigchain/DualSigner to produce genuinely signed chains so the independent reimplementation can be checked against real signatures, not just its own assumptions. None of that is reachable from aevum-verify's verification logic or its packaged dependencies.

Install

pip install aevum-verify
# With post-quantum (ML-DSA-65) support:
pip install "aevum-verify[pqc]"

CLI usage

aevum-verify CHAIN_FILE --ed25519-pub HEX [--mldsa65-pub HEX]
  • CHAIN_FILE — path to a JSON file containing a list of serialised chain entries.
  • --ed25519-pub — pinned Ed25519 public key as 64-char hex, or @/path/to/file for a raw 32-byte binary key.
  • --mldsa65-pub — pinned ML-DSA-65 public key as hex or @filepath; required for hybrid (ed25519+ml-dsa-65) chains.

Exit codes

Code Meaning
0 VERIFIED — all entries intact
1 FAILED — chain tampered, signature invalid, or trust-anchor mismatch
2 Usage error (bad arguments or unreadable file)

Example

aevum-verify chain.json --ed25519-pub "$(cat pubkey.hex)"

Key file format matters. If your public key is stored as a .hex file (ASCII hex text, e.g. 1cb499...), pass it with --ed25519-pub "$(cat file.hex)". The @/path/to/file form reads the file as raw 32-byte binary, not hex text — using @ against a .hex text file will not parse as a valid Ed25519 key.

Python API

from aevum.verify import load_chain, verify_chain

entries = load_chain("chain.json")
result = verify_chain(entries, ed25519_pub=bytes.fromhex(pubkey_hex))
assert result.ok, result.reason

Trust model

The verifier trusts only the public key bytes supplied out-of-band by the caller — never anything embedded in the chain file itself. For hybrid entries, both the pinned Ed25519 key and the pinned ML-DSA-65 key must be supplied; absence of either signature or key for a hybrid entry fails closed. A chain mixing key schemes (e.g. some entries classical, some hybrid) is rejected outright as a downgrade/splice fingerprint.

Malformed or hostile input — corrupt JSON, truncated files, missing fields, wrong-length keys, garbage-hex embedded fields, oversized hex values or entry counts — fails closed (a reported FAILED result, a non-zero exit code, or a usage error) rather than raising an unhandled exception or silently accepting bad data.

License

Apache-2.0

Release files for aevum-verify 0.9.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for aevum-verify 0.9.0
File Size Uploaded
aevum_verify-0.9.0.tar.gz 24.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for aevum-verify 0.9.0
File Interpreter ABI Platform
aevum_verify-0.9.0-py3-none-any.whl Python 3 none any Details

Total release size: 40.2 kB

Release files / aevum_verify-0.9.0.tar.gz

Download URL aevum_verify-0.9.0.tar.gz
Size 24.6 kB
Tags Source
SHA-256 checksum
How to use checksums
5a1a4e268793d779f750335c9c35f600fedf002e6a1c2ee05ad3f2fbed53ef5a
BLAKE2b-256 checksum
How to use checksums
75c25107f855085f470740e176cb82a78d8f94f559b446a187a4aea1cbf02005
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.13

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 Jun 22, 2026.

Transparency log

Release files / aevum_verify-0.9.0-py3-none-any.whl

Download URL aevum_verify-0.9.0-py3-none-any.whl
Size 15.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
2b5a4644c635abca3d1b7d18343f7431171e63ca3ba1414d79d09dec8c59a8e2
BLAKE2b-256 checksum
How to use checksums
9c3a784da1d4acc81c448ecd95d436f0d2706a86d8381cfb261dd581c6732d3c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.13

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 Jun 22, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.9.0 This release

2 release files

0.8.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page