@quantakrypto/core 0.4.2 → 0.4.4
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/LICENSE +201 -0
- package/README.md +38 -10
- package/dist/agent-types.js.map +1 -1
- package/dist/baseline.js.map +1 -1
- package/dist/cache.js.map +1 -1
- package/dist/cbom-merge.d.ts +9 -0
- package/dist/cbom-merge.d.ts.map +1 -0
- package/dist/cbom-merge.js +99 -0
- package/dist/cbom-merge.js.map +1 -0
- package/dist/cbom.js.map +1 -1
- package/dist/changed.js.map +1 -1
- package/dist/codemods/config-toggle.js.map +1 -1
- package/dist/codemods/registry.js.map +1 -1
- package/dist/comments.d.ts +29 -2
- package/dist/comments.d.ts.map +1 -1
- package/dist/comments.js +178 -18
- package/dist/comments.js.map +1 -1
- package/dist/config.js.map +1 -1
- package/dist/cwe.js.map +1 -1
- package/dist/dependencies.d.ts +3 -2
- package/dist/dependencies.d.ts.map +1 -1
- package/dist/dependencies.js +138 -2
- package/dist/dependencies.js.map +1 -1
- package/dist/detect-utils.d.ts +19 -4
- package/dist/detect-utils.d.ts.map +1 -1
- package/dist/detect-utils.js +43 -6
- package/dist/detect-utils.js.map +1 -1
- package/dist/detectors/c.d.ts +4 -2
- package/dist/detectors/c.d.ts.map +1 -1
- package/dist/detectors/c.js +382 -3
- package/dist/detectors/c.js.map +1 -1
- package/dist/detectors/cicd.d.ts +27 -0
- package/dist/detectors/cicd.d.ts.map +1 -0
- package/dist/detectors/cicd.js +116 -0
- package/dist/detectors/cicd.js.map +1 -0
- package/dist/detectors/cloud-kms.d.ts +21 -0
- package/dist/detectors/cloud-kms.d.ts.map +1 -0
- package/dist/detectors/cloud-kms.js +57 -0
- package/dist/detectors/cloud-kms.js.map +1 -0
- package/dist/detectors/cloudformation.d.ts +30 -0
- package/dist/detectors/cloudformation.d.ts.map +1 -0
- package/dist/detectors/cloudformation.js +170 -0
- package/dist/detectors/cloudformation.js.map +1 -0
- package/dist/detectors/csharp.d.ts.map +1 -1
- package/dist/detectors/csharp.js +141 -3
- package/dist/detectors/csharp.js.map +1 -1
- package/dist/detectors/database.d.ts +17 -0
- package/dist/detectors/database.d.ts.map +1 -0
- package/dist/detectors/database.js +60 -0
- package/dist/detectors/database.js.map +1 -0
- package/dist/detectors/dnssec.d.ts +55 -0
- package/dist/detectors/dnssec.d.ts.map +1 -0
- package/dist/detectors/dnssec.js +107 -0
- package/dist/detectors/dnssec.js.map +1 -0
- package/dist/detectors/elixir.d.ts +20 -0
- package/dist/detectors/elixir.d.ts.map +1 -0
- package/dist/detectors/elixir.js +195 -0
- package/dist/detectors/elixir.js.map +1 -0
- package/dist/detectors/go.d.ts +5 -3
- package/dist/detectors/go.d.ts.map +1 -1
- package/dist/detectors/go.js +187 -3
- package/dist/detectors/go.js.map +1 -1
- package/dist/detectors/java.d.ts.map +1 -1
- package/dist/detectors/java.js +169 -4
- package/dist/detectors/java.js.map +1 -1
- package/dist/detectors/jose.d.ts +20 -0
- package/dist/detectors/jose.d.ts.map +1 -0
- package/dist/detectors/jose.js +62 -0
- package/dist/detectors/jose.js.map +1 -0
- package/dist/detectors/jwk.d.ts +25 -0
- package/dist/detectors/jwk.d.ts.map +1 -0
- package/dist/detectors/jwk.js +95 -0
- package/dist/detectors/jwk.js.map +1 -0
- package/dist/detectors/k8s.d.ts +17 -0
- package/dist/detectors/k8s.d.ts.map +1 -0
- package/dist/detectors/k8s.js +85 -0
- package/dist/detectors/k8s.js.map +1 -0
- package/dist/detectors/mesh.d.ts +35 -0
- package/dist/detectors/mesh.d.ts.map +1 -0
- package/dist/detectors/mesh.js +109 -0
- package/dist/detectors/mesh.js.map +1 -0
- package/dist/detectors/messaging.d.ts +16 -0
- package/dist/detectors/messaging.d.ts.map +1 -0
- package/dist/detectors/messaging.js +72 -0
- package/dist/detectors/messaging.js.map +1 -0
- package/dist/detectors/pem.d.ts.map +1 -1
- package/dist/detectors/pem.js +50 -2
- package/dist/detectors/pem.js.map +1 -1
- package/dist/detectors/php.d.ts +24 -0
- package/dist/detectors/php.d.ts.map +1 -0
- package/dist/detectors/php.js +167 -0
- package/dist/detectors/php.js.map +1 -0
- package/dist/detectors/python.d.ts.map +1 -1
- package/dist/detectors/python.js +144 -3
- package/dist/detectors/python.js.map +1 -1
- package/dist/detectors/ruby.d.ts +9 -5
- package/dist/detectors/ruby.d.ts.map +1 -1
- package/dist/detectors/ruby.js +122 -2
- package/dist/detectors/ruby.js.map +1 -1
- package/dist/detectors/rust.d.ts +8 -3
- package/dist/detectors/rust.d.ts.map +1 -1
- package/dist/detectors/rust.js +253 -3
- package/dist/detectors/rust.js.map +1 -1
- package/dist/detectors/secrets.d.ts +21 -0
- package/dist/detectors/secrets.d.ts.map +1 -0
- package/dist/detectors/secrets.js +79 -0
- package/dist/detectors/secrets.js.map +1 -0
- package/dist/detectors/source.d.ts.map +1 -1
- package/dist/detectors/source.js +305 -52
- package/dist/detectors/source.js.map +1 -1
- package/dist/detectors/stateful-hbs.d.ts +22 -0
- package/dist/detectors/stateful-hbs.d.ts.map +1 -0
- package/dist/detectors/stateful-hbs.js +142 -0
- package/dist/detectors/stateful-hbs.js.map +1 -0
- package/dist/detectors/terraform.d.ts +21 -0
- package/dist/detectors/terraform.d.ts.map +1 -0
- package/dist/detectors/terraform.js +123 -0
- package/dist/detectors/terraform.js.map +1 -0
- package/dist/detectors/vpn.d.ts +22 -0
- package/dist/detectors/vpn.d.ts.map +1 -0
- package/dist/detectors/vpn.js +99 -0
- package/dist/detectors/vpn.js.map +1 -0
- package/dist/errors.js.map +1 -1
- package/dist/evidence.d.ts +53 -0
- package/dist/evidence.d.ts.map +1 -0
- package/dist/evidence.js +81 -0
- package/dist/evidence.js.map +1 -0
- package/dist/index.d.ts +9 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -2
- package/dist/index.js.map +1 -1
- package/dist/inventory.d.ts +2 -0
- package/dist/inventory.d.ts.map +1 -1
- package/dist/inventory.js +27 -1
- package/dist/inventory.js.map +1 -1
- package/dist/parallel.js.map +1 -1
- package/dist/patch-policy.js.map +1 -1
- package/dist/policy.d.ts +67 -0
- package/dist/policy.d.ts.map +1 -0
- package/dist/policy.js +115 -0
- package/dist/policy.js.map +1 -0
- package/dist/redact.d.ts.map +1 -1
- package/dist/redact.js +39 -0
- package/dist/redact.js.map +1 -1
- package/dist/registry.d.ts +2 -2
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +34 -2
- package/dist/registry.js.map +1 -1
- package/dist/remediate-pipeline.d.ts +3 -0
- package/dist/remediate-pipeline.d.ts.map +1 -1
- package/dist/remediate-pipeline.js +71 -0
- package/dist/remediate-pipeline.js.map +1 -1
- package/dist/remediate-request.js.map +1 -1
- package/dist/remediation.d.ts +9 -3
- package/dist/remediation.d.ts.map +1 -1
- package/dist/remediation.js +17 -5
- package/dist/remediation.js.map +1 -1
- package/dist/report.d.ts +9 -0
- package/dist/report.d.ts.map +1 -1
- package/dist/report.js +38 -0
- package/dist/report.js.map +1 -1
- package/dist/scan-worker.js.map +1 -1
- package/dist/scan.d.ts.map +1 -1
- package/dist/scan.js +8 -1
- package/dist/scan.js.map +1 -1
- package/dist/severity.js.map +1 -1
- package/dist/standards.d.ts +96 -0
- package/dist/standards.d.ts.map +1 -0
- package/dist/standards.js +107 -0
- package/dist/standards.js.map +1 -0
- package/dist/triage.js.map +1 -1
- package/dist/types.d.ts +2 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/verify.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/dist/walk.js.map +1 -1
- package/dist/worktree.js.map +1 -1
- package/package.json +1 -1
- package/src/cbom-merge.ts +116 -0
- package/src/comments.ts +183 -18
- package/src/dependencies.ts +144 -4
- package/src/detect-utils.ts +47 -6
- package/src/detectors/c.ts +411 -5
- package/src/detectors/cicd.ts +158 -0
- package/src/detectors/cloud-kms.ts +87 -0
- package/src/detectors/cloudformation.ts +215 -0
- package/src/detectors/csharp.ts +154 -3
- package/src/detectors/database.ts +88 -0
- package/src/detectors/dnssec.ts +186 -0
- package/src/detectors/elixir.ts +237 -0
- package/src/detectors/go.ts +209 -6
- package/src/detectors/java.ts +191 -4
- package/src/detectors/jose.ts +94 -0
- package/src/detectors/jwk.ts +128 -0
- package/src/detectors/k8s.ts +112 -0
- package/src/detectors/mesh.ts +154 -0
- package/src/detectors/messaging.ts +98 -0
- package/src/detectors/pem.ts +54 -2
- package/src/detectors/php.ts +225 -0
- package/src/detectors/python.ts +153 -3
- package/src/detectors/ruby.ts +138 -7
- package/src/detectors/rust.ts +282 -7
- package/src/detectors/secrets.ts +114 -0
- package/src/detectors/source.ts +382 -72
- package/src/detectors/stateful-hbs.ts +180 -0
- package/src/detectors/terraform.ts +154 -0
- package/src/detectors/vpn.ts +131 -0
- package/src/evidence.ts +135 -0
- package/src/index.ts +15 -1
- package/src/inventory.ts +31 -1
- package/src/policy.ts +180 -0
- package/src/redact.ts +41 -0
- package/src/registry.ts +34 -2
- package/src/remediate-pipeline.ts +78 -0
- package/src/remediation.ts +23 -8
- package/src/report.ts +48 -2
- package/src/scan.ts +13 -1
- package/src/standards.ts +186 -0
- package/src/types.ts +3 -1
- package/src/version.ts +1 -1
package/src/standards.ts
ADDED
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Single source of truth for the post-quantum standards this tool depends on.
|
|
3
|
+
*
|
|
4
|
+
* The scanner's credibility rests on its recommendations tracking the current
|
|
5
|
+
* NIST / CNSA / IETF state. That tracking used to be ad-hoc — facts were spread
|
|
6
|
+
* across `remediation.ts` with no dates, no citations, and nothing to catch code
|
|
7
|
+
* drifting from the published standards. This module makes the standards facts
|
|
8
|
+
* explicit, dated, and cited, and the companion drift test
|
|
9
|
+
* (`test/standards.test.ts`) fails the build if the runtime constants
|
|
10
|
+
* (`TIER_PARAMS`, `PQC_TRANSITION_NOTE`, `STATEFUL_HBS_NOTE`) fall out of sync
|
|
11
|
+
* with what is recorded here.
|
|
12
|
+
*
|
|
13
|
+
* ## Cadence
|
|
14
|
+
*
|
|
15
|
+
* Re-verify every quarter (see `docs/standards/pqc-standards.md` for the runbook).
|
|
16
|
+
* On each review: check the sources below for changes, update the facts + their
|
|
17
|
+
* `asOf`, and roll `lastReviewed` / `nextReview` forward. `scripts/standards-check.mjs`
|
|
18
|
+
* (advisory, runs in CI) flags when `nextReview` has passed so a review can't be
|
|
19
|
+
* silently skipped. `standardsReviewStatus(now)` is the pure predicate behind it.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
/** A single standards fact with its citation and when it was last verified. */
|
|
23
|
+
export interface StandardsCitation {
|
|
24
|
+
/** One-line statement of the fact. */
|
|
25
|
+
readonly summary: string;
|
|
26
|
+
/** Spec identifier / publication (and URL where stable). */
|
|
27
|
+
readonly source: string;
|
|
28
|
+
/** `YYYY-MM` — when this fact was last verified against its source. */
|
|
29
|
+
readonly asOf: string;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/** The full post-quantum standards snapshot the tool tracks. */
|
|
33
|
+
export interface PqcStandards {
|
|
34
|
+
/** `YYYY-MM-DD` — when the whole snapshot was last reviewed. */
|
|
35
|
+
readonly lastReviewed: string;
|
|
36
|
+
/** `YYYY-MM-DD` — when the next review is due. */
|
|
37
|
+
readonly nextReview: string;
|
|
38
|
+
/** Cadence, in months, between reviews. */
|
|
39
|
+
readonly reviewIntervalMonths: number;
|
|
40
|
+
|
|
41
|
+
/** NIST's finalized PQC FIPS (the recommendation targets). */
|
|
42
|
+
readonly fips: {
|
|
43
|
+
readonly mlKem: StandardsCitation; // FIPS 203
|
|
44
|
+
readonly mlDsa: StandardsCitation; // FIPS 204
|
|
45
|
+
readonly slhDsa: StandardsCitation; // FIPS 205
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* CNSA 2.0 security tiers → the KEM / signature parameter sets. These MUST
|
|
50
|
+
* mirror `remediation.TIER_PARAMS`; the drift test asserts they stay identical.
|
|
51
|
+
*/
|
|
52
|
+
readonly cnsa: {
|
|
53
|
+
readonly category3: { readonly kem: string; readonly signature: string };
|
|
54
|
+
readonly category5: { readonly kem: string; readonly signature: string };
|
|
55
|
+
readonly source: string;
|
|
56
|
+
readonly asOf: string;
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
/** Stateful hash-based signatures (firmware / boot signing). */
|
|
60
|
+
readonly statefulHbs: StandardsCitation; // SP 800-208
|
|
61
|
+
|
|
62
|
+
/** The migration deadline the transition note surfaces. */
|
|
63
|
+
readonly transitionTimeline: {
|
|
64
|
+
/** Year after which classical public-key crypto is deprecated. */
|
|
65
|
+
readonly deprecateAfter: number;
|
|
66
|
+
/** Year after which it is disallowed. */
|
|
67
|
+
readonly disallowAfter: number;
|
|
68
|
+
readonly source: string;
|
|
69
|
+
readonly asOf: string;
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
/** Emerging / backup standards worth tracking beyond the current FIPS. */
|
|
73
|
+
readonly emerging: readonly StandardsCitation[];
|
|
74
|
+
|
|
75
|
+
/** Recommended hybrid key-exchange groups. */
|
|
76
|
+
readonly hybrids: readonly StandardsCitation[];
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* The current snapshot. Update on each quarterly review; the drift test keeps the
|
|
81
|
+
* runtime remediation constants aligned with it.
|
|
82
|
+
*/
|
|
83
|
+
export const PQC_STANDARDS: PqcStandards = {
|
|
84
|
+
lastReviewed: "2026-07-19",
|
|
85
|
+
nextReview: "2026-10-19",
|
|
86
|
+
reviewIntervalMonths: 3,
|
|
87
|
+
|
|
88
|
+
fips: {
|
|
89
|
+
mlKem: {
|
|
90
|
+
summary: "ML-KEM (Kyber) key encapsulation — finalized August 2024.",
|
|
91
|
+
source: "NIST FIPS 203",
|
|
92
|
+
asOf: "2026-07",
|
|
93
|
+
},
|
|
94
|
+
mlDsa: {
|
|
95
|
+
summary: "ML-DSA (Dilithium) lattice signatures — finalized August 2024.",
|
|
96
|
+
source: "NIST FIPS 204",
|
|
97
|
+
asOf: "2026-07",
|
|
98
|
+
},
|
|
99
|
+
slhDsa: {
|
|
100
|
+
summary: "SLH-DSA (SPHINCS+) stateless hash-based signatures — finalized August 2024.",
|
|
101
|
+
source: "NIST FIPS 205",
|
|
102
|
+
asOf: "2026-07",
|
|
103
|
+
},
|
|
104
|
+
},
|
|
105
|
+
|
|
106
|
+
cnsa: {
|
|
107
|
+
category3: { kem: "ML-KEM-768 (FIPS 203)", signature: "ML-DSA-65 (FIPS 204)" },
|
|
108
|
+
category5: { kem: "ML-KEM-1024 (FIPS 203)", signature: "ML-DSA-87 (FIPS 204)" },
|
|
109
|
+
source: "NSA CNSA 2.0 (national-security systems; 2030/2033 migration milestones)",
|
|
110
|
+
asOf: "2026-07",
|
|
111
|
+
},
|
|
112
|
+
|
|
113
|
+
statefulHbs: {
|
|
114
|
+
summary:
|
|
115
|
+
"LMS/HSS and XMSS/XMSSMT stateful hash-based signatures (incl. the SHAKE256 and " +
|
|
116
|
+
"192-bit parameter sets) are approved for firmware/boot signing, but are STATEFUL.",
|
|
117
|
+
source: "NIST SP 800-208",
|
|
118
|
+
asOf: "2026-07",
|
|
119
|
+
},
|
|
120
|
+
|
|
121
|
+
transitionTimeline: {
|
|
122
|
+
deprecateAfter: 2030,
|
|
123
|
+
disallowAfter: 2035,
|
|
124
|
+
source: "NIST IR 8547 (transition to post-quantum cryptography standards)",
|
|
125
|
+
asOf: "2026-07",
|
|
126
|
+
},
|
|
127
|
+
|
|
128
|
+
emerging: [
|
|
129
|
+
{
|
|
130
|
+
summary:
|
|
131
|
+
"HQC — NIST's code-based backup KEM (selected March 2025; draft FIPS expected ~2026), a " +
|
|
132
|
+
"diversity hedge against ML-KEM's lattice assumption.",
|
|
133
|
+
source: "NIST PQC (HQC selection)",
|
|
134
|
+
asOf: "2026-07",
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
summary: "FN-DSA / Falcon — compact lattice signatures.",
|
|
138
|
+
source: "NIST draft FIPS 206",
|
|
139
|
+
asOf: "2026-07",
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
summary: "X-Wing — X25519 + ML-KEM-768 hybrid KEM for HPKE-style encryption.",
|
|
143
|
+
source: "IETF draft-connolly-cfrg-xwing-kem",
|
|
144
|
+
asOf: "2026-07",
|
|
145
|
+
},
|
|
146
|
+
],
|
|
147
|
+
|
|
148
|
+
hybrids: [
|
|
149
|
+
{
|
|
150
|
+
summary: "X25519MLKEM768 — the default TLS 1.3 hybrid key-exchange group.",
|
|
151
|
+
source: "IETF draft-ietf-tls-ecdhe-mlkem",
|
|
152
|
+
asOf: "2026-07",
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
summary: "SecP384r1MLKEM1024 — the Category-5 / CNSA hybrid key-exchange group.",
|
|
156
|
+
source: "IETF draft-ietf-tls-ecdhe-mlkem",
|
|
157
|
+
asOf: "2026-07",
|
|
158
|
+
},
|
|
159
|
+
],
|
|
160
|
+
};
|
|
161
|
+
|
|
162
|
+
/** Result of {@link standardsReviewStatus}. */
|
|
163
|
+
export interface StandardsReviewStatus {
|
|
164
|
+
/** True when `now` is on or after `nextReview` — a review is due. */
|
|
165
|
+
readonly due: boolean;
|
|
166
|
+
/** The `nextReview` date being compared against (`YYYY-MM-DD`). */
|
|
167
|
+
readonly nextReview: string;
|
|
168
|
+
/** Whole days from `now` until `nextReview` (negative when overdue). */
|
|
169
|
+
readonly daysUntil: number;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* Whether a standards review is due as of `now`. Pure (takes `now` explicitly) so
|
|
174
|
+
* it is deterministic in tests; the CI script passes the real clock. Compares on
|
|
175
|
+
* whole UTC days so a same-day run is not spuriously "overdue".
|
|
176
|
+
*/
|
|
177
|
+
export function standardsReviewStatus(
|
|
178
|
+
now: Date,
|
|
179
|
+
standards: PqcStandards = PQC_STANDARDS,
|
|
180
|
+
): StandardsReviewStatus {
|
|
181
|
+
const MS_PER_DAY = 86_400_000;
|
|
182
|
+
const next = Date.parse(`${standards.nextReview}T00:00:00Z`);
|
|
183
|
+
const today = Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate());
|
|
184
|
+
const daysUntil = Math.round((next - today) / MS_PER_DAY);
|
|
185
|
+
return { due: daysUntil <= 0, nextReview: standards.nextReview, daysUntil };
|
|
186
|
+
}
|
package/src/types.ts
CHANGED
|
@@ -95,7 +95,7 @@ export interface Finding {
|
|
|
95
95
|
}
|
|
96
96
|
|
|
97
97
|
/** Package ecosystems the dependency scanner understands. */
|
|
98
|
-
export type DependencyEcosystem = "npm" | "pypi" | "cargo" | "go" | "maven" | "rubygems";
|
|
98
|
+
export type DependencyEcosystem = "npm" | "pypi" | "cargo" | "go" | "maven" | "rubygems" | "nuget";
|
|
99
99
|
|
|
100
100
|
/** A known quantum-vulnerable dependency entry. */
|
|
101
101
|
export interface VulnerableDependency {
|
|
@@ -134,6 +134,8 @@ export type DetectorLanguage =
|
|
|
134
134
|
| "csharp"
|
|
135
135
|
| "rust"
|
|
136
136
|
| "ruby"
|
|
137
|
+
| "php"
|
|
138
|
+
| "elixir"
|
|
137
139
|
| "c"
|
|
138
140
|
| "any";
|
|
139
141
|
|
package/src/version.ts
CHANGED