@noble/post-quantum 0.4.0 → 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.
- package/README.md +65 -64
- package/_crystals.d.ts +2 -2
- package/_crystals.d.ts.map +1 -1
- package/_crystals.js +31 -46
- package/_crystals.js.map +1 -1
- package/hybrid.d.ts +102 -0
- package/hybrid.d.ts.map +1 -0
- package/hybrid.js +283 -0
- package/hybrid.js.map +1 -0
- package/index.d.ts +1 -0
- package/index.js +4 -4
- package/index.js.map +1 -1
- package/ml-dsa.d.ts +16 -8
- package/ml-dsa.d.ts.map +1 -1
- package/ml-dsa.js +130 -66
- package/ml-dsa.js.map +1 -1
- package/ml-kem.d.ts +1 -14
- package/ml-kem.d.ts.map +1 -1
- package/ml-kem.js +70 -53
- package/ml-kem.js.map +1 -1
- package/package.json +39 -62
- package/slh-dsa.d.ts +5 -4
- package/slh-dsa.d.ts.map +1 -1
- package/slh-dsa.js +114 -86
- package/slh-dsa.js.map +1 -1
- package/src/_crystals.ts +30 -41
- package/src/hybrid.ts +372 -0
- package/src/index.ts +3 -3
- package/src/ml-dsa.ts +131 -41
- package/src/ml-kem.ts +51 -47
- package/src/slh-dsa.ts +92 -51
- package/src/utils.ts +86 -52
- package/utils.d.ts +47 -11
- package/utils.d.ts.map +1 -1
- package/utils.js +54 -62
- package/utils.js.map +1 -1
- package/esm/_crystals.d.ts +0 -34
- package/esm/_crystals.d.ts.map +0 -1
- package/esm/_crystals.js +0 -141
- package/esm/_crystals.js.map +0 -1
- package/esm/index.d.ts +0 -2
- package/esm/index.d.ts.map +0 -1
- package/esm/index.js +0 -21
- package/esm/index.js.map +0 -1
- package/esm/ml-dsa.d.ts +0 -25
- package/esm/ml-dsa.d.ts.map +0 -1
- package/esm/ml-dsa.js +0 -519
- package/esm/ml-dsa.js.map +0 -1
- package/esm/ml-kem.d.ts +0 -34
- package/esm/ml-kem.d.ts.map +0 -1
- package/esm/ml-kem.js +0 -305
- package/esm/ml-kem.js.map +0 -1
- package/esm/package.json +0 -10
- package/esm/slh-dsa.d.ts +0 -62
- package/esm/slh-dsa.d.ts.map +0 -1
- package/esm/slh-dsa.js +0 -595
- package/esm/slh-dsa.js.map +0 -1
- package/esm/utils.d.ts +0 -46
- package/esm/utils.d.ts.map +0 -1
- package/esm/utils.js +0 -135
- package/esm/utils.js.map +0 -1
- package/src/package.json +0 -3
package/esm/ml-dsa.js
DELETED
@@ -1,519 +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 = randomBytes(32)) => {
|
275
|
-
// H(𝜉||IntegerToBytes(𝑘, 1)||IntegerToBytes(ℓ, 1), 128) 2: ▷ expand seed
|
276
|
-
const seedDst = new Uint8Array(32 + 2);
|
277
|
-
seedDst.set(seed);
|
278
|
-
seedDst[32] = K;
|
279
|
-
seedDst[33] = L;
|
280
|
-
const [rho, rhoPrime, K_] = seedCoder.decode(shake256(seedDst, { dkLen: seedCoder.bytesLen }));
|
281
|
-
const xofPrime = XOF256(rhoPrime);
|
282
|
-
const s1 = [];
|
283
|
-
for (let i = 0; i < L; i++)
|
284
|
-
s1.push(RejBoundedPoly(xofPrime.get(i & 0xff, (i >> 8) & 0xff)));
|
285
|
-
const s2 = [];
|
286
|
-
for (let i = L; i < L + K; i++)
|
287
|
-
s2.push(RejBoundedPoly(xofPrime.get(i & 0xff, (i >> 8) & 0xff)));
|
288
|
-
const s1Hat = s1.map((i) => NTT.encode(i.slice()));
|
289
|
-
const t0 = [];
|
290
|
-
const t1 = [];
|
291
|
-
const xof = XOF128(rho);
|
292
|
-
const t = newPoly(N);
|
293
|
-
for (let i = 0; i < K; i++) {
|
294
|
-
// t ← NTT−1(A*NTT(s1)) + s2
|
295
|
-
t.fill(0); // don't-reallocate
|
296
|
-
for (let j = 0; j < L; j++) {
|
297
|
-
const aij = RejNTTPoly(xof.get(j, i)); // super slow!
|
298
|
-
polyAdd(t, MultiplyNTTs(aij, s1Hat[j]));
|
299
|
-
}
|
300
|
-
NTT.decode(t);
|
301
|
-
const { r0, r1 } = polyPowerRound(polyAdd(t, s2[i])); // (t1, t0) ← Power2Round(t, d)
|
302
|
-
t0.push(r0);
|
303
|
-
t1.push(r1);
|
304
|
-
}
|
305
|
-
const publicKey = publicCoder.encode([rho, t1]); // pk ← pkEncode(ρ, t1)
|
306
|
-
const tr = shake256(publicKey, { dkLen: TR_BYTES }); // tr ← H(BytesToBits(pk), 512)
|
307
|
-
const secretKey = secretCoder.encode([rho, K_, tr, s1, s2, t0]); // sk ← skEncode(ρ, K,tr, s1, s2, t0)
|
308
|
-
xof.clean();
|
309
|
-
xofPrime.clean();
|
310
|
-
// STATS
|
311
|
-
// Kyber512: { calls: 4, xofs: 12 }, Kyber768: { calls: 9, xofs: 27 }, Kyber1024: { calls: 16, xofs: 48 }
|
312
|
-
// DSA44: { calls: 24, xofs: 24 }, DSA65: { calls: 41, xofs: 41 }, DSA87: { calls: 71, xofs: 71 }
|
313
|
-
cleanBytes(rho, rhoPrime, K_, s1, s2, s1Hat, t, t0, t1, tr, seedDst);
|
314
|
-
return { publicKey, secretKey };
|
315
|
-
},
|
316
|
-
// NOTE: random is optional.
|
317
|
-
sign: (secretKey, msg, random, externalMu = false) => {
|
318
|
-
// This part can be pre-cached per secretKey, but there is only minor performance improvement,
|
319
|
-
// since we re-use a lot of variables to computation.
|
320
|
-
const [rho, _K, tr, s1, s2, t0] = secretCoder.decode(secretKey); // (ρ, K,tr, s1, s2, t0) ← skDecode(sk)
|
321
|
-
// Cache matrix to avoid re-compute later
|
322
|
-
const A = []; // A ← ExpandA(ρ)
|
323
|
-
const xof = XOF128(rho);
|
324
|
-
for (let i = 0; i < K; i++) {
|
325
|
-
const pv = [];
|
326
|
-
for (let j = 0; j < L; j++)
|
327
|
-
pv.push(RejNTTPoly(xof.get(j, i)));
|
328
|
-
A.push(pv);
|
329
|
-
}
|
330
|
-
xof.clean();
|
331
|
-
for (let i = 0; i < L; i++)
|
332
|
-
NTT.encode(s1[i]); // sˆ1 ← NTT(s1)
|
333
|
-
for (let i = 0; i < K; i++) {
|
334
|
-
NTT.encode(s2[i]); // sˆ2 ← NTT(s2)
|
335
|
-
NTT.encode(t0[i]); // tˆ0 ← NTT(t0)
|
336
|
-
}
|
337
|
-
// This part is per msg
|
338
|
-
const mu = externalMu
|
339
|
-
? msg
|
340
|
-
: shake256.create({ dkLen: CRH_BYTES }).update(tr).update(msg).digest(); // 6: µ ← H(tr||M, 512) ▷ Compute message representative µ
|
341
|
-
// Compute private random seed
|
342
|
-
const rnd = random ? random : new Uint8Array(32);
|
343
|
-
ensureBytes(rnd);
|
344
|
-
const rhoprime = shake256
|
345
|
-
.create({ dkLen: CRH_BYTES })
|
346
|
-
.update(_K)
|
347
|
-
.update(rnd)
|
348
|
-
.update(mu)
|
349
|
-
.digest(); // ρ′← H(K||rnd||µ, 512)
|
350
|
-
ensureBytes(rhoprime, CRH_BYTES);
|
351
|
-
const x256 = XOF256(rhoprime, ZCoder.bytesLen);
|
352
|
-
// Rejection sampling loop
|
353
|
-
main_loop: for (let kappa = 0;;) {
|
354
|
-
const y = [];
|
355
|
-
// y ← ExpandMask(ρ , κ)
|
356
|
-
for (let i = 0; i < L; i++, kappa++)
|
357
|
-
y.push(ZCoder.decode(x256.get(kappa & 0xff, kappa >> 8)()));
|
358
|
-
const z = y.map((i) => NTT.encode(i.slice()));
|
359
|
-
const w = [];
|
360
|
-
for (let i = 0; i < K; i++) {
|
361
|
-
// w ← NTT−1(A ◦ NTT(y))
|
362
|
-
const wi = newPoly(N);
|
363
|
-
for (let j = 0; j < L; j++)
|
364
|
-
polyAdd(wi, MultiplyNTTs(A[i][j], z[j]));
|
365
|
-
NTT.decode(wi);
|
366
|
-
w.push(wi);
|
367
|
-
}
|
368
|
-
const w1 = w.map((j) => j.map(HighBits)); // w1 ← HighBits(w)
|
369
|
-
// Commitment hash: c˜ ∈{0, 1 2λ } ← H(µ||w1Encode(w1), 2λ)
|
370
|
-
const cTilde = shake256
|
371
|
-
.create({ dkLen: C_TILDE_BYTES })
|
372
|
-
.update(mu)
|
373
|
-
.update(W1Vec.encode(w1))
|
374
|
-
.digest();
|
375
|
-
// Verifer’s challenge
|
376
|
-
const cHat = NTT.encode(SampleInBall(cTilde)); // c ← SampleInBall(c˜1); cˆ ← NTT(c)
|
377
|
-
// ⟨⟨cs1⟩⟩ ← NTT−1(cˆ◦ sˆ1)
|
378
|
-
const cs1 = s1.map((i) => MultiplyNTTs(i, cHat));
|
379
|
-
for (let i = 0; i < L; i++) {
|
380
|
-
polyAdd(NTT.decode(cs1[i]), y[i]); // z ← y + ⟨⟨cs1⟩⟩
|
381
|
-
if (polyChknorm(cs1[i], GAMMA1 - BETA))
|
382
|
-
continue main_loop; // ||z||∞ ≥ γ1 − β
|
383
|
-
}
|
384
|
-
// cs1 is now z (▷ Signer’s response)
|
385
|
-
let cnt = 0;
|
386
|
-
const h = [];
|
387
|
-
for (let i = 0; i < K; i++) {
|
388
|
-
const cs2 = NTT.decode(MultiplyNTTs(s2[i], cHat)); // ⟨⟨cs2⟩⟩ ← NTT−1(cˆ◦ sˆ2)
|
389
|
-
const r0 = polySub(w[i], cs2).map(LowBits); // r0 ← LowBits(w − ⟨⟨cs2⟩⟩)
|
390
|
-
if (polyChknorm(r0, GAMMA2 - BETA))
|
391
|
-
continue main_loop; // ||r0||∞ ≥ γ2 − β
|
392
|
-
const ct0 = NTT.decode(MultiplyNTTs(t0[i], cHat)); // ⟨⟨ct0⟩⟩ ← NTT−1(cˆ◦ tˆ0)
|
393
|
-
if (polyChknorm(ct0, GAMMA2))
|
394
|
-
continue main_loop;
|
395
|
-
polyAdd(r0, ct0);
|
396
|
-
// ▷ Signer’s hint
|
397
|
-
const hint = polyMakeHint(r0, w1[i]); // h ← MakeHint(−⟨⟨ct0⟩⟩, w− ⟨⟨cs2⟩⟩ + ⟨⟨ct0⟩⟩)
|
398
|
-
h.push(hint.v);
|
399
|
-
cnt += hint.cnt;
|
400
|
-
}
|
401
|
-
if (cnt > OMEGA)
|
402
|
-
continue; // the number of 1’s in h is greater than ω
|
403
|
-
x256.clean();
|
404
|
-
const res = sigCoder.encode([cTilde, cs1, h]); // σ ← sigEncode(c˜, z mod±q, h)
|
405
|
-
// rho, _K, tr is subarray of secretKey, cannot clean.
|
406
|
-
cleanBytes(cTilde, cs1, h, cHat, w1, w, z, y, rhoprime, mu, s1, s2, t0, ...A);
|
407
|
-
return res;
|
408
|
-
}
|
409
|
-
// @ts-ignore
|
410
|
-
throw new Error('Unreachable code path reached, report this error');
|
411
|
-
},
|
412
|
-
verify: (publicKey, msg, sig, externalMu = false) => {
|
413
|
-
// ML-DSA.Verify(pk, M, σ): Verifes a signature σ for a message M.
|
414
|
-
const [rho, t1] = publicCoder.decode(publicKey); // (ρ, t1) ← pkDecode(pk)
|
415
|
-
const tr = shake256(publicKey, { dkLen: TR_BYTES }); // 6: tr ← H(BytesToBits(pk), 512)
|
416
|
-
if (sig.length !== sigCoder.bytesLen)
|
417
|
-
return false; // return false instead of exception
|
418
|
-
const [cTilde, z, h] = sigCoder.decode(sig); // (c˜, z, h) ← sigDecode(σ), ▷ Signer’s commitment hash c ˜, response z and hint
|
419
|
-
if (h === false)
|
420
|
-
return false; // if h = ⊥ then return false
|
421
|
-
for (let i = 0; i < L; i++)
|
422
|
-
if (polyChknorm(z[i], GAMMA1 - BETA))
|
423
|
-
return false;
|
424
|
-
const mu = externalMu
|
425
|
-
? msg
|
426
|
-
: shake256.create({ dkLen: CRH_BYTES }).update(tr).update(msg).digest(); // 7: µ ← H(tr||M, 512)
|
427
|
-
// Compute verifer’s challenge from c˜
|
428
|
-
const c = NTT.encode(SampleInBall(cTilde)); // c ← SampleInBall(c˜1)
|
429
|
-
const zNtt = z.map((i) => i.slice()); // zNtt = NTT(z)
|
430
|
-
for (let i = 0; i < L; i++)
|
431
|
-
NTT.encode(zNtt[i]);
|
432
|
-
const wTick1 = [];
|
433
|
-
const xof = XOF128(rho);
|
434
|
-
for (let i = 0; i < K; i++) {
|
435
|
-
const ct12d = MultiplyNTTs(NTT.encode(polyShiftl(t1[i])), c); //c * t1 * (2**d)
|
436
|
-
const Az = newPoly(N); // // A * z
|
437
|
-
for (let j = 0; j < L; j++) {
|
438
|
-
const aij = RejNTTPoly(xof.get(j, i)); // A[i][j] inplace
|
439
|
-
polyAdd(Az, MultiplyNTTs(aij, zNtt[j]));
|
440
|
-
}
|
441
|
-
// wApprox = A*z - c*t1 * (2**d)
|
442
|
-
const wApprox = NTT.decode(polySub(Az, ct12d));
|
443
|
-
// Reconstruction of signer’s commitment
|
444
|
-
wTick1.push(polyUseHint(wApprox, h[i])); // w ′ ← UseHint(h, w'approx )
|
445
|
-
}
|
446
|
-
xof.clean();
|
447
|
-
// c˜′← H (µ||w1Encode(w′1), 2λ), Hash it; this should match c˜
|
448
|
-
const c2 = shake256
|
449
|
-
.create({ dkLen: C_TILDE_BYTES })
|
450
|
-
.update(mu)
|
451
|
-
.update(W1Vec.encode(wTick1))
|
452
|
-
.digest();
|
453
|
-
// Additional checks in FIPS-204:
|
454
|
-
// [[ ||z||∞ < γ1 − β ]] and [[c ˜ = c˜′]] and [[number of 1’s in h is ≤ ω]]
|
455
|
-
for (const t of h) {
|
456
|
-
const sum = t.reduce((acc, i) => acc + i, 0);
|
457
|
-
if (!(sum <= OMEGA))
|
458
|
-
return false;
|
459
|
-
}
|
460
|
-
for (const t of z)
|
461
|
-
if (polyChknorm(t, GAMMA1 - BETA))
|
462
|
-
return false;
|
463
|
-
return equalBytes(cTilde, c2);
|
464
|
-
},
|
465
|
-
};
|
466
|
-
return {
|
467
|
-
internal,
|
468
|
-
keygen: internal.keygen,
|
469
|
-
signRandBytes: internal.signRandBytes,
|
470
|
-
sign: (secretKey, msg, ctx = EMPTY, random) => {
|
471
|
-
const M = getMessage(msg, ctx);
|
472
|
-
const res = internal.sign(secretKey, M, random);
|
473
|
-
M.fill(0);
|
474
|
-
return res;
|
475
|
-
},
|
476
|
-
verify: (publicKey, msg, sig, ctx = EMPTY) => {
|
477
|
-
return internal.verify(publicKey, getMessage(msg, ctx), sig);
|
478
|
-
},
|
479
|
-
prehash: (hashName) => ({
|
480
|
-
sign: (secretKey, msg, ctx = EMPTY, random) => {
|
481
|
-
const M = getMessagePrehash(hashName, msg, ctx);
|
482
|
-
const res = internal.sign(secretKey, M, random);
|
483
|
-
M.fill(0);
|
484
|
-
return res;
|
485
|
-
},
|
486
|
-
verify: (publicKey, msg, sig, ctx = EMPTY) => {
|
487
|
-
return internal.verify(publicKey, getMessagePrehash(hashName, msg, ctx), sig);
|
488
|
-
},
|
489
|
-
}),
|
490
|
-
};
|
491
|
-
}
|
492
|
-
/** ML-DSA-44 for 128-bit security level. Not recommended after 2030, as per ASD. */
|
493
|
-
export const ml_dsa44 = /* @__PURE__ */ getDilithium({
|
494
|
-
...PARAMS[2],
|
495
|
-
CRH_BYTES: 64,
|
496
|
-
TR_BYTES: 64,
|
497
|
-
C_TILDE_BYTES: 32,
|
498
|
-
XOF128,
|
499
|
-
XOF256,
|
500
|
-
});
|
501
|
-
/** ML-DSA-65 for 192-bit security level. Not recommended after 2030, as per ASD. */
|
502
|
-
export const ml_dsa65 = /* @__PURE__ */ getDilithium({
|
503
|
-
...PARAMS[3],
|
504
|
-
CRH_BYTES: 64,
|
505
|
-
TR_BYTES: 64,
|
506
|
-
C_TILDE_BYTES: 48,
|
507
|
-
XOF128,
|
508
|
-
XOF256,
|
509
|
-
});
|
510
|
-
/** ML-DSA-87 for 256-bit security level. OK after 2030, as per ASD. */
|
511
|
-
export const ml_dsa87 = /* @__PURE__ */ getDilithium({
|
512
|
-
...PARAMS[5],
|
513
|
-
CRH_BYTES: 64,
|
514
|
-
TR_BYTES: 64,
|
515
|
-
C_TILDE_BYTES: 64,
|
516
|
-
XOF128,
|
517
|
-
XOF256,
|
518
|
-
});
|
519
|
-
//# 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":"AAAA;;;;;;;;GAQG;AACH,4EAA4E;AAC5E,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAY,MAAM,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACvE,OAAO,EAEL,UAAU,EACV,KAAK,EACL,WAAW,EACX,UAAU,EACV,UAAU,EACV,iBAAiB,EACjB,WAAW,EAEX,UAAU,EACV,QAAQ,GACT,MAAM,YAAY,CAAC;AAEpB,YAAY;AACZ,MAAM,CAAC,GAAG,GAAG,CAAC;AACd,mGAAmG;AACnG,MAAM,CAAC,GAAG,OAAO,CAAC;AAClB,MAAM,aAAa,GAAG,IAAI,CAAC;AAC3B,yDAAyD;AACzD,MAAM,CAAC,GAAG,OAAO,CAAC;AAClB,MAAM,CAAC,GAAG,EAAE,CAAC;AACb,+FAA+F;AAC/F,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;AAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;AAe9C,wDAAwD;AACxD,kBAAkB;AAClB,MAAM,CAAC,MAAM,MAAM,GAA6B;IAC9C,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;IACnF,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;IACnF,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;CAC3E,CAAC;AAIX,MAAM,OAAO,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;AAEjD,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,WAAW,CAAC;IAChD,CAAC;IACD,CAAC;IACD,CAAC;IACD,aAAa;IACb,OAAO;IACP,OAAO,EAAE,KAAK;IACd,OAAO,EAAE,CAAC;CACX,CAAC,CAAC;AAEH,MAAM,EAAE,GAAG,CAAI,CAAI,EAAK,EAAE,CAAC,CAAC,CAAC;AAG7B,MAAM,SAAS,GAAG,CAAC,CAAS,EAAE,WAAkB,EAAE,EAAE,SAAgB,EAAE,EAAE,EAAE,CACxE,SAAS,CAAC,CAAC,EAAE;IACX,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC1C,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;CAC3C,CAAC,CAAC;AAEL,MAAM,OAAO,GAAG,CAAC,CAAO,EAAE,CAAO,EAAE,EAAE;IACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE;QAAE,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3D,OAAO,CAAC,CAAC;AACX,CAAC,CAAC;AACF,MAAM,OAAO,GAAG,CAAC,CAAO,EAAE,CAAO,EAAQ,EAAE;IACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE;QAAE,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3D,OAAO,CAAC,CAAC;AACX,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,CAAO,EAAQ,EAAE;IACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;QAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACvC,OAAO,CAAC,CAAC;AACX,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,CAAO,EAAE,CAAS,EAAW,EAAE;IAClD,iFAAiF;IACjF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;QAAE,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;IACvE,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,CAAO,EAAE,CAAO,EAAQ,EAAE;IAC9C,kFAAkF;IAClF,2EAA2E;IAC3E,sFAAsF;IACtF,0CAA0C;IAC1C,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE;QAAE,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3D,OAAO,CAAC,CAAC;AACX,CAAC,CAAC;AAEF,oCAAoC;AACpC,SAAS,UAAU,CAAC,GAAW;IAC7B,6BAA6B;IAC7B,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACrB,wEAAwE;IACxE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAI,CAAC;QACxB,MAAM,CAAC,GAAG,GAAG,EAAE,CAAC;QAChB,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACjE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YACnD,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,UAAU;YAChF,IAAI,CAAC,GAAG,CAAC;gBAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAiBD,SAAS,YAAY,CAAC,IAAmB;IACvC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;IACvD,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAEpE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC;IACxD,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;IAC1E,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;IAC5E,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;IAEvB,MAAM,SAAS,GAAG,CAAC,CAAS,EAAE,EAAE;QAC9B,+DAA+D;QAC/D,MAAM,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QACrB,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,KAAK,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC;YAAE,OAAO,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;QACjE,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;QACvD,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,8BAA8B;IACnD,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAChD,MAAM,OAAO,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/C,MAAM,QAAQ,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE;QACxC,+EAA+E;QAE/E,sBAAsB;QACtB,MAAM,IAAI,GAAG,CAAC,IAAI,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpF,gBAAgB;QAChB,6BAA6B;QAC7B,iCAAiC;QACjC,gCAAgC;QAChC,iEAAiE;QACjE,2EAA2E;QAC3E,kEAAkE;QAClE,MAAM;QACN,2GAA2G;QAC3G,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE;QACvC,0DAA0D;QAC1D,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;QAC7C,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QAChC,+CAA+C;QAC/C,+CAA+C;QAC/C,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;QACrE,OAAO,EAAE,GAAG,CAAC,CAAC;IAChB,CAAC,CAAC;IACF,MAAM,WAAW,GAAG,CAAC,CAAS,EAAE,EAAE;QAChC,iEAAiE;QACjE,MAAM,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QACrB,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACnC,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC;IAC3D,CAAC,CAAC;IAEF,MAAM,SAAS,GAAkC;QAC/C,QAAQ,EAAE,KAAK,GAAG,CAAC;QACnB,MAAM,EAAE,CAAC,CAAiB,EAAE,EAAE;YAC5B,IAAI,CAAC,KAAK,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC,CAAC,sBAAsB;YACtF,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;oBAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;wBAAE,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;gBAC5D,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YACrB,CAAC;YACD,OAAO,GAAG,CAAC;QACb,CAAC;QACD,MAAM,EAAE,CAAC,GAAe,EAAE,EAAE;YAC1B,MAAM,CAAC,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,GAAG,CAAC,CAAC;YACV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3B,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBACtB,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,KAAK;oBAAE,OAAO,KAAK,CAAC;gBAC/D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBACxC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;wBAAE,OAAO,KAAK,CAAC;oBAChD,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBACjB,CAAC;gBACD,CAAC,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;gBACnB,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACb,CAAC;YACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE;gBAAE,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;oBAAE,OAAO,KAAK,CAAC;YAC/D,OAAO,CAAC,CAAC;QACX,CAAC;KACF,CAAC;IAEF,MAAM,QAAQ,GAAG,SAAS,CACxB,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACjB,CAAC,CAAS,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,EACtB,CAAC,CAAS,EAAE,EAAE;QACZ,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,0BAA0B,CAAC,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC;QACrF,OAAO,CAAC,CAAC;IACX,CAAC,CACF,CAAC;IACF,MAAM,OAAO,GAAG,SAAS,CAAC,EAAE,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACjE,MAAM,OAAO,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;IAC9B,8BAA8B;IAC9B,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IACxF,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACnC,kBAAkB;IAClB,MAAM,WAAW,GAAG,UAAU,CAAC,EAAE,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;IACzD,MAAM,WAAW,GAAG,UAAU,CAC5B,EAAE,EACF,EAAE,EACF,QAAQ,EACR,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,EACrB,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,EACrB,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,CACrB,CAAC;IACF,MAAM,QAAQ,GAAG,UAAU,CAAC,aAAa,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IAC3E,MAAM,gBAAgB,GACpB,GAAG,KAAK,CAAC;QACP,CAAC,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAC/C,CAAC,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAE7C,oCAAoC;IACpC,SAAS,cAAc,CAAC,GAAW;QACjC,gGAAgG;QAChG,MAAM,CAAC,GAAS,OAAO,CAAC,CAAC,CAAC,CAAC;QAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAI,CAAC;YACxB,MAAM,CAAC,GAAG,GAAG,EAAE,CAAC;YAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC9C,oFAAoF;gBACpF,MAAM,EAAE,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;gBACzC,MAAM,EAAE,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;gBAChD,IAAI,EAAE,KAAK,KAAK;oBAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;gBAC9B,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,KAAK;oBAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;YACzC,CAAC;QACH,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,YAAY,GAAG,CAAC,IAAgB,EAAE,EAAE;QACxC,oFAAoF;QACpF,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACvB,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC3C,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC9C,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACf,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACpE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,GAAI,CAAC;gBACf,CAAC,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;gBACf,IAAI,GAAG,GAAG,QAAQ,CAAC,QAAQ;oBAAE,SAAS;gBACtC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBACf,GAAG,GAAG,CAAC,CAAC;YACV,CAAC;YACD,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YAChB,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YACxD,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;gBACjB,OAAO,EAAE,CAAC;gBACV,OAAO,GAAG,CAAC,CAAC;YACd,CAAC;QACH,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;IAEF,MAAM,cAAc,GAAG,CAAC,CAAO,EAAE,EAAE;QACjC,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACxB,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAClC,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACrC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QACf,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IAChC,CAAC,CAAC;IACF,MAAM,WAAW,GAAG,CAAC,CAAO,EAAE,CAAO,EAAQ,EAAE;QAC7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;YAAE,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvD,OAAO,CAAC,CAAC;IACX,CAAC,CAAC;IACF,MAAM,YAAY,GAAG,CAAC,CAAO,EAAE,CAAO,EAAE,EAAE;QACxC,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/B,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACT,GAAG,IAAI,CAAC,CAAC;QACX,CAAC;QACD,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;IACpB,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,EAAE,CAAC;IACzB,MAAM,SAAS,GAAG,UAAU,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACzC,sDAAsD;IACtD,MAAM,QAAQ,GAAW;QACvB,aAAa;QACb,MAAM,EAAE,CAAC,IAAI,GAAG,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE;YACjC,2EAA2E;YAC3E,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YACvC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAClB,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;YAChB,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;YAChB,MAAM,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,CAC1C,QAAQ,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,SAAS,CAAC,QAAQ,EAAE,CAAC,CACjD,CAAC;YACF,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;YAClC,MAAM,EAAE,GAAG,EAAE,CAAC;YACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;gBAAE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAC7F,MAAM,EAAE,GAAG,EAAE,CAAC;YACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;gBAC5B,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACnE,MAAM,KAAK,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACnD,MAAM,EAAE,GAAG,EAAE,CAAC;YACd,MAAM,EAAE,GAAG,EAAE,CAAC;YACd,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YACxB,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3B,4BAA4B;gBAC5B,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,mBAAmB;gBAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC3B,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc;oBACrD,OAAO,CAAC,CAAC,EAAE,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC1C,CAAC;gBACD,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBACd,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,+BAA+B;gBACrF,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACZ,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACd,CAAC;YACD,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,uBAAuB;YACxE,MAAM,EAAE,GAAG,QAAQ,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,+BAA+B;YACpF,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,qCAAqC;YACtG,GAAG,CAAC,KAAK,EAAE,CAAC;YACZ,QAAQ,CAAC,KAAK,EAAE,CAAC;YACjB,QAAQ;YACR,0GAA0G;YAC1G,0GAA0G;YAC1G,UAAU,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;YACrE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;QAClC,CAAC;QACD,4BAA4B;QAC5B,IAAI,EAAE,CAAC,SAAqB,EAAE,GAAe,EAAE,MAAmB,EAAE,UAAU,GAAG,KAAK,EAAE,EAAE;YACxF,8FAA8F;YAC9F,qDAAqD;YACrD,MAAM,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,uCAAuC;YACxG,yCAAyC;YACzC,MAAM,CAAC,GAAa,EAAE,CAAC,CAAC,iBAAiB;YACzC,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3B,MAAM,EAAE,GAAG,EAAE,CAAC;gBACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;oBAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC/D,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACb,CAAC;YACD,GAAG,CAAC,KAAK,EAAE,CAAC;YACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;gBAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB;YAC/D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3B,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB;gBACnC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB;YACrC,CAAC;YACD,uBAAuB;YACvB,MAAM,EAAE,GAAG,UAAU;gBACnB,CAAC,CAAC,GAAG;gBACL,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,0DAA0D;YAErI,8BAA8B;YAC9B,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;YACjD,WAAW,CAAC,GAAG,CAAC,CAAC;YACjB,MAAM,QAAQ,GAAG,QAAQ;iBACtB,MAAM,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;iBAC5B,MAAM,CAAC,EAAE,CAAC;iBACV,MAAM,CAAC,GAAG,CAAC;iBACX,MAAM,CAAC,EAAE,CAAC;iBACV,MAAM,EAAE,CAAC,CAAC,wBAAwB;YAErC,WAAW,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;YACjC,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC/C,2BAA2B;YAC3B,SAAS,EAAE,KAAK,IAAI,KAAK,GAAG,CAAC,IAAM,CAAC;gBAClC,MAAM,CAAC,GAAG,EAAE,CAAC;gBACb,wBAAwB;gBACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE;oBACjC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,EAAE,KAAK,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC9D,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;gBAC9C,MAAM,CAAC,GAAG,EAAE,CAAC;gBACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC3B,wBAAwB;oBACxB,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;oBACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;wBAAE,OAAO,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACrE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;oBACf,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACb,CAAC;gBACD,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,mBAAmB;gBAC7D,2DAA2D;gBAC3D,MAAM,MAAM,GAAG,QAAQ;qBACpB,MAAM,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;qBAChC,MAAM,CAAC,EAAE,CAAC;qBACV,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;qBACxB,MAAM,EAAE,CAAC;gBACZ,sBAAsB;gBACtB,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,qCAAqC;gBACpF,2BAA2B;gBAC3B,MAAM,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;gBACjD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC3B,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,kBAAkB;oBACrD,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;wBAAE,SAAS,SAAS,CAAC,CAAC,kBAAkB;gBAChF,CAAC;gBACD,qCAAqC;gBACrC,IAAI,GAAG,GAAG,CAAC,CAAC;gBACZ,MAAM,CAAC,GAAG,EAAE,CAAC;gBACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC3B,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,2BAA2B;oBAC9E,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,4BAA4B;oBACxE,IAAI,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;wBAAE,SAAS,SAAS,CAAC,CAAC,mBAAmB;oBAC3E,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,2BAA2B;oBAC9E,IAAI,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC;wBAAE,SAAS,SAAS,CAAC;oBACjD,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;oBACjB,kBAAkB;oBAClB,MAAM,IAAI,GAAG,YAAY,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,+CAA+C;oBACrF,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBACf,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;gBAClB,CAAC;gBACD,IAAI,GAAG,GAAG,KAAK;oBAAE,SAAS,CAAC,2CAA2C;gBACtE,IAAI,CAAC,KAAK,EAAE,CAAC;gBACb,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,gCAAgC;gBAC/E,sDAAsD;gBACtD,UAAU,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;gBAC9E,OAAO,GAAG,CAAC;YACb,CAAC;YACD,aAAa;YACb,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;QACtE,CAAC;QACD,MAAM,EAAE,CAAC,SAAqB,EAAE,GAAe,EAAE,GAAe,EAAE,UAAU,GAAG,KAAK,EAAE,EAAE;YACtF,kEAAkE;YAClE,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,yBAAyB;YAC1E,MAAM,EAAE,GAAG,QAAQ,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,kCAAkC;YAEvF,IAAI,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,QAAQ;gBAAE,OAAO,KAAK,CAAC,CAAC,oCAAoC;YACxF,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,iFAAiF;YAC9H,IAAI,CAAC,KAAK,KAAK;gBAAE,OAAO,KAAK,CAAC,CAAC,6BAA6B;YAC5D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;gBAAE,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;oBAAE,OAAO,KAAK,CAAC;YAC/E,MAAM,EAAE,GAAG,UAAU;gBACnB,CAAC,CAAC,GAAG;gBACL,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,uBAAuB;YAClG,sCAAsC;YACtC,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,wBAAwB;YACpE,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,gBAAgB;YACtD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;gBAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAChD,MAAM,MAAM,GAAG,EAAE,CAAC;YAClB,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3B,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,iBAAiB;gBAC/E,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW;gBAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC3B,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,kBAAkB;oBACzD,OAAO,CAAC,EAAE,EAAE,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC1C,CAAC;gBACD,gCAAgC;gBAChC,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;gBAC/C,wCAAwC;gBACxC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,8BAA8B;YACzE,CAAC;YACD,GAAG,CAAC,KAAK,EAAE,CAAC;YACZ,gEAAgE;YAChE,MAAM,EAAE,GAAG,QAAQ;iBAChB,MAAM,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;iBAChC,MAAM,CAAC,EAAE,CAAC;iBACV,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;iBAC5B,MAAM,EAAE,CAAC;YACZ,iCAAiC;YACjC,4EAA4E;YAC5E,KAAK,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClB,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC7C,IAAI,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC;oBAAE,OAAO,KAAK,CAAC;YACpC,CAAC;YACD,KAAK,MAAM,CAAC,IAAI,CAAC;gBAAE,IAAI,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;oBAAE,OAAO,KAAK,CAAC;YACnE,OAAO,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAChC,CAAC;KACF,CAAC;IACF,OAAO;QACL,QAAQ;QACR,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,aAAa,EAAE,QAAQ,CAAC,aAAa;QACrC,IAAI,EAAE,CAAC,SAAqB,EAAE,GAAe,EAAE,GAAG,GAAG,KAAK,EAAE,MAAmB,EAAE,EAAE;YACjF,MAAM,CAAC,GAAG,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAC/B,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;YAChD,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACV,OAAO,GAAG,CAAC;QACb,CAAC;QACD,MAAM,EAAE,CAAC,SAAqB,EAAE,GAAe,EAAE,GAAe,EAAE,GAAG,GAAG,KAAK,EAAE,EAAE;YAC/E,OAAO,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;QAC/D,CAAC;QACD,OAAO,EAAE,CAAC,QAAgB,EAAE,EAAE,CAAC,CAAC;YAC9B,IAAI,EAAE,CAAC,SAAqB,EAAE,GAAe,EAAE,GAAG,GAAG,KAAK,EAAE,MAAmB,EAAE,EAAE;gBACjF,MAAM,CAAC,GAAG,iBAAiB,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;gBAChD,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;gBAChD,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACV,OAAO,GAAG,CAAC;YACb,CAAC;YACD,MAAM,EAAE,CAAC,SAAqB,EAAE,GAAe,EAAE,GAAe,EAAE,GAAG,GAAG,KAAK,EAAE,EAAE;gBAC/E,OAAO,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,iBAAiB,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;YAChF,CAAC;SACF,CAAC;KACH,CAAC;AACJ,CAAC;AAKD,oFAAoF;AACpF,MAAM,CAAC,MAAM,QAAQ,GAAuB,eAAe,CAAC,YAAY,CAAC;IACvE,GAAG,MAAM,CAAC,CAAC,CAAC;IACZ,SAAS,EAAE,EAAE;IACb,QAAQ,EAAE,EAAE;IACZ,aAAa,EAAE,EAAE;IACjB,MAAM;IACN,MAAM;CACP,CAAC,CAAC;AAEH,oFAAoF;AACpF,MAAM,CAAC,MAAM,QAAQ,GAAuB,eAAe,CAAC,YAAY,CAAC;IACvE,GAAG,MAAM,CAAC,CAAC,CAAC;IACZ,SAAS,EAAE,EAAE;IACb,QAAQ,EAAE,EAAE;IACZ,aAAa,EAAE,EAAE;IACjB,MAAM;IACN,MAAM;CACP,CAAC,CAAC;AAEH,uEAAuE;AACvE,MAAM,CAAC,MAAM,QAAQ,GAAuB,eAAe,CAAC,YAAY,CAAC;IACvE,GAAG,MAAM,CAAC,CAAC,CAAC;IACZ,SAAS,EAAE,EAAE;IACb,QAAQ,EAAE,EAAE;IACZ,aAAa,EAAE,EAAE;IACjB,MAAM;IACN,MAAM;CACP,CAAC,CAAC"}
|
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
|
package/esm/ml-kem.d.ts.map
DELETED
@@ -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;AAuQX,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"}
|