Proof bundle
The on-the-wire shape of a Vitrified proof bundle and what each field means for verification.
Proof bundle
A proof bundle is the artifact you receive from Vitrified after your submission has been witnessed. It contains everything required to verify the attestation offline against the public trust infrastructure of each witness mechanism.
Shape
{
"schema": "vitrified.proof-bundle.v1",
"submission": {
"id": "sub_01J...",
"leaf_sha256": "9f86d081884c7d65...",
"metadata": { "schema": "purl", "purl": "pkg:npm/[email protected]" }
},
"batch": {
"id": "btc_01J...",
"root_sha256": "1a2b3c4d...",
"merkle_path": [
{ "side": "right", "hash": "..." },
{ "side": "left", "hash": "..." }
]
},
"witnesses": {
"eidas": { "status": "ok", "token_b64": "...", "tsa_cert_chain": [...] },
"rfc3161": { "status": "ok", "token_b64": "...", "tsa_cert_chain": [...] },
"rekor": { "status": "ok", "log_id": "...", "uuid": "...", "inclusion_proof": {...} },
"ots": { "status": "ok", "ots_b64": "..." },
"evm": { "status": "ok", "chain_id": 8453, "contract": "0x...", "tx_hash": "0x...", "log_index": 0 },
"dsse": { "status": "ok", "envelope": {...}, "vitrified_key_id": "..." }
},
"trust_roots": { ... }
}The authoritative JSON Schema lives at
spec/manifest/proof-bundle.schema.json
and is bundled into every verifier implementation.
Field semantics
schema— bundle format version. Vitrified follows semver; minor revisions are additive (new fields, never breaking).submission.leaf_sha256— SHA-256 of the canonicalized submission envelope. Deterministic; same inputs always produce the same leaf.batch.merkle_path— the audit path from your leaf to the batch root. RFC 6962 construction. A verifier reconstructsbatch.root_sha256fromsubmission.leaf_sha256plus the path; if the reconstructed root matches what each witness witnessed, your submission is in the batch.witnesses.<mechanism>— one entry per witness mechanism. Each entry's status isok,partial, orfailed. A bundle with anyfailedmechanism is still independently verifiable through any mechanism that landedok.trust_roots— the trust roots required to verify offline (TSA certificate chains, Sigstore log public key, Vitrified DSSE signing key fingerprint, OpenTimestamps calendar URLs, EVM contract address + ABI fragment). Embedded so verification needs nothing further from Vitrified.
Verification verdict
Every verifier implementation produces the same Verdict shape:
type Verdict = {
isVerified: boolean;
overall: "verified" | "partial" | "failed";
message: string;
mechanisms: Record<Mechanism, MechanismVerdict>;
};
type MechanismVerdict = {
status: "verified" | "verified_partial" | "failed" | "skipped";
detail?: string;
};The closed-vocabulary status values and per-mechanism verification depth are pinned in
spec/verifier-matrix.md.
Every conformant verifier — Python SDK, JS SDK, CLI, MCP, browser web — produces the
same verdict for the same bundle plus the same optional inputs.
Long-term verification
A bundle remains independently verifiable for as long as the witness mechanism's public trust infrastructure remains operational. Practical durability windows:
| Mechanism | Durability |
|---|---|
| Bitcoin via OpenTimestamps | Effectively unbounded once the OTS upgrade lands the chain anchor. |
| eIDAS qualified timestamp | Until the QTSP's certificate expires; then recursively timestamped under a new QTSP via your own re-timestamping job, or you trust the long-term validation profile. |
| RFC 3161 free TSA | Until the TSA's certificate expires; typically 5–10 years. |
| Sigstore Rekor | Until the Sigstore project's continuity. The transparency log itself is append-only. |
| EVM L2 anchoring | As durable as the chain's continuity. |
| DSSE envelope | Until Vitrified's signing key is rotated; the public key fingerprint is published in the historical trust-roots record so old bundles verify against the key in force at issuance. |
For maximum durability, Bitcoin via OpenTimestamps is the strongest anchor. The other mechanisms provide standards-conformance for specific compliance frameworks; OTS provides the long tail.
See also
- Witnessing — how the bundle is produced.
- Verifier CLI — offline verification on the command line.
- API reference — the HTTP endpoint that returns bundles.
Witnessing
How Vitrified aggregates submissions into Merkle batches and witnesses each batch root through six independent trust mechanisms.
Canonicalization
How Vitrified turns a submission into a deterministic byte sequence so leaf identifiers reproduce exactly across clients and runtimes.
Was this page helpful?