kxco-post-quantum 1.1.11 → 1.2.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/CHANGELOG.md CHANGED
@@ -1,210 +1,242 @@
1
- # Changelog
2
-
3
- ## 1.1.6 — 2026-05-24
4
-
5
- Maintenance release. No breaking changes.
6
-
7
-
8
-
9
- ## 1.1.5 — 2026-05-24
10
-
11
- Maintenance release. No breaking changes.
12
-
13
-
14
-
15
- ## 1.1.4 — 2026-05-24
16
-
17
- Maintenance release. No breaking changes.
18
-
19
-
20
-
21
- ## 1.1.3 — 2026-05-23
22
-
23
- Maintenance release. No breaking changes.
24
-
25
-
26
- All notable changes to this project will be documented in this file.
27
-
28
- The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
29
- and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
30
-
31
- ## [Unreleased]
32
-
33
- ## [1.1.2] — 2026-05-22
34
-
35
- Documentation correction. No code changes; no behaviour changes; no
36
- cryptographic surface changes vs `1.1.1`.
37
-
38
- ### Fixed
39
- - **AUDIT.md** §1 previously cited a 2024 Cure53 audit of
40
- `@noble/post-quantum`. That citation was incorrect — Cure53's 2023
41
- NDS-01 audit covered `@noble/ciphers`, `@noble/curves`, and
42
- `@noble/hashes` only; the post-quantum package was not in scope. As of
43
- 2026-05-22, upstream `@noble/post-quantum` has only been self-audited
44
- by its maintainer (v0.6.1, April 2026). AUDIT.md §1 has been rewritten
45
- to reflect the actual upstream audit posture. A correction notice is
46
- included at the top of the file. Reviewers who relied on the prior
47
- citation should re-read §1 of AUDIT.md.
48
- - **CHANGELOG.md** 1.0.0 entry similarly stated "audited by Cure53,
49
- 2024" alongside the upstream pin. That sentence has been corrected
50
- in-place in this release; the substance of the 1.0.0 release is
51
- otherwise unchanged.
52
-
53
- ### Why this is a patch, not an advisory
54
- The misstatement was in documentation only. No code path, signature,
55
- key-derivation routine, or wire format depends on the cited audit. The
56
- fix is a documentation rewrite; affected installs upgrade by pulling
57
- 1.1.2. If your due-diligence pack referenced AUDIT.md from 1.0.1
58
- through 1.1.1, please refresh against 1.1.2.
59
-
60
- ## [1.1.1] — 2026-05-21
61
-
62
- Operational hardening release. No source-code changes; this is the first
63
- release published via **npm Trusted Publishing** rather than a long-lived
64
- `NPM_TOKEN`.
65
-
66
- ### Changed
67
- - `.github/workflows/publish.yml` now publishes via npm Trusted Publishing
68
- (OIDC). The `NODE_AUTH_TOKEN` / `NPM_OTP` env vars are removed; the
69
- workflow's `id-token: write` permission is the entire credential.
70
- Registered at https://www.npmjs.com/package/kxco-post-quantum/access
71
- binding `org=JackKXCO`, `repo=kxco-post-quantum`, `workflow=publish.yml`.
72
- - Repo-level `NPM_TOKEN` and `NPM_OTP` secrets removed — no long-lived
73
- credentials remain in the publishing path.
74
-
75
- ### Why this matters
76
- - Every release tarball is now signed by GitHub Actions OIDC against the
77
- exact commit being published, with no human-held secret in the loop.
78
- - No more burning recovery codes per release. The publish workflow now
79
- runs hands-free on every `v*` tag push.
80
-
81
- ## [1.1.0] — 2026-05-21
82
-
83
- Same API. Same byte-for-byte outputs (all 29 pinned vectors still match).
84
- The package now runs in **browsers** as well as Node.
85
-
86
- ### Added
87
- - Isomorphic runtime — every module works identically in modern browsers
88
- (Chromium, Firefox, Safari) and Node, served from CDNs like esm.sh
89
- with zero polyfill burden
90
- - `test/browser-smoke.test.js` runs the public API with `globalThis.Buffer`
91
- removed, asserts plain `Uint8Array` outputs and a clean hybrid-signing
92
- round trip — proves browser compatibility in CI
93
-
94
- ### Changed
95
- - HKDF-SHA-512 now sourced from `@noble/hashes/hkdf` (was `node:crypto`)
96
- - HMAC-SHA-256 now sourced from `@noble/hashes/hmac` (was `node:crypto`)
97
- - SHA-256 for kid fingerprints now sourced from `@noble/hashes/sha256`
98
- (was `node:crypto`)
99
- - Constant-time comparisons are portable byte loops (replaces
100
- `node:crypto.timingSafeEqual`) — identical security property,
101
- runs in browsers
102
- - Functions return `Buffer` on Node (when `globalThis.Buffer` is defined)
103
- and plain `Uint8Array` in browsers. **Backwards compatible** for Node
104
- callers; `Buffer extends Uint8Array` so any code accepting `Uint8Array`
105
- already works.
106
- - `engines.node` bumped to `>=20.19` to match the underlying
107
- `@noble/hashes@2` requirement (Node 18 is past EOL)
108
-
109
- ### Dependencies
110
- - Added `@noble/hashes ^2.2.0` (peer of `@noble/post-quantum`)
111
- - `@noble/post-quantum ^0.2.1` unchanged
112
-
113
- ### Verification
114
- - 9 node tests pass
115
- - 6 browser-smoke tests pass
116
- - 29 pinned vectors still match — no cryptographic surface changes,
117
- bit-for-bit identical to 1.0.3 in Node
118
-
119
- ## [1.0.3] — 2026-05-21
120
-
121
- First release ships with SLSA Level 2 provenance attestation tied to a
122
- public GitHub Actions workflow run. No cryptographic surface changes
123
- vs `1.0.2` — every diff is metadata, types, CI, and hygiene.
124
-
125
- ### Added
126
- - SLSA Level 2 provenance on every published release via GitHub Actions OIDC
127
- (`publishConfig.provenance: true`)
128
- - `.github/workflows/publish.yml` triggered by `v*` tags — runs tests then
129
- `npm publish --provenance --access public`
130
- - `.github/workflows/ci.yml` matrix over Node 18 / 20 / 22 on every push and PR
131
- - Hand-written TypeScript declarations (`.d.ts`) for all six modules; wired
132
- into `exports[*].types` so TypeScript consumers get full typings without
133
- any build step
134
- - `.github/dependabot.yml` — weekly npm + github-actions ecosystem checks
135
- - `sideEffects: false` for tree-shaking
136
- - `funding` field in `package.json`
137
- - Top-level `"types"` field in `package.json` pointing at `./src/index.d.ts`
138
-
139
- ### Changed
140
- - `package.json` `files` allowlist tightened to `["src", "README.md", "LICENSE",
141
- "SECURITY.md", "CHANGELOG.md"]` — locks down what ships to npm
142
- - `package.json` `exports` now declares per-subpath `types` + `import` keys
143
- - `SECURITY.md` rewritten in the standard short-form template with explicit
144
- in-scope / out-of-scope split delegating primitive bugs upstream to
145
- `@noble/post-quantum`
146
- - All third-party actions in workflows pinned by 40-char commit SHA, never
147
- floating tags
148
- - README badge row trimmed to four (`npm`, `license`, `Socket`, `production-live`)
149
- and a 60-second live-verify quickstart added under the title
150
-
151
- ### Security
152
- - No cryptographic code changed in this release — every change is metadata,
153
- types, CI, and documentation. Production behaviour is bit-for-bit identical
154
- to `1.0.2`.
155
-
156
- ## [1.0.2] — 2026-05-21
157
-
158
- ### Changed
159
- - Repository URL on the npm package metadata now points to
160
- `github.com/JackKXCO/kxco-post-quantum`. No code change.
161
-
162
- ## [1.0.1] — 2026-05-21
163
-
164
- ### Added
165
- - `AUDIT.md` — self-attested audit posture with roadmap (external audit
166
- Q3 2026, public bug bounty Q4 2026, FIPS 140-3 CMVP application 2027)
167
- - `test/vectors.json` — 29 deterministic test vectors pinning every primitive
168
- output bit-for-bit
169
- - `test/run-vectors.js` — runner anyone can use to verify reproducibility
170
- - `npm test` runs both the functional tests and vector verification
171
- - `npm run test:vectors` for vector check only
172
-
173
- ### Changed
174
- - `SECURITY.md` sharpened with explicit threat model and pinned upstream
175
- `@noble/post-quantum@0.2.1` integrity hash
176
- - `README.md` "Used in production at" section with file refs to chain.kxco.ai
177
-
178
- No API changes from `1.0.0`.
179
-
180
- ## [1.0.0] — 2026-05-21
181
-
182
- First stable release. Committed public API surface:
183
-
184
- - `mlDsa.keypairFromMaster(master, info—)`, `mlDsa.sign`, `mlDsa.verify`
185
- - `mlKem.keypairFromMaster(master, info—)`, `mlKem.encapsulate`, `mlKem.decapsulate`
186
- - `deriveSeed(master, info, length)`
187
- - `fingerprint(publicKey)`, `kidEquals(a, b)`
188
- - `webhook.envelope`, `webhook.hmacHex`, `webhook.verifyHmac`,
189
- `webhook.pqSign`, `webhook.verifyPq`, `webhook.signDelivery`,
190
- `webhook.verifyDelivery`
191
-
192
- Verified at release: 9/9 functional tests + 29/29 vector checks pass.
193
-
194
- Underlying primitives via `@noble/post-quantum@^0.2.1`. See `AUDIT.md` for
195
- upstream audit posture (no third-party audit of the PQ package; self-audited
196
- by maintainer at v0.6.1, April 2026). ESM-only. Node.js 18+.
197
-
198
- ## [0.1.0] — 2026-05-21
199
-
200
- Initial pre-release.
201
-
202
- [Unreleased]: https://github.com/JackKXCO/kxco-post-quantum/compare/v1.1.2...HEAD
203
- [1.1.2]: https://github.com/JackKXCO/kxco-post-quantum/compare/v1.1.1...v1.1.2
204
- [1.1.1]: https://github.com/JackKXCO/kxco-post-quantum/compare/v1.1.0...v1.1.1
205
- [1.1.0]: https://github.com/JackKXCO/kxco-post-quantum/compare/v1.0.3...v1.1.0
206
- [1.0.3]: https://github.com/JackKXCO/kxco-post-quantum/compare/v1.0.2...v1.0.3
207
- [1.0.2]: https://github.com/JackKXCO/kxco-post-quantum/compare/v1.0.1...v1.0.2
208
- [1.0.1]: https://github.com/JackKXCO/kxco-post-quantum/compare/v1.0.0...v1.0.1
209
- [1.0.0]: https://github.com/JackKXCO/kxco-post-quantum/compare/v0.1.0...v1.0.0
1
+ # Changelog
2
+
3
+ ## 1.2.0 — 2026-07-22
4
+
5
+ Adds SLH-DSA (FIPS 205) and modernises the underlying primitive engine to
6
+ `@noble/post-quantum@0.6.1`. **No breaking changes for consumers** — the
7
+ public API and all previously pinned outputs are byte-for-byte identical.
8
+
9
+ ### Added
10
+ - **`slhDsa` — SLH-DSA-SHA2-192s (NIST FIPS 205)**, exported both from the
11
+ package root and the `kxco-post-quantum/slh-dsa` subpath. Hash-based,
12
+ stateless signatures at Security Category 3 (matching ML-DSA-65), whose
13
+ security rests only on SHA-2 — the conservative hedge alongside the
14
+ lattice-based ML-DSA-65. Deterministic `keypairFromMaster(master, info?)`
15
+ via the same HKDF-SHA-512 derivation, plus `sign` / `verify`. Public key
16
+ 48 bytes, secret key 96 bytes, signature 16224 bytes.
17
+ - Test vectors extended to pin SLH-DSA keypairs and round-trip (39 checks,
18
+ up from 29).
19
+
20
+ ### Changed
21
+ - **`@noble/post-quantum` bumped `^0.2.1` → `^0.6.1`** — the FIPS 203/204/205
22
+ final reference implementation. The engine's public API changed argument
23
+ order for signature `sign`/`verify` and requires `.js` in subpath imports;
24
+ both are absorbed inside this package's wrappers, so no downstream package
25
+ or caller is affected.
26
+ - Description and keywords updated to reflect SLH-DSA / FIPS 205 coverage.
27
+
28
+ ### Verification
29
+ - 11 node tests pass, 7 browser-smoke tests pass, 39 pinned vectors pass.
30
+ - **Compatibility gate:** every ML-DSA-65, ML-KEM-768, HKDF, fingerprint and
31
+ webhook vector pinned under `@noble/post-quantum@0.2.1` still matches
32
+ bit-for-bit under `0.6.1`. Deterministic keys derived from existing KXCO
33
+ master secrets — including Armature L1 identities — are unchanged.
34
+
35
+ ## 1.1.6 — 2026-05-24
36
+
37
+ Maintenance release. No breaking changes.
38
+
39
+
40
+
41
+ ## 1.1.5 — 2026-05-24
42
+
43
+ Maintenance release. No breaking changes.
44
+
45
+
46
+
47
+ ## 1.1.4 — 2026-05-24
48
+
49
+ Maintenance release. No breaking changes.
50
+
51
+
52
+
53
+ ## 1.1.3 — 2026-05-23
54
+
55
+ Maintenance release. No breaking changes.
56
+
57
+
58
+ All notable changes to this project will be documented in this file.
59
+
60
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
61
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
62
+
63
+ ## [Unreleased]
64
+
65
+ ## [1.1.2] — 2026-05-22
66
+
67
+ Documentation correction. No code changes; no behaviour changes; no
68
+ cryptographic surface changes vs `1.1.1`.
69
+
70
+ ### Fixed
71
+ - **AUDIT.md** §1 previously cited a 2024 Cure53 audit of
72
+ `@noble/post-quantum`. That citation was incorrect — Cure53's 2023
73
+ NDS-01 audit covered `@noble/ciphers`, `@noble/curves`, and
74
+ `@noble/hashes` only; the post-quantum package was not in scope. As of
75
+ 2026-05-22, upstream `@noble/post-quantum` has only been self-audited
76
+ by its maintainer (v0.6.1, April 2026). AUDIT.md §1 has been rewritten
77
+ to reflect the actual upstream audit posture. A correction notice is
78
+ included at the top of the file. Reviewers who relied on the prior
79
+ citation should re-read §1 of AUDIT.md.
80
+ - **CHANGELOG.md** 1.0.0 entry similarly stated "audited by Cure53,
81
+ 2024" alongside the upstream pin. That sentence has been corrected
82
+ in-place in this release; the substance of the 1.0.0 release is
83
+ otherwise unchanged.
84
+
85
+ ### Why this is a patch, not an advisory
86
+ The misstatement was in documentation only. No code path, signature,
87
+ key-derivation routine, or wire format depends on the cited audit. The
88
+ fix is a documentation rewrite; affected installs upgrade by pulling
89
+ 1.1.2. If your due-diligence pack referenced AUDIT.md from 1.0.1
90
+ through 1.1.1, please refresh against 1.1.2.
91
+
92
+ ## [1.1.1] — 2026-05-21
93
+
94
+ Operational hardening release. No source-code changes; this is the first
95
+ release published via **npm Trusted Publishing** rather than a long-lived
96
+ `NPM_TOKEN`.
97
+
98
+ ### Changed
99
+ - `.github/workflows/publish.yml` now publishes via npm Trusted Publishing
100
+ (OIDC). The `NODE_AUTH_TOKEN` / `NPM_OTP` env vars are removed; the
101
+ workflow's `id-token: write` permission is the entire credential.
102
+ Registered at https://www.npmjs.com/package/kxco-post-quantum/access
103
+ binding `org=JackKXCO`, `repo=kxco-post-quantum`, `workflow=publish.yml`.
104
+ - Repo-level `NPM_TOKEN` and `NPM_OTP` secrets removed — no long-lived
105
+ credentials remain in the publishing path.
106
+
107
+ ### Why this matters
108
+ - Every release tarball is now signed by GitHub Actions OIDC against the
109
+ exact commit being published, with no human-held secret in the loop.
110
+ - No more burning recovery codes per release. The publish workflow now
111
+ runs hands-free on every `v*` tag push.
112
+
113
+ ## [1.1.0] — 2026-05-21
114
+
115
+ Same API. Same byte-for-byte outputs (all 29 pinned vectors still match).
116
+ The package now runs in **browsers** as well as Node.
117
+
118
+ ### Added
119
+ - Isomorphic runtime — every module works identically in modern browsers
120
+ (Chromium, Firefox, Safari) and Node, served from CDNs like esm.sh
121
+ with zero polyfill burden
122
+ - `test/browser-smoke.test.js` runs the public API with `globalThis.Buffer`
123
+ removed, asserts plain `Uint8Array` outputs and a clean hybrid-signing
124
+ round trip — proves browser compatibility in CI
125
+
126
+ ### Changed
127
+ - HKDF-SHA-512 now sourced from `@noble/hashes/hkdf` (was `node:crypto`)
128
+ - HMAC-SHA-256 now sourced from `@noble/hashes/hmac` (was `node:crypto`)
129
+ - SHA-256 for kid fingerprints now sourced from `@noble/hashes/sha256`
130
+ (was `node:crypto`)
131
+ - Constant-time comparisons are portable byte loops (replaces
132
+ `node:crypto.timingSafeEqual`) — identical security property,
133
+ runs in browsers
134
+ - Functions return `Buffer` on Node (when `globalThis.Buffer` is defined)
135
+ and plain `Uint8Array` in browsers. **Backwards compatible** for Node
136
+ callers; `Buffer extends Uint8Array` so any code accepting `Uint8Array`
137
+ already works.
138
+ - `engines.node` bumped to `>=20.19` to match the underlying
139
+ `@noble/hashes@2` requirement (Node 18 is past EOL)
140
+
141
+ ### Dependencies
142
+ - Added `@noble/hashes ^2.2.0` (peer of `@noble/post-quantum`)
143
+ - `@noble/post-quantum ^0.2.1` unchanged
144
+
145
+ ### Verification
146
+ - 9 node tests pass
147
+ - 6 browser-smoke tests pass
148
+ - 29 pinned vectors still match — no cryptographic surface changes,
149
+ bit-for-bit identical to 1.0.3 in Node
150
+
151
+ ## [1.0.3] — 2026-05-21
152
+
153
+ First release ships with SLSA Level 2 provenance attestation tied to a
154
+ public GitHub Actions workflow run. No cryptographic surface changes
155
+ vs `1.0.2` — every diff is metadata, types, CI, and hygiene.
156
+
157
+ ### Added
158
+ - SLSA Level 2 provenance on every published release via GitHub Actions OIDC
159
+ (`publishConfig.provenance: true`)
160
+ - `.github/workflows/publish.yml` triggered by `v*` tags — runs tests then
161
+ `npm publish --provenance --access public`
162
+ - `.github/workflows/ci.yml` matrix over Node 18 / 20 / 22 on every push and PR
163
+ - Hand-written TypeScript declarations (`.d.ts`) for all six modules; wired
164
+ into `exports[*].types` so TypeScript consumers get full typings without
165
+ any build step
166
+ - `.github/dependabot.yml` — weekly npm + github-actions ecosystem checks
167
+ - `sideEffects: false` for tree-shaking
168
+ - `funding` field in `package.json`
169
+ - Top-level `"types"` field in `package.json` pointing at `./src/index.d.ts`
170
+
171
+ ### Changed
172
+ - `package.json` `files` allowlist tightened to `["src", "README.md", "LICENSE",
173
+ "SECURITY.md", "CHANGELOG.md"]` — locks down what ships to npm
174
+ - `package.json` `exports` now declares per-subpath `types` + `import` keys
175
+ - `SECURITY.md` rewritten in the standard short-form template with explicit
176
+ in-scope / out-of-scope split delegating primitive bugs upstream to
177
+ `@noble/post-quantum`
178
+ - All third-party actions in workflows pinned by 40-char commit SHA, never
179
+ floating tags
180
+ - README badge row trimmed to four (`npm`, `license`, `Socket`, `production-live`)
181
+ and a 60-second live-verify quickstart added under the title
182
+
183
+ ### Security
184
+ - No cryptographic code changed in this release — every change is metadata,
185
+ types, CI, and documentation. Production behaviour is bit-for-bit identical
186
+ to `1.0.2`.
187
+
188
+ ## [1.0.2] — 2026-05-21
189
+
190
+ ### Changed
191
+ - Repository URL on the npm package metadata now points to
192
+ `github.com/JackKXCO/kxco-post-quantum`. No code change.
193
+
194
+ ## [1.0.1] — 2026-05-21
195
+
196
+ ### Added
197
+ - `AUDIT.md` — self-attested audit posture with roadmap (external audit
198
+ Q3 2026, public bug bounty Q4 2026, FIPS 140-3 CMVP application 2027)
199
+ - `test/vectors.json` — 29 deterministic test vectors pinning every primitive
200
+ output bit-for-bit
201
+ - `test/run-vectors.js` — runner anyone can use to verify reproducibility
202
+ - `npm test` runs both the functional tests and vector verification
203
+ - `npm run test:vectors` for vector check only
204
+
205
+ ### Changed
206
+ - `SECURITY.md` sharpened with explicit threat model and pinned upstream
207
+ `@noble/post-quantum@0.2.1` integrity hash
208
+ - `README.md` "Used in production at" section with file refs to chain.kxco.ai
209
+
210
+ No API changes from `1.0.0`.
211
+
212
+ ## [1.0.0] — 2026-05-21
213
+
214
+ First stable release. Committed public API surface:
215
+
216
+ - `mlDsa.keypairFromMaster(master, info—)`, `mlDsa.sign`, `mlDsa.verify`
217
+ - `mlKem.keypairFromMaster(master, info—)`, `mlKem.encapsulate`, `mlKem.decapsulate`
218
+ - `deriveSeed(master, info, length)`
219
+ - `fingerprint(publicKey)`, `kidEquals(a, b)`
220
+ - `webhook.envelope`, `webhook.hmacHex`, `webhook.verifyHmac`,
221
+ `webhook.pqSign`, `webhook.verifyPq`, `webhook.signDelivery`,
222
+ `webhook.verifyDelivery`
223
+
224
+ Verified at release: 9/9 functional tests + 29/29 vector checks pass.
225
+
226
+ Underlying primitives via `@noble/post-quantum@^0.2.1`. See `AUDIT.md` for
227
+ upstream audit posture (no third-party audit of the PQ package; self-audited
228
+ by maintainer at v0.6.1, April 2026). ESM-only. Node.js 18+.
229
+
230
+ ## [0.1.0] — 2026-05-21
231
+
232
+ Initial pre-release.
233
+
234
+ [Unreleased]: https://github.com/JackKXCO/kxco-post-quantum/compare/v1.1.2...HEAD
235
+ [1.1.2]: https://github.com/JackKXCO/kxco-post-quantum/compare/v1.1.1...v1.1.2
236
+ [1.1.1]: https://github.com/JackKXCO/kxco-post-quantum/compare/v1.1.0...v1.1.1
237
+ [1.1.0]: https://github.com/JackKXCO/kxco-post-quantum/compare/v1.0.3...v1.1.0
238
+ [1.0.3]: https://github.com/JackKXCO/kxco-post-quantum/compare/v1.0.2...v1.0.3
239
+ [1.0.2]: https://github.com/JackKXCO/kxco-post-quantum/compare/v1.0.1...v1.0.2
240
+ [1.0.1]: https://github.com/JackKXCO/kxco-post-quantum/compare/v1.0.0...v1.0.1
241
+ [1.0.0]: https://github.com/JackKXCO/kxco-post-quantum/compare/v0.1.0...v1.0.0
210
242
  [0.1.0]: https://github.com/JackKXCO/kxco-post-quantum/releases/tag/v0.1.0