Skip to main content

q-armor-lib

The post-quantum protection core of QArmor: score a validator, scan an endpoint, catch a harvester.

PyPI Python Licence FIPS 203 FIPS 204

Blockchain bridges have lost more than $2.8B to exploits: Ronin $625M, Wormhole $320M, Multichain $130M. Three causes repeat, and the third one has not happened yet: traffic captured today, decrypted the day a cryptographically relevant quantum computer exists. That is Harvest Now, Decrypt Later, and it is the attack whose damage is already done by the time anyone can detect it.

q-armor-lib is the library that measures the exposure. It is the detection and scoring logic of QArmor, separated from the runtimes that consume it (the protection proxy, the dashboard, the canary network and the DVN worker), so that one implementation produces one answer.

Three lines, and a number that means something

pip install q-armor-lib
from q_armor_lib.tls_scanner import scan_tls_endpoint

r = scan_tls_endpoint("example.com")
print(r.key_exchange_group, r.vqs.score, r.vqs.tier)
x25519 80 RiskTier.DENY

An endpoint that negotiates x25519 is doing a classical key exchange: everything on that wire is harvestable today and readable the day the quantum computer arrives. VQS is exposure, so 0 is safe, 80 is not, and above 75 the tier is DENY.

What VQS actually decides

The score is not a badge. It is the validator's weight in weighted BFT consensus, so posture changes what a vote is worth:

Tier VQS (exposure) Effective weight
PERMIT under 25 full
STEP_UP 25 to 75 halved, until posture improves
DENY over 75 one tenth, and excluded from critical quorum

Signing algorithm and session algorithm weigh 0.4 each, and the canary capture rate weighs 0.2. ECDSA, RSA and Ed25519 all score 100 exposure, because Shor breaks all three and pretending otherwise would only make the label lie.

Why this, and not a hardware programme

  • No QKD hardware. ML-KEM-768 runs on the server you already have.
  • Active HNDL detection, not only prevention. Canary tokens embedded in proofs turn a silent harvest into an event with a timestamp.
  • Posture, not just stake. A validator with a large stake and classical keys is a large hole, and VQS is what prices it.
  • One axis, one producer. key_establishment_class is computed here and nowhere else, so the CLI, the proxy and the dashboard cannot disagree.
  • It says "unknown" when it does not know. The class is asserted only when the negotiated group was actually observed; a TLS version alone is a guess, and a guess is not evidence.

What is inside

Module What it does
vqs_engine VQS, the Validator Quantum Score: scoring of cryptographic posture
tls_scanner Scanning of TLS endpoints and certificates
sector_scanner VQS aggregation at network and sector level
cbom Cryptographic bill of materials built from what a scan observed
quantum_scanner_client HTTP client of the external QuantumScanner (idenq.io), enriches scans with QES
session.key_exchange ML-KEM-768 peer-to-peer session exchange between validators
proofs.aggregator Proof aggregation with an ML-DSA-65 signature and canary embedding, weighted by VQS
identity.canary_tokens Canary tokens for active detection of HNDL attacks
control_plane Client of the QArmor control plane, shared by the CLI and the proxy

It depends on q-armor-pqc (interim, see its README) for ML-DSA-65; ML-KEM-768 arrives through that same package from the iden-q-post-quantum emission.

The QArmor family

Five packages, one version, published together from a single tag.

Package What it is
q-armor-lib This one: detection, scoring and the control-plane client
q-armor-cli q-armor, the operator's command line
q-armor-proxy Enterprise runtime: protection proxy, firewall, SIEM webhook
q-armor-chain DVN worker and QArmorDVN.sol
q-armor-pqc Interim ML-DSA-65 primitive

Installing inside the workspace

Within iden-q-quantum-armor it is installed editable from the root requirements.txt, which asks for all five with -e in ONE pip command: the exact pin to q-armor-pqc is satisfied by the editable requested in that same command. Standalone, the two together for the same reason:

pip install -e packages/q-armor-pqc -e packages/q-armor-lib

Tests

The package's own tests live in tests/ of this directory (test_vqs_engine.py, test_tls_scanner.py, test_session.py, test_proofs.py, test_canary_tokens.py) and do not depend on the runtime, only on q_armor_lib and q_armor_pqc. They run with pytest from the repository root like the rest of the suite (there is no restrictive testpaths in pytest.ini).

The tests that exercise how the runtime uses this library (the /endpoint/scan endpoints, the dashboard, the DVN worker, keypair persistence) stay in tests/ at the repository root: they are integration tests, not tests of the library itself.

Extraction status

It is a self-contained Python package, published to PyPI with the rest of the workspace from a tag (release.yml; CI builds and verifies it on every pull request). The licence decision is taken: proprietary (LicenseRef-Proprietary as the SPDX expression in pyproject.toml, the owner's decision of 2026-09-02) and with LICENSE inside the wheel. What is worth knowing when consuming it:

  • quantum_scanner_client.probe_domain takes the QuantumScanner URL as a parameter and does not read global configuration: the runtime that calls it decides where that value comes from.

Next

The local daemon and the VQS dashboard are free. The collective canary network, real-time alerting and on-premise deployment are the paid tiers: idenq.io

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

q_armor_lib-0.1.1-cp313-none-any.whl (67.2 kB view details)

Uploaded CPython 3.13

q_armor_lib-0.1.1-cp312-none-any.whl (66.8 kB view details)

Uploaded CPython 3.12

q_armor_lib-0.1.1-cp311-none-any.whl (68.0 kB view details)

Uploaded CPython 3.11

File details

Details for the file q_armor_lib-0.1.1-cp313-none-any.whl.

File metadata

  • Download URL: q_armor_lib-0.1.1-cp313-none-any.whl
  • Upload date:
  • Size: 67.2 kB
  • Tags: CPython 3.13
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for q_armor_lib-0.1.1-cp313-none-any.whl
Algorithm Hash digest
SHA256 df8241c70b6b9d472075a852c804531344d0782ae0b4d549f13d045c629d269e
MD5 e5a878262c89ebcd7b549ecbf818c116
BLAKE2b-256 1481c7041bbae46c3dee67e9f1c26b1aee63e83fd2d8ad255ba77041a2a2a06a

See more details on using hashes here.

Provenance

The following attestation bundles were made for q_armor_lib-0.1.1-cp313-none-any.whl:

Publisher: release.yml on iden-q/iden-q-quantum-armor

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file q_armor_lib-0.1.1-cp312-none-any.whl.

File metadata

  • Download URL: q_armor_lib-0.1.1-cp312-none-any.whl
  • Upload date:
  • Size: 66.8 kB
  • Tags: CPython 3.12
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for q_armor_lib-0.1.1-cp312-none-any.whl
Algorithm Hash digest
SHA256 c0f4d307807a66282b1d18bf04c2f2f9906e84d2dcc9e771f024433a6537d71c
MD5 60301a2b212a7378ec06e3c9571cacb1
BLAKE2b-256 52d4d7eab26ef3542d30fed833f712953ece55afc52fa555accb331c97a90a0d

See more details on using hashes here.

Provenance

The following attestation bundles were made for q_armor_lib-0.1.1-cp312-none-any.whl:

Publisher: release.yml on iden-q/iden-q-quantum-armor

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file q_armor_lib-0.1.1-cp311-none-any.whl.

File metadata

  • Download URL: q_armor_lib-0.1.1-cp311-none-any.whl
  • Upload date:
  • Size: 68.0 kB
  • Tags: CPython 3.11
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for q_armor_lib-0.1.1-cp311-none-any.whl
Algorithm Hash digest
SHA256 7ba300dc6edab4c660ae517949f02f7ef805b5b2d2f2c7341c712f4d787599ff
MD5 89b3533ce22a629e546e7ba13b19a08a
BLAKE2b-256 33127bdf07612f65297ce1adf455f1f1b55bdec17c912c835a580dbd471a81bc

See more details on using hashes here.

Provenance

The following attestation bundles were made for q_armor_lib-0.1.1-cp311-none-any.whl:

Publisher: release.yml on iden-q/iden-q-quantum-armor

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.1.2

3 files

This release

0.1.1 This release

3 files

0.1.0

3 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page