Verify Passport Offline
Overview
Verify a Passport and related proofs without a live HUMΛN API round-trip for the crypto check. Signatures and Merkle inclusion can be checked locally from cached public material. Revocation freshness still depends on periodically syncing public snapshots.
Why Offline Verification?
Think of it like: Checking a driver's license hologram — you don't call the DMV for every glance, but you still refresh the stolen-license bulletin on a schedule.
How Offline Verification Works
@human/passport OfflinePassportVerifier verifies container signatures offlineGET /v1/passports/:did/devices/revocation-snapshot while online; check cache offlineGET /v1/.well-known/bbs-public-key for credential verification key materialThere is no fantasy HumanOS.Passport.verifyOffline() on @human/sdk, and no global /v1/crl CRL download endpoint.
SDK Examples
REST helpers (sync while online)
GET /v1/.well-known/bbs-public-keyGET /v1/passports/{did}/devices/revocation-snapshotPOST /v1/passports/{did}/ledger-anchor/verify
Authorization: Bearer
Content-Type: application/json{
"merkle_proof": [],
"leaf_hash": "…"
}
Honest limitations
| Claim | Reality |
|---|---|
| Fully offline always | Only after you cache public keys + revocation snapshot |
HumanOS.Passport.verifyOffline | Does not exist — use OfflinePassportVerifier |
| Global CRL download | No single /v1/crl — use per-DID revocation snapshots |
| Ledger verify without network | Inclusion check against cached root; live ledger-anchor/verify needs network |
Security Considerations
DO
Refresh revocation snapshots on a schedule before going offline
Verify signatures with OfflinePassportVerifier against known public keys
Treat stale revocation caches as elevated risk
DON'T
Invent a server SDK method that pretends offline verify is a single HTTP call
Skip revocation freshness for high-risk decisions
Ship private keys to verifiers — only public material
Next Steps
See Also
@human/passport/browser — OfflinePassportVerifierGET /v1/.well-known/bbs-public-key