@noble/post-quantum 0.2.0 â 0.3.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 +70 -80
- package/_crystals.d.ts.map +1 -1
- package/_crystals.js +4 -0
- package/_crystals.js.map +1 -1
- package/esm/_crystals.d.ts.map +1 -1
- package/esm/_crystals.js +4 -0
- package/esm/_crystals.js.map +1 -1
- package/esm/index.js +6 -1
- package/esm/index.js.map +1 -1
- package/esm/ml-dsa.d.ts +14 -6
- package/esm/ml-dsa.d.ts.map +1 -1
- package/esm/ml-dsa.js +47 -14
- package/esm/ml-dsa.js.map +1 -1
- package/esm/ml-kem.d.ts +20 -41
- package/esm/ml-kem.d.ts.map +1 -1
- package/esm/ml-kem.js +25 -24
- package/esm/ml-kem.js.map +1 -1
- package/esm/slh-dsa.d.ts +16 -3
- package/esm/slh-dsa.d.ts.map +1 -1
- package/esm/slh-dsa.js +42 -4
- package/esm/slh-dsa.js.map +1 -1
- package/esm/utils.d.ts +7 -3
- package/esm/utils.d.ts.map +1 -1
- package/esm/utils.js +7 -2
- package/esm/utils.js.map +1 -1
- package/index.js +6 -1
- package/index.js.map +1 -1
- package/ml-dsa.d.ts +14 -6
- package/ml-dsa.d.ts.map +1 -1
- package/ml-dsa.js +46 -13
- package/ml-dsa.js.map +1 -1
- package/ml-kem.d.ts +20 -41
- package/ml-kem.d.ts.map +1 -1
- package/ml-kem.js +25 -24
- package/ml-kem.js.map +1 -1
- package/package.json +12 -11
- package/slh-dsa.d.ts +16 -3
- package/slh-dsa.d.ts.map +1 -1
- package/slh-dsa.js +42 -4
- package/slh-dsa.js.map +1 -1
- package/src/_crystals.ts +18 -3
- package/src/index.ts +6 -1
- package/src/ml-dsa.ts +63 -20
- package/src/ml-kem.ts +51 -31
- package/src/slh-dsa.ts +57 -47
- package/src/utils.ts +12 -7
- package/utils.d.ts +7 -3
- package/utils.d.ts.map +1 -1
- package/utils.js +8 -2
- package/utils.js.map +1 -1
package/README.md
CHANGED
@@ -1,19 +1,22 @@
|
|
1
1
|
# noble-post-quantum
|
2
2
|
|
3
|
-
Auditable & minimal JS implementation of public-key
|
3
|
+
Auditable & minimal JS implementation of post-quantum public-key cryptography.
|
4
4
|
|
5
5
|
- ð Auditable
|
6
6
|
- ðŧ Tree-shakeable: unused code is excluded from your builds
|
7
7
|
- ð Reliable: tests ensure correctness
|
8
8
|
- ðĶū ML-KEM & CRYSTALS-Kyber: lattice-based kem from FIPS-203
|
9
9
|
- ð ML-DSA & CRYSTALS-Dilithium: lattice-based signatures from FIPS-204
|
10
|
-
- ð SLH-DSA & SPHINCS+: hash-based signatures from FIPS-205
|
11
|
-
- ðŠķ
|
10
|
+
- ð SLH-DSA & SPHINCS+: hash-based Winternitz signatures from FIPS-205
|
11
|
+
- ðŠķ 37KB (15KB gzipped) for everything with bundled hashes
|
12
12
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
13
|
+
Take a glance at [GitHub Discussions](https://github.com/paulmillr/noble-post-quantum/discussions) for questions and support.
|
14
|
+
|
15
|
+
> [!IMPORTANT]
|
16
|
+
> NIST published [IR 8547](https://nvlpubs.nist.gov/nistpubs/ir/2024/NIST.IR.8547.ipd.pdf),
|
17
|
+
> prohibiting classical cryptography (RSA, DSA, ECDSA, ECDH) after 2035.
|
18
|
+
> Australian ASD does same thing [after 2030](https://www.cyber.gov.au/resources-business-and-government/essential-cyber-security/ism/cyber-security-guidelines/guidelines-cryptography).
|
19
|
+
> Take it into an account while designing a new cryptographic system.
|
17
20
|
|
18
21
|
### This library belongs to _noble_ cryptography
|
19
22
|
|
@@ -36,9 +39,9 @@ and algorithm selection guidance.
|
|
36
39
|
|
37
40
|
> npm install @noble/post-quantum
|
38
41
|
|
42
|
+
> deno add jsr:@noble/post-quantum
|
43
|
+
|
39
44
|
We support all major platforms and runtimes.
|
40
|
-
For [Deno](https://deno.land), ensure to use
|
41
|
-
[npm specifier](https://deno.land/manual@v1.28.0/node/npm_specifiers).
|
42
45
|
For React Native, you may need a
|
43
46
|
[polyfill for getRandomValues](https://github.com/LinusU/react-native-get-random-values).
|
44
47
|
A standalone file
|
@@ -66,22 +69,23 @@ import {
|
|
66
69
|
- [Security](#security)
|
67
70
|
- [Speed](#speed)
|
68
71
|
- [Contributing & testing](#contributing--testing)
|
69
|
-
- [Resources](#resources)
|
70
72
|
- [License](#license)
|
71
73
|
|
72
74
|
### ML-KEM / Kyber shared secrets
|
73
75
|
|
74
76
|
```ts
|
75
77
|
import { ml_kem512, ml_kem768, ml_kem1024 } from '@noble/post-quantum/ml-kem';
|
76
|
-
|
77
|
-
|
78
|
-
|
78
|
+
import { randomBytes } from '@noble/post-quantum/utils';
|
79
|
+
|
80
|
+
// 1. [Alice] generates secret & public keys, then sends publicKey to Bob
|
81
|
+
const seed = randomBytes(64); // seed is optional
|
82
|
+
const aliceKeys = ml_kem768.keygen(seed);
|
79
83
|
|
80
|
-
// [Bob] generates shared secret for Alice publicKey
|
84
|
+
// 2. [Bob] generates shared secret for Alice publicKey
|
81
85
|
// bobShared never leaves [Bob] system and is unknown to other parties
|
82
|
-
const { cipherText, sharedSecret: bobShared } = ml_kem768.encapsulate(
|
86
|
+
const { cipherText, sharedSecret: bobShared } = ml_kem768.encapsulate(aliceKeys.publicKey);
|
83
87
|
|
84
|
-
// Alice gets and decrypts cipherText from Bob
|
88
|
+
// 3. [Alice] gets and decrypts cipherText from Bob
|
85
89
|
const aliceShared = ml_kem768.decapsulate(cipherText, aliceKeys.secretKey);
|
86
90
|
|
87
91
|
// Now, both Alice and Both have same sharedSecret key
|
@@ -101,7 +105,7 @@ There are some concerns with regards to security: see
|
|
101
105
|
[mailing list](https://groups.google.com/a/list.nist.gov/g/pqc-forum/c/W2VOzy0wz_E).
|
102
106
|
Old, incompatible version (Kyber) is not provided. Open an issue if you need it.
|
103
107
|
|
104
|
-
> [!WARNING]
|
108
|
+
> [!WARNING]
|
105
109
|
> Unlike ECDH, KEM doesn't verify whether it was "Bob" who've sent the ciphertext.
|
106
110
|
> Instead of throwing an error when the ciphertext is encrypted by a different pubkey,
|
107
111
|
> `decapsulate` will simply return a different shared secret.
|
@@ -111,11 +115,12 @@ Old, incompatible version (Kyber) is not provided. Open an issue if you need it.
|
|
111
115
|
|
112
116
|
```ts
|
113
117
|
import { ml_dsa44, ml_dsa65, ml_dsa87 } from '@noble/post-quantum/ml-dsa';
|
114
|
-
|
115
|
-
const
|
116
|
-
const
|
117
|
-
const
|
118
|
-
const
|
118
|
+
import { utf8ToBytes, randomBytes } from '@noble/post-quantum/utils';
|
119
|
+
const seed = randomBytes(32); // seed is optional
|
120
|
+
const keys = ml_dsa65.keygen(seed);
|
121
|
+
const msg = utf8ToBytes('hello noble');
|
122
|
+
const sig = ml_dsa65.sign(keys.secretKey, msg);
|
123
|
+
const isValid = ml_dsa65.verify(keys.publicKey, msg, sig);
|
119
124
|
```
|
120
125
|
|
121
126
|
Lattice-based digital signature algorithm, defined in [FIPS-204](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.204.pdf). See
|
@@ -134,19 +139,20 @@ import {
|
|
134
139
|
slh_dsa_shake_192f, slh_dsa_shake_192s,
|
135
140
|
slh_dsa_shake_256f, slh_dsa_shake_256s,
|
136
141
|
} from '@noble/post-quantum/slh-dsa';
|
142
|
+
import { utf8ToBytes } from '@noble/post-quantum/utils';
|
137
143
|
|
138
|
-
const
|
139
|
-
const
|
140
|
-
const
|
141
|
-
const
|
144
|
+
const keys2 = sph.keygen();
|
145
|
+
const msg2 = utf8ToBytes('hello noble');
|
146
|
+
const sig2 = sph.sign(keys2.secretKey, msg2);
|
147
|
+
const isValid2 = sph.verify(keys2.publicKey, msg2, sig2);
|
142
148
|
```
|
143
149
|
|
144
150
|
Hash-based digital signature algorithm, defined in [FIPS-205](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.205.pdf).
|
145
|
-
See [website](https://sphincs.org) and [repo](https://github.com/sphincs/sphincsplus).
|
146
|
-
We implement spec v3.1 with FIPS adjustments. Some wasm libraries use older specs.
|
151
|
+
See [website](https://sphincs.org) and [repo](https://github.com/sphincs/sphincsplus). We implement spec v3.1 with FIPS adjustments.
|
147
152
|
|
148
|
-
|
149
|
-
|
153
|
+
There are many different kinds,
|
154
|
+
but basically `sha2` / `shake` indicate internal hash, `128` / `192` / `256` indicate security level, and `s` /`f` indicate trade-off (Small / Fast).
|
155
|
+
SLH-DSA is slow: see [benchmarks](#speed) for key size & speed.
|
150
156
|
|
151
157
|
### What should I use?
|
152
158
|
|
@@ -157,21 +163,25 @@ We implement spec v3.1 with FIPS adjustments. Some wasm libraries use older spec
|
|
157
163
|
| ML-KEM | Fast | 1.6 - 31KB | 1KB | 1990s | 2020s | Yes |
|
158
164
|
| ML-DSA | Normal | 1.3 - 2.5KB | 2.5 - 4.5KB | 1990s | 2020s | Yes |
|
159
165
|
| SLH-DSA | Slow | 32 - 128B | 17 - 50KB | 1970s | 2020s | Yes |
|
166
|
+
| FN-DSA | Slow | 0.9 - 1.8KB | 0.6 - 1.2KB | 1990s | 2020s | Yes |
|
160
167
|
|
161
|
-
We suggest to use ECC + ML-KEM for key agreement, SLH-DSA for signatures.
|
168
|
+
We suggest to use ECC + ML-KEM for key agreement, ECC + SLH-DSA for signatures.
|
162
169
|
|
163
|
-
ML-KEM and ML-DSA are lattice-based,
|
164
|
-
There's some chance of advancement, which will break this algorithm class.
|
165
|
-
SLH-DSA, while being slow, is built on top of older, conservative primitives.
|
170
|
+
ML-KEM and ML-DSA are lattice-based. SLH-DSA is hash-based, which means it is built on top of older, more conservative primitives. NIST guidance for security levels:
|
166
171
|
|
167
|
-
|
168
|
-
|
172
|
+
- Category 3 (~AES-192): ML-KEM-768, ML-DSA-65, SLH-DSA-[SHA2/shake]-192[s/f]
|
173
|
+
- Category 5 (~AES-256): ML-KEM-1024, ML-DSA-87, SLH-DSA-[SHA2/shake]-256[s/f]
|
174
|
+
|
175
|
+
NIST recommends to use cat-3+, while australian [ASD only allows cat-5 after 2030](https://www.cyber.gov.au/resources-business-and-government/essential-cyber-security/ism/cyber-security-guidelines/guidelines-cryptography).
|
176
|
+
|
177
|
+
For [hashes](https://github.com/paulmillr/noble-hashes), use SHA512 or SHA3-512 (not SHA256); and for [ciphers](https://github.com/paulmillr/noble-ciphers) ensure AES-256 or ChaCha.
|
169
178
|
|
170
179
|
## Security
|
171
180
|
|
172
181
|
The library has not been independently audited yet.
|
173
182
|
|
174
183
|
There is no protection against side-channel attacks.
|
184
|
+
Keep in mind that even hardware versions ML-KEM [are vulnerable](https://eprint.iacr.org/2023/1084).
|
175
185
|
|
176
186
|
If you see anything unusual: investigate and report.
|
177
187
|
|
@@ -180,12 +190,12 @@ If you see anything unusual: investigate and report.
|
|
180
190
|
Noble is the fastest JS implementation of post-quantum algorithms.
|
181
191
|
WASM libraries can be faster.
|
182
192
|
|
183
|
-
| OPs/sec
|
184
|
-
|
|
185
|
-
| ECC ed25519
|
186
|
-
| ML-KEM-768
|
187
|
-
| ML-
|
188
|
-
| SLH-DSA-SHA2-
|
193
|
+
| OPs/sec | Keygen | Signing | Verification | Shared secret |
|
194
|
+
| ----------------- | ------ | ------- | ------------ | ------------- |
|
195
|
+
| ECC x/ed25519 | 10270 | 5110 | 1050 | 1470 |
|
196
|
+
| ML-KEM-768 | 2300 | | | 2000 |
|
197
|
+
| ML-DSA65 | 386 | 120 | 367 | |
|
198
|
+
| SLH-DSA-SHA2-192f | 166 | 6 | 111 | |
|
189
199
|
|
190
200
|
For SLH-DSA, SHAKE slows everything down 8x, and -s versions do another 20-50x slowdown.
|
191
201
|
|
@@ -219,50 +229,30 @@ verify
|
|
219
229
|
ââML-DSA44 x 618 ops/sec @ 1ms/op
|
220
230
|
ââML-DSA65 x 367 ops/sec @ 2ms/op
|
221
231
|
ââML-DSA87 x 220 ops/sec @ 4ms/op
|
222
|
-
|
223
|
-
SLH-DSA
|
224
|
-
keygen
|
225
|
-
ââslh_dsa_sha2_128f x 245 ops/sec @ 4ms/op
|
226
|
-
ââslh_dsa_sha2_192f x 166 ops/sec @ 6ms/op
|
227
|
-
ââslh_dsa_sha2_256f x 64 ops/sec @ 15ms/op
|
228
|
-
ââslh_dsa_shake_128f x 35 ops/sec @ 28ms/op
|
229
|
-
ââslh_dsa_shake_192f x 23 ops/sec @ 41ms/op
|
230
|
-
ââslh_dsa_shake_256f x 9 ops/sec @ 110ms/op
|
231
|
-
ââslh_dsa_sha2_128s x 3 ops/sec @ 257ms/op
|
232
|
-
ââslh_dsa_sha2_192s x 2 ops/sec @ 381ms/op
|
233
|
-
ââslh_dsa_sha2_256s x 3 ops/sec @ 250ms/op
|
234
|
-
sign
|
235
|
-
ââslh_dsa_sha2_128f x 10 ops/sec @ 94ms/op
|
236
|
-
ââslh_dsa_sha2_192f x 6 ops/sec @ 163ms/op
|
237
|
-
ââslh_dsa_sha2_256f x 2 ops/sec @ 338ms/op
|
238
|
-
ââslh_dsa_shake_128f x 1 ops/sec @ 671ms/op
|
239
|
-
ââslh_dsa_shake_192f x 0 ops/sec @ 1088ms/op
|
240
|
-
ââslh_dsa_shake_256f x 0 ops/sec @ 2219ms/op
|
241
|
-
ââslh_dsa_sha2_128s x 0 ops/sec @ 1954ms/op
|
242
|
-
ââslh_dsa_sha2_192s x 0 ops/sec @ 3789ms/op
|
243
|
-
ââslh_dsa_sha2_256s x 0 ops/sec @ 3404ms/op
|
244
|
-
verify
|
245
|
-
ââslh_dsa_sha2_128f x 162 ops/sec @ 6ms/op
|
246
|
-
ââslh_dsa_sha2_192f x 111 ops/sec @ 9ms/op
|
247
|
-
ââslh_dsa_sha2_256f x 105 ops/sec @ 9ms/op
|
248
|
-
ââslh_dsa_shake_128f x 24 ops/sec @ 40ms/op
|
249
|
-
ââslh_dsa_shake_192f x 17 ops/sec @ 58ms/op
|
250
|
-
ââslh_dsa_shake_256f x 16 ops/sec @ 59ms/op
|
251
|
-
ââslh_dsa_sha2_128s x 495 ops/sec @ 2ms/op
|
252
|
-
ââslh_dsa_sha2_192s x 293 ops/sec @ 3ms/op
|
253
|
-
ââslh_dsa_sha2_256s x 220 ops/sec @ 4ms/op
|
254
232
|
```
|
255
233
|
|
234
|
+
SLH-DSA (_shake is 8x slower):
|
235
|
+
|
236
|
+
| | sig size | keygen | sign | verify |
|
237
|
+
|-----------|----------|--------|--------|--------|
|
238
|
+
| sha2_128f | 18088 | 4ms | 90ms | 6ms |
|
239
|
+
| sha2_128s | 7856 | 260ms | 2000ms | 2ms |
|
240
|
+
| sha2_192f | 35664 | 6ms | 160ms | 9ms |
|
241
|
+
| sha2_192s | 16224 | 380ms | 3800ms | 3ms |
|
242
|
+
| sha2_256f | 49856 | 15ms | 340ms | 9ms |
|
243
|
+
| sha2_256s | 29792 | 250ms | 3400ms | 4ms |
|
244
|
+
|
256
245
|
## Contributing & testing
|
257
246
|
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
247
|
+
* `npm install && npm run build && npm test` will build the code and run tests.
|
248
|
+
* `npm run lint` / `npm run format` will run linter / fix linter issues.
|
249
|
+
* `npm run bench` will run benchmarks, which may need their deps first (`npm run bench:install`)
|
250
|
+
* `cd build && npm install && npm run build:release` will build single file
|
262
251
|
|
263
|
-
|
252
|
+
Check out [github.com/paulmillr/guidelines](https://github.com/paulmillr/guidelines)
|
253
|
+
for general coding practices and rules.
|
264
254
|
|
265
|
-
|
255
|
+
See [paulmillr.com/noble](https://paulmillr.com/noble/)
|
266
256
|
for useful resources, articles, documentation and demos
|
267
257
|
related to the library.
|
268
258
|
|
package/_crystals.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"_crystals.d.ts","sourceRoot":"","sources":["src/_crystals.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"_crystals.d.ts","sourceRoot":"","sources":["src/_crystals.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,KAAK,EAAW,MAAM,YAAY,CAAC;AAE3D,MAAM,MAAM,GAAG,GAAG,CAChB,IAAI,EAAE,UAAU,EAChB,QAAQ,CAAC,EAAE,MAAM,KACd;IACH,KAAK,EAAE,MAAM;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,MAAM,UAAU,CAAC;IAChD,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,UAAU,IAAI;IAC9C,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;IACtB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS,UAAU,IAAI,CAAC,CAAC,EAAE,MAAM,KAAK,CAAC,CAAC;AAU/D,eAAO,MAAM,WAAW,GAAI,CAAC,SAAS,UAAU,QACxC,WAAW,CAAC,CAAC,CAAC,KACnB;IACD,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAC5C,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAC7C,QAAQ,EAAE,CAAC,CAAC;IACZ,GAAG,EAAE;QACH,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;QACpB,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;KACrB,CAAC;IACF,SAAS,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,aAAa,CAAC,CAAC,CAAC,CAAC;CA0FtE,CAAC;AAuCF,eAAO,MAAM,MAAM,EAAE,GAA8C,CAAC;AACpE,eAAO,MAAM,MAAM,EAAE,GAA8C,CAAC"}
|
package/_crystals.js
CHANGED
@@ -1,6 +1,10 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
exports.XOF256 = exports.XOF128 = exports.genCrystals = void 0;
|
4
|
+
/**
|
5
|
+
* Methods for lattices on ML-KEM and ML-DSA.
|
6
|
+
* @module
|
7
|
+
*/
|
4
8
|
/*! noble-post-quantum - MIT License (c) 2024 Paul Miller (paulmillr.com) */
|
5
9
|
const sha3_1 = require("@noble/hashes/sha3");
|
6
10
|
const utils_js_1 = require("./utils.js");
|
package/_crystals.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"_crystals.js","sourceRoot":"","sources":["src/_crystals.ts"],"names":[],"mappings":";;;AAAA,4EAA4E;AAC5E,6CAAwD;AAExD,yCAA2D;AAuB3D,kBAAkB;AAClB,SAAS,WAAW,CAAC,CAAS,EAAE,OAAe,CAAC;IAC9C,MAAM,MAAM,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACpD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnD,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AACpC,CAAC;AAEM,MAAM,WAAW,GAAG,
|
1
|
+
{"version":3,"file":"_crystals.js","sourceRoot":"","sources":["src/_crystals.ts"],"names":[],"mappings":"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"}
|
package/esm/_crystals.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"_crystals.d.ts","sourceRoot":"","sources":["../src/_crystals.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"_crystals.d.ts","sourceRoot":"","sources":["../src/_crystals.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,KAAK,EAAW,MAAM,YAAY,CAAC;AAE3D,MAAM,MAAM,GAAG,GAAG,CAChB,IAAI,EAAE,UAAU,EAChB,QAAQ,CAAC,EAAE,MAAM,KACd;IACH,KAAK,EAAE,MAAM;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,MAAM,UAAU,CAAC;IAChD,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,UAAU,IAAI;IAC9C,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;IACtB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS,UAAU,IAAI,CAAC,CAAC,EAAE,MAAM,KAAK,CAAC,CAAC;AAU/D,eAAO,MAAM,WAAW,GAAI,CAAC,SAAS,UAAU,QACxC,WAAW,CAAC,CAAC,CAAC,KACnB;IACD,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAC5C,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAC7C,QAAQ,EAAE,CAAC,CAAC;IACZ,GAAG,EAAE;QACH,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;QACpB,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;KACrB,CAAC;IACF,SAAS,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,aAAa,CAAC,CAAC,CAAC,CAAC;CA0FtE,CAAC;AAuCF,eAAO,MAAM,MAAM,EAAE,GAA8C,CAAC;AACpE,eAAO,MAAM,MAAM,EAAE,GAA8C,CAAC"}
|
package/esm/_crystals.js
CHANGED
package/esm/_crystals.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"_crystals.js","sourceRoot":"","sources":["../src/_crystals.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAExD,OAAO,EAAwB,OAAO,EAAE,MAAM,YAAY,CAAC;AAuB3D,kBAAkB;AAClB,SAAS,WAAW,CAAC,CAAS,EAAE,OAAe,CAAC;IAC9C,MAAM,MAAM,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACpD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnD,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,
|
1
|
+
{"version":3,"file":"_crystals.js","sourceRoot":"","sources":["../src/_crystals.ts"],"names":[],"mappings":"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"}
|
package/esm/index.js
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
-
|
1
|
+
/**
|
2
|
+
* Auditable & minimal JS implementation of post-quantum public-key cryptography.
|
3
|
+
* Check out individual modules.
|
4
|
+
* @module
|
5
|
+
*/
|
6
|
+
throw new Error('root module cannot be imported: import submodules instead. Check out README');
|
2
7
|
export {};
|
3
8
|
//# sourceMappingURL=index.js.map
|
package/esm/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,MAAM,IAAI,KAAK,CAAC,
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,IAAI,KAAK,CAAC,6EAA6E,CAAC,CAAC"}
|
package/esm/ml-dsa.d.ts
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
import { Signer } from './utils.js';
|
2
|
-
|
2
|
+
/** Various lattice params. */
|
3
|
+
export type DSAParam = {
|
3
4
|
K: number;
|
4
5
|
L: number;
|
5
6
|
D: number;
|
@@ -9,9 +10,16 @@ type Param = {
|
|
9
10
|
ETA: number;
|
10
11
|
OMEGA: number;
|
11
12
|
};
|
12
|
-
|
13
|
-
export declare const
|
14
|
-
|
15
|
-
export
|
16
|
-
|
13
|
+
/** Internal params for different versions of ML-DSA */
|
14
|
+
export declare const PARAMS: Record<string, DSAParam>;
|
15
|
+
/** Signer API, containing internal methods */
|
16
|
+
export type SignerWithInternal = Signer & {
|
17
|
+
internal: Signer;
|
18
|
+
};
|
19
|
+
/** ML-DSA-44 for 128-bit security level. As per ASD, not recommended after 2030. */
|
20
|
+
export declare const ml_dsa44: SignerWithInternal;
|
21
|
+
/** ML-DSA-65 for 192-bit security level. As per ASD, not recommended after 2030. */
|
22
|
+
export declare const ml_dsa65: SignerWithInternal;
|
23
|
+
/** ML-DSA-87 for 256-bit security level. As per ASD, OK after 2030. */
|
24
|
+
export declare const ml_dsa87: SignerWithInternal;
|
17
25
|
//# sourceMappingURL=ml-dsa.d.ts.map
|
package/esm/ml-dsa.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ml-dsa.d.ts","sourceRoot":"","sources":["../src/ml-dsa.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"ml-dsa.d.ts","sourceRoot":"","sources":["../src/ml-dsa.ts"],"names":[],"mappings":"AAYA,OAAO,EAEL,MAAM,EAQP,MAAM,YAAY,CAAC;AAgBpB,8BAA8B;AAC9B,MAAM,MAAM,QAAQ,GAAG;IACrB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AACF,wDAAwD;AAExD,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAIlC,CAAC;AAydX,8CAA8C;AAC9C,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAE/D,oFAAoF;AACpF,eAAO,MAAM,QAAQ,EAAE,kBAOrB,CAAC;AAEH,oFAAoF;AACpF,eAAO,MAAM,QAAQ,EAAE,kBAOrB,CAAC;AAEH,uEAAuE;AACvE,eAAO,MAAM,QAAQ,EAAE,kBAOrB,CAAC"}
|
package/esm/ml-dsa.js
CHANGED
@@ -1,14 +1,16 @@
|
|
1
|
+
/**
|
2
|
+
* Module Lattice-based Digital Signature Algorithm (ML-DSA). A.k.a. CRYSTALS-Dilithium.
|
3
|
+
* FIPS-204 is implemented.
|
4
|
+
*
|
5
|
+
* Has similar internals to ML-KEM, but their keys and params are different.
|
6
|
+
* Check out [official site](https://www.pq-crystals.org/dilithium/index.shtml),
|
7
|
+
* [repo](https://github.com/pq-crystals/dilithium).
|
8
|
+
* @module
|
9
|
+
*/
|
1
10
|
/*! noble-post-quantum - MIT License (c) 2024 Paul Miller (paulmillr.com) */
|
2
11
|
import { shake256 } from '@noble/hashes/sha3';
|
3
12
|
import { genCrystals, XOF128, XOF256 } from './_crystals.js';
|
4
|
-
import { cleanBytes, ensureBytes, equalBytes, randomBytes, splitCoder, vecCoder, } from './utils.js';
|
5
|
-
/*
|
6
|
-
Lattice-based digital signature algorithm. See
|
7
|
-
[official site](https://www.pq-crystals.org/dilithium/index.shtml),
|
8
|
-
[repo](https://github.com/pq-crystals/dilithium).
|
9
|
-
Dilithium has similar internals to Kyber, but their keys and params are different.
|
10
|
-
|
11
|
-
*/
|
13
|
+
import { cleanBytes, ensureBytes, equalBytes, randomBytes, splitCoder, vecCoder, concatBytes, } from './utils.js';
|
12
14
|
// Constants
|
13
15
|
const N = 256;
|
14
16
|
// 2**23 â 2**13 + 1, 23 bits: multiply will be 46. We have enough precision in JS to avoid bigints
|
@@ -20,6 +22,7 @@ const D = 13;
|
|
20
22
|
// Dilithium is kinda parametrized over GAMMA2, but everything will break with any other value.
|
21
23
|
const GAMMA2_1 = Math.floor((Q - 1) / 88) | 0;
|
22
24
|
const GAMMA2_2 = Math.floor((Q - 1) / 32) | 0;
|
25
|
+
/** Internal params for different versions of ML-DSA */
|
23
26
|
// prettier-ignore
|
24
27
|
export const PARAMS = {
|
25
28
|
2: { K: 4, L: 4, D, GAMMA1: 2 ** 17, GAMMA2: GAMMA2_1, TAU: 39, ETA: 2, OMEGA: 80 },
|
@@ -36,9 +39,10 @@ const { mod, smod, NTT, bitsCoder } = genCrystals({
|
|
36
39
|
isKyber: false,
|
37
40
|
brvBits: 8,
|
38
41
|
});
|
39
|
-
const
|
40
|
-
|
41
|
-
|
42
|
+
const id = (n) => n;
|
43
|
+
const polyCoder = (d, compress = id, verify = id) => bitsCoder(d, {
|
44
|
+
encode: (i) => compress(verify(i)),
|
45
|
+
decode: (i) => verify(compress(i)),
|
42
46
|
});
|
43
47
|
const polyAdd = (a, b) => {
|
44
48
|
for (let i = 0; i < a.length; i++)
|
@@ -89,6 +93,7 @@ function RejNTTPoly(xof) {
|
|
89
93
|
}
|
90
94
|
return r;
|
91
95
|
}
|
96
|
+
const EMPTY = new Uint8Array(0);
|
92
97
|
function getDilithium(opts) {
|
93
98
|
const { K, L, GAMMA1, GAMMA2, TAU, ETA, OMEGA } = opts;
|
94
99
|
const { CRH_BYTES, TR_BYTES, C_TILDE_BYTES, XOF128, XOF256 } = opts;
|
@@ -176,7 +181,11 @@ function getDilithium(opts) {
|
|
176
181
|
return h;
|
177
182
|
},
|
178
183
|
};
|
179
|
-
const ETACoder = polyCoder(ETA === 2 ? 3 : 4, (i) => ETA - i)
|
184
|
+
const ETACoder = polyCoder(ETA === 2 ? 3 : 4, (i) => ETA - i, (i) => {
|
185
|
+
if (!(-ETA <= i && i <= ETA))
|
186
|
+
throw new Error(`malformed key s1/s3 ${i} outside of ETA range [${-ETA}, ${ETA}]`);
|
187
|
+
return i;
|
188
|
+
});
|
180
189
|
const T0Coder = polyCoder(13, (i) => (1 << (D - 1)) - i);
|
181
190
|
const T1Coder = polyCoder(10);
|
182
191
|
// Requires smod. Need to fix!
|
@@ -261,7 +270,7 @@ function getDilithium(opts) {
|
|
261
270
|
const signRandBytes = 32;
|
262
271
|
const seedCoder = splitCoder(32, 64, 32);
|
263
272
|
// API & argument positions are exactly as in FIPS204.
|
264
|
-
|
273
|
+
const internal = {
|
265
274
|
signRandBytes,
|
266
275
|
keygen: (seed = randomBytes(32)) => {
|
267
276
|
// H(ð||IntegerToBytes(ð, 1)||IntegerToBytes(â, 1), 128) 2: â· expand seed
|
@@ -451,8 +460,30 @@ function getDilithium(opts) {
|
|
451
460
|
return equalBytes(cTilde, c2);
|
452
461
|
},
|
453
462
|
};
|
463
|
+
const getMessage = (msg, ctx = EMPTY) => {
|
464
|
+
ensureBytes(msg);
|
465
|
+
ensureBytes(ctx);
|
466
|
+
if (ctx.length > 255)
|
467
|
+
throw new Error('context should be less than 255 bytes');
|
468
|
+
return concatBytes(new Uint8Array([0, ctx.length]), ctx, msg);
|
469
|
+
};
|
470
|
+
// TODO: no hash-dsa vectors for now, so we don't implement it yet
|
471
|
+
return {
|
472
|
+
internal,
|
473
|
+
keygen: internal.keygen,
|
474
|
+
signRandBytes: internal.signRandBytes,
|
475
|
+
sign: (secretKey, msg, ctx = EMPTY, random) => {
|
476
|
+
const M = getMessage(msg, ctx);
|
477
|
+
const res = internal.sign(secretKey, M, random);
|
478
|
+
M.fill(0);
|
479
|
+
return res;
|
480
|
+
},
|
481
|
+
verify: (publicKey, msg, sig, ctx = EMPTY) => {
|
482
|
+
return internal.verify(publicKey, getMessage(msg, ctx), sig);
|
483
|
+
},
|
484
|
+
};
|
454
485
|
}
|
455
|
-
|
486
|
+
/** ML-DSA-44 for 128-bit security level. As per ASD, not recommended after 2030. */
|
456
487
|
export const ml_dsa44 = /* @__PURE__ */ getDilithium({
|
457
488
|
...PARAMS[2],
|
458
489
|
CRH_BYTES: 64,
|
@@ -461,6 +492,7 @@ export const ml_dsa44 = /* @__PURE__ */ getDilithium({
|
|
461
492
|
XOF128,
|
462
493
|
XOF256,
|
463
494
|
});
|
495
|
+
/** ML-DSA-65 for 192-bit security level. As per ASD, not recommended after 2030. */
|
464
496
|
export const ml_dsa65 = /* @__PURE__ */ getDilithium({
|
465
497
|
...PARAMS[3],
|
466
498
|
CRH_BYTES: 64,
|
@@ -469,6 +501,7 @@ export const ml_dsa65 = /* @__PURE__ */ getDilithium({
|
|
469
501
|
XOF128,
|
470
502
|
XOF256,
|
471
503
|
});
|
504
|
+
/** ML-DSA-87 for 256-bit security level. As per ASD, OK after 2030. */
|
472
505
|
export const ml_dsa87 = /* @__PURE__ */ getDilithium({
|
473
506
|
...PARAMS[5],
|
474
507
|
CRH_BYTES: 64,
|