@noble/curves 1.9.7 → 2.0.0-beta.2
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 +520 -505
- package/abstract/bls.d.ts +58 -120
- package/abstract/bls.d.ts.map +1 -1
- package/abstract/bls.js +108 -152
- package/abstract/bls.js.map +1 -1
- package/abstract/curve.d.ts +18 -54
- package/abstract/curve.d.ts.map +1 -1
- package/abstract/curve.js +30 -49
- package/abstract/curve.js.map +1 -1
- package/abstract/edwards.d.ts +18 -77
- package/abstract/edwards.d.ts.map +1 -1
- package/abstract/edwards.js +68 -144
- package/abstract/edwards.js.map +1 -1
- package/abstract/fft.js +14 -27
- package/abstract/fft.js.map +1 -1
- package/abstract/hash-to-curve.d.ts +35 -47
- package/abstract/hash-to-curve.d.ts.map +1 -1
- package/abstract/hash-to-curve.js +42 -46
- package/abstract/hash-to-curve.js.map +1 -1
- package/abstract/modular.d.ts +5 -17
- package/abstract/modular.d.ts.map +1 -1
- package/abstract/modular.js +170 -169
- package/abstract/modular.js.map +1 -1
- package/abstract/montgomery.d.ts +7 -12
- package/abstract/montgomery.d.ts.map +1 -1
- package/abstract/montgomery.js +22 -29
- package/abstract/montgomery.js.map +1 -1
- package/abstract/oprf.d.ts +282 -0
- package/abstract/oprf.d.ts.map +1 -0
- package/abstract/oprf.js +297 -0
- package/abstract/oprf.js.map +1 -0
- package/abstract/poseidon.d.ts.map +1 -1
- package/abstract/poseidon.js +26 -31
- package/abstract/poseidon.js.map +1 -1
- package/abstract/tower.d.ts.map +1 -1
- package/abstract/tower.js +43 -19
- package/abstract/tower.js.map +1 -1
- package/abstract/weierstrass.d.ts +77 -168
- package/abstract/weierstrass.d.ts.map +1 -1
- package/abstract/weierstrass.js +184 -389
- package/abstract/weierstrass.js.map +1 -1
- package/bls12-381.d.ts +5 -11
- package/bls12-381.d.ts.map +1 -1
- package/bls12-381.js +161 -181
- package/bls12-381.js.map +1 -1
- package/bn254.d.ts +59 -11
- package/bn254.d.ts.map +1 -1
- package/bn254.js +69 -97
- package/bn254.js.map +1 -1
- package/ed25519.d.ts +33 -48
- package/ed25519.d.ts.map +1 -1
- package/ed25519.js +147 -161
- package/ed25519.js.map +1 -1
- package/ed448.d.ts +27 -36
- package/ed448.d.ts.map +1 -1
- package/ed448.js +143 -164
- package/ed448.js.map +1 -1
- package/index.d.ts +1 -0
- package/index.js +20 -4
- package/index.js.map +1 -1
- package/misc.d.ts +10 -14
- package/misc.d.ts.map +1 -1
- package/misc.js +53 -62
- package/misc.js.map +1 -1
- package/nist.d.ts +31 -16
- package/nist.d.ts.map +1 -1
- package/nist.js +75 -64
- package/nist.js.map +1 -1
- package/package.json +20 -234
- package/secp256k1.d.ts +17 -30
- package/secp256k1.d.ts.map +1 -1
- package/secp256k1.js +59 -73
- package/secp256k1.js.map +1 -1
- package/src/abstract/bls.ts +207 -354
- package/src/abstract/curve.ts +25 -84
- package/src/abstract/edwards.ts +68 -193
- package/src/abstract/hash-to-curve.ts +71 -85
- package/src/abstract/modular.ts +150 -134
- package/src/abstract/montgomery.ts +28 -35
- package/src/abstract/oprf.ts +600 -0
- package/src/abstract/poseidon.ts +6 -8
- package/src/abstract/tower.ts +0 -3
- package/src/abstract/weierstrass.ts +203 -525
- package/src/bls12-381.ts +133 -139
- package/src/bn254.ts +69 -93
- package/src/ed25519.ts +106 -133
- package/src/ed448.ts +111 -138
- package/src/index.ts +19 -3
- package/src/misc.ts +68 -51
- package/src/nist.ts +77 -70
- package/src/secp256k1.ts +46 -81
- package/src/utils.ts +67 -137
- package/src/webcrypto.ts +403 -0
- package/utils.d.ts +31 -38
- package/utils.d.ts.map +1 -1
- package/utils.js +66 -185
- package/utils.js.map +1 -1
- package/webcrypto.d.ts +99 -0
- package/webcrypto.d.ts.map +1 -0
- package/webcrypto.js +256 -0
- package/webcrypto.js.map +1 -0
- package/_shortw_utils.d.ts +0 -19
- package/_shortw_utils.d.ts.map +0 -1
- package/_shortw_utils.js +0 -20
- package/_shortw_utils.js.map +0 -1
- package/abstract/utils.d.ts +0 -78
- package/abstract/utils.d.ts.map +0 -1
- package/abstract/utils.js +0 -73
- package/abstract/utils.js.map +0 -1
- package/esm/_shortw_utils.d.ts +0 -19
- package/esm/_shortw_utils.d.ts.map +0 -1
- package/esm/_shortw_utils.js +0 -16
- package/esm/_shortw_utils.js.map +0 -1
- package/esm/abstract/bls.d.ts +0 -190
- package/esm/abstract/bls.d.ts.map +0 -1
- package/esm/abstract/bls.js +0 -408
- package/esm/abstract/bls.js.map +0 -1
- package/esm/abstract/curve.d.ts +0 -231
- package/esm/abstract/curve.d.ts.map +0 -1
- package/esm/abstract/curve.js +0 -465
- package/esm/abstract/curve.js.map +0 -1
- package/esm/abstract/edwards.d.ts +0 -243
- package/esm/abstract/edwards.d.ts.map +0 -1
- package/esm/abstract/edwards.js +0 -627
- package/esm/abstract/edwards.js.map +0 -1
- package/esm/abstract/fft.d.ts +0 -122
- package/esm/abstract/fft.d.ts.map +0 -1
- package/esm/abstract/fft.js +0 -425
- package/esm/abstract/fft.js.map +0 -1
- package/esm/abstract/hash-to-curve.d.ts +0 -102
- package/esm/abstract/hash-to-curve.d.ts.map +0 -1
- package/esm/abstract/hash-to-curve.js +0 -203
- package/esm/abstract/hash-to-curve.js.map +0 -1
- package/esm/abstract/modular.d.ts +0 -171
- package/esm/abstract/modular.d.ts.map +0 -1
- package/esm/abstract/modular.js +0 -530
- package/esm/abstract/modular.js.map +0 -1
- package/esm/abstract/montgomery.d.ts +0 -30
- package/esm/abstract/montgomery.d.ts.map +0 -1
- package/esm/abstract/montgomery.js +0 -157
- package/esm/abstract/montgomery.js.map +0 -1
- package/esm/abstract/poseidon.d.ts +0 -68
- package/esm/abstract/poseidon.d.ts.map +0 -1
- package/esm/abstract/poseidon.js +0 -296
- package/esm/abstract/poseidon.js.map +0 -1
- package/esm/abstract/tower.d.ts +0 -95
- package/esm/abstract/tower.d.ts.map +0 -1
- package/esm/abstract/tower.js +0 -714
- package/esm/abstract/tower.js.map +0 -1
- package/esm/abstract/utils.d.ts +0 -78
- package/esm/abstract/utils.d.ts.map +0 -1
- package/esm/abstract/utils.js +0 -70
- package/esm/abstract/utils.js.map +0 -1
- package/esm/abstract/weierstrass.d.ts +0 -416
- package/esm/abstract/weierstrass.d.ts.map +0 -1
- package/esm/abstract/weierstrass.js +0 -1413
- package/esm/abstract/weierstrass.js.map +0 -1
- package/esm/bls12-381.d.ts +0 -16
- package/esm/bls12-381.d.ts.map +0 -1
- package/esm/bls12-381.js +0 -705
- package/esm/bls12-381.js.map +0 -1
- package/esm/bn254.d.ts +0 -18
- package/esm/bn254.d.ts.map +0 -1
- package/esm/bn254.js +0 -214
- package/esm/bn254.js.map +0 -1
- package/esm/ed25519.d.ts +0 -106
- package/esm/ed25519.d.ts.map +0 -1
- package/esm/ed25519.js +0 -467
- package/esm/ed25519.js.map +0 -1
- package/esm/ed448.d.ts +0 -100
- package/esm/ed448.d.ts.map +0 -1
- package/esm/ed448.js +0 -459
- package/esm/ed448.js.map +0 -1
- package/esm/index.d.ts +0 -2
- package/esm/index.d.ts.map +0 -1
- package/esm/index.js +0 -17
- package/esm/index.js.map +0 -1
- package/esm/jubjub.d.ts +0 -12
- package/esm/jubjub.d.ts.map +0 -1
- package/esm/jubjub.js +0 -12
- package/esm/jubjub.js.map +0 -1
- package/esm/misc.d.ts +0 -19
- package/esm/misc.d.ts.map +0 -1
- package/esm/misc.js +0 -109
- package/esm/misc.js.map +0 -1
- package/esm/nist.d.ts +0 -21
- package/esm/nist.d.ts.map +0 -1
- package/esm/nist.js +0 -132
- package/esm/nist.js.map +0 -1
- package/esm/p256.d.ts +0 -16
- package/esm/p256.d.ts.map +0 -1
- package/esm/p256.js +0 -16
- package/esm/p256.js.map +0 -1
- package/esm/p384.d.ts +0 -16
- package/esm/p384.d.ts.map +0 -1
- package/esm/p384.js +0 -16
- package/esm/p384.js.map +0 -1
- package/esm/p521.d.ts +0 -16
- package/esm/p521.d.ts.map +0 -1
- package/esm/p521.js +0 -16
- package/esm/p521.js.map +0 -1
- package/esm/package.json +0 -4
- package/esm/pasta.d.ts +0 -10
- package/esm/pasta.d.ts.map +0 -1
- package/esm/pasta.js +0 -10
- package/esm/pasta.js.map +0 -1
- package/esm/secp256k1.d.ts +0 -89
- package/esm/secp256k1.d.ts.map +0 -1
- package/esm/secp256k1.js +0 -294
- package/esm/secp256k1.js.map +0 -1
- package/esm/utils.d.ts +0 -110
- package/esm/utils.d.ts.map +0 -1
- package/esm/utils.js +0 -322
- package/esm/utils.js.map +0 -1
- package/jubjub.d.ts +0 -12
- package/jubjub.d.ts.map +0 -1
- package/jubjub.js +0 -15
- package/jubjub.js.map +0 -1
- package/p256.d.ts +0 -16
- package/p256.d.ts.map +0 -1
- package/p256.js +0 -13
- package/p256.js.map +0 -1
- package/p384.d.ts +0 -16
- package/p384.d.ts.map +0 -1
- package/p384.js +0 -13
- package/p384.js.map +0 -1
- package/p521.d.ts +0 -16
- package/p521.d.ts.map +0 -1
- package/p521.js +0 -13
- package/p521.js.map +0 -1
- package/pasta.d.ts +0 -10
- package/pasta.d.ts.map +0 -1
- package/pasta.js +0 -13
- package/pasta.js.map +0 -1
- package/src/_shortw_utils.ts +0 -21
- package/src/abstract/utils.ts +0 -80
- package/src/jubjub.ts +0 -12
- package/src/p256.ts +0 -15
- package/src/p384.ts +0 -15
- package/src/p521.ts +0 -15
- package/src/package.json +0 -3
- package/src/pasta.ts +0 -9
package/abstract/edwards.js
CHANGED
|
@@ -1,9 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.PrimeEdwardsPoint = void 0;
|
|
4
|
-
exports.edwards = edwards;
|
|
5
|
-
exports.eddsa = eddsa;
|
|
6
|
-
exports.twistedEdwards = twistedEdwards;
|
|
7
1
|
/**
|
|
8
2
|
* Twisted Edwards curve. The formula is: ax² + y² = 1 + dx²y².
|
|
9
3
|
* For design rationale of types / exports, see weierstrass module documentation.
|
|
@@ -11,9 +5,9 @@ exports.twistedEdwards = twistedEdwards;
|
|
|
11
5
|
* @module
|
|
12
6
|
*/
|
|
13
7
|
/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
8
|
+
import { abool, abytes, aInRange, bytesToHex, bytesToNumberLE, concatBytes, copyBytes, hexToBytes, isBytes, memoized, notImplemented, validateObject, randomBytes as wcRandomBytes, } from "../utils.js";
|
|
9
|
+
import { createCurveFields, createKeygen, normalizeZ, wNAF, } from "./curve.js";
|
|
10
|
+
import {} from "./modular.js";
|
|
17
11
|
// Be friendly to bad ECMAScript parsers by not using bigint literals
|
|
18
12
|
// prettier-ignore
|
|
19
13
|
const _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _8n = BigInt(8);
|
|
@@ -24,12 +18,12 @@ function isEdValidXY(Fp, CURVE, x, y) {
|
|
|
24
18
|
const right = Fp.add(Fp.ONE, Fp.mul(CURVE.d, Fp.mul(x2, y2)));
|
|
25
19
|
return Fp.eql(left, right);
|
|
26
20
|
}
|
|
27
|
-
function edwards(params, extraOpts = {}) {
|
|
28
|
-
const validated = (
|
|
21
|
+
export function edwards(params, extraOpts = {}) {
|
|
22
|
+
const validated = createCurveFields('edwards', params, extraOpts, extraOpts.FpFnLE);
|
|
29
23
|
const { Fp, Fn } = validated;
|
|
30
24
|
let CURVE = validated.CURVE;
|
|
31
25
|
const { h: cofactor } = CURVE;
|
|
32
|
-
(
|
|
26
|
+
validateObject(extraOpts, {}, { uvRatio: 'function' });
|
|
33
27
|
// Important:
|
|
34
28
|
// There are some places where Fp.BYTES is used instead of nByteLength.
|
|
35
29
|
// So far, everything has been tested with curves of Fp.BYTES == nByteLength.
|
|
@@ -56,16 +50,16 @@ function edwards(params, extraOpts = {}) {
|
|
|
56
50
|
*/
|
|
57
51
|
function acoord(title, n, banZero = false) {
|
|
58
52
|
const min = banZero ? _1n : _0n;
|
|
59
|
-
|
|
53
|
+
aInRange('coordinate ' + title, n, min, MASK);
|
|
60
54
|
return n;
|
|
61
55
|
}
|
|
62
|
-
function
|
|
56
|
+
function aedpoint(other) {
|
|
63
57
|
if (!(other instanceof Point))
|
|
64
|
-
throw new Error('
|
|
58
|
+
throw new Error('EdwardsPoint expected');
|
|
65
59
|
}
|
|
66
60
|
// Converts Extended point to default (x, y) coordinates.
|
|
67
61
|
// Can accept precomputed Z^-1 - for example, from invertBatch.
|
|
68
|
-
const toAffineMemo =
|
|
62
|
+
const toAffineMemo = memoized((p, iz) => {
|
|
69
63
|
const { X, Y, Z } = p;
|
|
70
64
|
const is0 = p.is0();
|
|
71
65
|
if (iz == null)
|
|
@@ -79,7 +73,7 @@ function edwards(params, extraOpts = {}) {
|
|
|
79
73
|
throw new Error('invZ was invalid');
|
|
80
74
|
return { x, y };
|
|
81
75
|
});
|
|
82
|
-
const assertValidMemo =
|
|
76
|
+
const assertValidMemo = memoized((p) => {
|
|
83
77
|
const { a, d } = CURVE;
|
|
84
78
|
if (p.is0())
|
|
85
79
|
throw new Error('bad point: ZERO'); // TODO: optimize, with vars below?
|
|
@@ -105,6 +99,18 @@ function edwards(params, extraOpts = {}) {
|
|
|
105
99
|
// Extended Point works in extended coordinates: (X, Y, Z, T) ∋ (x=X/Z, y=Y/Z, T=xy).
|
|
106
100
|
// https://en.wikipedia.org/wiki/Twisted_Edwards_curve#Extended_coordinates
|
|
107
101
|
class Point {
|
|
102
|
+
// base / generator point
|
|
103
|
+
static BASE = new Point(CURVE.Gx, CURVE.Gy, _1n, modP(CURVE.Gx * CURVE.Gy));
|
|
104
|
+
// zero / infinity / identity point
|
|
105
|
+
static ZERO = new Point(_0n, _1n, _1n, _0n); // 0, 1, 1, 0
|
|
106
|
+
// math field
|
|
107
|
+
static Fp = Fp;
|
|
108
|
+
// scalar field
|
|
109
|
+
static Fn = Fn;
|
|
110
|
+
X;
|
|
111
|
+
Y;
|
|
112
|
+
Z;
|
|
113
|
+
T;
|
|
108
114
|
constructor(X, Y, Z, T) {
|
|
109
115
|
this.X = acoord('x', X);
|
|
110
116
|
this.Y = acoord('y', Y);
|
|
@@ -127,18 +133,18 @@ function edwards(params, extraOpts = {}) {
|
|
|
127
133
|
static fromBytes(bytes, zip215 = false) {
|
|
128
134
|
const len = Fp.BYTES;
|
|
129
135
|
const { a, d } = CURVE;
|
|
130
|
-
bytes =
|
|
131
|
-
(
|
|
132
|
-
const normed =
|
|
136
|
+
bytes = copyBytes(abytes(bytes, len, 'point'));
|
|
137
|
+
abool(zip215, 'zip215');
|
|
138
|
+
const normed = copyBytes(bytes); // copy again, we'll manipulate it
|
|
133
139
|
const lastByte = bytes[len - 1]; // select last byte
|
|
134
140
|
normed[len - 1] = lastByte & ~0x80; // clear last bit
|
|
135
|
-
const y =
|
|
141
|
+
const y = bytesToNumberLE(normed);
|
|
136
142
|
// zip215=true is good for consensus-critical apps. =false follows RFC8032 / NIST186-5.
|
|
137
143
|
// RFC8032 prohibits >= p, but ZIP215 doesn't
|
|
138
144
|
// zip215=true: 0 <= y < MASK (2^256 for ed25519)
|
|
139
145
|
// zip215=false: 0 <= y < P (2^255-19 for ed25519)
|
|
140
146
|
const max = zip215 ? MASK : Fp.ORDER;
|
|
141
|
-
|
|
147
|
+
aInRange('point.y', y, _0n, max);
|
|
142
148
|
// Ed25519: x² = (y²-1)/(dy²+1) mod p. Ed448: x² = (y²-1)/(dy²-1) mod p. Generic case:
|
|
143
149
|
// ax²+y²=1+dx²y² => y²-1=dx²y²-ax² => y²-1=x²(dy²-a) => x²=(y²-1)/(dy²-a)
|
|
144
150
|
const y2 = modP(y * y); // denominator is always non-0 mod p.
|
|
@@ -156,8 +162,8 @@ function edwards(params, extraOpts = {}) {
|
|
|
156
162
|
x = modP(-x); // if x_0 != x mod 2, set x = p-x
|
|
157
163
|
return Point.fromAffine({ x, y });
|
|
158
164
|
}
|
|
159
|
-
static fromHex(
|
|
160
|
-
return Point.fromBytes((
|
|
165
|
+
static fromHex(hex, zip215 = false) {
|
|
166
|
+
return Point.fromBytes(hexToBytes(hex), zip215);
|
|
161
167
|
}
|
|
162
168
|
get x() {
|
|
163
169
|
return this.toAffine().x;
|
|
@@ -177,7 +183,7 @@ function edwards(params, extraOpts = {}) {
|
|
|
177
183
|
}
|
|
178
184
|
// Compare one point to another.
|
|
179
185
|
equals(other) {
|
|
180
|
-
|
|
186
|
+
aedpoint(other);
|
|
181
187
|
const { X: X1, Y: Y1, Z: Z1 } = this;
|
|
182
188
|
const { X: X2, Y: Y2, Z: Z2 } = other;
|
|
183
189
|
const X1Z2 = modP(X1 * Z2);
|
|
@@ -218,7 +224,7 @@ function edwards(params, extraOpts = {}) {
|
|
|
218
224
|
// https://hyperelliptic.org/EFD/g1p/auto-twisted-extended.html#addition-add-2008-hwcd
|
|
219
225
|
// Cost: 9M + 1*a + 1*d + 7add.
|
|
220
226
|
add(other) {
|
|
221
|
-
|
|
227
|
+
aedpoint(other);
|
|
222
228
|
const { a, d } = CURVE;
|
|
223
229
|
const { X: X1, Y: Y1, Z: Z1, T: T1 } = this;
|
|
224
230
|
const { X: X2, Y: Y2, Z: Z2, T: T2 } = other;
|
|
@@ -244,8 +250,8 @@ function edwards(params, extraOpts = {}) {
|
|
|
244
250
|
// 1 <= scalar < L
|
|
245
251
|
if (!Fn.isValidNot0(scalar))
|
|
246
252
|
throw new Error('invalid scalar: expected 1 <= sc < curve.n');
|
|
247
|
-
const { p, f } = wnaf.cached(this, scalar, (p) =>
|
|
248
|
-
return
|
|
253
|
+
const { p, f } = wnaf.cached(this, scalar, (p) => normalizeZ(Point, p));
|
|
254
|
+
return normalizeZ(Point, [p, f])[0];
|
|
249
255
|
}
|
|
250
256
|
// Non-constant-time multiplication. Uses double-and-add algorithm.
|
|
251
257
|
// It's faster, but should only be used when you don't care about
|
|
@@ -260,7 +266,7 @@ function edwards(params, extraOpts = {}) {
|
|
|
260
266
|
return Point.ZERO;
|
|
261
267
|
if (this.is0() || scalar === _1n)
|
|
262
268
|
return this;
|
|
263
|
-
return wnaf.unsafe(this, scalar, (p) =>
|
|
269
|
+
return wnaf.unsafe(this, scalar, (p) => normalizeZ(Point, p), acc);
|
|
264
270
|
}
|
|
265
271
|
// Checks if point is of small order.
|
|
266
272
|
// If you add something to small order point, you will have "dirty"
|
|
@@ -294,46 +300,13 @@ function edwards(params, extraOpts = {}) {
|
|
|
294
300
|
return bytes;
|
|
295
301
|
}
|
|
296
302
|
toHex() {
|
|
297
|
-
return
|
|
303
|
+
return bytesToHex(this.toBytes());
|
|
298
304
|
}
|
|
299
305
|
toString() {
|
|
300
306
|
return `<Point ${this.is0() ? 'ZERO' : this.toHex()}>`;
|
|
301
307
|
}
|
|
302
|
-
// TODO: remove
|
|
303
|
-
get ex() {
|
|
304
|
-
return this.X;
|
|
305
|
-
}
|
|
306
|
-
get ey() {
|
|
307
|
-
return this.Y;
|
|
308
|
-
}
|
|
309
|
-
get ez() {
|
|
310
|
-
return this.Z;
|
|
311
|
-
}
|
|
312
|
-
get et() {
|
|
313
|
-
return this.T;
|
|
314
|
-
}
|
|
315
|
-
static normalizeZ(points) {
|
|
316
|
-
return (0, curve_ts_1.normalizeZ)(Point, points);
|
|
317
|
-
}
|
|
318
|
-
static msm(points, scalars) {
|
|
319
|
-
return (0, curve_ts_1.pippenger)(Point, Fn, points, scalars);
|
|
320
|
-
}
|
|
321
|
-
_setWindowSize(windowSize) {
|
|
322
|
-
this.precompute(windowSize);
|
|
323
|
-
}
|
|
324
|
-
toRawBytes() {
|
|
325
|
-
return this.toBytes();
|
|
326
|
-
}
|
|
327
308
|
}
|
|
328
|
-
|
|
329
|
-
Point.BASE = new Point(CURVE.Gx, CURVE.Gy, _1n, modP(CURVE.Gx * CURVE.Gy));
|
|
330
|
-
// zero / infinity / identity point
|
|
331
|
-
Point.ZERO = new Point(_0n, _1n, _1n, _0n); // 0, 1, 1, 0
|
|
332
|
-
// math field
|
|
333
|
-
Point.Fp = Fp;
|
|
334
|
-
// scalar field
|
|
335
|
-
Point.Fn = Fn;
|
|
336
|
-
const wnaf = new curve_ts_1.wNAF(Point, Fn.BITS);
|
|
309
|
+
const wnaf = new wNAF(Point, Fn.BITS);
|
|
337
310
|
Point.BASE.precompute(8); // Enable precomputes. Slows down first publicKey computation by 20ms.
|
|
338
311
|
return Point;
|
|
339
312
|
}
|
|
@@ -342,16 +315,21 @@ function edwards(params, extraOpts = {}) {
|
|
|
342
315
|
* These points eliminate cofactor issues by representing equivalence classes
|
|
343
316
|
* of Edwards curve points.
|
|
344
317
|
*/
|
|
345
|
-
class PrimeEdwardsPoint {
|
|
318
|
+
export class PrimeEdwardsPoint {
|
|
319
|
+
static BASE;
|
|
320
|
+
static ZERO;
|
|
321
|
+
static Fp;
|
|
322
|
+
static Fn;
|
|
323
|
+
ep;
|
|
346
324
|
constructor(ep) {
|
|
347
325
|
this.ep = ep;
|
|
348
326
|
}
|
|
349
327
|
// Static methods that must be implemented by subclasses
|
|
350
328
|
static fromBytes(_bytes) {
|
|
351
|
-
|
|
329
|
+
notImplemented();
|
|
352
330
|
}
|
|
353
331
|
static fromHex(_hex) {
|
|
354
|
-
|
|
332
|
+
notImplemented();
|
|
355
333
|
}
|
|
356
334
|
get x() {
|
|
357
335
|
return this.toAffine().x;
|
|
@@ -371,7 +349,7 @@ class PrimeEdwardsPoint {
|
|
|
371
349
|
return this.ep.toAffine(invertedZ);
|
|
372
350
|
}
|
|
373
351
|
toHex() {
|
|
374
|
-
return
|
|
352
|
+
return bytesToHex(this.toBytes());
|
|
375
353
|
}
|
|
376
354
|
toString() {
|
|
377
355
|
return this.toHex();
|
|
@@ -405,19 +383,14 @@ class PrimeEdwardsPoint {
|
|
|
405
383
|
precompute(windowSize, isLazy) {
|
|
406
384
|
return this.init(this.ep.precompute(windowSize, isLazy));
|
|
407
385
|
}
|
|
408
|
-
/** @deprecated use `toBytes` */
|
|
409
|
-
toRawBytes() {
|
|
410
|
-
return this.toBytes();
|
|
411
|
-
}
|
|
412
386
|
}
|
|
413
|
-
exports.PrimeEdwardsPoint = PrimeEdwardsPoint;
|
|
414
387
|
/**
|
|
415
388
|
* Initializes EdDSA signatures over given Edwards curve.
|
|
416
389
|
*/
|
|
417
|
-
function eddsa(Point, cHash, eddsaOpts = {}) {
|
|
390
|
+
export function eddsa(Point, cHash, eddsaOpts = {}) {
|
|
418
391
|
if (typeof cHash !== 'function')
|
|
419
392
|
throw new Error('"hash" function param is required');
|
|
420
|
-
(
|
|
393
|
+
validateObject(eddsaOpts, {}, {
|
|
421
394
|
adjustScalarBytes: 'function',
|
|
422
395
|
randomBytes: 'function',
|
|
423
396
|
domain: 'function',
|
|
@@ -426,26 +399,26 @@ function eddsa(Point, cHash, eddsaOpts = {}) {
|
|
|
426
399
|
});
|
|
427
400
|
const { prehash } = eddsaOpts;
|
|
428
401
|
const { BASE, Fp, Fn } = Point;
|
|
429
|
-
const randomBytes = eddsaOpts.randomBytes ||
|
|
402
|
+
const randomBytes = eddsaOpts.randomBytes || wcRandomBytes;
|
|
430
403
|
const adjustScalarBytes = eddsaOpts.adjustScalarBytes || ((bytes) => bytes);
|
|
431
404
|
const domain = eddsaOpts.domain ||
|
|
432
405
|
((data, ctx, phflag) => {
|
|
433
|
-
(
|
|
406
|
+
abool(phflag, 'phflag');
|
|
434
407
|
if (ctx.length || phflag)
|
|
435
408
|
throw new Error('Contexts/pre-hash are not supported');
|
|
436
409
|
return data;
|
|
437
410
|
}); // NOOP
|
|
438
411
|
// Little-endian SHA512 with modulo n
|
|
439
412
|
function modN_LE(hash) {
|
|
440
|
-
return Fn.create(
|
|
413
|
+
return Fn.create(bytesToNumberLE(hash)); // Not Fn.fromBytes: it has length limit
|
|
441
414
|
}
|
|
442
415
|
// Get the hashed private scalar per RFC8032 5.1.5
|
|
443
416
|
function getPrivateScalar(key) {
|
|
444
417
|
const len = lengths.secretKey;
|
|
445
|
-
key
|
|
418
|
+
abytes(key, lengths.secretKey, 'secretKey');
|
|
446
419
|
// Hash private key with curve's hash function to produce uniformingly random input
|
|
447
420
|
// Check byte lengths: ensure(64, h(ensure(32, key)))
|
|
448
|
-
const hashed = (
|
|
421
|
+
const hashed = abytes(cHash(key), 2 * len, 'hashedSecretKey');
|
|
449
422
|
const head = adjustScalarBytes(hashed.slice(0, len)); // clear first half bits, produce FE
|
|
450
423
|
const prefix = hashed.slice(len, 2 * len); // second half is called key prefix (5.1.6)
|
|
451
424
|
const scalar = modN_LE(head); // The actual private scalar
|
|
@@ -464,12 +437,12 @@ function eddsa(Point, cHash, eddsaOpts = {}) {
|
|
|
464
437
|
}
|
|
465
438
|
// int('LE', SHA512(dom2(F, C) || msgs)) mod N
|
|
466
439
|
function hashDomainToScalar(context = Uint8Array.of(), ...msgs) {
|
|
467
|
-
const msg =
|
|
468
|
-
return modN_LE(cHash(domain(msg, (
|
|
440
|
+
const msg = concatBytes(...msgs);
|
|
441
|
+
return modN_LE(cHash(domain(msg, abytes(context, undefined, 'context'), !!prehash)));
|
|
469
442
|
}
|
|
470
|
-
/** Signs message with
|
|
443
|
+
/** Signs message with secret key. RFC8032 5.1.6 */
|
|
471
444
|
function sign(msg, secretKey, options = {}) {
|
|
472
|
-
msg = (
|
|
445
|
+
msg = abytes(msg, undefined, 'message');
|
|
473
446
|
if (prehash)
|
|
474
447
|
msg = prehash(msg); // for ed25519ph etc.
|
|
475
448
|
const { prefix, scalar, pointBytes } = getExtendedPublicKey(secretKey);
|
|
@@ -479,8 +452,8 @@ function eddsa(Point, cHash, eddsaOpts = {}) {
|
|
|
479
452
|
const s = Fn.create(r + k * scalar); // S = (r + k * s) mod L
|
|
480
453
|
if (!Fn.isValid(s))
|
|
481
454
|
throw new Error('sign failed: invalid s'); // 0 <= s < L
|
|
482
|
-
const rs =
|
|
483
|
-
return (
|
|
455
|
+
const rs = concatBytes(R, Fn.toBytes(s));
|
|
456
|
+
return abytes(rs, lengths.signature, 'result');
|
|
484
457
|
}
|
|
485
458
|
// verification rule is either zip215 or rfc8032 / nist186-5. Consult fromHex:
|
|
486
459
|
const verifyOpts = { zip215: true };
|
|
@@ -491,16 +464,16 @@ function eddsa(Point, cHash, eddsaOpts = {}) {
|
|
|
491
464
|
function verify(sig, msg, publicKey, options = verifyOpts) {
|
|
492
465
|
const { context, zip215 } = options;
|
|
493
466
|
const len = lengths.signature;
|
|
494
|
-
sig = (
|
|
495
|
-
msg = (
|
|
496
|
-
publicKey = (
|
|
467
|
+
sig = abytes(sig, len, 'signature');
|
|
468
|
+
msg = abytes(msg, undefined, 'message');
|
|
469
|
+
publicKey = abytes(publicKey, lengths.publicKey, 'publicKey');
|
|
497
470
|
if (zip215 !== undefined)
|
|
498
|
-
(
|
|
471
|
+
abool(zip215, 'zip215');
|
|
499
472
|
if (prehash)
|
|
500
473
|
msg = prehash(msg); // for ed25519ph, etc
|
|
501
474
|
const mid = len / 2;
|
|
502
475
|
const r = sig.subarray(0, mid);
|
|
503
|
-
const s =
|
|
476
|
+
const s = bytesToNumberLE(sig.subarray(mid, len));
|
|
504
477
|
let A, R, SB;
|
|
505
478
|
try {
|
|
506
479
|
// zip215=true is good for consensus-critical apps. =false follows RFC8032 / NIST186-5.
|
|
@@ -529,14 +502,10 @@ function eddsa(Point, cHash, eddsaOpts = {}) {
|
|
|
529
502
|
seed: _size,
|
|
530
503
|
};
|
|
531
504
|
function randomSecretKey(seed = randomBytes(lengths.seed)) {
|
|
532
|
-
return (
|
|
533
|
-
}
|
|
534
|
-
function keygen(seed) {
|
|
535
|
-
const secretKey = utils.randomSecretKey(seed);
|
|
536
|
-
return { secretKey, publicKey: getPublicKey(secretKey) };
|
|
505
|
+
return abytes(seed, lengths.seed, 'seed');
|
|
537
506
|
}
|
|
538
507
|
function isValidSecretKey(key) {
|
|
539
|
-
return
|
|
508
|
+
return isBytes(key) && key.length === Fn.BYTES;
|
|
540
509
|
}
|
|
541
510
|
function isValidPublicKey(key, zip215) {
|
|
542
511
|
try {
|
|
@@ -571,19 +540,13 @@ function eddsa(Point, cHash, eddsaOpts = {}) {
|
|
|
571
540
|
},
|
|
572
541
|
toMontgomerySecret(secretKey) {
|
|
573
542
|
const size = lengths.secretKey;
|
|
574
|
-
(
|
|
543
|
+
abytes(secretKey, size);
|
|
575
544
|
const hashed = cHash(secretKey.subarray(0, size));
|
|
576
545
|
return adjustScalarBytes(hashed).subarray(0, size);
|
|
577
546
|
},
|
|
578
|
-
/** @deprecated */
|
|
579
|
-
randomPrivateKey: randomSecretKey,
|
|
580
|
-
/** @deprecated */
|
|
581
|
-
precompute(windowSize = 8, point = Point.BASE) {
|
|
582
|
-
return point.precompute(windowSize, false);
|
|
583
|
-
},
|
|
584
547
|
};
|
|
585
548
|
return Object.freeze({
|
|
586
|
-
keygen,
|
|
549
|
+
keygen: createKeygen(randomSecretKey, getPublicKey),
|
|
587
550
|
getPublicKey,
|
|
588
551
|
sign,
|
|
589
552
|
verify,
|
|
@@ -592,43 +555,4 @@ function eddsa(Point, cHash, eddsaOpts = {}) {
|
|
|
592
555
|
lengths,
|
|
593
556
|
});
|
|
594
557
|
}
|
|
595
|
-
function _eddsa_legacy_opts_to_new(c) {
|
|
596
|
-
const CURVE = {
|
|
597
|
-
a: c.a,
|
|
598
|
-
d: c.d,
|
|
599
|
-
p: c.Fp.ORDER,
|
|
600
|
-
n: c.n,
|
|
601
|
-
h: c.h,
|
|
602
|
-
Gx: c.Gx,
|
|
603
|
-
Gy: c.Gy,
|
|
604
|
-
};
|
|
605
|
-
const Fp = c.Fp;
|
|
606
|
-
const Fn = (0, modular_ts_1.Field)(CURVE.n, c.nBitLength, true);
|
|
607
|
-
const curveOpts = { Fp, Fn, uvRatio: c.uvRatio };
|
|
608
|
-
const eddsaOpts = {
|
|
609
|
-
randomBytes: c.randomBytes,
|
|
610
|
-
adjustScalarBytes: c.adjustScalarBytes,
|
|
611
|
-
domain: c.domain,
|
|
612
|
-
prehash: c.prehash,
|
|
613
|
-
mapToCurve: c.mapToCurve,
|
|
614
|
-
};
|
|
615
|
-
return { CURVE, curveOpts, hash: c.hash, eddsaOpts };
|
|
616
|
-
}
|
|
617
|
-
function _eddsa_new_output_to_legacy(c, eddsa) {
|
|
618
|
-
const Point = eddsa.Point;
|
|
619
|
-
const legacy = Object.assign({}, eddsa, {
|
|
620
|
-
ExtendedPoint: Point,
|
|
621
|
-
CURVE: c,
|
|
622
|
-
nBitLength: Point.Fn.BITS,
|
|
623
|
-
nByteLength: Point.Fn.BYTES,
|
|
624
|
-
});
|
|
625
|
-
return legacy;
|
|
626
|
-
}
|
|
627
|
-
// TODO: remove. Use eddsa
|
|
628
|
-
function twistedEdwards(c) {
|
|
629
|
-
const { CURVE, curveOpts, hash, eddsaOpts } = _eddsa_legacy_opts_to_new(c);
|
|
630
|
-
const Point = edwards(CURVE, curveOpts);
|
|
631
|
-
const EDDSA = eddsa(Point, hash, eddsaOpts);
|
|
632
|
-
return _eddsa_new_output_to_legacy(c, EDDSA);
|
|
633
|
-
}
|
|
634
558
|
//# sourceMappingURL=edwards.js.map
|
package/abstract/edwards.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"edwards.js","sourceRoot":"","sources":["../src/abstract/edwards.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"edwards.js","sourceRoot":"","sources":["../src/abstract/edwards.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,sEAAsE;AACtE,OAAO,EACL,KAAK,EACL,MAAM,EACN,QAAQ,EACR,UAAU,EACV,eAAe,EACf,WAAW,EACX,SAAS,EACT,UAAU,EACV,OAAO,EACP,QAAQ,EACR,cAAc,EACd,cAAc,EACd,WAAW,IAAI,aAAa,GAG7B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,UAAU,EACV,IAAI,GAKL,MAAM,YAAY,CAAC;AACpB,OAAO,EAAe,MAAM,cAAc,CAAC;AAE3C,qEAAqE;AACrE,kBAAkB;AAClB,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AA0IzE,SAAS,WAAW,CAAC,EAAkB,EAAE,KAAkB,EAAE,CAAS,EAAE,CAAS;IAC/E,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACrB,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACrB,MAAM,IAAI,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAC7C,MAAM,KAAK,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9D,OAAO,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,MAAmB,EAAE,YAA8B,EAAE;IAC3E,MAAM,SAAS,GAAG,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IACpF,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,SAAS,CAAC;IAC7B,IAAI,KAAK,GAAG,SAAS,CAAC,KAAoB,CAAC;IAC3C,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IAC9B,cAAc,CAAC,SAAS,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;IAEvD,aAAa;IACb,uEAAuE;IACvE,6EAA6E;IAC7E,qDAAqD;IACrD,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;IACjD,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,qBAAqB;IAE/D,YAAY;IACZ,MAAM,OAAO,GACX,SAAS,CAAC,OAAO;QACjB,CAAC,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE;YACxB,IAAI,CAAC;gBACH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACzD,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;YACxC,CAAC;QACH,CAAC,CAAC,CAAC;IAEL,sDAAsD;IACtD,iEAAiE;IACjE,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IAEvD;;;OAGG;IACH,SAAS,MAAM,CAAC,KAAa,EAAE,CAAS,EAAE,OAAO,GAAG,KAAK;QACvD,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QAChC,QAAQ,CAAC,aAAa,GAAG,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QAC9C,OAAO,CAAC,CAAC;IACX,CAAC;IAED,SAAS,QAAQ,CAAC,KAAc;QAC9B,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC1E,CAAC;IACD,yDAAyD;IACzD,+DAA+D;IAC/D,MAAM,YAAY,GAAG,QAAQ,CAAC,CAAC,CAAQ,EAAE,EAAW,EAAuB,EAAE;QAC3E,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;QACtB,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;QACpB,IAAI,EAAE,IAAI,IAAI;YAAE,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAY,CAAC,CAAC,2BAA2B;QACnF,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QACvB,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QACvB,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACzB,IAAI,GAAG;YAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;QACnC,IAAI,EAAE,KAAK,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACpD,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IAClB,CAAC,CAAC,CAAC;IACH,MAAM,eAAe,GAAG,QAAQ,CAAC,CAAC,CAAQ,EAAE,EAAE;QAC5C,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,CAAC,GAAG,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,mCAAmC;QACpF,uDAAuD;QACvD,+EAA+E;QAC/E,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;QACzB,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK;QAC7B,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK;QAC7B,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK;QAC7B,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK;QAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM;QAChC,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,eAAe;QACvD,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa;QAC/D,IAAI,IAAI,KAAK,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC7E,6EAA6E;QAC7E,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACvB,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACvB,IAAI,EAAE,KAAK,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QACxE,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,qFAAqF;IACrF,2EAA2E;IAC3E,MAAM,KAAK;QACT,yBAAyB;QACzB,MAAM,CAAU,IAAI,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;QACrF,mCAAmC;QACnC,MAAM,CAAU,IAAI,GAAG,IAAI,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,aAAa;QACnE,aAAa;QACb,MAAM,CAAU,EAAE,GAAG,EAAE,CAAC;QACxB,eAAe;QACf,MAAM,CAAU,EAAE,GAAG,EAAE,CAAC;QAEf,CAAC,CAAS;QACV,CAAC,CAAS;QACV,CAAC,CAAS;QACV,CAAC,CAAS;QAEnB,YAAY,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,CAAS;YACpD,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACxB,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACxB,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;YAC9B,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACxB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;QAED,MAAM,CAAC,KAAK;YACV,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,CAAC,UAAU,CAAC,CAAsB;YACtC,IAAI,CAAC,YAAY,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;YACtE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;YACzB,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACf,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACf,OAAO,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC3C,CAAC;QAED,gCAAgC;QAChC,MAAM,CAAC,SAAS,CAAC,KAAiB,EAAE,MAAM,GAAG,KAAK;YAChD,MAAM,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC;YACrB,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC;YACvB,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;YAC/C,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YACxB,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,kCAAkC;YACnE,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,mBAAmB;YACpD,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,QAAQ,GAAG,CAAC,IAAI,CAAC,CAAC,iBAAiB;YACrD,MAAM,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;YAElC,uFAAuF;YACvF,6CAA6C;YAC7C,kDAAkD;YAClD,kDAAkD;YAClD,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;YACrC,QAAQ,CAAC,SAAS,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YAEjC,sFAAsF;YACtF,0EAA0E;YAC1E,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,qCAAqC;YAC7D,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,aAAa;YACvC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB;YAC5C,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;YACpD,IAAI,CAAC,OAAO;gBAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;YACjE,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,yDAAyD;YAC3F,MAAM,aAAa,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,gBAAgB;YAC/D,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,GAAG,IAAI,aAAa;gBACvC,2BAA2B;gBAC3B,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;YAC9C,IAAI,aAAa,KAAK,MAAM;gBAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,iCAAiC;YAC7E,OAAO,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACpC,CAAC;QAED,MAAM,CAAC,OAAO,CAAC,GAAW,EAAE,MAAM,GAAG,KAAK;YACxC,OAAO,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;QAClD,CAAC;QAED,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC3B,CAAC;QACD,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC3B,CAAC;QAED,UAAU,CAAC,aAAqB,CAAC,EAAE,MAAM,GAAG,IAAI;YAC9C,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YACnC,IAAI,CAAC,MAAM;gBAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,gBAAgB;YACjD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,mFAAmF;QACnF,cAAc;YACZ,eAAe,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC;QAED,gCAAgC;QAChC,MAAM,CAAC,KAAY;YACjB,QAAQ,CAAC,KAAK,CAAC,CAAC;YAChB,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC;YACrC,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC;YACtC,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;YAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;YAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;YAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;YAC3B,OAAO,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,CAAC;QACxC,CAAC;QAED,GAAG;YACD,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;QAED,MAAM;YACJ,8DAA8D;YAC9D,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACjE,CAAC;QAED,yCAAyC;QACzC,sFAAsF;QACtF,oCAAoC;QACpC,MAAM;YACJ,MAAM,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC;YACpB,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC;YACrC,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,UAAU;YACnC,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,UAAU;YACnC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY;YACjD,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU;YACjC,MAAM,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC;YACrB,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,mBAAmB;YAC9D,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU;YAC3B,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU;YAC3B,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU;YAC3B,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW;YACnC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW;YACnC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW;YACnC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW;YACnC,OAAO,IAAI,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACnC,CAAC;QAED,0CAA0C;QAC1C,sFAAsF;QACtF,+BAA+B;QAC/B,GAAG,CAAC,KAAY;YACd,QAAQ,CAAC,KAAK,CAAC,CAAC;YAChB,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC;YACvB,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC;YAC5C,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC;YAC7C,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,YAAY;YACrC,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,YAAY;YACrC,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,cAAc;YAC3C,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,YAAY;YACrC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,0BAA0B;YACzE,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU;YAC3B,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU;YAC3B,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY;YACvC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW;YACnC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW;YACnC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW;YACnC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW;YACnC,OAAO,IAAI,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACnC,CAAC;QAED,QAAQ,CAAC,KAAY;YACnB,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QAClC,CAAC;QAED,gCAAgC;QAChC,QAAQ,CAAC,MAAc;YACrB,kBAAkB;YAClB,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;YAC3F,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;YACxE,OAAO,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtC,CAAC;QAED,mEAAmE;QACnE,iEAAiE;QACjE,gDAAgD;QAChD,8CAA8C;QAC9C,qFAAqF;QACrF,cAAc,CAAC,MAAc,EAAE,GAAG,GAAG,KAAK,CAAC,IAAI;YAC7C,kBAAkB;YAClB,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;YACvF,IAAI,MAAM,KAAK,GAAG;gBAAE,OAAO,KAAK,CAAC,IAAI,CAAC;YACtC,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,MAAM,KAAK,GAAG;gBAAE,OAAO,IAAI,CAAC;YAC9C,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACrE,CAAC;QAED,qCAAqC;QACrC,mEAAmE;QACnE,gCAAgC;QAChC,8DAA8D;QAC9D,YAAY;YACV,OAAO,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE,CAAC;QAC7C,CAAC;QAED,iEAAiE;QACjE,yCAAyC;QACzC,aAAa;YACX,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QAC1C,CAAC;QAED,yDAAyD;QACzD,+DAA+D;QAC/D,QAAQ,CAAC,SAAkB;YACzB,OAAO,YAAY,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACvC,CAAC;QAED,aAAa;YACX,IAAI,QAAQ,KAAK,GAAG;gBAAE,OAAO,IAAI,CAAC;YAClC,OAAO,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QACvC,CAAC;QAED,OAAO;YACL,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YACjC,0DAA0D;YAC1D,MAAM,KAAK,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAC5B,6CAA6C;YAC7C,qFAAqF;YACrF,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9C,OAAO,KAAK,CAAC;QACf,CAAC;QACD,KAAK;YACH,OAAO,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QACpC,CAAC;QAED,QAAQ;YACN,OAAO,UAAU,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC;QACzD,CAAC;;IAEH,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;IACtC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,sEAAsE;IAChG,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,MAAM,OAAgB,iBAAiB;IAGrC,MAAM,CAAC,IAAI,CAAyB;IACpC,MAAM,CAAC,IAAI,CAAyB;IACpC,MAAM,CAAC,EAAE,CAAiB;IAC1B,MAAM,CAAC,EAAE,CAAiB;IAEP,EAAE,CAAe;IAEpC,YAAY,EAAgB;QAC1B,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACf,CAAC;IAMD,wDAAwD;IACxD,MAAM,CAAC,SAAS,CAAC,MAAkB;QACjC,cAAc,EAAE,CAAC;IACnB,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,IAAY;QACzB,cAAc,EAAE,CAAC;IACnB,CAAC;IAED,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC3B,CAAC;IACD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED,yBAAyB;IACzB,aAAa;QACX,+BAA+B;QAC/B,OAAO,IAAW,CAAC;IACrB,CAAC;IAED,cAAc;QACZ,IAAI,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC;IAC3B,CAAC;IAED,QAAQ,CAAC,SAAkB;QACzB,OAAO,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IACrC,CAAC;IAED,KAAK;QACH,OAAO,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IACpC,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC;IAED,aAAa;QACX,OAAO,IAAI,CAAC;IACd,CAAC;IAED,YAAY;QACV,OAAO,KAAK,CAAC;IACf,CAAC;IAED,GAAG,CAAC,KAAQ;QACV,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACvB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED,QAAQ,CAAC,KAAQ;QACf,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACvB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/C,CAAC;IAED,QAAQ,CAAC,MAAc;QACrB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAC7C,CAAC;IAED,cAAc,CAAC,MAAc;QAC3B,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;IACnD,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;IACrC,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;IACrC,CAAC;IAED,UAAU,CAAC,UAAmB,EAAE,MAAgB;QAC9C,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;IAC3D,CAAC;CAMF;AAED;;GAEG;AACH,MAAM,UAAU,KAAK,CAAC,KAAuB,EAAE,KAAY,EAAE,YAAuB,EAAE;IACpF,IAAI,OAAO,KAAK,KAAK,UAAU;QAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACtF,cAAc,CACZ,SAAS,EACT,EAAE,EACF;QACE,iBAAiB,EAAE,UAAU;QAC7B,WAAW,EAAE,UAAU;QACvB,MAAM,EAAE,UAAU;QAClB,OAAO,EAAE,UAAU;QACnB,UAAU,EAAE,UAAU;KACvB,CACF,CAAC;IAEF,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS,CAAC;IAC9B,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC;IAE/B,MAAM,WAAW,GAAG,SAAS,CAAC,WAAW,IAAI,aAAa,CAAC;IAC3D,MAAM,iBAAiB,GAAG,SAAS,CAAC,iBAAiB,IAAI,CAAC,CAAC,KAAiB,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;IACxF,MAAM,MAAM,GACV,SAAS,CAAC,MAAM;QAChB,CAAC,CAAC,IAAgB,EAAE,GAAe,EAAE,MAAe,EAAE,EAAE;YACtD,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YACxB,IAAI,GAAG,CAAC,MAAM,IAAI,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;YACjF,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC,CAAC,OAAO;IAEb,qCAAqC;IACrC,SAAS,OAAO,CAAC,IAAgB;QAC/B,OAAO,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,wCAAwC;IACnF,CAAC;IAED,kDAAkD;IAClD,SAAS,gBAAgB,CAAC,GAAe;QACvC,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC;QAC9B,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QAC5C,mFAAmF;QACnF,qDAAqD;QACrD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,iBAAiB,CAAC,CAAC;QAC9D,MAAM,IAAI,GAAG,iBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,oCAAoC;QAC1F,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,2CAA2C;QACtF,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,4BAA4B;QAC1D,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAClC,CAAC;IAED,4EAA4E;IAC5E,SAAS,oBAAoB,CAAC,SAAqB;QACjD,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAC7D,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,wCAAwC;QAC7E,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;QACnC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;IACrD,CAAC;IAED,+CAA+C;IAC/C,SAAS,YAAY,CAAC,SAAqB;QACzC,OAAO,oBAAoB,CAAC,SAAS,CAAC,CAAC,UAAU,CAAC;IACpD,CAAC;IAED,8CAA8C;IAC9C,SAAS,kBAAkB,CAAC,UAAsB,UAAU,CAAC,EAAE,EAAE,EAAE,GAAG,IAAkB;QACtF,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,IAAI,CAAC,CAAC;QACjC,OAAO,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACvF,CAAC;IAED,mDAAmD;IACnD,SAAS,IAAI,CACX,GAAe,EACf,SAAqB,EACrB,UAAoC,EAAE;QAEtC,GAAG,GAAG,MAAM,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QACxC,IAAI,OAAO;YAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,qBAAqB;QACtD,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC;QACvE,MAAM,CAAC,GAAG,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,oCAAoC;QAChG,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS;QAC/C,MAAM,CAAC,GAAG,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC,kBAAkB;QACrF,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,wBAAwB;QAC7D,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC,aAAa;QAC5E,MAAM,EAAE,GAAG,WAAW,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACzC,OAAO,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACjD,CAAC;IAED,8EAA8E;IAC9E,MAAM,UAAU,GAA+C,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAEhF;;;OAGG;IACH,SAAS,MAAM,CACb,GAAe,EACf,GAAe,EACf,SAAqB,EACrB,OAAO,GAAG,UAAU;QAEpB,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;QACpC,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC;QAC9B,GAAG,GAAG,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC;QACpC,GAAG,GAAG,MAAM,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QACxC,SAAS,GAAG,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QAC9D,IAAI,MAAM,KAAK,SAAS;YAAE,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAClD,IAAI,OAAO;YAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,qBAAqB;QAEtD,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;QACpB,MAAM,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC/B,MAAM,CAAC,GAAG,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QAClD,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACb,IAAI,CAAC;YACH,uFAAuF;YACvF,kDAAkD;YAClD,kDAAkD;YAClD,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YACvC,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YAC/B,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,4BAA4B;QAC3D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,YAAY,EAAE;YAAE,OAAO,KAAK,CAAC,CAAC,2CAA2C;QAE1F,MAAM,CAAC,GAAG,kBAAkB,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,GAAG,CAAC,CAAC;QACrE,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;QACvC,0BAA0B;QAC1B,4BAA4B;QAC5B,OAAO,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,aAAa,EAAE,CAAC,GAAG,EAAE,CAAC;IAChD,CAAC;IAED,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,+BAA+B;IACvD,MAAM,OAAO,GAAG;QACd,SAAS,EAAE,KAAK;QAChB,SAAS,EAAE,KAAK;QAChB,SAAS,EAAE,CAAC,GAAG,KAAK;QACpB,IAAI,EAAE,KAAK;KACZ,CAAC;IACF,SAAS,eAAe,CAAC,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;QACvD,OAAO,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC5C,CAAC;IAED,SAAS,gBAAgB,CAAC,GAAe;QACvC,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,KAAK,EAAE,CAAC,KAAK,CAAC;IACjD,CAAC;IAED,SAAS,gBAAgB,CAAC,GAAe,EAAE,MAAgB;QACzD,IAAI,CAAC;YACH,OAAO,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACxC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAAG;QACZ,oBAAoB;QACpB,eAAe;QACf,gBAAgB;QAChB,gBAAgB;QAChB;;;;;;;;WAQG;QACH,YAAY,CAAC,SAAqB;YAChC,MAAM,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;YACzC,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC;YAC/B,MAAM,OAAO,GAAG,IAAI,KAAK,EAAE,CAAC;YAC5B,IAAI,CAAC,OAAO,IAAI,IAAI,KAAK,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;YAC/E,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;YACxE,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACvB,CAAC;QACD,kBAAkB,CAAC,SAAqB;YACtC,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC;YAC/B,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YACxB,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;YAClD,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QACrD,CAAC;KACF,CAAC;IAEF,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,MAAM,EAAE,YAAY,CAAC,eAAe,EAAE,YAAY,CAAC;QACnD,YAAY;QACZ,IAAI;QACJ,MAAM;QACN,KAAK;QACL,KAAK;QACL,OAAO;KACR,CAAkB,CAAC;AACtB,CAAC"}
|
package/abstract/fft.js
CHANGED
|
@@ -1,15 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.FFTCore = void 0;
|
|
4
|
-
exports.isPowerOfTwo = isPowerOfTwo;
|
|
5
|
-
exports.nextPowerOfTwo = nextPowerOfTwo;
|
|
6
|
-
exports.reverseBits = reverseBits;
|
|
7
|
-
exports.log2 = log2;
|
|
8
|
-
exports.bitReversalInplace = bitReversalInplace;
|
|
9
|
-
exports.bitReversalPermutation = bitReversalPermutation;
|
|
10
|
-
exports.rootsOfUnity = rootsOfUnity;
|
|
11
|
-
exports.FFT = FFT;
|
|
12
|
-
exports.poly = poly;
|
|
13
1
|
function checkU32(n) {
|
|
14
2
|
// 0xff_ff_ff_ff
|
|
15
3
|
if (!Number.isSafeInteger(n) || n < 0 || n > 0xffffffff)
|
|
@@ -17,17 +5,17 @@ function checkU32(n) {
|
|
|
17
5
|
return n;
|
|
18
6
|
}
|
|
19
7
|
/** Checks if integer is in form of `1 << X` */
|
|
20
|
-
function isPowerOfTwo(x) {
|
|
8
|
+
export function isPowerOfTwo(x) {
|
|
21
9
|
checkU32(x);
|
|
22
10
|
return (x & (x - 1)) === 0 && x !== 0;
|
|
23
11
|
}
|
|
24
|
-
function nextPowerOfTwo(n) {
|
|
12
|
+
export function nextPowerOfTwo(n) {
|
|
25
13
|
checkU32(n);
|
|
26
14
|
if (n <= 1)
|
|
27
15
|
return 1;
|
|
28
16
|
return (1 << (log2(n - 1) + 1)) >>> 0;
|
|
29
17
|
}
|
|
30
|
-
function reverseBits(n, bits) {
|
|
18
|
+
export function reverseBits(n, bits) {
|
|
31
19
|
checkU32(n);
|
|
32
20
|
let reversed = 0;
|
|
33
21
|
for (let i = 0; i < bits; i++, n >>>= 1)
|
|
@@ -35,7 +23,7 @@ function reverseBits(n, bits) {
|
|
|
35
23
|
return reversed;
|
|
36
24
|
}
|
|
37
25
|
/** Similar to `bitLen(x)-1` but much faster for small integers, like indices */
|
|
38
|
-
function log2(n) {
|
|
26
|
+
export function log2(n) {
|
|
39
27
|
checkU32(n);
|
|
40
28
|
return 31 - Math.clz32(n);
|
|
41
29
|
}
|
|
@@ -44,7 +32,7 @@ function log2(n) {
|
|
|
44
32
|
* array on even and odd indices, then it applied again to each part,
|
|
45
33
|
* which is core of fft
|
|
46
34
|
*/
|
|
47
|
-
function bitReversalInplace(values) {
|
|
35
|
+
export function bitReversalInplace(values) {
|
|
48
36
|
const n = values.length;
|
|
49
37
|
if (n < 2 || !isPowerOfTwo(n))
|
|
50
38
|
throw new Error('n must be a power of 2 and greater than 1. Got ' + n);
|
|
@@ -59,7 +47,7 @@ function bitReversalInplace(values) {
|
|
|
59
47
|
}
|
|
60
48
|
return values;
|
|
61
49
|
}
|
|
62
|
-
function bitReversalPermutation(values) {
|
|
50
|
+
export function bitReversalPermutation(values) {
|
|
63
51
|
return bitReversalInplace(values.slice());
|
|
64
52
|
}
|
|
65
53
|
const _1n = /** @__PURE__ */ BigInt(1);
|
|
@@ -70,7 +58,7 @@ function findGenerator(field) {
|
|
|
70
58
|
return G;
|
|
71
59
|
}
|
|
72
60
|
/** We limit roots up to 2**31, which is a lot: 2-billion polynomimal should be rare. */
|
|
73
|
-
function rootsOfUnity(field, generator) {
|
|
61
|
+
export function rootsOfUnity(field, generator) {
|
|
74
62
|
// Factor field.ORDER-1 as oddFactor * 2^powerOfTwo
|
|
75
63
|
let oddFactor = field.ORDER - _1n;
|
|
76
64
|
let powerOfTwo = 0;
|
|
@@ -155,7 +143,7 @@ function rootsOfUnity(field, generator) {
|
|
|
155
143
|
* Cyclic NTT: Rq = Zq[x]/(x^n-1). butterfly_DIT+loop_DIT OR butterfly_DIF+loop_DIT, roots are omega
|
|
156
144
|
* Negacyclic NTT: Rq = Zq[x]/(x^n+1). butterfly_DIT+loop_DIF, at least for mlkem / mldsa
|
|
157
145
|
*/
|
|
158
|
-
const FFTCore = (F, coreOpts) => {
|
|
146
|
+
export const FFTCore = (F, coreOpts) => {
|
|
159
147
|
const { N, roots, dit, invertButterflies = false, skipStages = 0, brp = true } = coreOpts;
|
|
160
148
|
const bits = log2(N);
|
|
161
149
|
if (!isPowerOfTwo(N))
|
|
@@ -205,22 +193,21 @@ const FFTCore = (F, coreOpts) => {
|
|
|
205
193
|
return values;
|
|
206
194
|
};
|
|
207
195
|
};
|
|
208
|
-
exports.FFTCore = FFTCore;
|
|
209
196
|
/**
|
|
210
197
|
* NTT aka FFT over finite field (NOT over complex numbers).
|
|
211
198
|
* Naming mirrors other libraries.
|
|
212
199
|
*/
|
|
213
|
-
function FFT(roots, opts) {
|
|
200
|
+
export function FFT(roots, opts) {
|
|
214
201
|
const getLoop = (N, roots, brpInput = false, brpOutput = false) => {
|
|
215
202
|
if (brpInput && brpOutput) {
|
|
216
203
|
// we cannot optimize this case, but lets support it anyway
|
|
217
|
-
return (values) =>
|
|
204
|
+
return (values) => FFTCore(opts, { N, roots, dit: false, brp: false })(bitReversalInplace(values));
|
|
218
205
|
}
|
|
219
206
|
if (brpInput)
|
|
220
|
-
return
|
|
207
|
+
return FFTCore(opts, { N, roots, dit: true, brp: false });
|
|
221
208
|
if (brpOutput)
|
|
222
|
-
return
|
|
223
|
-
return
|
|
209
|
+
return FFTCore(opts, { N, roots, dit: false, brp: false });
|
|
210
|
+
return FFTCore(opts, { N, roots, dit: true, brp: true }); // all natural
|
|
224
211
|
};
|
|
225
212
|
return {
|
|
226
213
|
direct(values, brpInput = false, brpOutput = false) {
|
|
@@ -245,7 +232,7 @@ function FFT(roots, opts) {
|
|
|
245
232
|
},
|
|
246
233
|
};
|
|
247
234
|
}
|
|
248
|
-
function poly(field, roots, create, fft, length) {
|
|
235
|
+
export function poly(field, roots, create, fft, length) {
|
|
249
236
|
const F = field;
|
|
250
237
|
const _create = create ||
|
|
251
238
|
((len, elm) => new Array(len).fill(elm ?? F.ZERO));
|