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.
- package/LICENCE-PRODUCT.md +17 -0
- package/README.md +30 -6
- package/package.json +2 -2
package/LICENCE-PRODUCT.md
CHANGED
|
@@ -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
|
|
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
|
-
##
|
|
274
|
+
## Where this fits
|
|
252
275
|
|
|
253
|
-
|
|
254
|
-
|
|
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.
|
|
4
|
-
"description": "ML-DSA-65, ML-KEM-768 and SLH-DSA-SHA2-192s with key fingerprinting.
|
|
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",
|