Skip to main content

datumesh

Verify Datumesh receipts in Python. A receipt is a signed answer for one addressable data cell; this library checks its canonical form (RFC 8785 JSON) and its Ed25519 signature against the signer's published keys, and optionally the recomputation checks (function descriptor, input receipts and slice manifests, and a value you computed) and the content of a blob value, as the Datumesh specification (revision spec-0.4.0) defines. It also checks a mesh's response envelope and resolves the unit of a cell's value.

pip install datumesh
git clone --depth 1 --branch spec-0.4.0 https://github.com/datumesh-com/datumesh-spec && cd datumesh-spec
import json
from datumesh import keys_from_response, verify

vector = json.load(open("vectors/receipt/stored-number.json"))
key_doc = vector["keys"]["rates.example.org"]["https"]["body"]  # served at https://rates.example.org/.well-known/datumesh.json
keys = keys_from_response("rates.example.org", 200, key_doc)
result = verify(vector["input"], keys)
print(result.ok, result.level, result.key)  # True signed rates.example.org#d712b32a2cc5cb7c

Website: https://datumesh.com · Specification: https://github.com/datumesh-com/datumesh-spec

API

  • verify(receipt, keys, recompute=None, blob=None) -> VerifyResult: runs the verification procedure of SPEC 10.1. Never raises for an invalid receipt or bad key material; the result has ok, code ("OK" or an error code), level ("signed" or "recomputed"), hash, key, detail and path. Two codes come with success, at level signed (SPEC 10.1 step 7.6): "E_EVAL_UNAVAILABLE" when you pass recompute without a value because you could not evaluate the function (the other recomputation checks still run first), and "E_INPUT_SUPERSEDED" when your value differs but the evaluation's lineage shows that an input was replaced by a later version (the receipt is historical, not wrong). It uses no network: keys are an argument (a key document, a KeysResult, a {key id: public key} mapping, or a list of these). recompute takes the descriptor (leave it out if you have none; None is a JSON null and fails the hash check), the input receipts (slice members included), the manifests of slice entries (slice:<slice id>:<members hash>), the value you computed and optionally the evaluation's lineage (the library does not evaluate functions, formulas included); blob takes the content bytes of a blob value, whose length and SHA-256 are then checked (step 7.7, reported as blob_checked).
  • check_envelope(status, body, keys, request) -> EnvelopeResult: checks a mesh's response to https://<mesh>/cell/... (SPEC 5.5), verifies the receipt inside it, and checks that it answers your request (request is {"cell_id": ..., "asof": ...}, asof only if you asked for one; the receipt's asof must be at or before it, for ok and stale alike). A not_covered envelope may carry a formula evaluation fault (exposed as fault). The envelope itself is unsigned: stale, superseded_by, a verified label and the currency ok asserts remain the mesh's claims.
  • resolved_unit(descriptor, cell) -> str | None: the unit of a cell's value, such as USD/EUR (SPEC 7.1, units.md).
  • keys_from_response(host, status, body) -> KeysResult: interprets a response for https://<host>/.well-known/datumesh.json (SPEC 9.3).
  • fetch_keys(host, timeout=10.0) -> KeysResult: the only function that uses the network. One GET, TLS verified, redirects not followed.
  • canonicalize(obj, kind=None) -> bytes, cell_hash, function_hash, receipt_hash, receipt_payload, jcs: validation, RFC 8785 canonical bytes and SHA-256 hashes. Kinds "slice" and "manifest", with slice_id, members_hash and slice_entry, cover slice objects and manifests (SPEC 4.4, 15.13).
  • parse_uri(uri, signature), format_uri(ref), uri_to_https(uri, mesh): cell URIs (SPEC 5).
  • DatumeshError (with .code and .path), ERROR_CODES, SUCCESS_CODES, FAULT_CODES, SPEC_VERSION, UNITS, CURRENCIES.

Requires Python 3.10 or later and PyNaCl. String rules use Unicode 15.1 tables shipped with the package, so results do not depend on the Python version's own Unicode database; the unit list is copied from the specification's units.md. Choosing which publishers to trust is up to you: a valid signature only means the key holder made the statement.

Licence: Apache-2.0.

Metadata

Release files for datumesh 0.4.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 datumesh 0.4.0
File Size Uploaded Provenance
datumesh-0.4.0.tar.gz 101.5 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for datumesh 0.4.0
File Interpreter ABI Platform
datumesh-0.4.0-py3-none-any.whl Python 3 none any Details

Total release size: 169.5 kB

Release files / datumesh-0.4.0.tar.gz

Download URL datumesh-0.4.0.tar.gz
Size 101.5 kB
Tags Source
SHA-256 checksum
How to use checksums
c12649e640dca5974abd5f9f0dc1e59c453dd67cdd8df12d5d2b2b754cc19396
BLAKE2b-256 checksum
How to use checksums
c89c1969a837e2e2b3275a3dbd2928234105a650f1762b1cbad197654088acc1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 25, 2026.

Transparency log

Release files / datumesh-0.4.0-py3-none-any.whl

Download URL datumesh-0.4.0-py3-none-any.whl
Size 68.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
9f7bdcf8fee8d9c50445e1922ada7e77718a7a675cd072f605cd7be1db344d19
BLAKE2b-256 checksum
How to use checksums
00cac296612414c323386784cbed438f21a2dfa21c0fd64aaee9372c450aca49
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 25, 2026.

Transparency log

Security for datumesh 0.4.0

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.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for datumesh-0.4.0.tar.gz

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 25, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

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