@noble/post-quantum 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- package/LICENSE +21 -0
- package/README.md +300 -0
- package/_crystals.d.ts +34 -0
- package/_crystals.d.ts.map +1 -0
- package/_crystals.js +171 -0
- package/_crystals.js.map +1 -0
- package/esm/_crystals.js +167 -0
- package/esm/_crystals.js.map +1 -0
- package/esm/index.js +3 -0
- package/esm/index.js.map +1 -0
- package/esm/ml-dsa.js +529 -0
- package/esm/ml-dsa.js.map +1 -0
- package/esm/ml-kem.js +361 -0
- package/esm/ml-kem.js.map +1 -0
- package/esm/package.json +10 -0
- package/esm/slh-dsa.js +602 -0
- package/esm/slh-dsa.js.map +1 -0
- package/esm/utils.js +86 -0
- package/esm/utils.js.map +1 -0
- package/index.d.ts +1 -0
- package/index.d.ts.map +1 -0
- package/index.js +3 -0
- package/index.js.map +1 -0
- package/ml-dsa.d.ts +37 -0
- package/ml-dsa.d.ts.map +1 -0
- package/ml-dsa.js +532 -0
- package/ml-dsa.js.map +1 -0
- package/ml-kem.d.ts +134 -0
- package/ml-kem.d.ts.map +1 -0
- package/ml-kem.js +364 -0
- package/ml-kem.js.map +1 -0
- package/package.json +100 -0
- package/slh-dsa.d.ts +70 -0
- package/slh-dsa.d.ts.map +1 -0
- package/slh-dsa.js +605 -0
- package/slh-dsa.js.map +1 -0
- package/src/_crystals.ts +197 -0
- package/src/index.ts +1 -0
- package/src/ml-dsa.ts +569 -0
- package/src/ml-kem.ts +403 -0
- package/src/package.json +3 -0
- package/src/slh-dsa.ts +771 -0
- package/src/utils.ts +113 -0
- package/utils.d.ts +38 -0
- package/utils.d.ts.map +1 -0
- package/utils.js +94 -0
- package/utils.js.map +1 -0
package/esm/ml-kem.js
ADDED
@@ -0,0 +1,361 @@
|
|
1
|
+
/*! noble-post-quantum - MIT License (c) 2024 Paul Miller (paulmillr.com) */
|
2
|
+
import { ctr } from '@noble/ciphers/aes';
|
3
|
+
import { sha256, sha512 } from '@noble/hashes/sha2';
|
4
|
+
import { sha3_256, sha3_512, shake256 } from '@noble/hashes/sha3';
|
5
|
+
import { u32 } from '@noble/hashes/utils';
|
6
|
+
import { genCrystals, XOF_AES, XOF128 } from './_crystals.js';
|
7
|
+
import { cleanBytes, ensureBytes, equalBytes, randomBytes, splitCoder, vecCoder, } from './utils.js';
|
8
|
+
/*
|
9
|
+
Lattice-based key encapsulation mechanism.
|
10
|
+
See [official site](https://www.pq-crystals.org/kyber/resources.shtml),
|
11
|
+
[repo](https://github.com/pq-crystals/kyber),
|
12
|
+
[spec](https://datatracker.ietf.org/doc/draft-cfrg-schwabe-kyber/).
|
13
|
+
|
14
|
+
Key encapsulation is similar to DH / ECDH (think X25519), with important differences:
|
15
|
+
|
16
|
+
- We can't verify if it was "Bob" who've sent the shared secret.
|
17
|
+
In ECDH, it's always verified
|
18
|
+
- Kyber is probabalistic and relies on quality of randomness (CSPRNG).
|
19
|
+
ECDH doesn't (to this extent).
|
20
|
+
- Kyber decapsulation never throws an error, even when shared secret was
|
21
|
+
encrypted by a different public key. It will just return a different
|
22
|
+
shared secret
|
23
|
+
|
24
|
+
There are some concerns with regards to security: see
|
25
|
+
[djb blog](https://blog.cr.yp.to/20231003-countcorrectly.html) and
|
26
|
+
[mailing list](https://groups.google.com/a/list.nist.gov/g/pqc-forum/c/W2VOzy0wz_E).
|
27
|
+
|
28
|
+
Three versions are provided:
|
29
|
+
|
30
|
+
1. Kyber
|
31
|
+
2. Kyber-90s, using algorithms from 1990s
|
32
|
+
3. ML-KEM aka [FIPS-203](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.203.ipd.pdf)
|
33
|
+
*/
|
34
|
+
const N = 256; // Kyber (not FIPS-203) supports different lengths, but all std modes were using 256
|
35
|
+
const Q = 3329; // 13*(2**8)+1, modulo prime
|
36
|
+
const F = 3303; // 3303 ≡ 128−1 mod q (FIPS-203)
|
37
|
+
const ROOT_OF_UNITY = 17; // ζ = 17 ∈ Zq is a primitive 256-th root of unity modulo Q. ζ**128 ≡−1
|
38
|
+
const { mod, nttZetas, NTT, bitsCoder } = genCrystals({
|
39
|
+
N,
|
40
|
+
Q,
|
41
|
+
F,
|
42
|
+
ROOT_OF_UNITY,
|
43
|
+
newPoly: (n) => new Uint16Array(n),
|
44
|
+
brvBits: 7,
|
45
|
+
isKyber: true,
|
46
|
+
});
|
47
|
+
// prettier-ignore
|
48
|
+
export const PARAMS = {
|
49
|
+
512: { N, Q, K: 2, ETA1: 3, ETA2: 2, du: 10, dv: 4, RBGstrength: 128 },
|
50
|
+
768: { N, Q, K: 3, ETA1: 2, ETA2: 2, du: 10, dv: 4, RBGstrength: 192 },
|
51
|
+
1024: { N, Q, K: 4, ETA1: 2, ETA2: 2, du: 11, dv: 5, RBGstrength: 256 },
|
52
|
+
};
|
53
|
+
// FIPS-203: compress/decompress
|
54
|
+
const compress = (d) => {
|
55
|
+
// Special case, no need to compress, pass as is, but strip high bytes on compression
|
56
|
+
if (d >= 12)
|
57
|
+
return { encode: (i) => i, decode: (i) => i };
|
58
|
+
// NOTE: we don't use float arithmetic (forbidden by FIPS-203 and high chance of bugs).
|
59
|
+
// Comments map to python implementation in RFC (draft-cfrg-schwabe-kyber)
|
60
|
+
// const round = (i: number) => Math.floor(i + 0.5) | 0;
|
61
|
+
const a = 2 ** (d - 1);
|
62
|
+
return {
|
63
|
+
// const compress = (i: number) => round((2 ** d / Q) * i) % 2 ** d;
|
64
|
+
encode: (i) => ((i << d) + Q / 2) / Q,
|
65
|
+
// const decompress = (i: number) => round((Q / 2 ** d) * i);
|
66
|
+
decode: (i) => (i * Q + a) >>> d,
|
67
|
+
};
|
68
|
+
};
|
69
|
+
// NOTE: we merge encoding and compress because it is faster, also both require same d param
|
70
|
+
// Converts between bytes and d-bits compressed representation. Kinda like convertRadix2 from @scure/base
|
71
|
+
// decode(encode(t)) == t, but there is loss of information on encode(decode(t))
|
72
|
+
const polyCoder = (d) => bitsCoder(d, compress(d));
|
73
|
+
function polyAdd(a, b) {
|
74
|
+
for (let i = 0; i < N; i++)
|
75
|
+
a[i] = mod(a[i] + b[i]); // a += b
|
76
|
+
}
|
77
|
+
function polySub(a, b) {
|
78
|
+
for (let i = 0; i < N; i++)
|
79
|
+
a[i] = mod(a[i] - b[i]); // a -= b
|
80
|
+
}
|
81
|
+
// FIPS-203: Computes the product of two degree-one polynomials with respect to a quadratic modulus
|
82
|
+
function BaseCaseMultiply(a0, a1, b0, b1, zeta) {
|
83
|
+
const c0 = mod(a1 * b1 * zeta + a0 * b0);
|
84
|
+
const c1 = mod(a0 * b1 + a1 * b0);
|
85
|
+
return { c0, c1 };
|
86
|
+
}
|
87
|
+
// FIPS-203: Computes the product (in the ring Tq) of two NTT representations. NOTE: works inplace for f
|
88
|
+
// NOTE: since multiply defined only for NTT representation, we need to convert to NTT, multiply and convert back
|
89
|
+
function MultiplyNTTs(f, g) {
|
90
|
+
for (let i = 0; i < N / 2; i++) {
|
91
|
+
let z = nttZetas[64 + (i >> 1)];
|
92
|
+
if (i & 1)
|
93
|
+
z = -z;
|
94
|
+
const { c0, c1 } = BaseCaseMultiply(f[2 * i + 0], f[2 * i + 1], g[2 * i + 0], g[2 * i + 1], z);
|
95
|
+
f[2 * i + 0] = c0;
|
96
|
+
f[2 * i + 1] = c1;
|
97
|
+
}
|
98
|
+
return f;
|
99
|
+
}
|
100
|
+
// Return poly in NTT representation
|
101
|
+
function SampleNTT(xof) {
|
102
|
+
const r = new Uint16Array(N);
|
103
|
+
for (let j = 0; j < N;) {
|
104
|
+
const b = xof();
|
105
|
+
if (b.length % 3)
|
106
|
+
throw new Error('SampleNTT: unaligned block');
|
107
|
+
for (let i = 0; j < N && i + 3 <= b.length; i += 3) {
|
108
|
+
const d1 = ((b[i + 0] >> 0) | (b[i + 1] << 8)) & 0xfff;
|
109
|
+
const d2 = ((b[i + 1] >> 4) | (b[i + 2] << 4)) & 0xfff;
|
110
|
+
if (d1 < Q)
|
111
|
+
r[j++] = d1;
|
112
|
+
if (j < N && d2 < Q)
|
113
|
+
r[j++] = d2;
|
114
|
+
}
|
115
|
+
}
|
116
|
+
return r;
|
117
|
+
}
|
118
|
+
// Sampling from the centered binomial distribution
|
119
|
+
// Returns poly with small coefficients (noise/errors)
|
120
|
+
function sampleCBD(PRF, seed, nonce, eta) {
|
121
|
+
const buf = PRF((eta * N) / 4, seed, nonce);
|
122
|
+
const r = new Uint16Array(N);
|
123
|
+
const b32 = u32(buf);
|
124
|
+
let len = 0;
|
125
|
+
for (let i = 0, p = 0, bb = 0, t0 = 0; i < b32.length; i++) {
|
126
|
+
let b = b32[i];
|
127
|
+
for (let j = 0; j < 32; j++) {
|
128
|
+
bb += b & 1;
|
129
|
+
b >>= 1;
|
130
|
+
len += 1;
|
131
|
+
if (len === eta) {
|
132
|
+
t0 = bb;
|
133
|
+
bb = 0;
|
134
|
+
}
|
135
|
+
else if (len === 2 * eta) {
|
136
|
+
r[p++] = mod(t0 - bb);
|
137
|
+
bb = 0;
|
138
|
+
len = 0;
|
139
|
+
}
|
140
|
+
}
|
141
|
+
}
|
142
|
+
if (len)
|
143
|
+
throw new Error(`sampleCBD: leftover bits: ${len}`);
|
144
|
+
return r;
|
145
|
+
}
|
146
|
+
// K-PKE
|
147
|
+
// As per FIPS-203, it doesn't perform any input validation and can't be used in standalone fashion.
|
148
|
+
const genKPKE = (opts) => {
|
149
|
+
const { K, PRF, XOF, HASH512, ETA1, ETA2, du, dv, FIPS203 } = opts;
|
150
|
+
const poly1 = polyCoder(1);
|
151
|
+
const polyV = polyCoder(dv);
|
152
|
+
const polyU = polyCoder(du);
|
153
|
+
const publicCoder = splitCoder(vecCoder(polyCoder(12), K), 32);
|
154
|
+
const secretCoder = vecCoder(polyCoder(12), K);
|
155
|
+
const cipherCoder = splitCoder(vecCoder(polyU, K), polyV);
|
156
|
+
const seedCoder = splitCoder(32, 32);
|
157
|
+
return {
|
158
|
+
secretCoder,
|
159
|
+
secretKeyLen: secretCoder.bytesLen,
|
160
|
+
publicKeyLen: publicCoder.bytesLen,
|
161
|
+
cipherTextLen: cipherCoder.bytesLen,
|
162
|
+
keygen: (seed) => {
|
163
|
+
const [rho, sigma] = seedCoder.decode(HASH512(seed));
|
164
|
+
const sHat = [];
|
165
|
+
const tHat = [];
|
166
|
+
for (let i = 0; i < K; i++)
|
167
|
+
sHat.push(NTT.encode(sampleCBD(PRF, sigma, i, ETA1)));
|
168
|
+
const x = XOF(rho);
|
169
|
+
for (let i = 0; i < K; i++) {
|
170
|
+
const e = NTT.encode(sampleCBD(PRF, sigma, K + i, ETA1));
|
171
|
+
for (let j = 0; j < K; j++) {
|
172
|
+
const aji = SampleNTT(FIPS203 ? x.get(i, j) : x.get(j, i)); // A[j][i], inplace
|
173
|
+
polyAdd(e, MultiplyNTTs(aji, sHat[j]));
|
174
|
+
}
|
175
|
+
tHat.push(e); // t ← A ◦ s + e
|
176
|
+
}
|
177
|
+
x.clean();
|
178
|
+
const res = {
|
179
|
+
publicKey: publicCoder.encode([tHat, rho]),
|
180
|
+
secretKey: secretCoder.encode(sHat),
|
181
|
+
};
|
182
|
+
cleanBytes(rho, sigma, sHat, tHat);
|
183
|
+
return res;
|
184
|
+
},
|
185
|
+
encrypt: (publicKey, msg, seed) => {
|
186
|
+
const [tHat, rho] = publicCoder.decode(publicKey);
|
187
|
+
const rHat = [];
|
188
|
+
for (let i = 0; i < K; i++)
|
189
|
+
rHat.push(NTT.encode(sampleCBD(PRF, seed, i, ETA1)));
|
190
|
+
const x = XOF(rho);
|
191
|
+
const tmp2 = new Uint16Array(N);
|
192
|
+
const u = [];
|
193
|
+
for (let i = 0; i < K; i++) {
|
194
|
+
const e1 = sampleCBD(PRF, seed, K + i, ETA2);
|
195
|
+
const tmp = new Uint16Array(N);
|
196
|
+
for (let j = 0; j < K; j++) {
|
197
|
+
const aij = SampleNTT(FIPS203 ? x.get(j, i) : x.get(i, j)); // A[i][j], inplace
|
198
|
+
polyAdd(tmp, MultiplyNTTs(aij, rHat[j])); // t += aij * rHat[j]
|
199
|
+
}
|
200
|
+
polyAdd(e1, NTT.decode(tmp)); // e1 += tmp
|
201
|
+
u.push(e1);
|
202
|
+
polyAdd(tmp2, MultiplyNTTs(tHat[i], rHat[i])); // t2 += tHat[i] * rHat[i]
|
203
|
+
tmp.fill(0);
|
204
|
+
}
|
205
|
+
x.clean();
|
206
|
+
const e2 = sampleCBD(PRF, seed, 2 * K, ETA2);
|
207
|
+
polyAdd(e2, NTT.decode(tmp2)); // e2 += tmp2
|
208
|
+
const v = poly1.decode(msg); // encode plaintext m into polynomial v
|
209
|
+
polyAdd(v, e2); // v += e2
|
210
|
+
cleanBytes(tHat, rHat, tmp2, e2);
|
211
|
+
return cipherCoder.encode([u, v]);
|
212
|
+
},
|
213
|
+
decrypt: (cipherText, privateKey) => {
|
214
|
+
const [u, v] = cipherCoder.decode(cipherText);
|
215
|
+
const sk = secretCoder.decode(privateKey); // s ← ByteDecode_12(dkPKE)
|
216
|
+
const tmp = new Uint16Array(N);
|
217
|
+
for (let i = 0; i < K; i++)
|
218
|
+
polyAdd(tmp, MultiplyNTTs(sk[i], NTT.encode(u[i]))); // tmp += sk[i] * u[i]
|
219
|
+
polySub(v, NTT.decode(tmp)); // v += tmp
|
220
|
+
cleanBytes(tmp, sk, u);
|
221
|
+
return poly1.encode(v);
|
222
|
+
},
|
223
|
+
};
|
224
|
+
};
|
225
|
+
function createKyber(opts) {
|
226
|
+
const KPKE = genKPKE(opts);
|
227
|
+
const { HASH256, HASH512, KDF, FIPS203 } = opts;
|
228
|
+
const { secretCoder: KPKESecretCoder, cipherTextLen } = KPKE;
|
229
|
+
const publicKeyLen = KPKE.publicKeyLen; // 384*K+32
|
230
|
+
const secretCoder = splitCoder(KPKE.secretKeyLen, KPKE.publicKeyLen, 32, 32);
|
231
|
+
const secretKeyLen = secretCoder.bytesLen;
|
232
|
+
const msgLen = 32;
|
233
|
+
return {
|
234
|
+
publicKeyLen,
|
235
|
+
msgLen,
|
236
|
+
keygen: (seed = randomBytes(64)) => {
|
237
|
+
ensureBytes(seed, 64);
|
238
|
+
const { publicKey, secretKey: sk } = KPKE.keygen(seed.subarray(0, 32));
|
239
|
+
const publicKeyHash = HASH256(publicKey);
|
240
|
+
// (dkPKE||ek||H(ek)||z)
|
241
|
+
const secretKey = secretCoder.encode([sk, publicKey, publicKeyHash, seed.subarray(32)]);
|
242
|
+
cleanBytes(sk, publicKeyHash);
|
243
|
+
return { publicKey, secretKey };
|
244
|
+
},
|
245
|
+
encapsulate: (publicKey, msg = randomBytes(32)) => {
|
246
|
+
ensureBytes(publicKey, publicKeyLen);
|
247
|
+
ensureBytes(msg, msgLen);
|
248
|
+
if (!FIPS203)
|
249
|
+
msg = HASH256(msg); // NOTE: ML-KEM doesn't have this step!
|
250
|
+
else {
|
251
|
+
// FIPS-203 includes additional verification check for modulus
|
252
|
+
const eke = publicKey.subarray(0, 384 * opts.K);
|
253
|
+
const ek = KPKESecretCoder.encode(KPKESecretCoder.decode(eke.slice())); // Copy because of inplace encoding
|
254
|
+
// (Modulus check.) Perform the computation ek ← ByteEncode12(ByteDecode12(eke)).
|
255
|
+
// If ek = ̸ eke, the input is invalid. (See Section 4.2.1.)
|
256
|
+
if (!equalBytes(ek, eke)) {
|
257
|
+
cleanBytes(ek);
|
258
|
+
throw new Error('ML-KEM.encapsulate: wrong publicKey modulus');
|
259
|
+
}
|
260
|
+
cleanBytes(ek);
|
261
|
+
}
|
262
|
+
const kr = HASH512.create().update(msg).update(HASH256(publicKey)).digest(); // derive randomness
|
263
|
+
const cipherText = KPKE.encrypt(publicKey, msg, kr.subarray(32, 64));
|
264
|
+
if (FIPS203)
|
265
|
+
return { cipherText, sharedSecret: kr.subarray(0, 32) };
|
266
|
+
const cipherTextHash = HASH256(cipherText);
|
267
|
+
const sharedSecret = KDF.create({})
|
268
|
+
.update(kr.subarray(0, 32))
|
269
|
+
.update(cipherTextHash)
|
270
|
+
.digest();
|
271
|
+
cleanBytes(kr, cipherTextHash);
|
272
|
+
return { cipherText, sharedSecret };
|
273
|
+
},
|
274
|
+
decapsulate: (cipherText, secretKey) => {
|
275
|
+
ensureBytes(secretKey, secretKeyLen); // 768*k + 96
|
276
|
+
ensureBytes(cipherText, cipherTextLen); // 32(du*k + dv)
|
277
|
+
const [sk, publicKey, publicKeyHash, z] = secretCoder.decode(secretKey);
|
278
|
+
const msg = KPKE.decrypt(cipherText, sk);
|
279
|
+
const kr = HASH512.create().update(msg).update(publicKeyHash).digest(); // derive randomness, Khat, rHat = G(mHat || h)
|
280
|
+
const Khat = kr.subarray(0, 32);
|
281
|
+
const cipherText2 = KPKE.encrypt(publicKey, msg, kr.subarray(32, 64)); // re-encrypt using the derived randomness
|
282
|
+
const isValid = equalBytes(cipherText, cipherText2); // if ciphertexts do not match, “implicitly reject”
|
283
|
+
if (FIPS203) {
|
284
|
+
const Kbar = KDF.create({ dkLen: 32 }).update(z).update(cipherText).digest();
|
285
|
+
cleanBytes(msg, cipherText2, !isValid ? Khat : Kbar);
|
286
|
+
return isValid ? Khat : Kbar;
|
287
|
+
}
|
288
|
+
const cipherTextHash = HASH256(cipherText);
|
289
|
+
const sharedSecret = KDF.create({ dkLen: 32 })
|
290
|
+
.update(isValid ? Khat : z)
|
291
|
+
.update(cipherTextHash)
|
292
|
+
.digest();
|
293
|
+
cleanBytes(msg, cipherTextHash, cipherText2, Khat, z);
|
294
|
+
return sharedSecret;
|
295
|
+
},
|
296
|
+
};
|
297
|
+
}
|
298
|
+
function PRF(l, key, nonce) {
|
299
|
+
const _nonce = new Uint8Array(16);
|
300
|
+
_nonce[0] = nonce;
|
301
|
+
return ctr(key, _nonce).encrypt(new Uint8Array(l));
|
302
|
+
}
|
303
|
+
const opts90s = { HASH256: sha256, HASH512: sha512, KDF: sha256, XOF: XOF_AES, PRF };
|
304
|
+
export const kyber512_90s = /* @__PURE__ */ createKyber({
|
305
|
+
...opts90s,
|
306
|
+
...PARAMS[512],
|
307
|
+
});
|
308
|
+
export const kyber768_90s = /* @__PURE__ */ createKyber({
|
309
|
+
...opts90s,
|
310
|
+
...PARAMS[768],
|
311
|
+
});
|
312
|
+
export const kyber1024_90s = /* @__PURE__ */ createKyber({
|
313
|
+
...opts90s,
|
314
|
+
...PARAMS[1024],
|
315
|
+
});
|
316
|
+
function shakePRF(dkLen, key, nonce) {
|
317
|
+
return shake256
|
318
|
+
.create({ dkLen })
|
319
|
+
.update(key)
|
320
|
+
.update(new Uint8Array([nonce]))
|
321
|
+
.digest();
|
322
|
+
}
|
323
|
+
const opts = {
|
324
|
+
HASH256: sha3_256,
|
325
|
+
HASH512: sha3_512,
|
326
|
+
KDF: shake256,
|
327
|
+
XOF: XOF128,
|
328
|
+
PRF: shakePRF,
|
329
|
+
};
|
330
|
+
export const kyber512 = /* @__PURE__ */ createKyber({
|
331
|
+
...opts,
|
332
|
+
...PARAMS[512],
|
333
|
+
});
|
334
|
+
export const kyber768 = /* @__PURE__ */ createKyber({
|
335
|
+
...opts,
|
336
|
+
...PARAMS[768],
|
337
|
+
});
|
338
|
+
export const kyber1024 = /* @__PURE__ */ createKyber({
|
339
|
+
...opts,
|
340
|
+
...PARAMS[1024],
|
341
|
+
});
|
342
|
+
/**
|
343
|
+
* FIPS-203 (draft) ML-KEM.
|
344
|
+
* Unsafe: we can't cross-verify, because there are no test vectors or other implementations.
|
345
|
+
*/
|
346
|
+
export const ml_kem512 = /* @__PURE__ */ createKyber({
|
347
|
+
...opts,
|
348
|
+
...PARAMS[512],
|
349
|
+
FIPS203: true,
|
350
|
+
});
|
351
|
+
export const ml_kem768 = /* @__PURE__ */ createKyber({
|
352
|
+
...opts,
|
353
|
+
...PARAMS[768],
|
354
|
+
FIPS203: true,
|
355
|
+
});
|
356
|
+
export const ml_kem1024 = /* @__PURE__ */ createKyber({
|
357
|
+
...opts,
|
358
|
+
...PARAMS[1024],
|
359
|
+
FIPS203: true,
|
360
|
+
});
|
361
|
+
//# sourceMappingURL=ml-kem.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"ml-kem.js","sourceRoot":"","sources":["../src/ml-kem.ts"],"names":[],"mappings":"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"}
|