CheckSeal
A check-receipt for AI artifacts: which verification checks passed, and how strongly each one binds.
Provenance standards tell you who made an artifact and that it hasn't changed since. They do not tell you which checks it passed and whether those checks were mechanically enforced or merely advisory. CheckSeal is the reference implementation of that check-assertion predicate. It rides in-toto Attestation v1 and Sigstore keyless; it does not invent a competing format.
The differentiator is the enforced / advisory / observed grade on every check, and the honesty machinery behind it:
- evidence is a digest, recomputed — a verifier checks the evidence, it does not trust the claim.
- an enforced grade needs a proof —
enforced_proofresolves to a HarnessBench report that empirically measured the gate, and the corpus's threat class must actually cover the check (a destructive-execution corpus cannot prove a content rights-gate). - consumers display
trust_floor, never a bare "enforced" — the weaker of how strongly a check binds and how strong its evidence is, so a seal can't over-claim in either dimension. - Sigstore + Rekor make backdating detectable (a not-after bound; Rekor does not prove not-before, and CheckSeal says so).
A seal asserts presence with evidence. It cannot prove a check was not run. That limit is stated, not hidden.
Install
pip install checkseal # stdlib-only core
pip install checkseal[sign] # + T1 local-key signing (cryptography)
pip install checkseal[keyless] # + T2 Sigstore keyless (public seals)
Quickstart (T1, offline)
checkseal keygen --out key.pem --pub key.pub.pem
# after your checks run and land in a T0 store (t0.jsonl), seal one subject:
checkseal seal --store t0.jsonl --subject ./artifact --name my/artifact \
--key key.pem --out artifact.intoto.jsonl
# verify against the live artifact (exits non-zero if the seal does not pass):
checkseal verify artifact.intoto.jsonl --subject ./artifact --pubkey key.pub.pem
Public seals must be T2 (Sigstore keyless); that path runs in CI where an OIDC credential is available.
The Verifier Contract
A verification is valid only if the verifier (1) recomputes the live subject
digest, (2) checks Rekor inclusion for a freshness bound, (3) re-executes
enforced Grade-A checks, (4) resolves enforced_proof against HarnessBench with
a corpus-relevance check, (5) renders trust_floor, and (6) treats all sealed
content as untrusted. See DESIGN.md.
Client-side verification (/receipts)
js/checkseal_verify.mjs is the honest browser subset: it recomputes the subject
digest, checks the Statement/predicate subject coupling, verifies the Ed25519
signature over the DSSE PAE, and renders trust_floor — and it states loudly
what it does NOT check (re-execution, enforced_proof resolution, full Rekor
proof), which are CLI-only. A Python-signed seal verifies in this JS verifier
(node --test js/), proving the format is language-agnostic.
Public T2 seals are minted in CI: checkseal seal-keyless plus
.github/workflows/seal.yml (GitHub OIDC → Fulcio → Rekor).
Status
Phases 0-2 complete (format, producer/sealer, verifier CLI); Phase 3 in progress (client-side verifier + T2 keyless CI). Part of the Verification Chain program (HarnessBench + Verification Ledger + CheckSeal on one schema). MIT.
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 checkseal-0.1.1.tar.gz.
File metadata
- Download URL: checkseal-0.1.1.tar.gz
- Upload date:
- Size: 49.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
30715778ba8a21fdf47e401b63c82b5d91c9c904d164c08afa065bd873521b6f
|
|
| MD5 |
f2b25c63391461bf5a6ddb6cddf1f7c4
|
|
| BLAKE2b-256 |
7f8a1a168abbacaaa5a1b7cf0cf62d85ff00c225d1609a79aaef122cbce86023
|
File details
Details for the file checkseal-0.1.1-py3-none-any.whl.
File metadata
- Download URL: checkseal-0.1.1-py3-none-any.whl
- Upload date:
- Size: 30.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
32848aed24f0ad2f6bf7e9718b34f7737752801661845961dd45954d214c1b1f
|
|
| MD5 |
bc9489fc42bbb49373dbdd92bc2f846d
|
|
| BLAKE2b-256 |
344e112273e876ae83434eea62b14fd70df8a10894bf2dec6b29e994cfceef30
|