Learning Objectives
By the end of this module, you will be able to:
- Run the maintained Python verification API and handle all 17 outcomes
- Distinguish signature integrity, configured trust, and attestation claim quality
- Configure online or CRL revocation behavior safely
- Describe the additional evidence required for audit or compliance claims
6.1 — Verification in Practice
from vcp import Orchestrator, VerificationContext, VerificationResult
verification_context = VerificationContext(
trust_config=trust,
model_family="example-model-*",
purpose="customer-support",
environment="production",
audience="adult",
region="GB",
)
result = Orchestrator(trust).verify(
bundle,
context=verification_context,
)
if result is not VerificationResult.VALID:
raise PermissionError("VCP verification failed: " + result.name) The SDK has no universal fixed-duration verification guarantee and no dedicated timeout outcome. Set a timeout around network-dependent acquisition and revocation work at the application boundary, then choose a documented failure policy.
6.2 — The 17 Verification Outcomes
| Outcome | SDK category | Meaning |
|---|---|---|
VALID | Success | All configured verification checks passed |
SIZE_EXCEEDED | Security | Manifest or content exceeded the accepted byte bound |
INVALID_SCHEMA | Configuration | Bundle shape or types were malformed |
UNTRUSTED_ISSUER | Configuration | No valid issuer trust anchor matched |
INVALID_SIGNATURE | Security | Issuer signature did not verify |
UNTRUSTED_AUDITOR | Configuration | No valid auditor trust anchor matched |
INVALID_ATTESTATION | Security | Attestation signature or claim structure was invalid |
HASH_MISMATCH | Security | Canonical content did not match the manifest hash |
NOT_YET_VALID | Temporal | Current time precedes nbf |
EXPIRED | Temporal | Current time exceeds exp |
FUTURE_TIMESTAMP | Security | iat exceeded allowed future clock skew |
REPLAY_DETECTED | Security | The bounded replay cache already contained the JTI |
TOKEN_MISMATCH | Security | Declared token information did not match |
BUDGET_EXCEEDED | Configuration | Bundle budget exceeded the configured context allowance |
SCOPE_MISMATCH | Configuration | Model, purpose, environment, audience, or region did not match scope |
REVOKED | Security | Configured revocation evidence marks the bundle revoked |
FETCH_FAILED | Transient | Configured revocation retrieval failed |
Only VALID permits the application to continue to local enforcement.
Avoid retrying security failures as if they were transient.
6.3 — Safety Attestation
The issuer signature binds bundle bytes to an issuer key. A separately trusted auditor can sign a safety-attestation claim. VCP-SDK 4.2.0 recognises:
| Type | Claim |
|---|---|
INJECTION_SAFE | The auditor asserts the defined injection-safety review was completed |
CONTENT_SAFE | The auditor asserts the defined content-safety review was completed |
FULL_AUDIT | The auditor asserts the organisation's defined full-audit evidence exists |
COMPETENCE_CALIBRATION | The auditor asserts the defined competence-calibration review was completed |
A valid signature establishes integrity and provenance relative to configured trust anchors. It does not independently establish that the review method was adequate, lawful, complete, or correctly described. Governance must define the evidence required for each claim.
6.4 — Revocation
A manifest may provide an HTTPS real-time check_uri and a CRL crl_uri. The SDK validates schemes, ports, credentials,
fragments, DNS results, resolved addresses, response size, JSON shape,
issuer binding, and freshness before accepting network evidence.
"revocation": {
"check_uri": "https://status.example.org/vcp/revocation",
"crl_uri": "https://status.example.org/vcp/crl.json"
} If a manifest declares no revocation URI, the current SDK logs that revocation was not configured and treats the bundle as not revoked. High-assurance deployments that require revocation must reject bundles without an approved revocation mechanism in an application policy or custom enforcement plugin.
If configured endpoints fail, the orchestrator returns FETCH_FAILED. Decide whether each action class blocks, uses a still-valid verified
cache entry, or enters a separately constrained fallback.
6.5 — What Verification Proves
- The accepted bytes matched their declared canonical hash
- The signatures verified under the configured algorithms and keys
- The issuer and auditor matched current trust anchors
- Configured temporal, replay, budget, scope, and revocation checks passed
Verification does not prove that a model followed the content, a tool action was safe, a reviewer exercised sound judgment, the system complied with law, or downstream logs are complete. Those need separate runtime, human, legal, and operational evidence.
Exercise
Run examples/python/02_verify_bundle.py. Then test hash
mismatch, missing audience, future timestamp, revoked JTI, and
unreachable CRL behavior. Confirm that no failure path formats or
injects the bundle.
See It in Action
The Marta demo illustrates time-varying context. It is an explanatory scenario, not cryptographic verification evidence.