Back to blog

SDK 0.6.0: offline and air-gapped verification

20 Jun 2026

SDK 0.6.0 ships today for both Python (asqav) and TypeScript (@asqav/sdk). The main addition is a clean offline verification path for environments that cannot reach the internet during an audit run.

The idea is simple: fetch the public key directory once while you are connected, then everything else is local. No special mode, no API key, no Asqav infrastructure involved during the verify step.

Offline verification in one pass

# snapshot the public key directory once
curl https://api.asqav.com/.well-known/jwks.json > jwks.json

# install the verify dependencies
pip install "asqav[verify]"

# verify with no network access
python verify_receipt.py \
    --receipt receipt.json \
    --jwks jwks.json \
    --offline

The --offline flag makes the verifier refuse to make any network call. If a key is missing from your local snapshot, the issuer-key axis fails rather than fetching silently.

ML-DSA-65 works the same way

Post-quantum receipts (ML-DSA-65, NIST FIPS 204) verify offline the same way as Ed25519 receipts. The algorithm identifier rides inside the signed envelope, so the verifier reads which algorithm to use from the receipt itself. The pure-Python dilithium-py library handles the signature math with no native compilation.

Air-gapped installs

If the target machine has no internet at all, pre-download the wheels on a connected machine and transfer them:

pip download "asqav[verify]" -d ./wheels
# transfer ./wheels/ to the air-gapped machine
pip install --no-index --find-links ./wheels "asqav[verify]"

Getting started

Full offline verification guide: asqav.com/docs/offline-air-gapped-verification. Source: github.com/jagmarques/asqav-sdk.