pqscan

TLS / QUIC cipher-configuration and post-quantum readiness scanner
Author

Shain Singh

Published

October 15, 2026

About this tool

pqscan is a command-line scanner. It reads one target or a target list. It writes one scan record per target. The record shows the target’s TLS and QUIC configuration. The record also shows the target’s post-quantum readiness rating. The tool composes with the import toolset: target lines in, streaming JSONL out. The 2026.01-rc3 release-candidate cut is live and attested. The written specification is in force.

What the record shows

Each record carries five parts.

  • one negotiated key-group, for example X25519MLKEM768
  • one cipher suite and one protocol version
  • one certificate result: the signature and the key type
  • one QUIC result, if the target answers the UDP plane
  • one readiness rating: a number from 0 to 100

The machine formats give the record as JSON, CSV or text. The -explain option adds the same facts as plain sentences. The text never adds facts the record does not carry.

What the tool reads

The tool reads simple target forms: a domain, an IP address, a host with a port. It also reads scan results from other tools. Use these commands only.

  • subfinder -d shain.io -silent
  • httpx -silent -ports 443,8443 -p 443,8443 -no-color
  • naabu -l domains.txt -p 443,8443,465,993 -silent
  • nuclei -l hosts.txt -silent -j

These commands are fixed. Other output forms do not parse. The tool reports the error and stops.

Three scan modes

  • fast: one handshake. The tool gives the record in milliseconds.
  • deep: the probe matrix. The tool sends one probe at a time and records each answer.
  • pq: the PQ offer set. The tool sends PQ-only offers. Each refusal carries the server’s reason.

Measured performance

2,952/s per core
fast mode, W=8 loopback fixture — SLO ≥ 2,500 h/s/core, CI-enforced
42.4ms
full fast scan, one external host — connect + handshake, forced hybrid
27.6ms
QUIC v1 / h3 handshake — X25519MLKEM768 (4588) negotiated live
<10MB
one static binary — the size SLO enforced on every change

The numbers come from measured runs. The release gate re-runs the rate and the size checks at every cut. Published numbers stay current. The latency model and the budget decomposition: Design.

Start

The release page carries attested static binaries for linux (amd64/arm64) and darwin/arm64. The three lines below install the tool. The full matrix — source installs, checksum and SLSA verification steps, Windows — lives in INSTALL.md.

brew tap shsingh/tap && brew install pqscan        # macOS
go install github.com/shsingh/pqscan/cmd/pqscan@2026.01-rc3   # any platform with Go
gh attestation verify pqscan-<os>-<arch> -R shsingh/pqscan     # verify before running

Install the tool, then run the scan. Read the record and the plain sentences under it.

pqscan -u example.com -explain

The sentences show what is safe today and what is not.

Alternative tools

Tool Capability in common with pqscan Divergence from pqscan’s scope
cryptonice Multi-surface scan menu (TLS, HTTP, DNS, fingerprint) with structured JSON reporting Python execution model without the throughput contract; PQC group and signature assessment out of scope
gnutls-cli-debug Exhaustive offer-and-observe protocol and suite probing Interactive single-target scope; group and signature matrices are not scriptable
testssl.sh Wide protocol coverage including legacy versions, single-file portability Serial execution model bounds estate-scale runs; PQC codepoints not classified
sslyze Structured TLS probing library; base for several Python scanners Per-target serial execution; no pipe-first interface
zgrab2 Modular scanner architecture designed for handshake rates at scale One or few handshakes per host by design; no suite/group enumeration depth
masscan / zmap Rate-disciplined mass port discovery Port discovery only, by design; composes with pqscan as input
TLS-Scanner Exhaustive protocol analysis Academic toolchain packaging; not an operations-chain component
httpx / nuclei / naabu Pipe-first dialect: streaming JSONL, silent output, resume, sharding Scope centred on HTTP content and port enumeration; cipher configuration delegated to pqscan
Censys / Shodan Large-scale PQC observation datasets Remote datasets only; no on-demand probing of arbitrary target lists

Port and host discovery compose with the adjacent tools. See Recipes. pqscan covers the cipher-configuration plane: TLS and QUIC handshake parameters, certificates, PQC classification.

Security

Scan only owned or authorised systems. Report findings privately. See Security and SECURITY.md.

Contact

Author Shain Singh — shain.singh@owasp.org
PGP 9CB1781DC2BB28D37A0155DCAAF8226F3F4C1712 — public key: github.com/shsingh.gpg
Security reports Private vulnerability reporting / email encrypted to the key above — never a public issue
Governance Governance page · commit-signing verification