pqcheck 0.7.9 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +96 -27
- package/bin/pqcheck.js +1659 -56
- package/package.json +5 -5
package/README.md
CHANGED
|
@@ -8,10 +8,67 @@ npx pqcheck stripe.com
|
|
|
8
8
|
|
|
9
9
|
Zero install. Works in any terminal with Node 18+. Free, no signup, no API key.
|
|
10
10
|
|
|
11
|
-
The same scanner that powers [
|
|
11
|
+
The same scanner that powers [cipherwake.io](https://cipherwake.io), the browser extension, and the GitHub Action.
|
|
12
12
|
|
|
13
13
|
---
|
|
14
14
|
|
|
15
|
+
## Get started in 60 seconds
|
|
16
|
+
|
|
17
|
+
Wire Cipherwake into your CI so every PR gets a Trust Diff comment when your domain's public trust posture changes.
|
|
18
|
+
|
|
19
|
+
**One command does almost everything:**
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
npx pqcheck onboard cipherwake.io
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
That runs in sequence: scan your domain → write the GitHub Action workflow → capture a vendor lockfile → generate a release checklist → open your browser to the API-key page. You finish by adding the API key as a repo secret + committing.
|
|
26
|
+
|
|
27
|
+
**Or step-by-step if you prefer:**
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
# 1. Scaffold a GitHub Actions workflow (interactive prompts)
|
|
31
|
+
npx pqcheck init
|
|
32
|
+
|
|
33
|
+
# 2. Generate a free API key at https://cipherwake.io/account#api-keys
|
|
34
|
+
# (Free tier: 30 Trust Diff calls/month)
|
|
35
|
+
|
|
36
|
+
# 3. Add the key as a repo secret:
|
|
37
|
+
# GitHub → Settings → Secrets → Actions → New secret
|
|
38
|
+
# Name: CIPHERWAKE_API_KEY Value: qpk_...
|
|
39
|
+
|
|
40
|
+
# 4. Commit + push
|
|
41
|
+
git add .github/workflows/cipherwake.yml
|
|
42
|
+
git commit -m "ci: add Cipherwake Trust Diff gate"
|
|
43
|
+
git push
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
That's it. Open a PR and Cipherwake comments inline when cert / SPKI / HSTS / CSP / DMARC / vendor scripts drift since your baseline.
|
|
47
|
+
|
|
48
|
+
**Want more?**
|
|
49
|
+
- Pre-commit hook: `npx pqcheck deploy-check <domain>` before every deploy
|
|
50
|
+
- Release ritual: `npx pqcheck release-checklist <domain>` for your release notes
|
|
51
|
+
- Vendor lockfile: `npx pqcheck vendors export <domain>` to commit `cipherwake.vendors.json` and fail PRs introducing new third-party scripts
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## What's new in 0.12.0
|
|
56
|
+
|
|
57
|
+
**Developer habit-loop bundle (locked 2026-05-16).** Five new subcommands that put Cipherwake where developers already work: PRs, CI, release notes, vendor allowlists. Free tier covers all of them within the 30 Trust Diff calls/month quota.
|
|
58
|
+
|
|
59
|
+
- `pqcheck init` — interactive scaffold for `.github/workflows/cipherwake.yml`. Prompts for domain, fail-on severity, baseline. No copy-paste from docs required.
|
|
60
|
+
- `pqcheck deploy-check <domain>` — pre-deploy Trust Diff gate with deploy-friendly framing. Uses last-scan as default baseline. Same exit semantics as `trust-diff`.
|
|
61
|
+
- `pqcheck release-checklist [domain]` — markdown checklist for release notes. Offline, no API call.
|
|
62
|
+
- `pqcheck vendors export <domain>` — write `cipherwake.vendors.json` from currently observed third-party origins. Like `package-lock.json` for vendor scripts.
|
|
63
|
+
- `pqcheck vendors check <domain>` — CI gate; exits **4** when new origins appear that aren't in the lockfile.
|
|
64
|
+
- `pqcheck vendors sync <domain>` — Starter+ only; pulls your dashboard-managed approved-vendor allowlist into the lockfile.
|
|
65
|
+
|
|
66
|
+
Plus: the GitHub Action v3.1 now posts a **sticky PR comment** with Trust Diff results when `comment-on-pr: true` is set, and `/r/<domain>` has a "Copy as GitHub issue" button on every finding.
|
|
67
|
+
|
|
68
|
+
## What's new in 0.11.0
|
|
69
|
+
|
|
70
|
+
**Trust Diff subcommand** — `npx pqcheck trust-diff <domain>` calls `/api/trust-diff` and gates CI on regression severity vs a configured baseline. SARIF output uploads to GitHub's Code Scanning. Pair with `cipherwakelabs/pqcheck@v3` action `mode: trust-diff` for one-line CI integration.
|
|
71
|
+
|
|
15
72
|
## What's new in 0.7.9
|
|
16
73
|
|
|
17
74
|
**CSP verdict + vendor labels on `pqcheck deps`.** The supply-chain table now shows a friendly vendor label (`New Relic · errors` / `Cloudflare · cdn` / `Adobe Fonts · fonts`) per host instead of raw `bam.nr-data.net`-style hostnames, plus a one-line site-wide CSP verdict above the table (`✗ No CSP enforcement` / `⚠ CSP is permissive` / `✓ Strict CSP enforced`). Same data shape ships on `/r/<domain>` and in the browser extension — cross-surface parity for the supply-chain story. See [CHANGELOG.md](./CHANGELOG.md).
|
|
@@ -42,11 +99,21 @@ Plus a full ASM check suite for credibility:
|
|
|
42
99
|
|
|
43
100
|
```
|
|
44
101
|
npx pqcheck <domain> Scan + print human-readable report
|
|
45
|
-
npx pqcheck lock <domain> Generate
|
|
102
|
+
npx pqcheck lock <domain> Generate cipherwake.lock (QXM) committable manifest
|
|
46
103
|
npx pqcheck deps <domain> Scan all third-party origins on the page (supply-chain HNDL)
|
|
47
104
|
npx pqcheck diff <old.lock> <new.lock> Compare two QXM lockfiles; exit 2 on regression
|
|
48
105
|
npx pqcheck history <domain> Show 90-day score history (sparkline + samples)
|
|
106
|
+
npx pqcheck changes <domain> Summarize public attack-surface changes in last 14 days
|
|
49
107
|
npx pqcheck cert <file.pem> Analyze a local PEM/CRT cert file (offline, no network)
|
|
108
|
+
npx pqcheck trust-diff <domain> Trust Diff vs configured baseline; CI gate (Free: 30/mo)
|
|
109
|
+
npx pqcheck deploy-check <domain> Pre-deploy gate (Trust Diff alias with last-scan baseline)
|
|
110
|
+
npx pqcheck onboard <domain> One-command setup wizard (scan + init + vendors + checklist)
|
|
111
|
+
npx pqcheck init Interactive scaffold for .github/workflows/cipherwake.yml
|
|
112
|
+
npx pqcheck release-checklist [domain] Pre-release trust checklist (markdown, offline)
|
|
113
|
+
npx pqcheck vendors export <domain> Write cipherwake.vendors.json from observed third-party scripts
|
|
114
|
+
npx pqcheck vendors check <domain> CI gate; exit 4 on new origins not in lockfile
|
|
115
|
+
npx pqcheck vendors sync <domain> Pull dashboard allowlist into lockfile (Starter+, needs API key)
|
|
116
|
+
npx pqcheck watch <domain> Add domain to your watched list (needs CIPHERWAKE_API_KEY)
|
|
50
117
|
```
|
|
51
118
|
|
|
52
119
|
### Multi-domain
|
|
@@ -81,7 +148,7 @@ npx pqcheck --file domains.txt Bulk scan from a newline-separated
|
|
|
81
148
|
### Subcommand-specific flags
|
|
82
149
|
|
|
83
150
|
**`pqcheck deps`:**
|
|
84
|
-
- `--lock` — Also write `
|
|
151
|
+
- `--lock` — Also write `cipherwake-deps.lock` + `.md`
|
|
85
152
|
- `-o <dir>` — Output directory for `--lock` files
|
|
86
153
|
- `--max=<N>` — Max third parties to scan (default 20)
|
|
87
154
|
- `--allowlist <file>` — Exit **3** if any third-party not in allowlist (CI vendor-risk gate)
|
|
@@ -160,13 +227,15 @@ Like SBOM, `package-lock.json`, or `cargo audit` outputs — track quantum expos
|
|
|
160
227
|
```bash
|
|
161
228
|
npx pqcheck lock yourcompany.com
|
|
162
229
|
# Writes:
|
|
163
|
-
#
|
|
164
|
-
#
|
|
230
|
+
# cipherwake.lock — stable JSON manifest
|
|
231
|
+
# cipherwake-report.md — human-readable summary (renders on GitHub)
|
|
165
232
|
```
|
|
166
233
|
|
|
167
234
|
Commit both files. Use `npx pqcheck diff old.lock new.lock` in CI to surface regressions in PR comments.
|
|
168
235
|
|
|
169
|
-
|
|
236
|
+
> **Filename history.** This tool was previously named Quantapact and earlier versions wrote `quantapact.lock` + `quantapact-report.md`. Both names work forever — `pqcheck lock` auto-detects an existing legacy lockfile and overwrites it in place rather than silently creating a second file in your repo. New repos get the new `cipherwake.lock` default. No migration required.
|
|
237
|
+
|
|
238
|
+
Schema documented at [cipherwake.io/schemas/qxm/v1](https://cipherwake.io/methodology/qxm).
|
|
170
239
|
|
|
171
240
|
### Supply-chain dependency scanning
|
|
172
241
|
|
|
@@ -175,41 +244,41 @@ npx pqcheck deps stripe.com
|
|
|
175
244
|
# Output: every third-party origin on stripe.com (analytics, CDN, fonts, etc.) graded for quantum risk
|
|
176
245
|
```
|
|
177
246
|
|
|
178
|
-
Add `--lock` to write `
|
|
247
|
+
Add `--lock` to write `cipherwake-deps.lock` + `.md` for committing or PR comparison. Add `--allowlist file.txt` to gate CI on vendor approval.
|
|
179
248
|
|
|
180
249
|
## Companion surfaces
|
|
181
250
|
|
|
182
|
-
This CLI is one of four ways to consume the [Decryption Blast Radius API](https://
|
|
251
|
+
This CLI is one of four ways to consume the [Decryption Blast Radius API](https://cipherwake.io/api):
|
|
183
252
|
|
|
184
253
|
| Surface | Where |
|
|
185
254
|
|---|---|
|
|
186
255
|
| **CLI** (this package) | `npx pqcheck` |
|
|
187
256
|
| **Browser extension** | Chrome Web Store / Firefox AMO / Edge — toolbar badge per tab + dependency analysis |
|
|
188
|
-
| **GitHub Action** | [`
|
|
189
|
-
| **Slack `/pqcheck`** | [Install on workspace](https://
|
|
190
|
-
| **Web** | [
|
|
257
|
+
| **GitHub Action** | [`cipherwake-io/pqcheck/action@main`](https://github.com/cipherwake-io/pqcheck/tree/main/action) — PR comments, SARIF upload, lockfile generation |
|
|
258
|
+
| **Slack `/pqcheck`** | [Install on workspace](https://cipherwake.io/install-slack) |
|
|
259
|
+
| **Web** | [cipherwake.io](https://cipherwake.io) — share-friendly URLs at `/r/<domain>` |
|
|
191
260
|
|
|
192
261
|
## Public API
|
|
193
262
|
|
|
194
|
-
`pqcheck` is a wrapper around the public
|
|
263
|
+
`pqcheck` is a wrapper around the public Cipherwake API. You can also call the API directly:
|
|
195
264
|
|
|
196
265
|
```bash
|
|
197
|
-
curl -s "https://www.
|
|
266
|
+
curl -s "https://www.cipherwake.io/api/scan?domain=stripe.com" | jq '.grade, .score'
|
|
198
267
|
```
|
|
199
268
|
|
|
200
|
-
Full API reference at [
|
|
269
|
+
Full API reference at [cipherwake.io/api](https://cipherwake.io/api).
|
|
201
270
|
|
|
202
|
-
**Rate limits:** 300 scans per hour per IP, 20 `--fresh` (force-refresh) scans per hour per IP. No API key required. Returns HTTP 429 if exceeded — back off and retry, or [let us know via the feedback form](https://
|
|
271
|
+
**Rate limits:** 300 scans per hour per IP, 20 `--fresh` (force-refresh) scans per hour per IP. No API key required. Returns HTTP 429 if exceeded — back off and retry, or [let us know via the feedback form](https://cipherwake.io/feedback) if you need higher limits (we're prioritizing the API tier based on real demand).
|
|
203
272
|
|
|
204
273
|
## Methodology
|
|
205
274
|
|
|
206
275
|
Decryption Blast Radius scoring methodology is fully open. Component weights, PQC discount math, the "what we DON'T claim" sections, edge cases — all documented:
|
|
207
276
|
|
|
208
|
-
- [Decryption Blast Radius](https://
|
|
209
|
-
- [Score components](https://
|
|
210
|
-
- [QXM lockfile schema](https://
|
|
211
|
-
- [Browser extension methodology](https://
|
|
212
|
-
- [Methodology library](https://
|
|
277
|
+
- [Decryption Blast Radius](https://cipherwake.io/methodology/decryption-blast-radius) — core methodology
|
|
278
|
+
- [Score components](https://cipherwake.io/methodology/score-components) — the 4-bar weighted breakdown + PQC discount
|
|
279
|
+
- [QXM lockfile schema](https://cipherwake.io/methodology/qxm) — committable manifest format
|
|
280
|
+
- [Browser extension methodology](https://cipherwake.io/methodology/browser-extension) — supply-chain HNDL detection logic
|
|
281
|
+
- [Methodology library](https://cipherwake.io/methodology) — full index
|
|
213
282
|
|
|
214
283
|
## Versioning + stability
|
|
215
284
|
|
|
@@ -219,20 +288,20 @@ The CLI follows the same policy — output formats are stable across minor versi
|
|
|
219
288
|
|
|
220
289
|
## Privacy
|
|
221
290
|
|
|
222
|
-
`pqcheck` sends the domain you scan to `
|
|
291
|
+
`pqcheck` sends the domain you scan to `cipherwake.io/api/scan` (so the TLS handshake can be performed from the public internet). No other data is sent — no email, no client-side identifier. The server logs anonymized analytics: domain, hashed IP (for rate limiting), user-agent. We don't track individual users across scans. See [cipherwake.io/privacy](https://cipherwake.io/privacy).
|
|
223
292
|
|
|
224
293
|
## CI integration
|
|
225
294
|
|
|
226
295
|
```yaml
|
|
227
296
|
# .github/workflows/quantum-risk-gate.yml
|
|
228
|
-
- name:
|
|
297
|
+
- name: Cipherwake public-surface gate
|
|
229
298
|
run: npx pqcheck@latest mycompany.com --threshold 7
|
|
230
299
|
```
|
|
231
300
|
|
|
232
|
-
For richer integration (sticky PR comments, SARIF upload to Code Scanning, lockfile diff on regression), use the [GitHub Action](https://github.com/
|
|
301
|
+
For richer integration (sticky PR comments, SARIF upload to Code Scanning, lockfile diff on regression), use the [GitHub Action](https://github.com/cipherwake-io/pqcheck/tree/main/action):
|
|
233
302
|
|
|
234
303
|
```yaml
|
|
235
|
-
- uses:
|
|
304
|
+
- uses: cipherwake-io/pqcheck/action@main
|
|
236
305
|
with:
|
|
237
306
|
domain: mycompany.com
|
|
238
307
|
threshold: '7'
|
|
@@ -249,12 +318,12 @@ For richer integration (sticky PR comments, SARIF upload to Code Scanning, lockf
|
|
|
249
318
|
|
|
250
319
|
## License
|
|
251
320
|
|
|
252
|
-
MIT. © 2026
|
|
321
|
+
MIT. © 2026 Cipherwake.
|
|
253
322
|
|
|
254
323
|
---
|
|
255
324
|
|
|
256
|
-
**Source:** [github.com/
|
|
325
|
+
**Source:** [github.com/cipherwake-io/pqcheck](https://github.com/cipherwake-io/pqcheck)
|
|
257
326
|
|
|
258
327
|
**Changelog:** [CHANGELOG.md](./CHANGELOG.md) for version-by-version release notes.
|
|
259
328
|
|
|
260
|
-
**Issues / feedback:** [
|
|
329
|
+
**Issues / feedback:** [cipherwake.io/feedback](https://cipherwake.io/feedback) or open an issue on the repo.
|