Open Evidence Provenance Toolkit (OEPT)
Small, dependency-light infrastructure for evidence provenance: prove which exact source version produced which claim, and let any third party verify the package offline — without trusting your servers.
source bytes → content digest → provenance metadata → portable bundle → offline verification
The problem
Software and data pipelines transform source files through parsing, normalization, mappings, validation, and deterministic controls. Downstream users — auditors, integrators, regulators, customers — frequently cannot independently determine which source object produced a claim, which exact version was used, which transformation ran, when it was observed, whether the source changed later, or whether an exported package was modified.
OEPT provides reusable primitives for that chain: content-addressed evidence objects, append-only observation history, deterministic canonicalization, portable signed bundles, and an offline verifier. The project emerged from work on evidence-intensive systems including financial and regulatory workflows, but OEPT itself is domain-neutral: it works with arbitrary data files.
Trust boundary (read first)
OEPT proves: bundle structure, member presence, SHA-256 integrity, manifest integrity, safe archive structure, Ed25519 signature validity, supplied trusted-key identity.
OEPT never claims: factual truth, commercial truth, legal validity, compliance approval, fraud detection, eIDAS qualification, timestamps, certificate chains, or malware-free status.
Quickstart
pip install -e .
oept verify examples/valid-unsigned.zip
Expected output:
Bundle: examples/valid-unsigned.zip
Specification: oept-bundle/0.1
Structure: VALID
Member digests: VALID
Signature: NOT PRESENT
Result: VALID_UNSIGNED
Technical verification only — not a legal, compliance, or factual conclusion.
Build a bundle from a prepared directory (containing facts.json,
provenance.json, and evidence/):
oept bundle examples/evidence-project --output my-evidence.zip
oept verify my-evidence.zip --json
Signed bundles:
oept bundle DIR --output signed.zip --sign my-key.pem --key-id ops-2026
oept verify signed.zip --trust-keys trust-keys.json
Trust roots always come from --trust-keys. Keys embedded in a bundle
are identification labels only and are never trusted automatically.
Bundle anatomy (oept-bundle/0.1)
Required: manifest.json, facts.json, provenance.json, evidence/.
Optional: metadata/, rule_traces.json, signatures/manifest.sig,
signatures/key-info.json, SUMMARY.txt.
Full rules: spec/bundle-spec.md.
Verification statuses: VALID_SIGNED, VALID_UNSIGNED, HASH_MISMATCH,
MISSING_FILE, UNEXPECTED_FILE, SIGNATURE_INVALID,
SIGNATURE_KEY_UNKNOWN, UNSUPPORTED_SPEC_VERSION, UNSAFE_ARCHIVE,
MALFORMED_BUNDLE.
Relationship to existing standards
OEPT complements rather than replaces: in-toto, SLSA, Sigstore, W3C PROV,
RO-Crate, SCITT, SPDX, CycloneDX. None of these today gives field-level
source-bytes→claim lineage in one stdlib-friendly offline bundle without
a daemon, OIDC, RDF store, or log operator — that narrow gap is OEPT's
reason to exist. Interoperability adapters (in-toto statement emission,
PROV export) are planned grant work; v0.1 claims no compatibility beyond
its own spec. See docs/roadmap.md.
Roadmap
- v0.1 (this release): schemas, SDK core (canonical/hash/bundle/verify), CLI, conformance corpus, specs.
- Grant work (planned): EvidenceStore (SQLite), source-mapping profiles, rule-trace emitter, snapshot pinning, W3C PROV + in-toto exporters, transparency-log anchoring study.
Security reporting
See SECURITY.md. Until a dedicated project security address is published, report privately through the repository hosting platform's security advisory mechanism.
License
Apache-2.0. See LICENSE.
Metadata
Release files for oept 0.1.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| oept-0.1.2.tar.gz | 69.2 kB | Without provenance | Details for oept-0.1.2.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| oept-0.1.2-py3-none-any.whl | Python 3 | none | any | Details for oept-0.1.2-py3-none-any.whl |
Total release size: 126.2 kB
Release files / oept-0.1.2.tar.gz
| Download URL | oept-0.1.2.tar.gz |
|---|---|
| Size | 69.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
69b9769f0abb5086f880f1ad3e64558b5b9c7eba57e6ff57c679f107321da6b8
|
|
BLAKE2b-256 checksum How to use checksums |
c480fc460ea80e51b692c81246ec3867fe4eafd63f9558b07efdd2dea85fcde4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.14
|
Release files / oept-0.1.2-py3-none-any.whl
| Download URL | oept-0.1.2-py3-none-any.whl |
|---|---|
| Size | 57.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
df99687fc510d0dd8121f69bbfc33add86295b67ede40c18027b2ba9b62d35fe
|
|
BLAKE2b-256 checksum How to use checksums |
1f2e73320eda6dc8271f316fdf9375b8306e07ba8342badeb0f1da5cf1c21fdb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.14
|
Security for oept 0.1.2
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.
No provenance found
None of the files in this release were uploaded with provenance metadata.
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.