Skip to main content

emilia-verify (Python)

Zero-infrastructure verification of EMILIA Protocol trust receipts — pure Python, one dependency (cryptography). A faithful port of @emilia-protocol/verify: recursive canonical JSON + Ed25519 (SPKI-DER public key) + sorted-pair Merkle anchors.

The guarantee: a receipt signed on the Node side verifies here, and vice versa — proven by a cross-language test (tests/test_verify.py verifies a JS-signed fixture). No EP account, no API key. Just math.

Install

pip install emilia-verify
# or, from the repo:  pip install packages/python-verify

Use

from emilia_verify import verify_receipt

result = verify_receipt(receipt_doc, signer_public_key_base64url)
if result.valid:
    print("authorized by", receipt_doc["payload"]["claim"]["approver"])
else:
    print("rejected:", result.checks, result.error)

verify_receipt(doc, public_key_base64url) -> VerifyResult(valid, checks, error) checks the version, the Ed25519 signature over the canonical payload, and (when present) the Merkle anchor. It never raises on bad input — a malformed receipt returns valid=False.

Also exported: verify_merkle_anchor(leaf_hash, proof, expected_root) and canonicalize(value) (the exact canonical-JSON used for signing).

verify_trust_receipt(receipt, opts) also accepts pinned approverKeys, a trusted logPublicKey, and an optional RFC 3339 now. A key entry containing compromised_at is terminal regardless of the receipt's claimed issued_at; when now is supplied, issuance more than five minutes in the future is refused. Omitting now retains offline historical verification.

Why this exists

A trust receipt is only as useful as the number of places that can check it. Shipping a verifier in the Python agent ecosystem (LangChain, CrewAI, AutoGen, LlamaIndex) means a receipt minted anywhere can be verified offline, in the language your agent already speaks.

Publishing (maintainers)

Direct local upload is intentionally unsupported. Create the version-matching python-verify-v<version> tag from merged main, then manually dispatch publish-python-verify.yml with the exact typed confirmation and approve the protected registry-publishing-approval job. The workflow builds twice, attests the exact wheel and source distribution, publishes through PyPI OIDC, and byte-compares both registry artifacts.

Apache-2.0.

Release files for emilia-verify 2.8.5

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

Source distribution (sdist)

Source distribution for emilia-verify 2.8.5
File Size Uploaded
emilia_verify-2.8.5.tar.gz 83.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for emilia-verify 2.8.5
File Interpreter ABI Platform
emilia_verify-2.8.5-py3-none-any.whl Python 3 none any Details

Total release size: 147.6 kB

Release files / emilia_verify-2.8.5.tar.gz

Download URL emilia_verify-2.8.5.tar.gz
Size 83.1 kB
Tags Source
SHA-256 checksum
How to use checksums
5211dad60c6a51e770a3a6dd2c6073f13e446ad123ca078784d2786d39160a90
BLAKE2b-256 checksum
How to use checksums
816e3952035d64cac7831d6342b7ad042b390d294ed58f6c8ced6ff6aa7dccb7
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 Sep 6, 2026.

Transparency log

Release files / emilia_verify-2.8.5-py3-none-any.whl

Download URL emilia_verify-2.8.5-py3-none-any.whl
Size 64.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
495c503abfe2664b2daf9d678eee71cdec3371677ff7eac8a803508e3d064ed2
BLAKE2b-256 checksum
How to use checksums
18773065754ab45c4d8fdb9c8811fae177024c08825e52df87d6ef3276a39fc9
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 Sep 6, 2026.

Transparency log

Release history Release notifications | RSS feed

2.8.6

2 release files

This release

2.8.5 This release

2 release files

2.8.3

2 release files

2.8.2

2 release files

2.8.0

2 release files

2.7.0

2 release files

2.6.0

2 release files

2.5.2

2 release files

2.5.1

2 release files

2.5.0

2 release files

2.4.4

2 release files

2.4.3

2 release files

2.4.2

2 release files

2.4.1

2 release files

2.4.0

2 release files

2.2.0

2 release files

2.1.0

2 release files

2.0.0

2 release files

1.2.0

2 release files

1.1.0

2 release files

1.0.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