@noble/post-quantum 0.4.1 → 0.5.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.
Files changed (62) hide show
  1. package/README.md +47 -32
  2. package/_crystals.d.ts +1 -1
  3. package/_crystals.d.ts.map +1 -1
  4. package/_crystals.js +31 -46
  5. package/_crystals.js.map +1 -1
  6. package/hybrid.d.ts +102 -0
  7. package/hybrid.d.ts.map +1 -0
  8. package/hybrid.js +283 -0
  9. package/hybrid.js.map +1 -0
  10. package/index.d.ts +1 -0
  11. package/index.js +4 -4
  12. package/index.js.map +1 -1
  13. package/ml-dsa.d.ts +16 -8
  14. package/ml-dsa.d.ts.map +1 -1
  15. package/ml-dsa.js +126 -68
  16. package/ml-dsa.js.map +1 -1
  17. package/ml-kem.d.ts +1 -14
  18. package/ml-kem.d.ts.map +1 -1
  19. package/ml-kem.js +70 -54
  20. package/ml-kem.js.map +1 -1
  21. package/package.json +39 -85
  22. package/slh-dsa.d.ts +4 -3
  23. package/slh-dsa.d.ts.map +1 -1
  24. package/slh-dsa.js +113 -86
  25. package/slh-dsa.js.map +1 -1
  26. package/src/_crystals.ts +30 -41
  27. package/src/hybrid.ts +372 -0
  28. package/src/index.ts +3 -3
  29. package/src/ml-dsa.ts +125 -39
  30. package/src/ml-kem.ts +49 -46
  31. package/src/slh-dsa.ts +90 -50
  32. package/src/utils.ts +85 -50
  33. package/utils.d.ts +52 -10
  34. package/utils.d.ts.map +1 -1
  35. package/utils.js +54 -60
  36. package/utils.js.map +1 -1
  37. package/esm/_crystals.d.ts +0 -34
  38. package/esm/_crystals.d.ts.map +0 -1
  39. package/esm/_crystals.js +0 -141
  40. package/esm/_crystals.js.map +0 -1
  41. package/esm/index.d.ts +0 -2
  42. package/esm/index.d.ts.map +0 -1
  43. package/esm/index.js +0 -21
  44. package/esm/index.js.map +0 -1
  45. package/esm/ml-dsa.d.ts +0 -25
  46. package/esm/ml-dsa.d.ts.map +0 -1
  47. package/esm/ml-dsa.js +0 -525
  48. package/esm/ml-dsa.js.map +0 -1
  49. package/esm/ml-kem.d.ts +0 -34
  50. package/esm/ml-kem.d.ts.map +0 -1
  51. package/esm/ml-kem.js +0 -306
  52. package/esm/ml-kem.js.map +0 -1
  53. package/esm/package.json +0 -10
  54. package/esm/slh-dsa.d.ts +0 -62
  55. package/esm/slh-dsa.d.ts.map +0 -1
  56. package/esm/slh-dsa.js +0 -596
  57. package/esm/slh-dsa.js.map +0 -1
  58. package/esm/utils.d.ts +0 -40
  59. package/esm/utils.d.ts.map +0 -1
  60. package/esm/utils.js +0 -133
  61. package/esm/utils.js.map +0 -1
  62. package/src/package.json +0 -3
package/esm/ml-dsa.js DELETED
@@ -1,525 +0,0 @@
1
- /**
2
- * ML-DSA: Module Lattice-based Digital Signature Algorithm from
3
- * [FIPS-204](https://csrc.nist.gov/pubs/fips/204/ipd). A.k.a. CRYSTALS-Dilithium.
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
- */
10
- /*! noble-post-quantum - MIT License (c) 2024 Paul Miller (paulmillr.com) */
11
- import { shake256 } from '@noble/hashes/sha3';
12
- import { genCrystals, XOF128, XOF256 } from "./_crystals.js";
13
- import { cleanBytes, EMPTY, ensureBytes, equalBytes, getMessage, getMessagePrehash, randomBytes, splitCoder, vecCoder, } from "./utils.js";
14
- // Constants
15
- const N = 256;
16
- // 2**23 − 2**13 + 1, 23 bits: multiply will be 46. We have enough precision in JS to avoid bigints
17
- const Q = 8380417;
18
- const ROOT_OF_UNITY = 1753;
19
- // f = 256**−1 mod q, pow(256, -1, q) = 8347681 (python3)
20
- const F = 8347681;
21
- const D = 13;
22
- // Dilithium is kinda parametrized over GAMMA2, but everything will break with any other value.
23
- const GAMMA2_1 = Math.floor((Q - 1) / 88) | 0;
24
- const GAMMA2_2 = Math.floor((Q - 1) / 32) | 0;
25
- /** Internal params for different versions of ML-DSA */
26
- // prettier-ignore
27
- export const PARAMS = {
28
- 2: { K: 4, L: 4, D, GAMMA1: 2 ** 17, GAMMA2: GAMMA2_1, TAU: 39, ETA: 2, OMEGA: 80 },
29
- 3: { K: 6, L: 5, D, GAMMA1: 2 ** 19, GAMMA2: GAMMA2_2, TAU: 49, ETA: 4, OMEGA: 55 },
30
- 5: { K: 8, L: 7, D, GAMMA1: 2 ** 19, GAMMA2: GAMMA2_2, TAU: 60, ETA: 2, OMEGA: 75 },
31
- };
32
- const newPoly = (n) => new Int32Array(n);
33
- const { mod, smod, NTT, bitsCoder } = genCrystals({
34
- N,
35
- Q,
36
- F,
37
- ROOT_OF_UNITY,
38
- newPoly,
39
- isKyber: false,
40
- brvBits: 8,
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)),
46
- });
47
- const polyAdd = (a, b) => {
48
- for (let i = 0; i < a.length; i++)
49
- a[i] = mod(a[i] + b[i]);
50
- return a;
51
- };
52
- const polySub = (a, b) => {
53
- for (let i = 0; i < a.length; i++)
54
- a[i] = mod(a[i] - b[i]);
55
- return a;
56
- };
57
- const polyShiftl = (p) => {
58
- for (let i = 0; i < N; i++)
59
- p[i] <<= D;
60
- return p;
61
- };
62
- const polyChknorm = (p, B) => {
63
- // Not very sure about this, but FIPS204 doesn't provide any function for that :(
64
- for (let i = 0; i < N; i++)
65
- if (Math.abs(smod(p[i])) >= B)
66
- return true;
67
- return false;
68
- };
69
- const MultiplyNTTs = (a, b) => {
70
- // NOTE: we don't use montgomery reduction in code, since it requires 64 bit ints,
71
- // which is not available in JS. mod(a[i] * b[i]) is ok, since Q is 23 bit,
72
- // which means a[i] * b[i] is 46 bit, which is safe to use in JS. (number is 53 bits).
73
- // Barrett reduction is slower than mod :(
74
- const c = newPoly(N);
75
- for (let i = 0; i < a.length; i++)
76
- c[i] = mod(a[i] * b[i]);
77
- return c;
78
- };
79
- // Return poly in NTT representation
80
- function RejNTTPoly(xof) {
81
- // Samples a polynomial ∈ Tq.
82
- const r = newPoly(N);
83
- // NOTE: we can represent 3xu24 as 4xu32, but it doesn't improve perf :(
84
- for (let j = 0; j < N;) {
85
- const b = xof();
86
- if (b.length % 3)
87
- throw new Error('RejNTTPoly: unaligned block');
88
- for (let i = 0; j < N && i <= b.length - 3; i += 3) {
89
- const t = (b[i + 0] | (b[i + 1] << 8) | (b[i + 2] << 16)) & 0x7fffff; // 3 bytes
90
- if (t < Q)
91
- r[j++] = t;
92
- }
93
- }
94
- return r;
95
- }
96
- function getDilithium(opts) {
97
- const { K, L, GAMMA1, GAMMA2, TAU, ETA, OMEGA } = opts;
98
- const { CRH_BYTES, TR_BYTES, C_TILDE_BYTES, XOF128, XOF256 } = opts;
99
- if (![2, 4].includes(ETA))
100
- throw new Error('Wrong ETA');
101
- if (![1 << 17, 1 << 19].includes(GAMMA1))
102
- throw new Error('Wrong GAMMA1');
103
- if (![GAMMA2_1, GAMMA2_2].includes(GAMMA2))
104
- throw new Error('Wrong GAMMA2');
105
- const BETA = TAU * ETA;
106
- const decompose = (r) => {
107
- // Decomposes r into (r1, r0) such that r ≡ r1(2γ2) + r0 mod q.
108
- const rPlus = mod(r);
109
- const r0 = smod(rPlus, 2 * GAMMA2) | 0;
110
- if (rPlus - r0 === Q - 1)
111
- return { r1: 0 | 0, r0: (r0 - 1) | 0 };
112
- const r1 = Math.floor((rPlus - r0) / (2 * GAMMA2)) | 0;
113
- return { r1, r0 }; // r1 = HighBits, r0 = LowBits
114
- };
115
- const HighBits = (r) => decompose(r).r1;
116
- const LowBits = (r) => decompose(r).r0;
117
- const MakeHint = (z, r) => {
118
- // Compute hint bit indicating whether adding z to r alters the high bits of r.
119
- // From dilithium code
120
- const res0 = z <= GAMMA2 || z > Q - GAMMA2 || (z === Q - GAMMA2 && r === 0) ? 0 : 1;
121
- // from FIPS204:
122
- // // const r1 = HighBits(r);
123
- // // const v1 = HighBits(r + z);
124
- // // const res1 = +(r1 !== v1);
125
- // But they return different results! However, decompose is same.
126
- // So, either there is a bug in Dilithium ref implementation or in FIPS204.
127
- // For now, lets use dilithium one, so test vectors can be passed.
128
- // See
129
- // https://github.com/GiacomoPope/dilithium-py?tab=readme-ov-file#optimising-decomposition-and-making-hints
130
- return res0;
131
- };
132
- const UseHint = (h, r) => {
133
- // Returns the high bits of r adjusted according to hint h
134
- const m = Math.floor((Q - 1) / (2 * GAMMA2));
135
- const { r1, r0 } = decompose(r);
136
- // 3: if h = 1 and r0 > 0 return (r1 + 1) mod m
137
- // 4: if h = 1 and r0 ≤ 0 return (r1 − 1) mod m
138
- if (h === 1)
139
- return r0 > 0 ? mod(r1 + 1, m) | 0 : mod(r1 - 1, m) | 0;
140
- return r1 | 0;
141
- };
142
- const Power2Round = (r) => {
143
- // Decomposes r into (r1, r0) such that r ≡ r1*(2**d) + r0 mod q.
144
- const rPlus = mod(r);
145
- const r0 = smod(rPlus, 2 ** D) | 0;
146
- return { r1: Math.floor((rPlus - r0) / 2 ** D) | 0, r0 };
147
- };
148
- const hintCoder = {
149
- bytesLen: OMEGA + K,
150
- encode: (h) => {
151
- if (h === false)
152
- throw new Error('hint.encode: hint is false'); // should never happen
153
- const res = new Uint8Array(OMEGA + K);
154
- for (let i = 0, k = 0; i < K; i++) {
155
- for (let j = 0; j < N; j++)
156
- if (h[i][j] !== 0)
157
- res[k++] = j;
158
- res[OMEGA + i] = k;
159
- }
160
- return res;
161
- },
162
- decode: (buf) => {
163
- const h = [];
164
- let k = 0;
165
- for (let i = 0; i < K; i++) {
166
- const hi = newPoly(N);
167
- if (buf[OMEGA + i] < k || buf[OMEGA + i] > OMEGA)
168
- return false;
169
- for (let j = k; j < buf[OMEGA + i]; j++) {
170
- if (j > k && buf[j] <= buf[j - 1])
171
- return false;
172
- hi[buf[j]] = 1;
173
- }
174
- k = buf[OMEGA + i];
175
- h.push(hi);
176
- }
177
- for (let j = k; j < OMEGA; j++)
178
- if (buf[j] !== 0)
179
- return false;
180
- return h;
181
- },
182
- };
183
- const ETACoder = polyCoder(ETA === 2 ? 3 : 4, (i) => ETA - i, (i) => {
184
- if (!(-ETA <= i && i <= ETA))
185
- throw new Error(`malformed key s1/s3 ${i} outside of ETA range [${-ETA}, ${ETA}]`);
186
- return i;
187
- });
188
- const T0Coder = polyCoder(13, (i) => (1 << (D - 1)) - i);
189
- const T1Coder = polyCoder(10);
190
- // Requires smod. Need to fix!
191
- const ZCoder = polyCoder(GAMMA1 === 1 << 17 ? 18 : 20, (i) => smod(GAMMA1 - i));
192
- const W1Coder = polyCoder(GAMMA2 === GAMMA2_1 ? 6 : 4);
193
- const W1Vec = vecCoder(W1Coder, K);
194
- // Main structures
195
- const publicCoder = splitCoder(32, vecCoder(T1Coder, K));
196
- const secretCoder = splitCoder(32, 32, TR_BYTES, vecCoder(ETACoder, L), vecCoder(ETACoder, K), vecCoder(T0Coder, K));
197
- const sigCoder = splitCoder(C_TILDE_BYTES, vecCoder(ZCoder, L), hintCoder);
198
- const CoefFromHalfByte = ETA === 2
199
- ? (n) => (n < 15 ? 2 - (n % 5) : false)
200
- : (n) => (n < 9 ? 4 - n : false);
201
- // Return poly in NTT representation
202
- function RejBoundedPoly(xof) {
203
- // Samples an element a ∈ Rq with coeffcients in [−η, η] computed via rejection sampling from ρ.
204
- const r = newPoly(N);
205
- for (let j = 0; j < N;) {
206
- const b = xof();
207
- for (let i = 0; j < N && i < b.length; i += 1) {
208
- // half byte. Should be superfast with vector instructions. But very slow with js :(
209
- const d1 = CoefFromHalfByte(b[i] & 0x0f);
210
- const d2 = CoefFromHalfByte((b[i] >> 4) & 0x0f);
211
- if (d1 !== false)
212
- r[j++] = d1;
213
- if (j < N && d2 !== false)
214
- r[j++] = d2;
215
- }
216
- }
217
- return r;
218
- }
219
- const SampleInBall = (seed) => {
220
- // Samples a polynomial c ∈ Rq with coeffcients from {−1, 0, 1} and Hamming weight τ
221
- const pre = newPoly(N);
222
- const s = shake256.create({}).update(seed);
223
- const buf = new Uint8Array(shake256.blockLen);
224
- s.xofInto(buf);
225
- const masks = buf.slice(0, 8);
226
- for (let i = N - TAU, pos = 8, maskPos = 0, maskBit = 0; i < N; i++) {
227
- let b = i + 1;
228
- for (; b > i;) {
229
- b = buf[pos++];
230
- if (pos < shake256.blockLen)
231
- continue;
232
- s.xofInto(buf);
233
- pos = 0;
234
- }
235
- pre[i] = pre[b];
236
- pre[b] = 1 - (((masks[maskPos] >> maskBit++) & 1) << 1);
237
- if (maskBit >= 8) {
238
- maskPos++;
239
- maskBit = 0;
240
- }
241
- }
242
- return pre;
243
- };
244
- const polyPowerRound = (p) => {
245
- const res0 = newPoly(N);
246
- const res1 = newPoly(N);
247
- for (let i = 0; i < p.length; i++) {
248
- const { r0, r1 } = Power2Round(p[i]);
249
- res0[i] = r0;
250
- res1[i] = r1;
251
- }
252
- return { r0: res0, r1: res1 };
253
- };
254
- const polyUseHint = (u, h) => {
255
- for (let i = 0; i < N; i++)
256
- u[i] = UseHint(h[i], u[i]);
257
- return u;
258
- };
259
- const polyMakeHint = (a, b) => {
260
- const v = newPoly(N);
261
- let cnt = 0;
262
- for (let i = 0; i < N; i++) {
263
- const h = MakeHint(a[i], b[i]);
264
- v[i] = h;
265
- cnt += h;
266
- }
267
- return { v, cnt };
268
- };
269
- const signRandBytes = 32;
270
- const seedCoder = splitCoder(32, 64, 32);
271
- // API & argument positions are exactly as in FIPS204.
272
- const internal = {
273
- signRandBytes,
274
- keygen: (seed) => {
275
- // H(𝜉||IntegerToBytes(𝑘, 1)||IntegerToBytes(ℓ, 1), 128) 2: ▷ expand seed
276
- const seedDst = new Uint8Array(32 + 2);
277
- const randSeed = seed === undefined;
278
- if (randSeed)
279
- seed = randomBytes(32);
280
- ensureBytes(seed, 32);
281
- seedDst.set(seed);
282
- if (randSeed)
283
- seed.fill(0);
284
- seedDst[32] = K;
285
- seedDst[33] = L;
286
- const [rho, rhoPrime, K_] = seedCoder.decode(shake256(seedDst, { dkLen: seedCoder.bytesLen }));
287
- const xofPrime = XOF256(rhoPrime);
288
- const s1 = [];
289
- for (let i = 0; i < L; i++)
290
- s1.push(RejBoundedPoly(xofPrime.get(i & 0xff, (i >> 8) & 0xff)));
291
- const s2 = [];
292
- for (let i = L; i < L + K; i++)
293
- s2.push(RejBoundedPoly(xofPrime.get(i & 0xff, (i >> 8) & 0xff)));
294
- const s1Hat = s1.map((i) => NTT.encode(i.slice()));
295
- const t0 = [];
296
- const t1 = [];
297
- const xof = XOF128(rho);
298
- const t = newPoly(N);
299
- for (let i = 0; i < K; i++) {
300
- // t ← NTT−1(A*NTT(s1)) + s2
301
- t.fill(0); // don't-reallocate
302
- for (let j = 0; j < L; j++) {
303
- const aij = RejNTTPoly(xof.get(j, i)); // super slow!
304
- polyAdd(t, MultiplyNTTs(aij, s1Hat[j]));
305
- }
306
- NTT.decode(t);
307
- const { r0, r1 } = polyPowerRound(polyAdd(t, s2[i])); // (t1, t0) ← Power2Round(t, d)
308
- t0.push(r0);
309
- t1.push(r1);
310
- }
311
- const publicKey = publicCoder.encode([rho, t1]); // pk ← pkEncode(ρ, t1)
312
- const tr = shake256(publicKey, { dkLen: TR_BYTES }); // tr ← H(BytesToBits(pk), 512)
313
- const secretKey = secretCoder.encode([rho, K_, tr, s1, s2, t0]); // sk ← skEncode(ρ, K,tr, s1, s2, t0)
314
- xof.clean();
315
- xofPrime.clean();
316
- // STATS
317
- // Kyber512: { calls: 4, xofs: 12 }, Kyber768: { calls: 9, xofs: 27 }, Kyber1024: { calls: 16, xofs: 48 }
318
- // DSA44: { calls: 24, xofs: 24 }, DSA65: { calls: 41, xofs: 41 }, DSA87: { calls: 71, xofs: 71 }
319
- cleanBytes(rho, rhoPrime, K_, s1, s2, s1Hat, t, t0, t1, tr, seedDst);
320
- return { publicKey, secretKey };
321
- },
322
- // NOTE: random is optional.
323
- sign: (secretKey, msg, random, externalMu = false) => {
324
- // This part can be pre-cached per secretKey, but there is only minor performance improvement,
325
- // since we re-use a lot of variables to computation.
326
- const [rho, _K, tr, s1, s2, t0] = secretCoder.decode(secretKey); // (ρ, K,tr, s1, s2, t0) ← skDecode(sk)
327
- // Cache matrix to avoid re-compute later
328
- const A = []; // A ← ExpandA(ρ)
329
- const xof = XOF128(rho);
330
- for (let i = 0; i < K; i++) {
331
- const pv = [];
332
- for (let j = 0; j < L; j++)
333
- pv.push(RejNTTPoly(xof.get(j, i)));
334
- A.push(pv);
335
- }
336
- xof.clean();
337
- for (let i = 0; i < L; i++)
338
- NTT.encode(s1[i]); // sˆ1 ← NTT(s1)
339
- for (let i = 0; i < K; i++) {
340
- NTT.encode(s2[i]); // sˆ2 ← NTT(s2)
341
- NTT.encode(t0[i]); // tˆ0 ← NTT(t0)
342
- }
343
- // This part is per msg
344
- const mu = externalMu
345
- ? msg
346
- : shake256.create({ dkLen: CRH_BYTES }).update(tr).update(msg).digest(); // 6: µ ← H(tr||M, 512) ▷ Compute message representative µ
347
- // Compute private random seed
348
- const rnd = random ? random : new Uint8Array(32);
349
- ensureBytes(rnd);
350
- const rhoprime = shake256
351
- .create({ dkLen: CRH_BYTES })
352
- .update(_K)
353
- .update(rnd)
354
- .update(mu)
355
- .digest(); // ρ′← H(K||rnd||µ, 512)
356
- ensureBytes(rhoprime, CRH_BYTES);
357
- const x256 = XOF256(rhoprime, ZCoder.bytesLen);
358
- // Rejection sampling loop
359
- main_loop: for (let kappa = 0;;) {
360
- const y = [];
361
- // y ← ExpandMask(ρ , κ)
362
- for (let i = 0; i < L; i++, kappa++)
363
- y.push(ZCoder.decode(x256.get(kappa & 0xff, kappa >> 8)()));
364
- const z = y.map((i) => NTT.encode(i.slice()));
365
- const w = [];
366
- for (let i = 0; i < K; i++) {
367
- // w ← NTT−1(A ◦ NTT(y))
368
- const wi = newPoly(N);
369
- for (let j = 0; j < L; j++)
370
- polyAdd(wi, MultiplyNTTs(A[i][j], z[j]));
371
- NTT.decode(wi);
372
- w.push(wi);
373
- }
374
- const w1 = w.map((j) => j.map(HighBits)); // w1 ← HighBits(w)
375
- // Commitment hash: c˜ ∈{0, 1 2λ } ← H(µ||w1Encode(w1), 2λ)
376
- const cTilde = shake256
377
- .create({ dkLen: C_TILDE_BYTES })
378
- .update(mu)
379
- .update(W1Vec.encode(w1))
380
- .digest();
381
- // Verifer’s challenge
382
- const cHat = NTT.encode(SampleInBall(cTilde)); // c ← SampleInBall(c˜1); cˆ ← NTT(c)
383
- // ⟨⟨cs1⟩⟩ ← NTT−1(cˆ◦ sˆ1)
384
- const cs1 = s1.map((i) => MultiplyNTTs(i, cHat));
385
- for (let i = 0; i < L; i++) {
386
- polyAdd(NTT.decode(cs1[i]), y[i]); // z ← y + ⟨⟨cs1⟩⟩
387
- if (polyChknorm(cs1[i], GAMMA1 - BETA))
388
- continue main_loop; // ||z||∞ ≥ γ1 − β
389
- }
390
- // cs1 is now z (▷ Signer’s response)
391
- let cnt = 0;
392
- const h = [];
393
- for (let i = 0; i < K; i++) {
394
- const cs2 = NTT.decode(MultiplyNTTs(s2[i], cHat)); // ⟨⟨cs2⟩⟩ ← NTT−1(cˆ◦ sˆ2)
395
- const r0 = polySub(w[i], cs2).map(LowBits); // r0 ← LowBits(w − ⟨⟨cs2⟩⟩)
396
- if (polyChknorm(r0, GAMMA2 - BETA))
397
- continue main_loop; // ||r0||∞ ≥ γ2 − β
398
- const ct0 = NTT.decode(MultiplyNTTs(t0[i], cHat)); // ⟨⟨ct0⟩⟩ ← NTT−1(cˆ◦ tˆ0)
399
- if (polyChknorm(ct0, GAMMA2))
400
- continue main_loop;
401
- polyAdd(r0, ct0);
402
- // ▷ Signer’s hint
403
- const hint = polyMakeHint(r0, w1[i]); // h ← MakeHint(−⟨⟨ct0⟩⟩, w− ⟨⟨cs2⟩⟩ + ⟨⟨ct0⟩⟩)
404
- h.push(hint.v);
405
- cnt += hint.cnt;
406
- }
407
- if (cnt > OMEGA)
408
- continue; // the number of 1’s in h is greater than ω
409
- x256.clean();
410
- const res = sigCoder.encode([cTilde, cs1, h]); // σ ← sigEncode(c˜, z mod±q, h)
411
- // rho, _K, tr is subarray of secretKey, cannot clean.
412
- cleanBytes(cTilde, cs1, h, cHat, w1, w, z, y, rhoprime, mu, s1, s2, t0, ...A);
413
- return res;
414
- }
415
- // @ts-ignore
416
- throw new Error('Unreachable code path reached, report this error');
417
- },
418
- verify: (publicKey, msg, sig, externalMu = false) => {
419
- // ML-DSA.Verify(pk, M, σ): Verifes a signature σ for a message M.
420
- const [rho, t1] = publicCoder.decode(publicKey); // (ρ, t1) ← pkDecode(pk)
421
- const tr = shake256(publicKey, { dkLen: TR_BYTES }); // 6: tr ← H(BytesToBits(pk), 512)
422
- if (sig.length !== sigCoder.bytesLen)
423
- return false; // return false instead of exception
424
- const [cTilde, z, h] = sigCoder.decode(sig); // (c˜, z, h) ← sigDecode(σ), ▷ Signer’s commitment hash c ˜, response z and hint
425
- if (h === false)
426
- return false; // if h = ⊥ then return false
427
- for (let i = 0; i < L; i++)
428
- if (polyChknorm(z[i], GAMMA1 - BETA))
429
- return false;
430
- const mu = externalMu
431
- ? msg
432
- : shake256.create({ dkLen: CRH_BYTES }).update(tr).update(msg).digest(); // 7: µ ← H(tr||M, 512)
433
- // Compute verifer’s challenge from c˜
434
- const c = NTT.encode(SampleInBall(cTilde)); // c ← SampleInBall(c˜1)
435
- const zNtt = z.map((i) => i.slice()); // zNtt = NTT(z)
436
- for (let i = 0; i < L; i++)
437
- NTT.encode(zNtt[i]);
438
- const wTick1 = [];
439
- const xof = XOF128(rho);
440
- for (let i = 0; i < K; i++) {
441
- const ct12d = MultiplyNTTs(NTT.encode(polyShiftl(t1[i])), c); //c * t1 * (2**d)
442
- const Az = newPoly(N); // // A * z
443
- for (let j = 0; j < L; j++) {
444
- const aij = RejNTTPoly(xof.get(j, i)); // A[i][j] inplace
445
- polyAdd(Az, MultiplyNTTs(aij, zNtt[j]));
446
- }
447
- // wApprox = A*z - c*t1 * (2**d)
448
- const wApprox = NTT.decode(polySub(Az, ct12d));
449
- // Reconstruction of signer’s commitment
450
- wTick1.push(polyUseHint(wApprox, h[i])); // w ′ ← UseHint(h, w'approx )
451
- }
452
- xof.clean();
453
- // c˜′← H (µ||w1Encode(w′1), 2λ), Hash it; this should match c˜
454
- const c2 = shake256
455
- .create({ dkLen: C_TILDE_BYTES })
456
- .update(mu)
457
- .update(W1Vec.encode(wTick1))
458
- .digest();
459
- // Additional checks in FIPS-204:
460
- // [[ ||z||∞ < γ1 − β ]] and [[c ˜ = c˜′]] and [[number of 1’s in h is ≤ ω]]
461
- for (const t of h) {
462
- const sum = t.reduce((acc, i) => acc + i, 0);
463
- if (!(sum <= OMEGA))
464
- return false;
465
- }
466
- for (const t of z)
467
- if (polyChknorm(t, GAMMA1 - BETA))
468
- return false;
469
- return equalBytes(cTilde, c2);
470
- },
471
- };
472
- return {
473
- internal,
474
- keygen: internal.keygen,
475
- signRandBytes: internal.signRandBytes,
476
- sign: (secretKey, msg, ctx = EMPTY, random) => {
477
- const M = getMessage(msg, ctx);
478
- const res = internal.sign(secretKey, M, random);
479
- M.fill(0);
480
- return res;
481
- },
482
- verify: (publicKey, msg, sig, ctx = EMPTY) => {
483
- return internal.verify(publicKey, getMessage(msg, ctx), sig);
484
- },
485
- prehash: (hashName) => ({
486
- sign: (secretKey, msg, ctx = EMPTY, random) => {
487
- const M = getMessagePrehash(hashName, msg, ctx);
488
- const res = internal.sign(secretKey, M, random);
489
- M.fill(0);
490
- return res;
491
- },
492
- verify: (publicKey, msg, sig, ctx = EMPTY) => {
493
- return internal.verify(publicKey, getMessagePrehash(hashName, msg, ctx), sig);
494
- },
495
- }),
496
- };
497
- }
498
- /** ML-DSA-44 for 128-bit security level. Not recommended after 2030, as per ASD. */
499
- export const ml_dsa44 = /* @__PURE__ */ getDilithium({
500
- ...PARAMS[2],
501
- CRH_BYTES: 64,
502
- TR_BYTES: 64,
503
- C_TILDE_BYTES: 32,
504
- XOF128,
505
- XOF256,
506
- });
507
- /** ML-DSA-65 for 192-bit security level. Not recommended after 2030, as per ASD. */
508
- export const ml_dsa65 = /* @__PURE__ */ getDilithium({
509
- ...PARAMS[3],
510
- CRH_BYTES: 64,
511
- TR_BYTES: 64,
512
- C_TILDE_BYTES: 48,
513
- XOF128,
514
- XOF256,
515
- });
516
- /** ML-DSA-87 for 256-bit security level. OK after 2030, as per ASD. */
517
- export const ml_dsa87 = /* @__PURE__ */ getDilithium({
518
- ...PARAMS[5],
519
- CRH_BYTES: 64,
520
- TR_BYTES: 64,
521
- C_TILDE_BYTES: 64,
522
- XOF128,
523
- XOF256,
524
- });
525
- //# sourceMappingURL=ml-dsa.js.map
package/esm/ml-dsa.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"ml-dsa.js","sourceRoot":"","sources":["../src/ml-dsa.ts"],"names":[],"mappings":"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"}
package/esm/ml-kem.d.ts DELETED
@@ -1,34 +0,0 @@
1
- /** Key encapsulation mechanism interface */
2
- export type KEM = {
3
- publicKeyLen: number;
4
- msgLen: number;
5
- keygen: (seed?: Uint8Array) => {
6
- publicKey: Uint8Array;
7
- secretKey: Uint8Array;
8
- };
9
- encapsulate: (publicKey: Uint8Array, msg?: Uint8Array) => {
10
- cipherText: Uint8Array;
11
- sharedSecret: Uint8Array;
12
- };
13
- decapsulate: (cipherText: Uint8Array, secretKey: Uint8Array) => Uint8Array;
14
- };
15
- /** FIPS 203: 7. Parameter Sets */
16
- export type KEMParam = {
17
- N: number;
18
- K: number;
19
- Q: number;
20
- ETA1: number;
21
- ETA2: number;
22
- du: number;
23
- dv: number;
24
- RBGstrength: number;
25
- };
26
- /** Internal params of ML-KEM versions */
27
- export declare const PARAMS: Record<string, KEMParam>;
28
- /** ML-KEM-512 for 128-bit security level. Not recommended after 2030, as per ASD. */
29
- export declare const ml_kem512: KEM;
30
- /** ML-KEM-768, for 192-bit security level. Not recommended after 2030, as per ASD. */
31
- export declare const ml_kem768: KEM;
32
- /** ML-KEM-1024 for 256-bit security level. OK after 2030, as per ASD. */
33
- export declare const ml_kem1024: KEM;
34
- //# sourceMappingURL=ml-kem.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ml-kem.d.ts","sourceRoot":"","sources":["../src/ml-kem.ts"],"names":[],"mappings":"AAmCA,4CAA4C;AAC5C,MAAM,MAAM,GAAG,GAAG;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,UAAU,KAAK;QAC7B,SAAS,EAAE,UAAU,CAAC;QACtB,SAAS,EAAE,UAAU,CAAC;KACvB,CAAC;IACF,WAAW,EAAE,CACX,SAAS,EAAE,UAAU,EACrB,GAAG,CAAC,EAAE,UAAU,KACb;QACH,UAAU,EAAE,UAAU,CAAC;QACvB,YAAY,EAAE,UAAU,CAAC;KAC1B,CAAC;IACF,WAAW,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,KAAK,UAAU,CAAC;CAC5E,CAAC;AAgBF,kCAAkC;AAClC,MAAM,MAAM,QAAQ,GAAG;IACrB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AACF,yCAAyC;AAEzC,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAIlC,CAAC;AAwQX,qFAAqF;AACrF,eAAO,MAAM,SAAS,EAAE,GAGtB,CAAC;AAEH,sFAAsF;AACtF,eAAO,MAAM,SAAS,EAAE,GAGtB,CAAC;AAEH,yEAAyE;AACzE,eAAO,MAAM,UAAU,EAAE,GAGvB,CAAC"}