Evidence Bundle: Generate and Verify
In this tutorial, you'll create an audit-ready evidence bundle from a QCOS job execution and verify it using cryptographic proofs. Evidence bundles are essential for compliance, procurement, and audit requirements.
Objectiveβ
By the end of this tutorial, you will have:
- β Executed a quantum job with evidence generation enabled
- β
Downloaded the
evidence.tar.zstbundle - β Verified the bundle's integrity and authenticity
- β Extracted and inspected the contents
Prerequisitesβ
# QCOS CLI v2.1+
softqcos --version
# zstd for decompression (optional, CLI handles it)
brew install zstd # macOS
# apt install zstd # Ubuntu
# Authenticated
softqcos auth status
What's in an Evidence Bundle?β
An evidence bundle contains cryptographically signed proof of:
| Component | Description |
|---|---|
manifest.json | Job metadata, timestamps, execution context |
circuit.qasm | The submitted circuit (OpenQASM 3.0) |
results.json | Raw measurement results |
backend_snapshot.json | Backend state at execution time |
transpilation_log.json | Optimization steps applied |
signatures/ | ML-DSA signatures for each artifact |
merkle_root.txt | Merkle tree root for bundle integrity |
Step 1: Submit a Job with Evidence Enabledβ
Create a simple circuit file bell_state.qasm:
// bell_state.qasm
OPENQASM 3.0;
include "stdgates.inc";
qubit[2] q;
bit[2] c;
h q[0];
cx q[0], q[1];
c = measure q;
Submit with evidence generation:
softqcos jobs submit bell_state.qasm \
--backend softquantus_sim \
--shots 1024 \
--evidence \
--output job_result.json
Output:
π€ Submitting job to softquantus_sim...
β
Job submitted successfully!
Job ID: job_7f8a9b2c-4d5e-6f7a-8b9c-0d1e2f3a4b5c
Status: QUEUED
Evidence: ENABLED β
Track: softqcos jobs status job_7f8a9b2c...
Step 2: Wait for Completionβ
Monitor the job:
softqcos jobs status job_7f8a9b2c-4d5e-6f7a-8b9c-0d1e2f3a4b5c --wait
Output:
β³ Waiting for job completion...
[00:00:05] Status: RUNNING
[00:00:12] Status: COMPLETED β
Results:
βββ Counts: {"00": 498, "11": 526}
βββ Execution time: 1.23s
βββ Evidence bundle: READY
Step 3: Download the Evidence Bundleβ
softqcos evidence download job_7f8a9b2c-4d5e-6f7a-8b9c-0d1e2f3a4b5c \
--output ./evidence.tar.zst
Output:
π₯ Downloading evidence bundle...
Size: 47.3 KB
Hash: sha3-256:b2c3d4e5f6a7...
β
Saved to: ./evidence.tar.zst
Step 4: Verify the Bundleβ
Verify integrity and signatures before extracting:
softqcos evidence verify ./evidence.tar.zst
Output:
π Verifying evidence bundle...
[1/4] Archive Integrity
βββ Format: tar.zst (zstandard compressed)
βββ Checksum: sha3-256:b2c3d4e5f6a7...
βββ Status: VALID β
[2/4] Manifest Validation
βββ Job ID: job_7f8a9b2c-4d5e-6f7a-8b9c-0d1e2f3a4b5c
βββ Backend: softquantus_sim
βββ Timestamp: 2026-01-04T15:42:33Z
βββ Status: VALID β
[3/4] Artifact Signatures (ML-DSA-65)
βββ manifest.json: VALID β
βββ circuit.qasm: VALID β
βββ results.json: VALID β
βββ backend_snapshot.json: VALID β
βββ transpilation_log.json: VALID β
[4/4] Merkle Root Verification
βββ Computed: 8a9b0c1d2e3f4a5b...
βββ Declared: 8a9b0c1d2e3f4a5b...
βββ Status: MATCH β
ββββββββββββββββββββββββββββββββββββββββββββββββ
β
EVIDENCE BUNDLE VERIFIED
This bundle provides cryptographic proof that:
β’ The circuit was executed on softquantus_sim
β’ Results are authentic and unmodified
β’ Execution occurred at 2026-01-04T15:42:33Z
Suitable for: Compliance audits, procurement verification
ββββββββββββββββββββββββββββββββββββββββββββββββ
Step 5: Extract and Inspectβ
Extract the bundle:
softqcos evidence extract ./evidence.tar.zst --output ./evidence/
Or manually:
tar -xf evidence.tar.zst -C ./evidence/
Directory structure:
evidence/
βββ manifest.json
βββ circuit.qasm
βββ results.json
βββ backend_snapshot.json
βββ transpilation_log.json
βββ signatures/
β βββ manifest.json.sig
β βββ circuit.qasm.sig
β βββ results.json.sig
β βββ backend_snapshot.json.sig
β βββ transpilation_log.json.sig
βββ merkle_root.txt
Step 6: Examine the Manifestβ
cat evidence/manifest.json | jq .
{
"version": "1.0",
"job_id": "job_7f8a9b2c-4d5e-6f7a-8b9c-0d1e2f3a4b5c",
"backend": {
"id": "softquantus_sim",
"provider": "softquantus",
"version": "2.1.3"
},
"execution": {
"submitted_at": "2026-01-04T15:42:30Z",
"started_at": "2026-01-04T15:42:31Z",
"completed_at": "2026-01-04T15:42:33Z",
"shots": 1024
},
"artifacts": [
{"name": "circuit.qasm", "hash": "sha3-256:..."},
{"name": "results.json", "hash": "sha3-256:..."},
{"name": "backend_snapshot.json", "hash": "sha3-256:..."},
{"name": "transpilation_log.json", "hash": "sha3-256:..."}
],
"merkle_root": "8a9b0c1d2e3f4a5b...",
"signed_by": "QCOS Evidence Authority",
"signature_algorithm": "ML-DSA-65"
}
Step 7: Verify Individual Artifactsβ
Verify a specific file:
softqcos evidence verify-artifact evidence/results.json \
--signature evidence/signatures/results.json.sig
Output:
β
Artifact verified
File: results.json
Hash: sha3-256:c3d4e5f6a7b8...
Signature: VALID (ML-DSA-65)
Verification Checklistβ
| Artifact | Command | Expected Result |
|---|---|---|
| Full bundle | softqcos evidence verify ./evidence.tar.zst | All checks PASS |
| Manifest | cat evidence/manifest.json | jq . | Valid JSON with job metadata |
| Results | cat evidence/results.json | jq .counts | Measurement counts |
| Merkle root | cat evidence/merkle_root.txt | 64-char hex string |
Using Evidence for Complianceβ
For Auditorsβ
Provide the evidence.tar.zst file along with:
# Generate verification report
softqcos evidence verify ./evidence.tar.zst --output audit-report.json
For Procurementβ
Evidence bundles prove:
- Authenticity: Job ran on claimed backend
- Integrity: Results haven't been modified
- Timestamp: Execution time is cryptographically attested
- Quantum-Safe: Signatures resist quantum attacks (ML-DSA)
Troubleshootingβ
"Evidence not available"β
Evidence must be requested at job submission time:
softqcos jobs submit circuit.qasm --evidence
"Signature verification failed"β
Update signing keys:
softqcos keys update
"Merkle root mismatch"β
The bundle may be corrupted. Re-download:
softqcos evidence download $JOB_ID --force
Next Stepsβ
- ACOS-ISA Certification β Certify backends
- Offline License Validation β Air-gapped operations
- Evidence API Reference β Programmatic access
Evidence bundles are retained for 90 days by default. Enterprise plans offer extended retention and cold storage options.