@noble/curves 2.0.0 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +214 -122
- package/abstract/bls.d.ts +299 -16
- package/abstract/bls.d.ts.map +1 -1
- package/abstract/bls.js +89 -24
- package/abstract/bls.js.map +1 -1
- package/abstract/curve.d.ts +274 -27
- package/abstract/curve.d.ts.map +1 -1
- package/abstract/curve.js +177 -23
- package/abstract/curve.js.map +1 -1
- package/abstract/edwards.d.ts +166 -30
- package/abstract/edwards.d.ts.map +1 -1
- package/abstract/edwards.js +221 -86
- package/abstract/edwards.js.map +1 -1
- package/abstract/fft.d.ts +327 -10
- package/abstract/fft.d.ts.map +1 -1
- package/abstract/fft.js +155 -12
- package/abstract/fft.js.map +1 -1
- package/abstract/frost.d.ts +293 -0
- package/abstract/frost.d.ts.map +1 -0
- package/abstract/frost.js +704 -0
- package/abstract/frost.js.map +1 -0
- package/abstract/hash-to-curve.d.ts +173 -24
- package/abstract/hash-to-curve.d.ts.map +1 -1
- package/abstract/hash-to-curve.js +170 -31
- package/abstract/hash-to-curve.js.map +1 -1
- package/abstract/modular.d.ts +429 -37
- package/abstract/modular.d.ts.map +1 -1
- package/abstract/modular.js +414 -119
- package/abstract/modular.js.map +1 -1
- package/abstract/montgomery.d.ts +83 -12
- package/abstract/montgomery.d.ts.map +1 -1
- package/abstract/montgomery.js +32 -7
- package/abstract/montgomery.js.map +1 -1
- package/abstract/oprf.d.ts +164 -91
- package/abstract/oprf.d.ts.map +1 -1
- package/abstract/oprf.js +88 -29
- package/abstract/oprf.js.map +1 -1
- package/abstract/poseidon.d.ts +138 -7
- package/abstract/poseidon.d.ts.map +1 -1
- package/abstract/poseidon.js +178 -15
- package/abstract/poseidon.js.map +1 -1
- package/abstract/tower.d.ts +122 -3
- package/abstract/tower.d.ts.map +1 -1
- package/abstract/tower.js +323 -139
- package/abstract/tower.js.map +1 -1
- package/abstract/weierstrass.d.ts +339 -76
- package/abstract/weierstrass.d.ts.map +1 -1
- package/abstract/weierstrass.js +395 -205
- package/abstract/weierstrass.js.map +1 -1
- package/bls12-381.d.ts +16 -2
- package/bls12-381.d.ts.map +1 -1
- package/bls12-381.js +199 -209
- package/bls12-381.js.map +1 -1
- package/bn254.d.ts +11 -2
- package/bn254.d.ts.map +1 -1
- package/bn254.js +93 -38
- package/bn254.js.map +1 -1
- package/ed25519.d.ts +135 -14
- package/ed25519.d.ts.map +1 -1
- package/ed25519.js +207 -41
- package/ed25519.js.map +1 -1
- package/ed448.d.ts +108 -14
- package/ed448.d.ts.map +1 -1
- package/ed448.js +194 -42
- package/ed448.js.map +1 -1
- package/index.js +7 -1
- package/index.js.map +1 -1
- package/misc.d.ts +106 -7
- package/misc.d.ts.map +1 -1
- package/misc.js +141 -32
- package/misc.js.map +1 -1
- package/nist.d.ts +112 -11
- package/nist.d.ts.map +1 -1
- package/nist.js +139 -17
- package/nist.js.map +1 -1
- package/package.json +34 -6
- package/secp256k1.d.ts +92 -15
- package/secp256k1.d.ts.map +1 -1
- package/secp256k1.js +211 -28
- package/secp256k1.js.map +1 -1
- package/src/abstract/bls.ts +356 -69
- package/src/abstract/curve.ts +327 -44
- package/src/abstract/edwards.ts +367 -143
- package/src/abstract/fft.ts +371 -36
- package/src/abstract/frost.ts +1092 -0
- package/src/abstract/hash-to-curve.ts +255 -56
- package/src/abstract/modular.ts +591 -144
- package/src/abstract/montgomery.ts +114 -30
- package/src/abstract/oprf.ts +383 -194
- package/src/abstract/poseidon.ts +235 -35
- package/src/abstract/tower.ts +428 -159
- package/src/abstract/weierstrass.ts +710 -312
- package/src/bls12-381.ts +239 -236
- package/src/bn254.ts +107 -46
- package/src/ed25519.ts +234 -56
- package/src/ed448.ts +227 -57
- package/src/index.ts +7 -1
- package/src/misc.ts +154 -35
- package/src/nist.ts +143 -20
- package/src/secp256k1.ts +284 -41
- package/src/utils.ts +583 -81
- package/src/webcrypto.ts +302 -73
- package/utils.d.ts +457 -24
- package/utils.d.ts.map +1 -1
- package/utils.js +410 -53
- package/utils.js.map +1 -1
- package/webcrypto.d.ts +167 -25
- package/webcrypto.d.ts.map +1 -1
- package/webcrypto.js +165 -58
- package/webcrypto.js.map +1 -1
package/abstract/poseidon.js
CHANGED
|
@@ -11,6 +11,8 @@ import { asafenumber, bitGet, validateObject } from "../utils.js";
|
|
|
11
11
|
import { FpInvertBatch, FpPow, validateField } from "./modular.js";
|
|
12
12
|
// Grain LFSR (Linear-Feedback Shift Register): https://eprint.iacr.org/2009/109.pdf
|
|
13
13
|
function grainLFSR(state) {
|
|
14
|
+
// Advances the caller-provided 80-entry state array in place; only the length
|
|
15
|
+
// is checked here, so entries are assumed to already be bits.
|
|
14
16
|
let pos = 0;
|
|
15
17
|
if (state.length !== 80)
|
|
16
18
|
throw new Error('grainLFRS: wrong state length, should be 80 bits');
|
|
@@ -49,6 +51,7 @@ function assertValidPosOpts(opts) {
|
|
|
49
51
|
if (opts[k] < 1)
|
|
50
52
|
throw new Error('invalid number ' + k);
|
|
51
53
|
}
|
|
54
|
+
// Poseidon splits full rounds as `R_F / 2`, then partial rounds, then `R_F / 2` again.
|
|
52
55
|
if (roundsFull & 1)
|
|
53
56
|
throw new Error('roundsFull is not even' + roundsFull);
|
|
54
57
|
}
|
|
@@ -63,6 +66,12 @@ function poseidonGrain(opts) {
|
|
|
63
66
|
};
|
|
64
67
|
const _0n = BigInt(0);
|
|
65
68
|
const _1n = BigInt(1);
|
|
69
|
+
// The Grain seed layout is fixed-width: `Fp.BITS` and `t` use 12 bits,
|
|
70
|
+
// `roundsFull` and `roundsPartial` use 10, so larger values are truncated here.
|
|
71
|
+
// This is intentional for compatibility with snarkVM / arkworks PoseidonGrainLFSR:
|
|
72
|
+
// they write the same fixed-width seed fields without range checks, then still consume
|
|
73
|
+
// the LFSR using the caller-provided round count for ARK/MDS generation.
|
|
74
|
+
// Normalizing or rejecting here would diverge from those implementations.
|
|
66
75
|
writeBits(_1n, 2); // prime field
|
|
67
76
|
writeBits(opts.isSboxInverse ? _1n : _0n, 4); // b2..b5
|
|
68
77
|
writeBits(BigInt(Fp.BITS), 12); // b6..b17
|
|
@@ -91,9 +100,30 @@ function poseidonGrain(opts) {
|
|
|
91
100
|
}
|
|
92
101
|
// NOTE: this is not standard but used often for constant generation for poseidon
|
|
93
102
|
// (grain LFRS-like structure)
|
|
103
|
+
/**
|
|
104
|
+
* @param opts - Poseidon grain options. See {@link PoseidonGrainOpts}.
|
|
105
|
+
* @param skipMDS - Number of MDS samples to skip.
|
|
106
|
+
* @returns Generated constants.
|
|
107
|
+
* @throws If the generated MDS matrix contains a zero denominator. {@link Error}
|
|
108
|
+
* @example
|
|
109
|
+
* Generate Poseidon round constants and an MDS matrix from the Grain LFSR.
|
|
110
|
+
*
|
|
111
|
+
* ```ts
|
|
112
|
+
* import { grainGenConstants } from '@noble/curves/abstract/poseidon.js';
|
|
113
|
+
* import { Field } from '@noble/curves/abstract/modular.js';
|
|
114
|
+
* const Fp = Field(17n);
|
|
115
|
+
* const constants = grainGenConstants({ Fp, t: 2, roundsFull: 8, roundsPartial: 8 });
|
|
116
|
+
* ```
|
|
117
|
+
*/
|
|
94
118
|
export function grainGenConstants(opts, skipMDS = 0) {
|
|
95
119
|
const { Fp, t, roundsFull, roundsPartial } = opts;
|
|
120
|
+
// `skipMDS` counts how many candidate matrices to discard before taking one.
|
|
121
|
+
asafenumber(skipMDS, 'skipMDS');
|
|
122
|
+
if (skipMDS < 0)
|
|
123
|
+
throw new Error('invalid number skipMDS');
|
|
96
124
|
const rounds = roundsFull + roundsPartial;
|
|
125
|
+
// `sboxPower` is carried in the opts shape for Poseidon compatibility, but
|
|
126
|
+
// Grain constant generation here only depends on field/size/round counts/inverse flag.
|
|
97
127
|
const sample = poseidonGrain(opts);
|
|
98
128
|
const roundConstants = [];
|
|
99
129
|
for (let r = 0; r < rounds; r++)
|
|
@@ -117,7 +147,24 @@ export function grainGenConstants(opts, skipMDS = 0) {
|
|
|
117
147
|
}
|
|
118
148
|
return { roundConstants, mds };
|
|
119
149
|
}
|
|
150
|
+
/**
|
|
151
|
+
* @param opts - Poseidon options. See {@link PoseidonOpts}.
|
|
152
|
+
* @returns Normalized poseidon options.
|
|
153
|
+
* @throws If the Poseidon options, constants, or MDS matrix are invalid. {@link Error}
|
|
154
|
+
* @example
|
|
155
|
+
* Validate generated constants before constructing a permutation.
|
|
156
|
+
*
|
|
157
|
+
* ```ts
|
|
158
|
+
* import { grainGenConstants, validateOpts } from '@noble/curves/abstract/poseidon.js';
|
|
159
|
+
* import { Field } from '@noble/curves/abstract/modular.js';
|
|
160
|
+
* const Fp = Field(17n);
|
|
161
|
+
* const constants = grainGenConstants({ Fp, t: 2, roundsFull: 8, roundsPartial: 8 });
|
|
162
|
+
* const opts = validateOpts({ ...constants, Fp, t: 2, roundsFull: 8, roundsPartial: 8, sboxPower: 3 });
|
|
163
|
+
* ```
|
|
164
|
+
*/
|
|
120
165
|
export function validateOpts(opts) {
|
|
166
|
+
// This only normalizes shapes and field membership for the provided constants;
|
|
167
|
+
// it does not prove the stronger MDS/security criteria discussed in the specs.
|
|
121
168
|
assertValidPosOpts(opts);
|
|
122
169
|
const { Fp, mds, reversePartialPowIdx: rev, roundConstants: rc } = opts;
|
|
123
170
|
const { roundsFull, roundsPartial, sboxPower, t } = opts;
|
|
@@ -130,6 +177,8 @@ export function validateOpts(opts) {
|
|
|
130
177
|
return mdsRow.map((i) => {
|
|
131
178
|
if (typeof i !== 'bigint')
|
|
132
179
|
throw new Error('invalid MDS matrix bigint: ' + i);
|
|
180
|
+
// Hardcoded Poseidon MDS matrices often use signed entries like `-1`;
|
|
181
|
+
// accept bigint representatives here and reduce them into the field.
|
|
133
182
|
return Fp.create(i);
|
|
134
183
|
});
|
|
135
184
|
});
|
|
@@ -149,6 +198,8 @@ export function validateOpts(opts) {
|
|
|
149
198
|
return Fp.create(i);
|
|
150
199
|
});
|
|
151
200
|
});
|
|
201
|
+
// Freeze nested constants so exported handles cannot retune a live permutation instance.
|
|
202
|
+
const freezeRows = (rows) => Object.freeze(rows.map((row) => Object.freeze(row)));
|
|
152
203
|
if (!sboxPower || ![3, 5, 7, 17].includes(sboxPower))
|
|
153
204
|
throw new Error('invalid sboxPower');
|
|
154
205
|
const _sboxPower = BigInt(sboxPower);
|
|
@@ -158,17 +209,39 @@ export function validateOpts(opts) {
|
|
|
158
209
|
sboxFn = (n) => Fp.mul(Fp.sqrN(n), n);
|
|
159
210
|
else if (sboxPower === 5)
|
|
160
211
|
sboxFn = (n) => Fp.mul(Fp.sqrN(Fp.sqrN(n)), n);
|
|
161
|
-
return Object.freeze({
|
|
212
|
+
return Object.freeze({
|
|
213
|
+
...opts,
|
|
214
|
+
rounds,
|
|
215
|
+
sboxFn,
|
|
216
|
+
roundConstants: freezeRows(roundConstants),
|
|
217
|
+
mds: freezeRows(_mds),
|
|
218
|
+
});
|
|
162
219
|
}
|
|
220
|
+
/**
|
|
221
|
+
* @param rc - Flattened round constants.
|
|
222
|
+
* @param t - Poseidon width.
|
|
223
|
+
* @returns Constants grouped by round.
|
|
224
|
+
* @throws If the width or flattened constant array is invalid. {@link Error}
|
|
225
|
+
* @example
|
|
226
|
+
* Regroup a flat constant list into per-round chunks.
|
|
227
|
+
*
|
|
228
|
+
* ```ts
|
|
229
|
+
* const rounds = splitConstants([1n, 2n, 3n, 4n], 2);
|
|
230
|
+
* ```
|
|
231
|
+
*/
|
|
163
232
|
export function splitConstants(rc, t) {
|
|
164
|
-
|
|
233
|
+
asafenumber(t, 't');
|
|
234
|
+
if (t < 1)
|
|
165
235
|
throw new Error('poseidonSplitConstants: invalid t');
|
|
166
236
|
if (!Array.isArray(rc) || rc.length % t)
|
|
167
237
|
throw new Error('poseidonSplitConstants: invalid rc');
|
|
168
238
|
const res = [];
|
|
169
239
|
let tmp = [];
|
|
170
240
|
for (let i = 0; i < rc.length; i++) {
|
|
171
|
-
|
|
241
|
+
const c = rc[i];
|
|
242
|
+
if (typeof c !== 'bigint')
|
|
243
|
+
throw new Error('invalid bigint=' + c);
|
|
244
|
+
tmp.push(c);
|
|
172
245
|
if (tmp.length === t) {
|
|
173
246
|
res.push(tmp);
|
|
174
247
|
tmp = [];
|
|
@@ -177,6 +250,22 @@ export function splitConstants(rc, t) {
|
|
|
177
250
|
return res;
|
|
178
251
|
}
|
|
179
252
|
/** Poseidon NTT-friendly hash. */
|
|
253
|
+
/**
|
|
254
|
+
* @param opts - Poseidon options. See {@link PoseidonOpts}.
|
|
255
|
+
* @returns Poseidon permutation.
|
|
256
|
+
* @throws If the Poseidon options or state vector are invalid. {@link Error}
|
|
257
|
+
* @example
|
|
258
|
+
* Build a Poseidon permutation from validated parameters and constants.
|
|
259
|
+
*
|
|
260
|
+
* ```ts
|
|
261
|
+
* import { grainGenConstants, poseidon } from '@noble/curves/abstract/poseidon.js';
|
|
262
|
+
* import { Field } from '@noble/curves/abstract/modular.js';
|
|
263
|
+
* const Fp = Field(17n);
|
|
264
|
+
* const constants = grainGenConstants({ Fp, t: 2, roundsFull: 8, roundsPartial: 8 });
|
|
265
|
+
* const hash = poseidon({ ...constants, Fp, t: 2, roundsFull: 8, roundsPartial: 8, sboxPower: 3 });
|
|
266
|
+
* const state = hash([1n, 2n]);
|
|
267
|
+
* ```
|
|
268
|
+
*/
|
|
180
269
|
export function poseidon(opts) {
|
|
181
270
|
const _opts = validateOpts(opts);
|
|
182
271
|
const { Fp, mds, roundConstants, rounds: totalRounds, roundsPartial, sboxFn, t } = _opts;
|
|
@@ -195,11 +284,14 @@ export function poseidon(opts) {
|
|
|
195
284
|
const poseidonHash = function poseidonHash(values) {
|
|
196
285
|
if (!Array.isArray(values) || values.length !== t)
|
|
197
286
|
throw new Error('invalid values, expected array of bigints with length ' + t);
|
|
198
|
-
|
|
287
|
+
// `.map()` skips sparse holes, which would leak `undefined` into round math below.
|
|
288
|
+
values = values.slice();
|
|
289
|
+
for (let j = 0; j < values.length; j++) {
|
|
290
|
+
const i = values[j];
|
|
199
291
|
if (typeof i !== 'bigint')
|
|
200
292
|
throw new Error('invalid bigint=' + i);
|
|
201
|
-
|
|
202
|
-
}
|
|
293
|
+
values[j] = Fp.create(i);
|
|
294
|
+
}
|
|
203
295
|
let lastRound = 0;
|
|
204
296
|
// Apply r_f/2 full rounds.
|
|
205
297
|
for (let i = 0; i < halfRoundsFull; i++)
|
|
@@ -215,9 +307,31 @@ export function poseidon(opts) {
|
|
|
215
307
|
return values;
|
|
216
308
|
};
|
|
217
309
|
// For verification in tests
|
|
218
|
-
poseidonHash
|
|
310
|
+
Object.defineProperty(poseidonHash, 'roundConstants', {
|
|
311
|
+
value: roundConstants,
|
|
312
|
+
enumerable: true,
|
|
313
|
+
});
|
|
219
314
|
return poseidonHash;
|
|
220
315
|
}
|
|
316
|
+
/**
|
|
317
|
+
* @param Fp - Field implementation.
|
|
318
|
+
* @param rate - Sponge rate.
|
|
319
|
+
* @param capacity - Sponge capacity.
|
|
320
|
+
* @param hash - Poseidon permutation.
|
|
321
|
+
* @example
|
|
322
|
+
* Wrap one Poseidon permutation in a sponge interface.
|
|
323
|
+
*
|
|
324
|
+
* ```ts
|
|
325
|
+
* import { PoseidonSponge, grainGenConstants, poseidon } from '@noble/curves/abstract/poseidon.js';
|
|
326
|
+
* import { Field } from '@noble/curves/abstract/modular.js';
|
|
327
|
+
* const Fp = Field(17n);
|
|
328
|
+
* const constants = grainGenConstants({ Fp, t: 2, roundsFull: 8, roundsPartial: 8 });
|
|
329
|
+
* const hash = poseidon({ ...constants, Fp, t: 2, roundsFull: 8, roundsPartial: 8, sboxPower: 3 });
|
|
330
|
+
* const sponge = new PoseidonSponge(Fp, 1, 1, hash);
|
|
331
|
+
* sponge.absorb([1n]);
|
|
332
|
+
* const out = sponge.squeeze(1);
|
|
333
|
+
* ```
|
|
334
|
+
*/
|
|
221
335
|
export class PoseidonSponge {
|
|
222
336
|
Fp;
|
|
223
337
|
rate;
|
|
@@ -227,14 +341,22 @@ export class PoseidonSponge {
|
|
|
227
341
|
pos = 0;
|
|
228
342
|
isAbsorbing = true;
|
|
229
343
|
constructor(Fp, rate, capacity, hash) {
|
|
344
|
+
const width = spongeShape(rate, capacity);
|
|
345
|
+
// The direct constructor accepts an arbitrary permutation hook, but callers still
|
|
346
|
+
// need to preserve the `PoseidonFn.roundConstants` width metadata. Reject width
|
|
347
|
+
// mismatches here instead of deferring them until the first `process()` call.
|
|
348
|
+
if (width !== hash.roundConstants[0]?.length)
|
|
349
|
+
throw new Error(`invalid sponge width: expected ${hash.roundConstants[0]?.length}, got ${width}`);
|
|
230
350
|
this.Fp = Fp;
|
|
231
351
|
this.hash = hash;
|
|
232
352
|
this.rate = rate;
|
|
233
353
|
this.capacity = capacity;
|
|
234
|
-
this.state = new Array(
|
|
354
|
+
this.state = new Array(width);
|
|
235
355
|
this.clean();
|
|
236
356
|
}
|
|
237
357
|
process() {
|
|
358
|
+
// The permutation is expected to return an owned state array. If callers inject a custom
|
|
359
|
+
// hook that reuses external storage, `clean()` will zero that shared buffer too.
|
|
238
360
|
this.state = this.hash(this.state);
|
|
239
361
|
}
|
|
240
362
|
absorb(input) {
|
|
@@ -255,6 +377,11 @@ export class PoseidonSponge {
|
|
|
255
377
|
}
|
|
256
378
|
}
|
|
257
379
|
squeeze(count) {
|
|
380
|
+
// Rust oracles use unsigned counts. In JS we keep `squeeze(0) => []` for
|
|
381
|
+
// compatibility, but still reject negative/fractional counts explicitly.
|
|
382
|
+
asafenumber(count, 'count');
|
|
383
|
+
if (count < 0)
|
|
384
|
+
throw new Error('invalid number count');
|
|
258
385
|
const res = [];
|
|
259
386
|
while (res.length < count) {
|
|
260
387
|
if (this.isAbsorbing || this.pos === this.rate) {
|
|
@@ -276,25 +403,61 @@ export class PoseidonSponge {
|
|
|
276
403
|
clone() {
|
|
277
404
|
const c = new PoseidonSponge(this.Fp, this.rate, this.capacity, this.hash);
|
|
278
405
|
c.pos = this.pos;
|
|
406
|
+
c.isAbsorbing = this.isAbsorbing;
|
|
279
407
|
c.state = [...this.state];
|
|
280
408
|
return c;
|
|
281
409
|
}
|
|
282
410
|
}
|
|
411
|
+
const spongeShape = (rate, capacity) => {
|
|
412
|
+
asafenumber(rate, 'rate');
|
|
413
|
+
asafenumber(capacity, 'capacity');
|
|
414
|
+
// A sponge with zero rate cannot absorb or squeeze any field elements.
|
|
415
|
+
if (rate < 1)
|
|
416
|
+
throw new Error('invalid number rate');
|
|
417
|
+
// Negative capacity can accidentally keep `rate + capacity` coherent while still
|
|
418
|
+
// producing a nonsensical sponge shape.
|
|
419
|
+
if (capacity < 0)
|
|
420
|
+
throw new Error('invalid number capacity');
|
|
421
|
+
return rate + capacity;
|
|
422
|
+
};
|
|
283
423
|
/**
|
|
284
424
|
* The method is not defined in spec, but nevertheless used often.
|
|
285
425
|
* Check carefully for compatibility: there are many edge cases, like absorbing an empty array.
|
|
286
426
|
* We cross-test against:
|
|
287
|
-
* - https://github.com/ProvableHQ/snarkVM/tree/staging/algorithms
|
|
288
|
-
* - https://github.com/arkworks-rs/crypto-primitives/tree/main
|
|
427
|
+
* - {@link https://github.com/ProvableHQ/snarkVM/tree/staging/algorithms | snarkVM algorithms}
|
|
428
|
+
* - {@link https://github.com/arkworks-rs/crypto-primitives/tree/main | arkworks crypto-primitives}
|
|
429
|
+
* @param opts - Sponge options. See {@link PoseidonSpongeOpts}.
|
|
430
|
+
* @returns Factory for sponge instances.
|
|
431
|
+
* @throws If the sponge dimensions or backing permutation options are invalid. {@link Error}
|
|
432
|
+
* @example
|
|
433
|
+
* Use the sponge helper to absorb several field elements and squeeze one digest.
|
|
434
|
+
*
|
|
435
|
+
* ```ts
|
|
436
|
+
* import { grainGenConstants, poseidonSponge } from '@noble/curves/abstract/poseidon.js';
|
|
437
|
+
* import { Field } from '@noble/curves/abstract/modular.js';
|
|
438
|
+
* const Fp = Field(17n);
|
|
439
|
+
* const constants = grainGenConstants({ Fp, t: 2, roundsFull: 8, roundsPartial: 8 });
|
|
440
|
+
* const makeSponge = poseidonSponge({
|
|
441
|
+
* ...constants,
|
|
442
|
+
* Fp,
|
|
443
|
+
* rate: 1,
|
|
444
|
+
* capacity: 1,
|
|
445
|
+
* roundsFull: 8,
|
|
446
|
+
* roundsPartial: 8,
|
|
447
|
+
* sboxPower: 3,
|
|
448
|
+
* });
|
|
449
|
+
* const sponge = makeSponge();
|
|
450
|
+
* sponge.absorb([1n]);
|
|
451
|
+
* const out = sponge.squeeze(1);
|
|
452
|
+
* ```
|
|
289
453
|
*/
|
|
290
454
|
export function poseidonSponge(opts) {
|
|
291
|
-
for (const k of ['rate', 'capacity'])
|
|
292
|
-
asafenumber(opts[k], k);
|
|
293
455
|
const { rate, capacity } = opts;
|
|
294
|
-
const t =
|
|
295
|
-
// Re-use hash instance between
|
|
456
|
+
const t = spongeShape(rate, capacity);
|
|
457
|
+
// Re-use one hash instance between sponge instances; isolation depends on
|
|
458
|
+
// poseidon(...) itself staying immutable and not carrying mutable call state.
|
|
296
459
|
const hash = poseidon({ ...opts, t });
|
|
297
460
|
const { Fp } = opts;
|
|
298
|
-
return () => new PoseidonSponge(Fp, rate, capacity, hash);
|
|
461
|
+
return (() => new PoseidonSponge(Fp, rate, capacity, hash));
|
|
299
462
|
}
|
|
300
463
|
//# sourceMappingURL=poseidon.js.map
|
package/abstract/poseidon.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"poseidon.js","sourceRoot":"","sources":["../src/abstract/poseidon.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"poseidon.js","sourceRoot":"","sources":["../src/abstract/poseidon.ts"],"names":[],"mappings":"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"}
|
package/abstract/tower.d.ts
CHANGED
|
@@ -1,21 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Towered extension fields.
|
|
3
|
+
* Rather than implementing a massive 12th-degree extension directly, it is more efficient
|
|
4
|
+
* to build it up from smaller extensions: a tower of extensions.
|
|
5
|
+
*
|
|
6
|
+
* For BLS12-381, the Fp12 field is implemented as a quadratic (degree two) extension,
|
|
7
|
+
* on top of a cubic (degree three) extension, on top of a quadratic extension of Fp.
|
|
8
|
+
*
|
|
9
|
+
* For more info: "Pairings for beginners" by Costello, section 7.3.
|
|
10
|
+
* @module
|
|
11
|
+
*/
|
|
12
|
+
/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */
|
|
13
|
+
import { type TArg, type TRet } from '../utils.ts';
|
|
1
14
|
import * as mod from './modular.ts';
|
|
2
15
|
import type { WeierstrassPoint, WeierstrassPointCons } from './weierstrass.ts';
|
|
16
|
+
/** Pair of bigints used for quadratic-extension tuples. */
|
|
3
17
|
export type BigintTuple = [bigint, bigint];
|
|
18
|
+
/** Prime-field element. */
|
|
4
19
|
export type Fp = bigint;
|
|
20
|
+
/** Quadratic-extension field element `c0 + c1 * u`. */
|
|
5
21
|
export type Fp2 = {
|
|
22
|
+
/** Real component. */
|
|
6
23
|
c0: bigint;
|
|
24
|
+
/** Imaginary component. */
|
|
7
25
|
c1: bigint;
|
|
8
26
|
};
|
|
27
|
+
/** Six bigints used for sextic-extension tuples. */
|
|
9
28
|
export type BigintSix = [bigint, bigint, bigint, bigint, bigint, bigint];
|
|
29
|
+
/** Sextic-extension field element `c0 + c1 * v + c2 * v^2`. */
|
|
10
30
|
export type Fp6 = {
|
|
31
|
+
/** Constant coefficient. */
|
|
11
32
|
c0: Fp2;
|
|
33
|
+
/** Linear coefficient. */
|
|
12
34
|
c1: Fp2;
|
|
35
|
+
/** Quadratic coefficient. */
|
|
13
36
|
c2: Fp2;
|
|
14
37
|
};
|
|
38
|
+
/**
|
|
39
|
+
* Degree-12 extension field element `c0 + c1 * w`.
|
|
40
|
+
* Fp₁₂ = Fp₆² over Fp₂³, with Fp₆(w) / (w² - γ) where γ = v.
|
|
41
|
+
*/
|
|
15
42
|
export type Fp12 = {
|
|
43
|
+
/** Constant coefficient. */
|
|
16
44
|
c0: Fp6;
|
|
45
|
+
/** Linear coefficient. */
|
|
17
46
|
c1: Fp6;
|
|
18
47
|
};
|
|
48
|
+
/** Twelve bigints used for degree-12 extension tuples. */
|
|
19
49
|
export type BigintTwelve = [
|
|
20
50
|
bigint,
|
|
21
51
|
bigint,
|
|
@@ -30,44 +60,95 @@ export type BigintTwelve = [
|
|
|
30
60
|
bigint,
|
|
31
61
|
bigint
|
|
32
62
|
];
|
|
63
|
+
/** BLS-friendly helpers on top of the quadratic extension field. */
|
|
33
64
|
export type Fp2Bls = mod.IField<Fp2> & {
|
|
65
|
+
/** Underlying prime field. */
|
|
34
66
|
Fp: mod.IField<Fp>;
|
|
67
|
+
/** Apply one Frobenius map. */
|
|
35
68
|
frobeniusMap(num: Fp2, power: number): Fp2;
|
|
69
|
+
/** Build one field element from a raw bigint tuple. */
|
|
36
70
|
fromBigTuple(num: BigintTuple): Fp2;
|
|
71
|
+
/** Multiply by the curve `b` constant. */
|
|
37
72
|
mulByB: (num: Fp2) => Fp2;
|
|
73
|
+
/** Multiply by the quadratic non-residue. */
|
|
38
74
|
mulByNonresidue: (num: Fp2) => Fp2;
|
|
75
|
+
/** Split one quadratic element into real and imaginary components. */
|
|
39
76
|
reim: (num: Fp2) => {
|
|
40
77
|
re: Fp;
|
|
41
78
|
im: Fp;
|
|
42
79
|
};
|
|
80
|
+
/** Specialized helper used by sextic squaring formulas. */
|
|
43
81
|
Fp4Square: (a: Fp2, b: Fp2) => {
|
|
44
82
|
first: Fp2;
|
|
45
83
|
second: Fp2;
|
|
46
84
|
};
|
|
85
|
+
/** Quadratic non-residue used by the extension. */
|
|
47
86
|
NONRESIDUE: Fp2;
|
|
48
87
|
};
|
|
88
|
+
/** BLS-friendly helpers on top of the sextic extension field. */
|
|
49
89
|
export type Fp6Bls = mod.IField<Fp6> & {
|
|
90
|
+
/** Underlying quadratic extension field. */
|
|
50
91
|
Fp2: Fp2Bls;
|
|
92
|
+
/** Apply one Frobenius map. */
|
|
51
93
|
frobeniusMap(num: Fp6, power: number): Fp6;
|
|
94
|
+
/** Build one field element from a raw six-bigint tuple. */
|
|
52
95
|
fromBigSix: (tuple: BigintSix) => Fp6;
|
|
96
|
+
/** Multiply by a sparse `(0, b1, 0)` sextic element. */
|
|
53
97
|
mul1(num: Fp6, b1: Fp2): Fp6;
|
|
98
|
+
/** Multiply by a sparse `(b0, b1, 0)` sextic element. */
|
|
54
99
|
mul01(num: Fp6, b0: Fp2, b1: Fp2): Fp6;
|
|
100
|
+
/** Multiply by one quadratic-extension element. */
|
|
55
101
|
mulByFp2(lhs: Fp6, rhs: Fp2): Fp6;
|
|
102
|
+
/** Multiply by the sextic non-residue. */
|
|
56
103
|
mulByNonresidue: (num: Fp6) => Fp6;
|
|
57
104
|
};
|
|
105
|
+
/** BLS-friendly helpers on top of the degree-12 extension field. */
|
|
58
106
|
export type Fp12Bls = mod.IField<Fp12> & {
|
|
107
|
+
/** Underlying sextic extension field. */
|
|
59
108
|
Fp6: Fp6Bls;
|
|
109
|
+
/** Apply one Frobenius map. */
|
|
60
110
|
frobeniusMap(num: Fp12, power: number): Fp12;
|
|
111
|
+
/** Build one field element from a raw twelve-bigint tuple. */
|
|
61
112
|
fromBigTwelve: (t: BigintTwelve) => Fp12;
|
|
113
|
+
/** Multiply by a sparse `(o0, o1, 0, 0, o4, 0)` element. */
|
|
62
114
|
mul014(num: Fp12, o0: Fp2, o1: Fp2, o4: Fp2): Fp12;
|
|
115
|
+
/** Multiply by a sparse `(o0, 0, 0, o3, o4, 0)` element. */
|
|
63
116
|
mul034(num: Fp12, o0: Fp2, o3: Fp2, o4: Fp2): Fp12;
|
|
117
|
+
/** Multiply by one quadratic-extension element. */
|
|
64
118
|
mulByFp2(lhs: Fp12, rhs: Fp2): Fp12;
|
|
119
|
+
/** Conjugate one degree-12 element. */
|
|
65
120
|
conjugate(num: Fp12): Fp12;
|
|
121
|
+
/** Apply the final exponentiation from pairing arithmetic. */
|
|
66
122
|
finalExponentiate(num: Fp12): Fp12;
|
|
123
|
+
/** Apply one cyclotomic square. */
|
|
67
124
|
_cyclotomicSquare(num: Fp12): Fp12;
|
|
125
|
+
/** Apply one cyclotomic exponentiation. */
|
|
68
126
|
_cyclotomicExp(num: Fp12, n: bigint): Fp12;
|
|
69
127
|
};
|
|
70
|
-
|
|
128
|
+
declare function calcFrobeniusCoefficients<T>(Fp: TArg<mod.IField<T>>, nonResidue: T, modulus: bigint, degree: number, num?: number, divisor?: number): T[][];
|
|
129
|
+
export declare const __TEST: {
|
|
130
|
+
calcFrobeniusCoefficients: typeof calcFrobeniusCoefficients;
|
|
131
|
+
};
|
|
132
|
+
/**
|
|
133
|
+
* @param Fp - Base field implementation.
|
|
134
|
+
* @param Fp2 - Quadratic extension field.
|
|
135
|
+
* @param base - Twist-specific Frobenius base whose powers yield the `c1` / `c2` constants.
|
|
136
|
+
* BLS12-381 uses `1 / NONRESIDUE`; BN254 uses `NONRESIDUE`.
|
|
137
|
+
* @returns Frobenius endomorphism helpers.
|
|
138
|
+
* @throws If the derived Frobenius constants are inconsistent for the tower. {@link Error}
|
|
139
|
+
* @example
|
|
140
|
+
* Build Frobenius endomorphism helpers for a BLS extension tower.
|
|
141
|
+
*
|
|
142
|
+
* ```ts
|
|
143
|
+
* import { psiFrobenius } from '@noble/curves/abstract/tower.js';
|
|
144
|
+
* import { bls12_381 } from '@noble/curves/bls12-381.js';
|
|
145
|
+
* const Fp = bls12_381.fields.Fp;
|
|
146
|
+
* const Fp2 = bls12_381.fields.Fp2;
|
|
147
|
+
* const frob = psiFrobenius(Fp, Fp2, Fp2.div(Fp2.ONE, Fp2.NONRESIDUE));
|
|
148
|
+
* const point = frob.G2psi(bls12_381.G2.Point, bls12_381.G2.Point.BASE);
|
|
149
|
+
* ```
|
|
150
|
+
*/
|
|
151
|
+
export declare function psiFrobenius(Fp: TArg<mod.IField<Fp>>, Fp2: TArg<Fp2Bls>, base: TArg<Fp2>): {
|
|
71
152
|
psi: (x: Fp2, y: Fp2) => [Fp2, Fp2];
|
|
72
153
|
psi2: (x: Fp2, y: Fp2) => [Fp2, Fp2];
|
|
73
154
|
G2psi: (c: WeierstrassPointCons<Fp2>, P: WeierstrassPoint<Fp2>) => WeierstrassPoint<Fp2>;
|
|
@@ -77,19 +158,57 @@ export declare function psiFrobenius(Fp: mod.IField<Fp>, Fp2: Fp2Bls, base: Fp2)
|
|
|
77
158
|
PSI2_X: Fp2;
|
|
78
159
|
PSI2_Y: Fp2;
|
|
79
160
|
};
|
|
161
|
+
/** Construction options for the BLS-style degree-12 tower. */
|
|
80
162
|
export type Tower12Opts = {
|
|
163
|
+
/** Prime-field order. */
|
|
81
164
|
ORDER: bigint;
|
|
165
|
+
/** Bit length of the BLS parameter `x`. */
|
|
82
166
|
X_LEN: number;
|
|
167
|
+
/** Prime-field non-residue used by the quadratic extension. */
|
|
83
168
|
NONRESIDUE?: Fp;
|
|
169
|
+
/** Quadratic-extension non-residue used by the sextic tower. */
|
|
84
170
|
FP2_NONRESIDUE: BigintTuple;
|
|
171
|
+
/**
|
|
172
|
+
* Optional custom quadratic square-root helper.
|
|
173
|
+
* Receives one quadratic-extension element and returns one square root.
|
|
174
|
+
*/
|
|
85
175
|
Fp2sqrt?: (num: Fp2) => Fp2;
|
|
176
|
+
/**
|
|
177
|
+
* Multiply one quadratic element by the curve `b` constant.
|
|
178
|
+
* @param num - Quadratic-extension element to scale.
|
|
179
|
+
* @returns Product by the curve `b` constant.
|
|
180
|
+
*/
|
|
86
181
|
Fp2mulByB: (num: Fp2) => Fp2;
|
|
182
|
+
/**
|
|
183
|
+
* Final exponentiation used by pairing arithmetic.
|
|
184
|
+
* @param num - Degree-12 field element to exponentiate.
|
|
185
|
+
* @returns Pairing result after final exponentiation.
|
|
186
|
+
*/
|
|
87
187
|
Fp12finalExponentiate: (num: Fp12) => Fp12;
|
|
88
188
|
};
|
|
89
|
-
|
|
189
|
+
/**
|
|
190
|
+
* @param opts - Tower construction options. See {@link Tower12Opts}.
|
|
191
|
+
* @returns BLS tower fields.
|
|
192
|
+
* @throws If the tower options or derived Frobenius helpers are invalid. {@link Error}
|
|
193
|
+
* @example
|
|
194
|
+
* Construct the Fp2/Fp6/Fp12 tower used by a pairing-friendly curve.
|
|
195
|
+
*
|
|
196
|
+
* ```ts
|
|
197
|
+
* const fields = tower12({
|
|
198
|
+
* ORDER: 17n,
|
|
199
|
+
* X_LEN: 4,
|
|
200
|
+
* FP2_NONRESIDUE: [1n, 1n],
|
|
201
|
+
* Fp2mulByB: (num) => num,
|
|
202
|
+
* Fp12finalExponentiate: (num) => num,
|
|
203
|
+
* });
|
|
204
|
+
* const fp12 = fields.Fp12.ONE;
|
|
205
|
+
* ```
|
|
206
|
+
*/
|
|
207
|
+
export declare function tower12(opts: TArg<Tower12Opts>): TRet<{
|
|
90
208
|
Fp: Readonly<mod.IField<bigint> & Required<Pick<mod.IField<bigint>, 'isOdd'>>>;
|
|
91
209
|
Fp2: Fp2Bls;
|
|
92
210
|
Fp6: Fp6Bls;
|
|
93
211
|
Fp12: Fp12Bls;
|
|
94
|
-
}
|
|
212
|
+
}>;
|
|
213
|
+
export {};
|
|
95
214
|
//# sourceMappingURL=tower.d.ts.map
|
package/abstract/tower.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tower.d.ts","sourceRoot":"","sources":["../src/abstract/tower.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tower.d.ts","sourceRoot":"","sources":["../src/abstract/tower.ts"],"names":[],"mappings":"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"}
|