Zero-infrastructure verification of EMILIA Protocol trust receipts (Ed25519 + Merkle). Byte-compatible with @emilia-protocol/verify.
Project description
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 # once published
# 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).
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.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file emilia_verify-2.7.0.tar.gz.
File metadata
- Download URL: emilia_verify-2.7.0.tar.gz
- Upload date:
- Size: 68.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fc1625fa70a40cf1cca5022b9a431d349198f21c62d252ec7d811793176c041d
|
|
| MD5 |
ba4982b33cf86ee5e2eaa4382d851592
|
|
| BLAKE2b-256 |
5f752ed9ad9dfb96deca0af2840807d40743e67f2a46eb8319735a70006b3f05
|
Provenance
The following attestation bundles were made for emilia_verify-2.7.0.tar.gz:
Publisher:
publish-python-verify.yml on emiliaprotocol/emilia-protocol
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
emilia_verify-2.7.0.tar.gz -
Subject digest:
fc1625fa70a40cf1cca5022b9a431d349198f21c62d252ec7d811793176c041d - Sigstore transparency entry: 2188935978
- Sigstore integration time:
-
Permalink:
emiliaprotocol/emilia-protocol@06ddd3ed802ae65dce630080ec0c2df464e1591e -
Branch / Tag:
refs/heads/main - Owner: https://github.com/emiliaprotocol
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-python-verify.yml@06ddd3ed802ae65dce630080ec0c2df464e1591e -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file emilia_verify-2.7.0-py3-none-any.whl.
File metadata
- Download URL: emilia_verify-2.7.0-py3-none-any.whl
- Upload date:
- Size: 47.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
babad7e0f24723dea2e9d476dcaee45e3639dbd0e5e6a0abe5e43a201abe38be
|
|
| MD5 |
e3f4abab0aed70139b5375a19210f483
|
|
| BLAKE2b-256 |
fa7f4d143551561286fa0d726a12139581b294053b84622183983fe39eef2892
|
Provenance
The following attestation bundles were made for emilia_verify-2.7.0-py3-none-any.whl:
Publisher:
publish-python-verify.yml on emiliaprotocol/emilia-protocol
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
emilia_verify-2.7.0-py3-none-any.whl -
Subject digest:
babad7e0f24723dea2e9d476dcaee45e3639dbd0e5e6a0abe5e43a201abe38be - Sigstore transparency entry: 2188936066
- Sigstore integration time:
-
Permalink:
emiliaprotocol/emilia-protocol@06ddd3ed802ae65dce630080ec0c2df464e1591e -
Branch / Tag:
refs/heads/main - Owner: https://github.com/emiliaprotocol
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-python-verify.yml@06ddd3ed802ae65dce630080ec0c2df464e1591e -
Trigger Event:
workflow_dispatch
-
Statement type: