kxco-post-quantum 1.6.0 → 1.6.1

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.
@@ -53,6 +53,20 @@ See [`SALES-SKU.md`](https://github.com/KnightsbridgeAIQ/kxco-pq-network/blob/ma
53
53
 
54
54
  Writes to the hosted relay require a licence, and always did in substance — this is now enforced in the client rather than only at the server, so a misconfigured service fails at boot instead of at a customer's first transaction.
55
55
 
56
+ ### Why the chain is permissioned
57
+
58
+ Because the question a regulated institution has to answer is not "is this
59
+ decentralised" but **"who approved this, and can you prove it?"**
60
+
61
+ On Armature that has a name attached. Four known validators, screened and
62
+ contractually bound, in a jurisdiction, with a legal entity behind them. A
63
+ permissionless validator set cannot answer it — which is also why it cannot
64
+ satisfy a sanctions obligation, and why an institution's records end up sharing
65
+ permanent state with whatever else anyone chose to write.
66
+
67
+ A known counterparty is the product, not a compromise on one. See
68
+ [`ACCOUNTABILITY.md`](https://github.com/KnightsbridgeAIQ/kxco-chain-live/blob/main/docs/ACCOUNTABILITY.md).
69
+
56
70
  ---
57
71
 
58
72
  ## Trademark
@@ -72,11 +86,14 @@ The cryptography is NIST-standardised and the conformance is published, pinned a
72
86
  | | |
73
87
  |---|---|
74
88
  | Algorithms | ML-DSA-65 (FIPS 204), ML-KEM-768 (FIPS 203), SLH-DSA (FIPS 205) |
89
+ | Category 5 | **ML-DSA-87 and ML-KEM-1024 are shipped** — the parameter sets CNSA 2.0 specifies. Available today via `mlDsa87` / `mlKem1024`, ACVP-checked like every other set. Compliance is a property of a deployment, not of a library, so we state the capability and leave the claim to the deployment |
75
90
  | Backend | OpenSSL 3.5 where the runtime provides it, `@noble/post-quantum` elsewhere. Identical on the wire, checked in both directions |
76
91
  | Conformance | 2,103 NIST ACVP vectors across FIPS 203, 204 and 205. Vectors pinned by digest |
77
92
  | Interoperability | 225 checks against OpenSSL 3.5, liboqs, Bouncy Castle and dilithium-py/kyber-py |
78
93
  | Supply chain | SLSA provenance attestation on every release; CycloneDX SBOM; reproducible build |
79
94
  | Evidence bundle | `npm run evidence` regenerates all of it from source, on your machine |
95
+ | On-chain verification | Armature L1 verifies ML-DSA-65 **in consensus** — `MLDSA65VerifyPrecompiledContract` at `0x0b`, executed by every validator, ~50,000 gas |
96
+ | Accountability | Four **named** validators under QBFT proof-of-authority. Every block has an identified proposer and every write an accountable operator |
80
97
 
81
98
  **You do not have to take any of it on our word.** Every figure above comes from a command you can run yourself against the same commit, and the vectors are NIST's, not ours. A customer may re-run them at any time without asking us and without telling us. If your result differs from ours we want to know: `john@knightsbridgelaw.com`, acknowledged within 2 business days.
82
99
 
package/README.md CHANGED
@@ -11,9 +11,32 @@ ML-DSA-65 (FIPS 204) and SLH-DSA-SHA2-192s (FIPS 205) signatures, ML-KEM-768 (FI
11
11
 
12
12
  **On Node 24 and later the primitives run in OpenSSL 3.5**, not in JavaScript. Older Node and browsers use [`@noble/post-quantum`](https://github.com/paulmillr/noble-post-quantum). The two are interchangeable on the wire, which is checked rather than assumed: the interoperability matrix runs in full against both, and every report records which one produced it.
13
13
 
14
+ **For an independent assessor.** Every claim below is checkable without asking
15
+ us, and the machine-readable bundle behind them is a permanent unauthenticated
16
+ URL, not an expiring CI artifact:
17
+
18
+ ```bash
19
+ # the full evidence bundle for the current release
20
+ curl -sLO https://github.com/KnightsbridgeAIQ/kxco-post-quantum/releases/latest/download/evidence-node24.x.zip
21
+
22
+ # or just the manifest: every file digest, and which backend produced the results
23
+ curl -sL https://github.com/KnightsbridgeAIQ/kxco-post-quantum/releases/latest/download/manifest-node24.x.json
24
+
25
+ # licence and provenance, straight from the registry
26
+ npm view kxco-post-quantum license # Apache-2.0
27
+ npm audit signatures --json # assert invalid:0 and missing:0
28
+ ```
29
+
30
+ Facts that are commonly recorded wrong for this package, with the one-line
31
+ check for each: the licence is **Apache-2.0**, not commercial; the SLH-DSA
32
+ parameter set is **SLH-DSA-SHA2-192s**, a real FIPS 205 name, not
33
+ `SLH-DSA-128s`; ML-DSA-65 and ML-KEM-768 are **NIST Category 3**, and
34
+ ML-DSA-87 and ML-KEM-1024, also shipped, are Category 5; the implementation
35
+ languages are **JavaScript and C** (OpenSSL 3.5 on Node 24+).
36
+
14
37
  **Evidence, not adjectives:**
15
38
 
16
- - [CONFORMANCE.md](./CONFORMANCE.md): NIST ACVP vectors for FIPS 203/204/205 (2,103 tests, 0 failed), and a cross-implementation interop matrix against liboqs, Bouncy Castle and two pure-Python implementations (225 checks, 0 failed, both directions, with negative controls), run against both backends. Reproducible: `npm run conformance:acvp`, `npm run conformance:interop`.
39
+ - [CONFORMANCE.md](./CONFORMANCE.md): NIST ACVP vectors for FIPS 203/204/205: **2,103 vectors, 1,793 passed, 0 failed, 310 skipped**, where every skip is this library refusing a pre-hash weaker than the parameter set and is listed individually with its reason. CONFORMANCE.md says a skip is not a pass, so the headline says so too. Of those, **1,479 vectors are in the downloadable evidence bundle**; the remaining 624 are SLH-DSA signature generation, which signs in seconds per operation and so is reproduced on demand with `node conformance/run-acvp.mjs --set SLH-DSA-sigGen-FIPS205` rather than shipped. The bundle names that gap rather than leaving it to be noticed. Plus a cross-implementation interop matrix against liboqs, Bouncy Castle and two pure-Python implementations (225 checks, 0 failed, both directions, with negative controls), run against both backends. Reproducible: `npm run conformance:acvp`, `npm run conformance:interop`.
17
40
  - [BENCHMARKS.md](./BENCHMARKS.md): per-algorithm latency at p95/p99 on both backends and on x86-64 and arm64, plus memory. Two figures worth designing around: ML-DSA signing keeps a rejection-sampling tail on either backend (5.1x median-to-p99 in JavaScript, 3.5x on OpenSSL), and SLH-DSA-SHA2-192s signs in seconds rather than milliseconds (4.3 s and 1.7 s).
18
41
  - [THREAT-MODEL.md](./THREAT-MODEL.md): what this defends against and what it does not. Read the side-channel section before deciding where a signing key lives.
19
42
  - [MIGRATION.md](./MIGRATION.md): moving an RSA or ECDSA system across, and moving between versions of this package.
@@ -248,13 +271,14 @@ Low-level helpers for the KXCO hybrid webhook pattern: `envelope`, `hmacHex`, `v
248
271
 
249
272
  ---
250
273
 
251
- ## What this does NOT do
274
+ ## Where this fits
252
275
 
253
- - No identity credentials or verifiable claims (those are in `kxco-pq-sdk`)
254
- - No relay, transport, or network layer
255
- - No key storage or KMS integration
276
+ This is the primitive layer, and it stays that: keys, signatures, encapsulation
277
+ and fingerprints, with nothing else in the way. Everything above it builds here.
256
278
 
257
- ---
279
+ - [`kxco-pq-sdk`](https://www.npmjs.com/package/kxco-pq-sdk) for identity credentials and verifiable claims
280
+ - [`kxco-pq-chain`](https://www.npmjs.com/package/kxco-pq-chain) to put a signature on Armature L1, where the chain verifies it in consensus
281
+ - [`kxco-pq-hsm`](https://www.npmjs.com/package/kxco-pq-hsm) to hold the key in hardware
258
282
 
259
283
  ## Part of the KXCO stack
260
284
 
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "kxco-post-quantum",
3
- "version": "1.6.0",
4
- "description": "ML-DSA-65, ML-KEM-768 and SLH-DSA-SHA2-192s with key fingerprinting. Runs in OpenSSL 3.5 on Node 24+, JavaScript elsewhere. 2,103 NIST ACVP vectors and 225 cross-implementation interop checks, 0 failed. Reproducible builds, SLSA provenance, published SBOM. The base layer for all kxco-pq-* packages.",
3
+ "version": "1.6.1",
4
+ "description": "ML-DSA-65, ML-KEM-768 and SLH-DSA-SHA2-192s with key fingerprinting. OpenSSL 3.5 primitives on Node 24+, JavaScript elsewhere. 2,103 NIST ACVP vectors and 225 cross-implementation interop checks, 0 failed. Reproducible builds and SLSA provenance.",
5
5
  "keywords": [
6
6
  "post-quantum",
7
7
  "pqc",