Proof that AI saw what you think it saw.
Project description
Verum
Proof that AI saw what you think it saw.
Every tool in the AI audit space records what the model decided.
No tool records whether the data the model saw was real.
That is the gap. verum closes it.
The gap nobody is talking about
flowchart TD
A(["Real world data
───────────────
telemetry · sensors · feeds"])
B(["Silent manipulation
───────────────
possible here · undetectable
no tool catches this"])
C(["AI system
───────────────
processes what it receives"])
D(["Decision
───────────────
signed and logged ✓"])
A -->|enters pipeline| B
B -->|reaches AI unchallenged| C
C --> D
style A fill:#f8fafc,stroke:#94a3b8,color:#334155
style B fill:#fff1f2,stroke:#fda4af,color:#9f1239
style C fill:#f8fafc,stroke:#94a3b8,color:#334155
style D fill:#f0fdf4,stroke:#86efac,color:#166534
Logs prove the decision happened.
They cannot prove the input was genuine.
What verum does
flowchart TD
A(["Data arrives
───────────────
raw · untouched · live"])
B(["verum seals it
───────────────
fingerprint + timestamp
before AI sees anything"])
C(["AI processes
───────────────
works as normal
nothing changes"])
D(["Receipt is born
───────────────
decision + seal together
compact · tamper-evident"])
E(["Anyone verifies
───────────────
regulator · court · auditor
no AI access needed"])
A --> B
B --> C
C --> D
D --> E
style A fill:#f8fafc,stroke:#94a3b8,color:#334155
style B fill:#eff6ff,stroke:#93c5fd,color:#1e40af
style C fill:#f8fafc,stroke:#94a3b8,color:#334155
style D fill:#eff6ff,stroke:#93c5fd,color:#1e40af
style E fill:#f0fdf4,stroke:#86efac,color:#166634
One seal. Generated before the AI touches anything.
If the input was changed, the seal breaks. Always.
Get started
No pip. No dependencies. Clone and run.
git clone https://github.com/SpyrosArg/Verum.git
python example.py
Three functions
from verum import seal, bind, verify
# before the AI sees anything
s = seal(data="your raw input data here")
# after the AI decides
receipt = bind(seal=s, decision="ai decision output here")
# verify anytime — by anyone
result = verify(receipt=receipt, original_data="your raw input data here")
print(result.valid) # True
print(result.reason) # "input matches seal"
Change a single character in the original data. result.valid becomes False.
That is the entire interface.
Where this matters
AI agent pipelines
One agent feeds another. Seal every handoff. Make the entire chain auditable at every link.
Space operations
The telemetry an AI anomaly detector acted on —> was it real? Prove it.
Healthcare
The scan an AI diagnostic tool processed —> was it the right patient, unaltered? Prove it.
Finance
The market data an algorithmic system acted on —> was it the genuine feed at that moment? Prove it.
How it works
verum takes a cryptographic fingerprint of raw input the moment it arrives. It seals that fingerprint with a timestamp from an external source the operator does not control, so nothing can be backdated. The seal binds to whatever decision follows. Verification reruns the fingerprint on the original data and checks it against the seal. Match means genuine. Mismatch means something changed.
What this is not
Not encryption. Not an audit log. Not a compliance platform.
One primitive. One gap. Everything else builds on top.
verum/
├── verum.py the primitive
├── example.py start here
├── example_space.py satellite telemetry walkthrough
└── README.md
MIT use it, break it, build on it.
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 verum-0.1.1.tar.gz.
File metadata
- Download URL: verum-0.1.1.tar.gz
- Upload date:
- Size: 5.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1dad8b14b3b8171a6f52c0aa84eb2fcb7a9492f212ccaf8aca2f6e204fd9d59c
|
|
| MD5 |
cbf01b7c04b2c2be0308eecc82bcc3d4
|
|
| BLAKE2b-256 |
df1c3c72d1eb0692bab5db3b26e5a4c7fee5aafdc814a012475b3625cdd081e3
|
Provenance
The following attestation bundles were made for verum-0.1.1.tar.gz:
Publisher:
publish.yml on SpyrosArg/Verum
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
verum-0.1.1.tar.gz -
Subject digest:
1dad8b14b3b8171a6f52c0aa84eb2fcb7a9492f212ccaf8aca2f6e204fd9d59c - Sigstore transparency entry: 1341994878
- Sigstore integration time:
-
Permalink:
SpyrosArg/Verum@9165595c92b43e2d2b37d05491d5f870178a8a5b -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/SpyrosArg
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@9165595c92b43e2d2b37d05491d5f870178a8a5b -
Trigger Event:
push
-
Statement type:
File details
Details for the file verum-0.1.1-py3-none-any.whl.
File metadata
- Download URL: verum-0.1.1-py3-none-any.whl
- Upload date:
- Size: 5.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
077a03846f1d3f845c573c4df84869f5049c8cdcc90bebc223eaa39fe4eaefa5
|
|
| MD5 |
0c38aa6ae943dcaa2ce89a996a787f9d
|
|
| BLAKE2b-256 |
737986dad0ba5d903f5e84b7a4557ae45847f5b6741ab1313f8d2e217844c425
|
Provenance
The following attestation bundles were made for verum-0.1.1-py3-none-any.whl:
Publisher:
publish.yml on SpyrosArg/Verum
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
verum-0.1.1-py3-none-any.whl -
Subject digest:
077a03846f1d3f845c573c4df84869f5049c8cdcc90bebc223eaa39fe4eaefa5 - Sigstore transparency entry: 1341994888
- Sigstore integration time:
-
Permalink:
SpyrosArg/Verum@9165595c92b43e2d2b37d05491d5f870178a8a5b -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/SpyrosArg
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@9165595c92b43e2d2b37d05491d5f870178a8a5b -
Trigger Event:
push
-
Statement type: