q-armor-cli
q-armor: post-quantum posture of any TLS endpoint, from your terminal, in one command.
The traffic your validator is emitting right now is being recorded by somebody who cannot read it yet. Harvest Now, Decrypt Later is the one attack you cannot respond to after the fact, because the copy was taken years before the key broke. The first useful question is simple: what is this endpoint actually negotiating?
pip install q-armor-cli
q-armor scan example.com
hostname: example.com
port: 443
tls_version: TLSv1.3
cipher_suite: TLS_AES_256_GCM_SHA384
cert_key_type: rsa-2048
cert_issuer: DigiCert Inc
key_exchange_group: x25519
signing_algo: rsa
session_algo: x25519
vqs_score: 80
risk_tier: deny
consensus_weight_factor: 0.1
error: None
vqs_score is exposure, so higher is worse. RSA signing and an x25519 key
exchange are both classical, both fall to Shor, and the consensus weight
factor is what that costs a validator: one tenth of its vote.
Three commands
q-armor scan example.com # post-quantum posture of a TLS endpoint
q-armor vqs <validator-id> # a validator's VQS
q-armor proxy --port 8080 # start the protection proxy
Add --json to any of them and pipe it into whatever you already run.
Three, and the list is not a matter of taste: docs/priorities.md (P1-11)
says that before writing a CLI you have to answer what an operator asks
for, "because a CLI without that case is surface to maintain".
What it will not do
- It does not reimplement detection. Every command consumes
q-armor-lib. A second scanner here would be another producer of thekey_establishment_classaxis, diverging in silence. - It does not let telemetry block your answer. A
scanreports what it measured even if the border is down, misconfigured or refusing on consent grounds. A command that failed because it could not report would be a command that lies about what it has measured.--no-telemetryturns the emission off outright.
Exit codes, so a script can tell the difference
| Code | Meaning |
|---|---|
0 |
It measured the endpoint |
1 |
Error |
2 |
It could not observe the endpoint: that is a finding, not a broken command |
3 |
vqs only: the local validator registry is not present |
Code 3 is repository-root code (services/state/validator_store.py) that no
wheel carries, so installed from PyPI the command says so by name with its own
code instead of dying with an ImportError. It works from a checkout, until the
registry moves to the platform's POST /validators (docs/priorities.md,
P1-13).
The QArmor family
Five packages, one version, published together from a single tag.
| Package | What it is |
|---|---|
q-armor-lib |
Detection, scoring and the control-plane client |
q-armor-cli |
This one: 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 |
Next
Scanning is 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
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file q_armor_cli-0.1.0-cp313-none-any.whl.
File metadata
- Download URL: q_armor_cli-0.1.0-cp313-none-any.whl
- Upload date:
- Size: 9.8 kB
- Tags: CPython 3.13
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ffd5c50f3a73beed0d2686bd9d9a18a172298c85c34fef7e6d4593a8d40f17a6
|
|
| MD5 |
2c2a49234b5e82aaa0683209233b375f
|
|
| BLAKE2b-256 |
0d0cc13c861e39274f277fe05893c924b77312b3a672bbc8c9e4416e453efd44
|
Provenance
The following attestation bundles were made for q_armor_cli-0.1.0-cp313-none-any.whl:
Publisher:
release.yml on iden-q/iden-q-quantum-armor
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
q_armor_cli-0.1.0-cp313-none-any.whl -
Subject digest:
ffd5c50f3a73beed0d2686bd9d9a18a172298c85c34fef7e6d4593a8d40f17a6 - Sigstore transparency entry: 2703660939
- Sigstore integration time:
-
Permalink:
iden-q/iden-q-quantum-armor@4cb5e50bd7ac5f10b9f7607d5d14eb71fe74328d -
Branch / Tag:
refs/heads/main - Owner: https://github.com/iden-q
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@4cb5e50bd7ac5f10b9f7607d5d14eb71fe74328d -
Trigger Event:
push
-
Statement type:
File details
Details for the file q_armor_cli-0.1.0-cp312-none-any.whl.
File metadata
- Download URL: q_armor_cli-0.1.0-cp312-none-any.whl
- Upload date:
- Size: 9.8 kB
- Tags: CPython 3.12
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bc7475cc9e06ef659208f0f793263ff4cf1db7a239c205312fd0307fc86424f0
|
|
| MD5 |
93b3af29b614f2540f7187707a027654
|
|
| BLAKE2b-256 |
35d3e242b1290f49d39ada6662ace8f049395d7fbfc650ff47cbe80461a8dcca
|
Provenance
The following attestation bundles were made for q_armor_cli-0.1.0-cp312-none-any.whl:
Publisher:
release.yml on iden-q/iden-q-quantum-armor
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
q_armor_cli-0.1.0-cp312-none-any.whl -
Subject digest:
bc7475cc9e06ef659208f0f793263ff4cf1db7a239c205312fd0307fc86424f0 - Sigstore transparency entry: 2703661056
- Sigstore integration time:
-
Permalink:
iden-q/iden-q-quantum-armor@4cb5e50bd7ac5f10b9f7607d5d14eb71fe74328d -
Branch / Tag:
refs/heads/main - Owner: https://github.com/iden-q
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@4cb5e50bd7ac5f10b9f7607d5d14eb71fe74328d -
Trigger Event:
push
-
Statement type:
File details
Details for the file q_armor_cli-0.1.0-cp311-none-any.whl.
File metadata
- Download URL: q_armor_cli-0.1.0-cp311-none-any.whl
- Upload date:
- Size: 10.2 kB
- Tags: CPython 3.11
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c6495488bc285c0b1f5d1a3f63bdb1efecd206ce9010506ba86feee0b5c1e722
|
|
| MD5 |
25a680acaaaca70d89daefe6d00d9559
|
|
| BLAKE2b-256 |
c48bbe74e6e65b8176298404d10d405dc0e11e7751768e8c0ebd0c9b372206d5
|
Provenance
The following attestation bundles were made for q_armor_cli-0.1.0-cp311-none-any.whl:
Publisher:
release.yml on iden-q/iden-q-quantum-armor
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
q_armor_cli-0.1.0-cp311-none-any.whl -
Subject digest:
c6495488bc285c0b1f5d1a3f63bdb1efecd206ce9010506ba86feee0b5c1e722 - Sigstore transparency entry: 2703661001
- Sigstore integration time:
-
Permalink:
iden-q/iden-q-quantum-armor@4cb5e50bd7ac5f10b9f7607d5d14eb71fe74328d -
Branch / Tag:
refs/heads/main - Owner: https://github.com/iden-q
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@4cb5e50bd7ac5f10b9f7607d5d14eb71fe74328d -
Trigger Event:
push
-
Statement type: