@noble/curves 1.9.6 → 2.0.0-beta.1
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 +267 -421
- package/abstract/bls.d.ts +49 -111
- 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 +4 -45
- package/abstract/curve.d.ts.map +1 -1
- package/abstract/curve.js +22 -47
- package/abstract/curve.js.map +1 -1
- package/abstract/edwards.d.ts +11 -68
- package/abstract/edwards.d.ts.map +1 -1
- package/abstract/edwards.js +62 -134
- 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 +11 -24
- package/abstract/hash-to-curve.d.ts.map +1 -1
- package/abstract/hash-to-curve.js +30 -35
- 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 +166 -167
- package/abstract/modular.js.map +1 -1
- package/abstract/montgomery.d.ts +4 -9
- package/abstract/montgomery.d.ts.map +1 -1
- package/abstract/montgomery.js +15 -18
- 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.js +20 -24
- 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 +11 -145
- package/abstract/weierstrass.d.ts.map +1 -1
- package/abstract/weierstrass.js +122 -331
- package/abstract/weierstrass.js.map +1 -1
- package/bls12-381.d.ts +2 -2
- package/bls12-381.d.ts.map +1 -1
- package/bls12-381.js +171 -180
- package/bls12-381.js.map +1 -1
- package/bn254.d.ts +58 -10
- package/bn254.d.ts.map +1 -1
- package/bn254.js +69 -97
- package/bn254.js.map +1 -1
- package/ed25519.d.ts +12 -31
- package/ed25519.d.ts.map +1 -1
- package/ed25519.js +95 -137
- package/ed25519.js.map +1 -1
- package/ed448.d.ts +11 -29
- package/ed448.d.ts.map +1 -1
- package/ed448.js +85 -123
- package/ed448.js.map +1 -1
- package/index.js +1 -1
- package/misc.d.ts +10 -14
- package/misc.d.ts.map +1 -1
- package/misc.js +51 -60
- package/misc.js.map +1 -1
- package/nist.d.ts +11 -14
- package/nist.d.ts.map +1 -1
- package/nist.js +46 -55
- package/nist.js.map +1 -1
- package/package.json +8 -223
- package/secp256k1.d.ts +7 -23
- package/secp256k1.d.ts.map +1 -1
- package/secp256k1.js +47 -60
- package/secp256k1.js.map +1 -1
- package/src/abstract/bls.ts +197 -344
- package/src/abstract/curve.ts +7 -80
- package/src/abstract/edwards.ts +49 -171
- package/src/abstract/hash-to-curve.ts +32 -45
- package/src/abstract/modular.ts +144 -130
- package/src/abstract/montgomery.ts +19 -20
- package/src/abstract/oprf.ts +600 -0
- package/src/abstract/tower.ts +0 -3
- package/src/abstract/weierstrass.ts +69 -438
- package/src/bls12-381.ts +143 -138
- package/src/bn254.ts +65 -89
- package/src/ed25519.ts +53 -105
- package/src/ed448.ts +32 -77
- package/src/index.ts +1 -1
- package/src/misc.ts +66 -49
- package/src/nist.ts +48 -57
- package/src/secp256k1.ts +32 -65
- package/src/utils.ts +41 -61
- package/src/webcrypto.ts +362 -0
- package/utils.d.ts +28 -19
- package/utils.d.ts.map +1 -1
- package/utils.js +45 -121
- package/utils.js.map +1 -1
- package/webcrypto.d.ts +47 -0
- package/webcrypto.d.ts.map +1 -0
- package/webcrypto.js +231 -0
- package/webcrypto.js.map +1 -0
- 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 -5
- package/esm/abstract/utils.d.ts.map +0 -1
- package/esm/abstract/utils.js +0 -7
- package/esm/abstract/utils.js.map +0 -1
- package/esm/abstract/weierstrass.d.ts +0 -413
- 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/src/_shortw_utils.ts +0 -21
- package/src/abstract/utils.ts +0 -7
- 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
|
@@ -1,157 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Montgomery curve methods. It's not really whole montgomery curve,
|
|
3
|
-
* just bunch of very specific methods for X25519 / X448 from
|
|
4
|
-
* [RFC 7748](https://www.rfc-editor.org/rfc/rfc7748)
|
|
5
|
-
* @module
|
|
6
|
-
*/
|
|
7
|
-
/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */
|
|
8
|
-
import { _validateObject, abytes, aInRange, bytesToNumberLE, ensureBytes, numberToBytesLE, randomBytes, } from "../utils.js";
|
|
9
|
-
import { mod } from "./modular.js";
|
|
10
|
-
const _0n = BigInt(0);
|
|
11
|
-
const _1n = BigInt(1);
|
|
12
|
-
const _2n = BigInt(2);
|
|
13
|
-
function validateOpts(curve) {
|
|
14
|
-
_validateObject(curve, {
|
|
15
|
-
adjustScalarBytes: 'function',
|
|
16
|
-
powPminus2: 'function',
|
|
17
|
-
});
|
|
18
|
-
return Object.freeze({ ...curve });
|
|
19
|
-
}
|
|
20
|
-
export function montgomery(curveDef) {
|
|
21
|
-
const CURVE = validateOpts(curveDef);
|
|
22
|
-
const { P, type, adjustScalarBytes, powPminus2, randomBytes: rand } = CURVE;
|
|
23
|
-
const is25519 = type === 'x25519';
|
|
24
|
-
if (!is25519 && type !== 'x448')
|
|
25
|
-
throw new Error('invalid type');
|
|
26
|
-
const randomBytes_ = rand || randomBytes;
|
|
27
|
-
const montgomeryBits = is25519 ? 255 : 448;
|
|
28
|
-
const fieldLen = is25519 ? 32 : 56;
|
|
29
|
-
const Gu = is25519 ? BigInt(9) : BigInt(5);
|
|
30
|
-
// RFC 7748 #5:
|
|
31
|
-
// The constant a24 is (486662 - 2) / 4 = 121665 for curve25519/X25519 and
|
|
32
|
-
// (156326 - 2) / 4 = 39081 for curve448/X448
|
|
33
|
-
// const a = is25519 ? 156326n : 486662n;
|
|
34
|
-
const a24 = is25519 ? BigInt(121665) : BigInt(39081);
|
|
35
|
-
// RFC: x25519 "the resulting integer is of the form 2^254 plus
|
|
36
|
-
// eight times a value between 0 and 2^251 - 1 (inclusive)"
|
|
37
|
-
// x448: "2^447 plus four times a value between 0 and 2^445 - 1 (inclusive)"
|
|
38
|
-
const minScalar = is25519 ? _2n ** BigInt(254) : _2n ** BigInt(447);
|
|
39
|
-
const maxAdded = is25519
|
|
40
|
-
? BigInt(8) * _2n ** BigInt(251) - _1n
|
|
41
|
-
: BigInt(4) * _2n ** BigInt(445) - _1n;
|
|
42
|
-
const maxScalar = minScalar + maxAdded + _1n; // (inclusive)
|
|
43
|
-
const modP = (n) => mod(n, P);
|
|
44
|
-
const GuBytes = encodeU(Gu);
|
|
45
|
-
function encodeU(u) {
|
|
46
|
-
return numberToBytesLE(modP(u), fieldLen);
|
|
47
|
-
}
|
|
48
|
-
function decodeU(u) {
|
|
49
|
-
const _u = ensureBytes('u coordinate', u, fieldLen);
|
|
50
|
-
// RFC: When receiving such an array, implementations of X25519
|
|
51
|
-
// (but not X448) MUST mask the most significant bit in the final byte.
|
|
52
|
-
if (is25519)
|
|
53
|
-
_u[31] &= 127; // 0b0111_1111
|
|
54
|
-
// RFC: Implementations MUST accept non-canonical values and process them as
|
|
55
|
-
// if they had been reduced modulo the field prime. The non-canonical
|
|
56
|
-
// values are 2^255 - 19 through 2^255 - 1 for X25519 and 2^448 - 2^224
|
|
57
|
-
// - 1 through 2^448 - 1 for X448.
|
|
58
|
-
return modP(bytesToNumberLE(_u));
|
|
59
|
-
}
|
|
60
|
-
function decodeScalar(scalar) {
|
|
61
|
-
return bytesToNumberLE(adjustScalarBytes(ensureBytes('scalar', scalar, fieldLen)));
|
|
62
|
-
}
|
|
63
|
-
function scalarMult(scalar, u) {
|
|
64
|
-
const pu = montgomeryLadder(decodeU(u), decodeScalar(scalar));
|
|
65
|
-
// Some public keys are useless, of low-order. Curve author doesn't think
|
|
66
|
-
// it needs to be validated, but we do it nonetheless.
|
|
67
|
-
// https://cr.yp.to/ecdh.html#validate
|
|
68
|
-
if (pu === _0n)
|
|
69
|
-
throw new Error('invalid private or public key received');
|
|
70
|
-
return encodeU(pu);
|
|
71
|
-
}
|
|
72
|
-
// Computes public key from private. By doing scalar multiplication of base point.
|
|
73
|
-
function scalarMultBase(scalar) {
|
|
74
|
-
return scalarMult(scalar, GuBytes);
|
|
75
|
-
}
|
|
76
|
-
// cswap from RFC7748 "example code"
|
|
77
|
-
function cswap(swap, x_2, x_3) {
|
|
78
|
-
// dummy = mask(swap) AND (x_2 XOR x_3)
|
|
79
|
-
// Where mask(swap) is the all-1 or all-0 word of the same length as x_2
|
|
80
|
-
// and x_3, computed, e.g., as mask(swap) = 0 - swap.
|
|
81
|
-
const dummy = modP(swap * (x_2 - x_3));
|
|
82
|
-
x_2 = modP(x_2 - dummy); // x_2 = x_2 XOR dummy
|
|
83
|
-
x_3 = modP(x_3 + dummy); // x_3 = x_3 XOR dummy
|
|
84
|
-
return { x_2, x_3 };
|
|
85
|
-
}
|
|
86
|
-
/**
|
|
87
|
-
* Montgomery x-only multiplication ladder.
|
|
88
|
-
* @param pointU u coordinate (x) on Montgomery Curve 25519
|
|
89
|
-
* @param scalar by which the point would be multiplied
|
|
90
|
-
* @returns new Point on Montgomery curve
|
|
91
|
-
*/
|
|
92
|
-
function montgomeryLadder(u, scalar) {
|
|
93
|
-
aInRange('u', u, _0n, P);
|
|
94
|
-
aInRange('scalar', scalar, minScalar, maxScalar);
|
|
95
|
-
const k = scalar;
|
|
96
|
-
const x_1 = u;
|
|
97
|
-
let x_2 = _1n;
|
|
98
|
-
let z_2 = _0n;
|
|
99
|
-
let x_3 = u;
|
|
100
|
-
let z_3 = _1n;
|
|
101
|
-
let swap = _0n;
|
|
102
|
-
for (let t = BigInt(montgomeryBits - 1); t >= _0n; t--) {
|
|
103
|
-
const k_t = (k >> t) & _1n;
|
|
104
|
-
swap ^= k_t;
|
|
105
|
-
({ x_2, x_3 } = cswap(swap, x_2, x_3));
|
|
106
|
-
({ x_2: z_2, x_3: z_3 } = cswap(swap, z_2, z_3));
|
|
107
|
-
swap = k_t;
|
|
108
|
-
const A = x_2 + z_2;
|
|
109
|
-
const AA = modP(A * A);
|
|
110
|
-
const B = x_2 - z_2;
|
|
111
|
-
const BB = modP(B * B);
|
|
112
|
-
const E = AA - BB;
|
|
113
|
-
const C = x_3 + z_3;
|
|
114
|
-
const D = x_3 - z_3;
|
|
115
|
-
const DA = modP(D * A);
|
|
116
|
-
const CB = modP(C * B);
|
|
117
|
-
const dacb = DA + CB;
|
|
118
|
-
const da_cb = DA - CB;
|
|
119
|
-
x_3 = modP(dacb * dacb);
|
|
120
|
-
z_3 = modP(x_1 * modP(da_cb * da_cb));
|
|
121
|
-
x_2 = modP(AA * BB);
|
|
122
|
-
z_2 = modP(E * (AA + modP(a24 * E)));
|
|
123
|
-
}
|
|
124
|
-
({ x_2, x_3 } = cswap(swap, x_2, x_3));
|
|
125
|
-
({ x_2: z_2, x_3: z_3 } = cswap(swap, z_2, z_3));
|
|
126
|
-
const z2 = powPminus2(z_2); // `Fp.pow(x, P - _2n)` is much slower equivalent
|
|
127
|
-
return modP(x_2 * z2); // Return x_2 * (z_2^(p - 2))
|
|
128
|
-
}
|
|
129
|
-
const lengths = {
|
|
130
|
-
secretKey: fieldLen,
|
|
131
|
-
publicKey: fieldLen,
|
|
132
|
-
seed: fieldLen,
|
|
133
|
-
};
|
|
134
|
-
const randomSecretKey = (seed = randomBytes_(fieldLen)) => {
|
|
135
|
-
abytes(seed, lengths.seed);
|
|
136
|
-
return seed;
|
|
137
|
-
};
|
|
138
|
-
function keygen(seed) {
|
|
139
|
-
const secretKey = randomSecretKey(seed);
|
|
140
|
-
return { secretKey, publicKey: scalarMultBase(secretKey) };
|
|
141
|
-
}
|
|
142
|
-
const utils = {
|
|
143
|
-
randomSecretKey,
|
|
144
|
-
randomPrivateKey: randomSecretKey,
|
|
145
|
-
};
|
|
146
|
-
return {
|
|
147
|
-
keygen,
|
|
148
|
-
getSharedSecret: (secretKey, publicKey) => scalarMult(secretKey, publicKey),
|
|
149
|
-
getPublicKey: (secretKey) => scalarMultBase(secretKey),
|
|
150
|
-
scalarMult,
|
|
151
|
-
scalarMultBase,
|
|
152
|
-
utils,
|
|
153
|
-
GuBytes: GuBytes.slice(),
|
|
154
|
-
lengths,
|
|
155
|
-
};
|
|
156
|
-
}
|
|
157
|
-
//# sourceMappingURL=montgomery.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"montgomery.js","sourceRoot":"","sources":["../../src/abstract/montgomery.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,sEAAsE;AACtE,OAAO,EACL,eAAe,EACf,MAAM,EACN,QAAQ,EACR,eAAe,EACf,WAAW,EACX,eAAe,EACf,WAAW,GACZ,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAEnC,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACtB,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACtB,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AA2BtB,SAAS,YAAY,CAAC,KAAgB;IACpC,eAAe,CAAC,KAAK,EAAE;QACrB,iBAAiB,EAAE,UAAU;QAC7B,UAAU,EAAE,UAAU;KACvB,CAAC,CAAC;IACH,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,EAAW,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,QAAmB;IAC5C,MAAM,KAAK,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IACrC,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,UAAU,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;IAC5E,MAAM,OAAO,GAAG,IAAI,KAAK,QAAQ,CAAC;IAClC,IAAI,CAAC,OAAO,IAAI,IAAI,KAAK,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;IACjE,MAAM,YAAY,GAAG,IAAI,IAAI,WAAW,CAAC;IAEzC,MAAM,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IAC3C,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACnC,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC3C,eAAe;IACf,0EAA0E;IAC1E,6CAA6C;IAC7C,yCAAyC;IACzC,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACrD,+DAA+D;IAC/D,2DAA2D;IAC3D,4EAA4E;IAC5E,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC;IACpE,MAAM,QAAQ,GAAG,OAAO;QACtB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG;QACtC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;IACzC,MAAM,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,GAAG,CAAC,CAAC,cAAc;IAC5D,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;IAC5B,SAAS,OAAO,CAAC,CAAS;QACxB,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC5C,CAAC;IACD,SAAS,OAAO,CAAC,CAAM;QACrB,MAAM,EAAE,GAAG,WAAW,CAAC,cAAc,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;QACpD,+DAA+D;QAC/D,uEAAuE;QACvE,IAAI,OAAO;YAAE,EAAE,CAAC,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,cAAc;QAC1C,4EAA4E;QAC5E,sEAAsE;QACtE,uEAAuE;QACvE,kCAAkC;QAClC,OAAO,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC;IACnC,CAAC;IACD,SAAS,YAAY,CAAC,MAAW;QAC/B,OAAO,eAAe,CAAC,iBAAiB,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IACrF,CAAC;IACD,SAAS,UAAU,CAAC,MAAW,EAAE,CAAM;QACrC,MAAM,EAAE,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;QAC9D,yEAAyE;QACzE,sDAAsD;QACtD,sCAAsC;QACtC,IAAI,EAAE,KAAK,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAC1E,OAAO,OAAO,CAAC,EAAE,CAAC,CAAC;IACrB,CAAC;IACD,kFAAkF;IAClF,SAAS,cAAc,CAAC,MAAW;QACjC,OAAO,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,CAAC;IAED,oCAAoC;IACpC,SAAS,KAAK,CAAC,IAAY,EAAE,GAAW,EAAE,GAAW;QACnD,uCAAuC;QACvC,wEAAwE;QACxE,qDAAqD;QACrD,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;QACvC,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,sBAAsB;QAC/C,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,sBAAsB;QAC/C,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IACtB,CAAC;IAED;;;;;OAKG;IACH,SAAS,gBAAgB,CAAC,CAAS,EAAE,MAAc;QACjD,QAAQ,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QACjD,MAAM,CAAC,GAAG,MAAM,CAAC;QACjB,MAAM,GAAG,GAAG,CAAC,CAAC;QACd,IAAI,GAAG,GAAG,GAAG,CAAC;QACd,IAAI,GAAG,GAAG,GAAG,CAAC;QACd,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,IAAI,GAAG,GAAG,GAAG,CAAC;QACd,IAAI,IAAI,GAAG,GAAG,CAAC;QACf,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,cAAc,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YACvD,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC;YAC3B,IAAI,IAAI,GAAG,CAAC;YACZ,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;YACvC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;YACjD,IAAI,GAAG,GAAG,CAAC;YAEX,MAAM,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;YACpB,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACvB,MAAM,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;YACpB,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACvB,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;YAClB,MAAM,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;YACpB,MAAM,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;YACpB,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACvB,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACvB,MAAM,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC;YACrB,MAAM,KAAK,GAAG,EAAE,GAAG,EAAE,CAAC;YACtB,GAAG,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;YACxB,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;YACtC,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;YACpB,GAAG,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACvC,CAAC;QACD,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QACvC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QACjD,MAAM,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,iDAAiD;QAC7E,OAAO,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,6BAA6B;IACtD,CAAC;IACD,MAAM,OAAO,GAAG;QACd,SAAS,EAAE,QAAQ;QACnB,SAAS,EAAE,QAAQ;QACnB,IAAI,EAAE,QAAQ;KACf,CAAC;IACF,MAAM,eAAe,GAAG,CAAC,IAAI,GAAG,YAAY,CAAC,QAAQ,CAAC,EAAE,EAAE;QACxD,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IACF,SAAS,MAAM,CAAC,IAAiB;QAC/B,MAAM,SAAS,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;QACxC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,CAAC,SAAS,CAAC,EAAE,CAAC;IAC7D,CAAC;IACD,MAAM,KAAK,GAAG;QACZ,eAAe;QACf,gBAAgB,EAAE,eAAe;KAClC,CAAC;IACF,OAAO;QACL,MAAM;QACN,eAAe,EAAE,CAAC,SAAc,EAAE,SAAc,EAAE,EAAE,CAAC,UAAU,CAAC,SAAS,EAAE,SAAS,CAAC;QACrF,YAAY,EAAE,CAAC,SAAc,EAAc,EAAE,CAAC,cAAc,CAAC,SAAS,CAAC;QACvE,UAAU;QACV,cAAc;QACd,KAAK;QACL,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE;QACxB,OAAO;KACR,CAAC;AACJ,CAAC"}
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
import { type IField } from './modular.ts';
|
|
2
|
-
export type PoseidonBasicOpts = {
|
|
3
|
-
Fp: IField<bigint>;
|
|
4
|
-
t: number;
|
|
5
|
-
roundsFull: number;
|
|
6
|
-
roundsPartial: number;
|
|
7
|
-
isSboxInverse?: boolean;
|
|
8
|
-
};
|
|
9
|
-
export type PoseidonGrainOpts = PoseidonBasicOpts & {
|
|
10
|
-
sboxPower?: number;
|
|
11
|
-
};
|
|
12
|
-
type PoseidonConstants = {
|
|
13
|
-
mds: bigint[][];
|
|
14
|
-
roundConstants: bigint[][];
|
|
15
|
-
};
|
|
16
|
-
export declare function grainGenConstants(opts: PoseidonGrainOpts, skipMDS?: number): PoseidonConstants;
|
|
17
|
-
export type PoseidonOpts = PoseidonBasicOpts & PoseidonConstants & {
|
|
18
|
-
sboxPower?: number;
|
|
19
|
-
reversePartialPowIdx?: boolean;
|
|
20
|
-
};
|
|
21
|
-
export declare function validateOpts(opts: PoseidonOpts): Readonly<{
|
|
22
|
-
rounds: number;
|
|
23
|
-
sboxFn: (n: bigint) => bigint;
|
|
24
|
-
roundConstants: bigint[][];
|
|
25
|
-
mds: bigint[][];
|
|
26
|
-
Fp: IField<bigint>;
|
|
27
|
-
t: number;
|
|
28
|
-
roundsFull: number;
|
|
29
|
-
roundsPartial: number;
|
|
30
|
-
sboxPower?: number;
|
|
31
|
-
reversePartialPowIdx?: boolean;
|
|
32
|
-
}>;
|
|
33
|
-
export declare function splitConstants(rc: bigint[], t: number): bigint[][];
|
|
34
|
-
export type PoseidonFn = {
|
|
35
|
-
(values: bigint[]): bigint[];
|
|
36
|
-
roundConstants: bigint[][];
|
|
37
|
-
};
|
|
38
|
-
/** Poseidon NTT-friendly hash. */
|
|
39
|
-
export declare function poseidon(opts: PoseidonOpts): PoseidonFn;
|
|
40
|
-
export declare class PoseidonSponge {
|
|
41
|
-
private Fp;
|
|
42
|
-
readonly rate: number;
|
|
43
|
-
readonly capacity: number;
|
|
44
|
-
readonly hash: PoseidonFn;
|
|
45
|
-
private state;
|
|
46
|
-
private pos;
|
|
47
|
-
private isAbsorbing;
|
|
48
|
-
constructor(Fp: IField<bigint>, rate: number, capacity: number, hash: PoseidonFn);
|
|
49
|
-
private process;
|
|
50
|
-
absorb(input: bigint[]): void;
|
|
51
|
-
squeeze(count: number): bigint[];
|
|
52
|
-
clean(): void;
|
|
53
|
-
clone(): PoseidonSponge;
|
|
54
|
-
}
|
|
55
|
-
export type PoseidonSpongeOpts = Omit<PoseidonOpts, 't'> & {
|
|
56
|
-
rate: number;
|
|
57
|
-
capacity: number;
|
|
58
|
-
};
|
|
59
|
-
/**
|
|
60
|
-
* The method is not defined in spec, but nevertheless used often.
|
|
61
|
-
* Check carefully for compatibility: there are many edge cases, like absorbing an empty array.
|
|
62
|
-
* We cross-test against:
|
|
63
|
-
* - https://github.com/ProvableHQ/snarkVM/tree/staging/algorithms
|
|
64
|
-
* - https://github.com/arkworks-rs/crypto-primitives/tree/main
|
|
65
|
-
*/
|
|
66
|
-
export declare function poseidonSponge(opts: PoseidonSpongeOpts): () => PoseidonSponge;
|
|
67
|
-
export {};
|
|
68
|
-
//# sourceMappingURL=poseidon.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"poseidon.d.ts","sourceRoot":"","sources":["../../src/abstract/poseidon.ts"],"names":[],"mappings":"AAUA,OAAO,EAAwB,KAAK,MAAM,EAAiB,MAAM,cAAc,CAAC;AAyBhF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACnB,CAAC,EAAE,MAAM,CAAC;IACV,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC;AA0DF,MAAM,MAAM,iBAAiB,GAAG,iBAAiB,GAAG;IAClD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,KAAK,iBAAiB,GAAG;IAAE,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC;IAAC,cAAc,EAAE,MAAM,EAAE,EAAE,CAAA;CAAE,CAAC;AAIzE,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,iBAAiB,EAAE,OAAO,GAAE,MAAU,GAAG,iBAAiB,CAuBjG;AAED,MAAM,MAAM,YAAY,GAAG,iBAAiB,GAC1C,iBAAiB,GAAG;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC,CAAC;AAEJ,wBAAgB,YAAY,CAAC,IAAI,EAAE,YAAY,GAAG,QAAQ,CAAC;IACzD,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAC9B,cAAc,EAAE,MAAM,EAAE,EAAE,CAAC;IAC3B,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACnB,CAAC,EAAE,MAAM,CAAC;IACV,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC,CAAC,CAwCD;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,CAalE;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;IAE7B,cAAc,EAAE,MAAM,EAAE,EAAE,CAAC;CAC5B,CAAC;AACF,kCAAkC;AAClC,wBAAgB,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,UAAU,CAmCvD;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,EAAE,CAAiB;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,OAAO,CAAC,KAAK,CAAW;IACxB,OAAO,CAAC,GAAG,CAAK;IAChB,OAAO,CAAC,WAAW,CAAQ;gBAEf,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU;IAQhF,OAAO,CAAC,OAAO;IAGf,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAgB7B,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IAahC,KAAK,IAAI,IAAI;IAKb,KAAK,IAAI,cAAc;CAMxB;AAED,MAAM,MAAM,kBAAkB,GAAG,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,GAAG;IACzD,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,kBAAkB,GAAG,MAAM,cAAc,CAW7E"}
|
package/esm/abstract/poseidon.js
DELETED
|
@@ -1,296 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Implements [Poseidon](https://www.poseidon-hash.info) ZK-friendly hash.
|
|
3
|
-
*
|
|
4
|
-
* There are many poseidon variants with different constants.
|
|
5
|
-
* We don't provide them: you should construct them manually.
|
|
6
|
-
* Check out [micro-starknet](https://github.com/paulmillr/micro-starknet) package for a proper example.
|
|
7
|
-
* @module
|
|
8
|
-
*/
|
|
9
|
-
/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */
|
|
10
|
-
import { _validateObject, bitGet } from "../utils.js";
|
|
11
|
-
import { FpInvertBatch, FpPow, validateField } from "./modular.js";
|
|
12
|
-
// Grain LFSR (Linear-Feedback Shift Register): https://eprint.iacr.org/2009/109.pdf
|
|
13
|
-
function grainLFSR(state) {
|
|
14
|
-
let pos = 0;
|
|
15
|
-
if (state.length !== 80)
|
|
16
|
-
throw new Error('grainLFRS: wrong state length, should be 80 bits');
|
|
17
|
-
const getBit = () => {
|
|
18
|
-
const r = (offset) => state[(pos + offset) % 80];
|
|
19
|
-
const bit = r(62) ^ r(51) ^ r(38) ^ r(23) ^ r(13) ^ r(0);
|
|
20
|
-
state[pos] = bit;
|
|
21
|
-
pos = ++pos % 80;
|
|
22
|
-
return !!bit;
|
|
23
|
-
};
|
|
24
|
-
for (let i = 0; i < 160; i++)
|
|
25
|
-
getBit();
|
|
26
|
-
return () => {
|
|
27
|
-
// https://en.wikipedia.org/wiki/Shrinking_generator
|
|
28
|
-
while (true) {
|
|
29
|
-
const b1 = getBit();
|
|
30
|
-
const b2 = getBit();
|
|
31
|
-
if (!b1)
|
|
32
|
-
continue;
|
|
33
|
-
return b2;
|
|
34
|
-
}
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
function assertValidPosOpts(opts) {
|
|
38
|
-
const { Fp, roundsFull } = opts;
|
|
39
|
-
validateField(Fp);
|
|
40
|
-
_validateObject(opts, {
|
|
41
|
-
t: 'number',
|
|
42
|
-
roundsFull: 'number',
|
|
43
|
-
roundsPartial: 'number',
|
|
44
|
-
}, {
|
|
45
|
-
isSboxInverse: 'boolean',
|
|
46
|
-
});
|
|
47
|
-
for (const i of ['t', 'roundsFull', 'roundsPartial']) {
|
|
48
|
-
if (!Number.isSafeInteger(opts[i]) || opts[i] < 1)
|
|
49
|
-
throw new Error('invalid number ' + i);
|
|
50
|
-
}
|
|
51
|
-
if (roundsFull & 1)
|
|
52
|
-
throw new Error('roundsFull is not even' + roundsFull);
|
|
53
|
-
}
|
|
54
|
-
function poseidonGrain(opts) {
|
|
55
|
-
assertValidPosOpts(opts);
|
|
56
|
-
const { Fp } = opts;
|
|
57
|
-
const state = Array(80).fill(1);
|
|
58
|
-
let pos = 0;
|
|
59
|
-
const writeBits = (value, bitCount) => {
|
|
60
|
-
for (let i = bitCount - 1; i >= 0; i--)
|
|
61
|
-
state[pos++] = Number(bitGet(value, i));
|
|
62
|
-
};
|
|
63
|
-
const _0n = BigInt(0);
|
|
64
|
-
const _1n = BigInt(1);
|
|
65
|
-
writeBits(_1n, 2); // prime field
|
|
66
|
-
writeBits(opts.isSboxInverse ? _1n : _0n, 4); // b2..b5
|
|
67
|
-
writeBits(BigInt(Fp.BITS), 12); // b6..b17
|
|
68
|
-
writeBits(BigInt(opts.t), 12); // b18..b29
|
|
69
|
-
writeBits(BigInt(opts.roundsFull), 10); // b30..b39
|
|
70
|
-
writeBits(BigInt(opts.roundsPartial), 10); // b40..b49
|
|
71
|
-
const getBit = grainLFSR(state);
|
|
72
|
-
return (count, reject) => {
|
|
73
|
-
const res = [];
|
|
74
|
-
for (let i = 0; i < count; i++) {
|
|
75
|
-
while (true) {
|
|
76
|
-
let num = _0n;
|
|
77
|
-
for (let i = 0; i < Fp.BITS; i++) {
|
|
78
|
-
num <<= _1n;
|
|
79
|
-
if (getBit())
|
|
80
|
-
num |= _1n;
|
|
81
|
-
}
|
|
82
|
-
if (reject && num >= Fp.ORDER)
|
|
83
|
-
continue; // rejection sampling
|
|
84
|
-
res.push(Fp.create(num));
|
|
85
|
-
break;
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
return res;
|
|
89
|
-
};
|
|
90
|
-
}
|
|
91
|
-
// NOTE: this is not standard but used often for constant generation for poseidon
|
|
92
|
-
// (grain LFRS-like structure)
|
|
93
|
-
export function grainGenConstants(opts, skipMDS = 0) {
|
|
94
|
-
const { Fp, t, roundsFull, roundsPartial } = opts;
|
|
95
|
-
const rounds = roundsFull + roundsPartial;
|
|
96
|
-
const sample = poseidonGrain(opts);
|
|
97
|
-
const roundConstants = [];
|
|
98
|
-
for (let r = 0; r < rounds; r++)
|
|
99
|
-
roundConstants.push(sample(t, true));
|
|
100
|
-
if (skipMDS > 0)
|
|
101
|
-
for (let i = 0; i < skipMDS; i++)
|
|
102
|
-
sample(2 * t, false);
|
|
103
|
-
const xs = sample(t, false);
|
|
104
|
-
const ys = sample(t, false);
|
|
105
|
-
// Construct MDS Matrix M[i][j] = 1 / (xs[i] + ys[j])
|
|
106
|
-
const mds = [];
|
|
107
|
-
for (let i = 0; i < t; i++) {
|
|
108
|
-
const row = [];
|
|
109
|
-
for (let j = 0; j < t; j++) {
|
|
110
|
-
const xy = Fp.add(xs[i], ys[j]);
|
|
111
|
-
if (Fp.is0(xy))
|
|
112
|
-
throw new Error(`Error generating MDS matrix: xs[${i}] + ys[${j}] resulted in zero.`);
|
|
113
|
-
row.push(xy);
|
|
114
|
-
}
|
|
115
|
-
mds.push(FpInvertBatch(Fp, row));
|
|
116
|
-
}
|
|
117
|
-
return { roundConstants, mds };
|
|
118
|
-
}
|
|
119
|
-
export function validateOpts(opts) {
|
|
120
|
-
assertValidPosOpts(opts);
|
|
121
|
-
const { Fp, mds, reversePartialPowIdx: rev, roundConstants: rc } = opts;
|
|
122
|
-
const { roundsFull, roundsPartial, sboxPower, t } = opts;
|
|
123
|
-
// MDS is TxT matrix
|
|
124
|
-
if (!Array.isArray(mds) || mds.length !== t)
|
|
125
|
-
throw new Error('Poseidon: invalid MDS matrix');
|
|
126
|
-
const _mds = mds.map((mdsRow) => {
|
|
127
|
-
if (!Array.isArray(mdsRow) || mdsRow.length !== t)
|
|
128
|
-
throw new Error('invalid MDS matrix row: ' + mdsRow);
|
|
129
|
-
return mdsRow.map((i) => {
|
|
130
|
-
if (typeof i !== 'bigint')
|
|
131
|
-
throw new Error('invalid MDS matrix bigint: ' + i);
|
|
132
|
-
return Fp.create(i);
|
|
133
|
-
});
|
|
134
|
-
});
|
|
135
|
-
if (rev !== undefined && typeof rev !== 'boolean')
|
|
136
|
-
throw new Error('invalid param reversePartialPowIdx=' + rev);
|
|
137
|
-
if (roundsFull & 1)
|
|
138
|
-
throw new Error('roundsFull is not even' + roundsFull);
|
|
139
|
-
const rounds = roundsFull + roundsPartial;
|
|
140
|
-
if (!Array.isArray(rc) || rc.length !== rounds)
|
|
141
|
-
throw new Error('Poseidon: invalid round constants');
|
|
142
|
-
const roundConstants = rc.map((rc) => {
|
|
143
|
-
if (!Array.isArray(rc) || rc.length !== t)
|
|
144
|
-
throw new Error('invalid round constants');
|
|
145
|
-
return rc.map((i) => {
|
|
146
|
-
if (typeof i !== 'bigint' || !Fp.isValid(i))
|
|
147
|
-
throw new Error('invalid round constant');
|
|
148
|
-
return Fp.create(i);
|
|
149
|
-
});
|
|
150
|
-
});
|
|
151
|
-
if (!sboxPower || ![3, 5, 7, 17].includes(sboxPower))
|
|
152
|
-
throw new Error('invalid sboxPower');
|
|
153
|
-
const _sboxPower = BigInt(sboxPower);
|
|
154
|
-
let sboxFn = (n) => FpPow(Fp, n, _sboxPower);
|
|
155
|
-
// Unwrapped sbox power for common cases (195->142μs)
|
|
156
|
-
if (sboxPower === 3)
|
|
157
|
-
sboxFn = (n) => Fp.mul(Fp.sqrN(n), n);
|
|
158
|
-
else if (sboxPower === 5)
|
|
159
|
-
sboxFn = (n) => Fp.mul(Fp.sqrN(Fp.sqrN(n)), n);
|
|
160
|
-
return Object.freeze({ ...opts, rounds, sboxFn, roundConstants, mds: _mds });
|
|
161
|
-
}
|
|
162
|
-
export function splitConstants(rc, t) {
|
|
163
|
-
if (typeof t !== 'number')
|
|
164
|
-
throw new Error('poseidonSplitConstants: invalid t');
|
|
165
|
-
if (!Array.isArray(rc) || rc.length % t)
|
|
166
|
-
throw new Error('poseidonSplitConstants: invalid rc');
|
|
167
|
-
const res = [];
|
|
168
|
-
let tmp = [];
|
|
169
|
-
for (let i = 0; i < rc.length; i++) {
|
|
170
|
-
tmp.push(rc[i]);
|
|
171
|
-
if (tmp.length === t) {
|
|
172
|
-
res.push(tmp);
|
|
173
|
-
tmp = [];
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
return res;
|
|
177
|
-
}
|
|
178
|
-
/** Poseidon NTT-friendly hash. */
|
|
179
|
-
export function poseidon(opts) {
|
|
180
|
-
const _opts = validateOpts(opts);
|
|
181
|
-
const { Fp, mds, roundConstants, rounds: totalRounds, roundsPartial, sboxFn, t } = _opts;
|
|
182
|
-
const halfRoundsFull = _opts.roundsFull / 2;
|
|
183
|
-
const partialIdx = _opts.reversePartialPowIdx ? t - 1 : 0;
|
|
184
|
-
const poseidonRound = (values, isFull, idx) => {
|
|
185
|
-
values = values.map((i, j) => Fp.add(i, roundConstants[idx][j]));
|
|
186
|
-
if (isFull)
|
|
187
|
-
values = values.map((i) => sboxFn(i));
|
|
188
|
-
else
|
|
189
|
-
values[partialIdx] = sboxFn(values[partialIdx]);
|
|
190
|
-
// Matrix multiplication
|
|
191
|
-
values = mds.map((i) => i.reduce((acc, i, j) => Fp.add(acc, Fp.mulN(i, values[j])), Fp.ZERO));
|
|
192
|
-
return values;
|
|
193
|
-
};
|
|
194
|
-
const poseidonHash = function poseidonHash(values) {
|
|
195
|
-
if (!Array.isArray(values) || values.length !== t)
|
|
196
|
-
throw new Error('invalid values, expected array of bigints with length ' + t);
|
|
197
|
-
values = values.map((i) => {
|
|
198
|
-
if (typeof i !== 'bigint')
|
|
199
|
-
throw new Error('invalid bigint=' + i);
|
|
200
|
-
return Fp.create(i);
|
|
201
|
-
});
|
|
202
|
-
let lastRound = 0;
|
|
203
|
-
// Apply r_f/2 full rounds.
|
|
204
|
-
for (let i = 0; i < halfRoundsFull; i++)
|
|
205
|
-
values = poseidonRound(values, true, lastRound++);
|
|
206
|
-
// Apply r_p partial rounds.
|
|
207
|
-
for (let i = 0; i < roundsPartial; i++)
|
|
208
|
-
values = poseidonRound(values, false, lastRound++);
|
|
209
|
-
// Apply r_f/2 full rounds.
|
|
210
|
-
for (let i = 0; i < halfRoundsFull; i++)
|
|
211
|
-
values = poseidonRound(values, true, lastRound++);
|
|
212
|
-
if (lastRound !== totalRounds)
|
|
213
|
-
throw new Error('invalid number of rounds');
|
|
214
|
-
return values;
|
|
215
|
-
};
|
|
216
|
-
// For verification in tests
|
|
217
|
-
poseidonHash.roundConstants = roundConstants;
|
|
218
|
-
return poseidonHash;
|
|
219
|
-
}
|
|
220
|
-
export class PoseidonSponge {
|
|
221
|
-
constructor(Fp, rate, capacity, hash) {
|
|
222
|
-
this.pos = 0;
|
|
223
|
-
this.isAbsorbing = true;
|
|
224
|
-
this.Fp = Fp;
|
|
225
|
-
this.hash = hash;
|
|
226
|
-
this.rate = rate;
|
|
227
|
-
this.capacity = capacity;
|
|
228
|
-
this.state = new Array(rate + capacity);
|
|
229
|
-
this.clean();
|
|
230
|
-
}
|
|
231
|
-
process() {
|
|
232
|
-
this.state = this.hash(this.state);
|
|
233
|
-
}
|
|
234
|
-
absorb(input) {
|
|
235
|
-
for (const i of input)
|
|
236
|
-
if (typeof i !== 'bigint' || !this.Fp.isValid(i))
|
|
237
|
-
throw new Error('invalid input: ' + i);
|
|
238
|
-
for (let i = 0; i < input.length;) {
|
|
239
|
-
if (!this.isAbsorbing || this.pos === this.rate) {
|
|
240
|
-
this.process();
|
|
241
|
-
this.pos = 0;
|
|
242
|
-
this.isAbsorbing = true;
|
|
243
|
-
}
|
|
244
|
-
const chunk = Math.min(this.rate - this.pos, input.length - i);
|
|
245
|
-
for (let j = 0; j < chunk; j++) {
|
|
246
|
-
const idx = this.capacity + this.pos++;
|
|
247
|
-
this.state[idx] = this.Fp.add(this.state[idx], input[i++]);
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
squeeze(count) {
|
|
252
|
-
const res = [];
|
|
253
|
-
while (res.length < count) {
|
|
254
|
-
if (this.isAbsorbing || this.pos === this.rate) {
|
|
255
|
-
this.process();
|
|
256
|
-
this.pos = 0;
|
|
257
|
-
this.isAbsorbing = false;
|
|
258
|
-
}
|
|
259
|
-
const chunk = Math.min(this.rate - this.pos, count - res.length);
|
|
260
|
-
for (let i = 0; i < chunk; i++)
|
|
261
|
-
res.push(this.state[this.capacity + this.pos++]);
|
|
262
|
-
}
|
|
263
|
-
return res;
|
|
264
|
-
}
|
|
265
|
-
clean() {
|
|
266
|
-
this.state.fill(this.Fp.ZERO);
|
|
267
|
-
this.isAbsorbing = true;
|
|
268
|
-
this.pos = 0;
|
|
269
|
-
}
|
|
270
|
-
clone() {
|
|
271
|
-
const c = new PoseidonSponge(this.Fp, this.rate, this.capacity, this.hash);
|
|
272
|
-
c.pos = this.pos;
|
|
273
|
-
c.state = [...this.state];
|
|
274
|
-
return c;
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
|
-
/**
|
|
278
|
-
* The method is not defined in spec, but nevertheless used often.
|
|
279
|
-
* Check carefully for compatibility: there are many edge cases, like absorbing an empty array.
|
|
280
|
-
* We cross-test against:
|
|
281
|
-
* - https://github.com/ProvableHQ/snarkVM/tree/staging/algorithms
|
|
282
|
-
* - https://github.com/arkworks-rs/crypto-primitives/tree/main
|
|
283
|
-
*/
|
|
284
|
-
export function poseidonSponge(opts) {
|
|
285
|
-
for (const i of ['rate', 'capacity']) {
|
|
286
|
-
if (typeof opts[i] !== 'number' || !Number.isSafeInteger(opts[i]))
|
|
287
|
-
throw new Error('invalid number ' + i);
|
|
288
|
-
}
|
|
289
|
-
const { rate, capacity } = opts;
|
|
290
|
-
const t = opts.rate + opts.capacity;
|
|
291
|
-
// Re-use hash instance between multiple instances
|
|
292
|
-
const hash = poseidon({ ...opts, t });
|
|
293
|
-
const { Fp } = opts;
|
|
294
|
-
return () => new PoseidonSponge(Fp, rate, capacity, hash);
|
|
295
|
-
}
|
|
296
|
-
//# sourceMappingURL=poseidon.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"poseidon.js","sourceRoot":"","sources":["../../src/abstract/poseidon.ts"],"names":[],"mappings":"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"}
|
package/esm/abstract/tower.d.ts
DELETED
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
import * as mod from './modular.ts';
|
|
2
|
-
import type { WeierstrassPoint, WeierstrassPointCons } from './weierstrass.ts';
|
|
3
|
-
export type BigintTuple = [bigint, bigint];
|
|
4
|
-
export type Fp = bigint;
|
|
5
|
-
export type Fp2 = {
|
|
6
|
-
c0: bigint;
|
|
7
|
-
c1: bigint;
|
|
8
|
-
};
|
|
9
|
-
export type BigintSix = [bigint, bigint, bigint, bigint, bigint, bigint];
|
|
10
|
-
export type Fp6 = {
|
|
11
|
-
c0: Fp2;
|
|
12
|
-
c1: Fp2;
|
|
13
|
-
c2: Fp2;
|
|
14
|
-
};
|
|
15
|
-
export type Fp12 = {
|
|
16
|
-
c0: Fp6;
|
|
17
|
-
c1: Fp6;
|
|
18
|
-
};
|
|
19
|
-
export type BigintTwelve = [
|
|
20
|
-
bigint,
|
|
21
|
-
bigint,
|
|
22
|
-
bigint,
|
|
23
|
-
bigint,
|
|
24
|
-
bigint,
|
|
25
|
-
bigint,
|
|
26
|
-
bigint,
|
|
27
|
-
bigint,
|
|
28
|
-
bigint,
|
|
29
|
-
bigint,
|
|
30
|
-
bigint,
|
|
31
|
-
bigint
|
|
32
|
-
];
|
|
33
|
-
export type Fp2Bls = mod.IField<Fp2> & {
|
|
34
|
-
Fp: mod.IField<Fp>;
|
|
35
|
-
frobeniusMap(num: Fp2, power: number): Fp2;
|
|
36
|
-
fromBigTuple(num: BigintTuple): Fp2;
|
|
37
|
-
mulByB: (num: Fp2) => Fp2;
|
|
38
|
-
mulByNonresidue: (num: Fp2) => Fp2;
|
|
39
|
-
reim: (num: Fp2) => {
|
|
40
|
-
re: Fp;
|
|
41
|
-
im: Fp;
|
|
42
|
-
};
|
|
43
|
-
Fp4Square: (a: Fp2, b: Fp2) => {
|
|
44
|
-
first: Fp2;
|
|
45
|
-
second: Fp2;
|
|
46
|
-
};
|
|
47
|
-
NONRESIDUE: Fp2;
|
|
48
|
-
};
|
|
49
|
-
export type Fp6Bls = mod.IField<Fp6> & {
|
|
50
|
-
Fp2: Fp2Bls;
|
|
51
|
-
frobeniusMap(num: Fp6, power: number): Fp6;
|
|
52
|
-
fromBigSix: (tuple: BigintSix) => Fp6;
|
|
53
|
-
mul1(num: Fp6, b1: Fp2): Fp6;
|
|
54
|
-
mul01(num: Fp6, b0: Fp2, b1: Fp2): Fp6;
|
|
55
|
-
mulByFp2(lhs: Fp6, rhs: Fp2): Fp6;
|
|
56
|
-
mulByNonresidue: (num: Fp6) => Fp6;
|
|
57
|
-
};
|
|
58
|
-
export type Fp12Bls = mod.IField<Fp12> & {
|
|
59
|
-
Fp6: Fp6Bls;
|
|
60
|
-
frobeniusMap(num: Fp12, power: number): Fp12;
|
|
61
|
-
fromBigTwelve: (t: BigintTwelve) => Fp12;
|
|
62
|
-
mul014(num: Fp12, o0: Fp2, o1: Fp2, o4: Fp2): Fp12;
|
|
63
|
-
mul034(num: Fp12, o0: Fp2, o3: Fp2, o4: Fp2): Fp12;
|
|
64
|
-
mulByFp2(lhs: Fp12, rhs: Fp2): Fp12;
|
|
65
|
-
conjugate(num: Fp12): Fp12;
|
|
66
|
-
finalExponentiate(num: Fp12): Fp12;
|
|
67
|
-
_cyclotomicSquare(num: Fp12): Fp12;
|
|
68
|
-
_cyclotomicExp(num: Fp12, n: bigint): Fp12;
|
|
69
|
-
};
|
|
70
|
-
export declare function psiFrobenius(Fp: mod.IField<Fp>, Fp2: Fp2Bls, base: Fp2): {
|
|
71
|
-
psi: (x: Fp2, y: Fp2) => [Fp2, Fp2];
|
|
72
|
-
psi2: (x: Fp2, y: Fp2) => [Fp2, Fp2];
|
|
73
|
-
G2psi: (c: WeierstrassPointCons<Fp2>, P: WeierstrassPoint<Fp2>) => WeierstrassPoint<Fp2>;
|
|
74
|
-
G2psi2: (c: WeierstrassPointCons<Fp2>, P: WeierstrassPoint<Fp2>) => WeierstrassPoint<Fp2>;
|
|
75
|
-
PSI_X: Fp2;
|
|
76
|
-
PSI_Y: Fp2;
|
|
77
|
-
PSI2_X: Fp2;
|
|
78
|
-
PSI2_Y: Fp2;
|
|
79
|
-
};
|
|
80
|
-
export type Tower12Opts = {
|
|
81
|
-
ORDER: bigint;
|
|
82
|
-
X_LEN: number;
|
|
83
|
-
NONRESIDUE?: Fp;
|
|
84
|
-
FP2_NONRESIDUE: BigintTuple;
|
|
85
|
-
Fp2sqrt?: (num: Fp2) => Fp2;
|
|
86
|
-
Fp2mulByB: (num: Fp2) => Fp2;
|
|
87
|
-
Fp12finalExponentiate: (num: Fp12) => Fp12;
|
|
88
|
-
};
|
|
89
|
-
export declare function tower12(opts: Tower12Opts): {
|
|
90
|
-
Fp: Readonly<mod.IField<bigint> & Required<Pick<mod.IField<bigint>, 'isOdd'>>>;
|
|
91
|
-
Fp2: Fp2Bls;
|
|
92
|
-
Fp6: Fp6Bls;
|
|
93
|
-
Fp12: Fp12Bls;
|
|
94
|
-
};
|
|
95
|
-
//# sourceMappingURL=tower.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tower.d.ts","sourceRoot":"","sources":["../../src/abstract/tower.ts"],"names":[],"mappings":"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"}
|