Evidence Quick Start
Generate and verify evidence bundles in 5 minutes.
Prerequisites
- Python 3.10+
- QCOS API key (get one here)
- pip
Step 1: Install the SDK
pip install qcos-sdk[evidence]
Step 2: Configure API Key
export QCOS_API_KEY="qcos_live_your_key_here"
Step 3: Generate Evidence for a Job
from qcos import Client
from qcos.evidence import EvidenceClient
# First, run an optimization job
client = Client()
job = client.optimize(
qasm="OPENQASM 2.0; ...",
backend="ionq_simulator",
shots=1024,
options={"evidence": True} # Enable evidence
)
# Evidence is automatically attached
print(f"Job ID: {job.job_id}")
print(f"Evidence Bundle ID: {job.evidence_bundle_id}")
Step 4: Retrieve Evidence Bundle
from qcos.evidence import EvidenceClient
evidence = EvidenceClient()
# Get the bundle
bundle = evidence.get("ev_abc123")
print(f"Bundle ID: {bundle.bundle_id}")
print(f"Type: {bundle.type}")
print(f"Timestamp: {bundle.timestamp}")
print(f"Algorithm: {bundle.signature_algorithm}")
Step 5: Verify Evidence
from qcos.evidence import EvidenceClient
evidence = EvidenceClient()
# Get and verify
bundle = evidence.get("ev_abc123")
verification = evidence.verify(bundle)
print(f"Valid: {verification.valid}")
print(f"Checks:")
for check, result in verification.checks.items():
status = "✅" if result == "valid" else "❌"
print(f" {status} {check}: {result}")
Expected Output:
Valid: True
Checks:
✅ signature: valid
✅ circuit_hash: valid
✅ results_hash: valid
✅ timestamp: valid
✅ chain: valid
Step 6: Export for Audit
from qcos.evidence import EvidenceClient
evidence = EvidenceClient()
bundle = evidence.get("ev_abc123")
# Export as JSON (machine-readable)
bundle.export("evidence.json", format="json")
# Export as PDF (human-readable audit document)
bundle.export("audit_report.pdf", format="pdf")
# Export as CBOR (compact binary)
bundle.export("evidence.cbor", format="cbor")
Step 7: Generate Evidence Manually
For cases where you need to generate evidence after the fact:
from qcos.evidence import EvidenceClient
evidence = EvidenceClient()
# Generate evidence for existing job
bundle = evidence.generate(
job_id="job_xyz789",
include_circuit=True,
include_results=True,
pqc_algorithm="ML-DSA-65"
)
print(f"New Bundle ID: {bundle.bundle_id}")
Step 8: List Your Evidence
from qcos.evidence import EvidenceClient
evidence = EvidenceClient()
# List recent bundles
bundles = evidence.list(
limit=10,
type="optimization"
)
for b in bundles:
print(f"{b.bundle_id}: {b.timestamp} ({b.type})")
Complete Example
#!/usr/bin/env python3
"""Evidence Complete Example"""
from qcos import Client
from qcos.evidence import EvidenceClient
def main():
# Initialize clients
qcos = Client()
evidence = EvidenceClient()
# Run optimization with evidence
print("Running optimization...")
job = qcos.optimize(
qasm="""
OPENQASM 2.0;
include "qelib1.inc";
qreg q[2];
creg c[2];
h q[0];
cx q[0],q[1];
measure q -> c;
""",
backend="ionq_simulator",
shots=1024,
options={"evidence": True, "pqc_signing": True}
)
print(f"Job completed: {job.job_id}")
# Get evidence bundle
print("\nRetrieving evidence...")
bundle = evidence.get(job.evidence_bundle_id)
print(f"Bundle ID: {bundle.bundle_id}")
print(f"Type: {bundle.type}")
print(f"Algorithm: {bundle.signature_algorithm}")
# Verify
print("\nVerifying evidence...")
verification = evidence.verify(bundle)
print(f"Valid: {verification.valid}")
for check, result in verification.checks.items():
status = "✅" if result == "valid" else "❌"
print(f" {status} {check}")
# Export
print("\nExporting evidence...")
bundle.export("evidence_report.pdf", format="pdf")
print("Saved to evidence_report.pdf")
print("\n✅ Evidence workflow complete!")
if __name__ == "__main__":
main()
REST API Direct Usage
Get Evidence Bundle
curl https://api.softquantus.com/api/v2/evidence/ev_abc123 \
-H "Authorization: Bearer $QCOS_API_KEY"
Verify Evidence
curl -X POST https://api.softquantus.com/api/v2/evidence/verify \
-H "Authorization: Bearer $QCOS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"bundle_id": "ev_abc123"}'
Generate Evidence
curl -X POST https://api.softquantus.com/api/v2/evidence/generate \
-H "Authorization: Bearer $QCOS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"job_id": "job_xyz789",
"include_circuit": true,
"include_results": true
}'
Next Steps
- API Reference - All evidence endpoints
- Bundle Schema - Understand bundle structure
- Verification Guide - Deep dive into verification
- Compliance Guide - Regulatory requirements
© 2024-2026 SoftQuantus Innovative OÜ