@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/oprf.js
CHANGED
|
@@ -34,10 +34,12 @@ OPRF allows to interactively create an `Output = PRF(Input, serverSecretKey)`:
|
|
|
34
34
|
## Modes
|
|
35
35
|
|
|
36
36
|
- OPRF: simple mode, client doesn't need to know server public key
|
|
37
|
-
- VOPRF:
|
|
37
|
+
- VOPRF: verifiable mode. It lets the client verify that the server used the
|
|
38
|
+
secret key corresponding to a known public key
|
|
38
39
|
- POPRF: partially oblivious mode, VOPRF + domain separation
|
|
39
40
|
|
|
40
|
-
There is also non-interactive mode (Evaluate)
|
|
41
|
+
There is also non-interactive mode (Evaluate), which creates Output
|
|
42
|
+
non-interactively with knowledge of the secret key.
|
|
41
43
|
|
|
42
44
|
Flow:
|
|
43
45
|
- (once) Server generates secret and public keys, distributes public keys to clients
|
|
@@ -50,26 +52,50 @@ Flow:
|
|
|
50
52
|
*/
|
|
51
53
|
/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */
|
|
52
54
|
import { abytes, asciiToBytes, bytesToNumberBE, bytesToNumberLE, concatBytes, numberToBytesBE, randomBytes, validateObject, } from "../utils.js";
|
|
53
|
-
import { pippenger } from "./curve.js";
|
|
55
|
+
import { pippenger, validatePointCons } from "./curve.js";
|
|
54
56
|
import { _DST_scalar } from "./hash-to-curve.js";
|
|
55
57
|
import { getMinHashLength, mapHashToField } from "./modular.js";
|
|
58
|
+
const _DST_scalarBytes = /* @__PURE__ */ asciiToBytes(_DST_scalar);
|
|
56
59
|
// welcome to generic hell
|
|
57
|
-
|
|
60
|
+
/**
|
|
61
|
+
* @param opts - OPRF ciphersuite options. See {@link OPRFOpts}.
|
|
62
|
+
* @returns OPRF helper namespace.
|
|
63
|
+
* @example
|
|
64
|
+
* Instantiate an OPRF suite from curve-specific hashing hooks.
|
|
65
|
+
*
|
|
66
|
+
* ```ts
|
|
67
|
+
* import { createOPRF } from '@noble/curves/abstract/oprf.js';
|
|
68
|
+
* import { p256, p256_hasher } from '@noble/curves/nist.js';
|
|
69
|
+
* import { sha256 } from '@noble/hashes/sha2.js';
|
|
70
|
+
* const oprf = createOPRF({
|
|
71
|
+
* name: 'P256-SHA256',
|
|
72
|
+
* Point: p256.Point,
|
|
73
|
+
* hash: sha256,
|
|
74
|
+
* hashToGroup: p256_hasher.hashToCurve,
|
|
75
|
+
* hashToScalar: p256_hasher.hashToScalar,
|
|
76
|
+
* });
|
|
77
|
+
* const keys = oprf.oprf.generateKeyPair();
|
|
78
|
+
* ```
|
|
79
|
+
*/
|
|
80
|
+
export function createOPRF(opts) {
|
|
58
81
|
validateObject(opts, {
|
|
59
82
|
name: 'string',
|
|
60
83
|
hash: 'function',
|
|
61
84
|
hashToScalar: 'function',
|
|
62
85
|
hashToGroup: 'function',
|
|
63
86
|
});
|
|
64
|
-
//
|
|
65
|
-
//
|
|
87
|
+
// Cheap constructor-surface sanity check only: this verifies the generic static hooks/fields that
|
|
88
|
+
// OPRF consumes, but it does not certify point semantics like BASE/ZERO correctness.
|
|
89
|
+
validatePointCons(opts.Point);
|
|
66
90
|
const { name, Point, hash } = opts;
|
|
67
91
|
const { Fn } = Point;
|
|
68
92
|
const hashToGroup = (msg, ctx) => opts.hashToGroup(msg, {
|
|
69
93
|
DST: concatBytes(asciiToBytes('HashToGroup-'), ctx),
|
|
70
94
|
});
|
|
71
|
-
const hashToScalarPrefixed = (msg, ctx) => opts.hashToScalar(msg, { DST: concatBytes(
|
|
95
|
+
const hashToScalarPrefixed = (msg, ctx) => opts.hashToScalar(msg, { DST: concatBytes(_DST_scalarBytes, ctx) });
|
|
72
96
|
const randomScalar = (rng = randomBytes) => {
|
|
97
|
+
// RFC 9497 §2.1 defines RandomScalar as nonzero; blind inversion and generated public keys
|
|
98
|
+
// both rely on keeping this helper in the `1..n-1` range.
|
|
73
99
|
const t = mapHashToField(rng(getMinHashLength(Fn.ORDER)), Fn.ORDER, Fn.isLE);
|
|
74
100
|
// We cannot use Fn.fromBytes here, because field
|
|
75
101
|
// can have different number of bytes (like ed448)
|
|
@@ -95,6 +121,14 @@ export function createORPF(opts) {
|
|
|
95
121
|
// No wipe here, since will modify actual bytes
|
|
96
122
|
return concatBytes(...res);
|
|
97
123
|
}
|
|
124
|
+
const inputBytes = (title, bytes) => {
|
|
125
|
+
abytes(bytes, undefined, title);
|
|
126
|
+
// RFC 9497 §1.2 limits PrivateInput/PublicInput to 2^16 - 1 bytes because these values are
|
|
127
|
+
// length-prefixed with two bytes before use throughout the protocol.
|
|
128
|
+
if (bytes.length > 0xffff)
|
|
129
|
+
throw new Error(`"${title}" expected Uint8Array of length <= 65535, got length=${bytes.length}`);
|
|
130
|
+
return bytes;
|
|
131
|
+
};
|
|
98
132
|
const hashInput = (...bytes) => hash(encode(...bytes, 'Finalize'));
|
|
99
133
|
function getTranscripts(B, C, D, ctx) {
|
|
100
134
|
const Bm = B.toBytes();
|
|
@@ -117,6 +151,8 @@ export function createORPF(opts) {
|
|
|
117
151
|
function computeCompositesFast(k, B, C, D, ctx) {
|
|
118
152
|
const T = getTranscripts(B, C, D, ctx);
|
|
119
153
|
const M = msm(C, T);
|
|
154
|
+
// RFC 9497 §2.2.1 ComputeCompositesFast derives weights from both C and D in getTranscripts(),
|
|
155
|
+
// then uses the server shortcut Z = k * M instead of a second MSM over D.
|
|
120
156
|
const Z = M.multiply(k);
|
|
121
157
|
return { M, Z };
|
|
122
158
|
}
|
|
@@ -149,6 +185,10 @@ export function createORPF(opts) {
|
|
|
149
185
|
return { secretKey: Fn.toBytes(skS), publicKey: pkS.toBytes() };
|
|
150
186
|
}
|
|
151
187
|
function deriveKeyPair(ctx, seed, info) {
|
|
188
|
+
// RFC 9497 §3.2.1 defines `seed[32]`; reject other sizes here because this public API already
|
|
189
|
+
// documents a 32-byte seed instead of generic input keying material.
|
|
190
|
+
abytes(seed, 32, 'seed');
|
|
191
|
+
info = inputBytes('keyInfo', info);
|
|
152
192
|
const dst = concatBytes(asciiToBytes('DeriveKeyPair'), ctx);
|
|
153
193
|
const msg = concatBytes(seed, encode(info), Uint8Array.of(0));
|
|
154
194
|
for (let counter = 0; counter <= 255; counter++) {
|
|
@@ -156,11 +196,23 @@ export function createORPF(opts) {
|
|
|
156
196
|
const skS = opts.hashToScalar(msg, { DST: dst });
|
|
157
197
|
if (Fn.is0(skS))
|
|
158
198
|
continue; // should not happen
|
|
159
|
-
return {
|
|
199
|
+
return {
|
|
200
|
+
secretKey: Fn.toBytes(skS),
|
|
201
|
+
publicKey: Point.BASE.multiply(skS).toBytes(),
|
|
202
|
+
};
|
|
160
203
|
}
|
|
161
204
|
throw new Error('Cannot derive key');
|
|
162
205
|
}
|
|
206
|
+
const wirePoint = (label, bytes) => {
|
|
207
|
+
const point = Point.fromBytes(bytes);
|
|
208
|
+
// RFC 9497 §3.3 says applications MUST reject group-identity Elements received over the wire
|
|
209
|
+
// after deserialization, even if the suite decoder itself accepts the identity encoding.
|
|
210
|
+
if (point.equals(Point.ZERO))
|
|
211
|
+
throw new Error(label + ' point at infinity');
|
|
212
|
+
return point;
|
|
213
|
+
};
|
|
163
214
|
function blind(ctx, input, rng = randomBytes) {
|
|
215
|
+
input = inputBytes('input', input);
|
|
164
216
|
const blind = randomScalar(rng);
|
|
165
217
|
const inputPoint = hashToGroup(input, ctx);
|
|
166
218
|
if (inputPoint.equals(Point.ZERO))
|
|
@@ -169,6 +221,7 @@ export function createORPF(opts) {
|
|
|
169
221
|
return { blind: Fn.toBytes(blind), blinded: blinded.toBytes() };
|
|
170
222
|
}
|
|
171
223
|
function evaluate(ctx, secretKey, input) {
|
|
224
|
+
input = inputBytes('input', input);
|
|
172
225
|
const skS = Fn.fromBytes(secretKey);
|
|
173
226
|
const inputPoint = hashToGroup(input, ctx);
|
|
174
227
|
if (inputPoint.equals(Point.ZERO))
|
|
@@ -176,24 +229,25 @@ export function createORPF(opts) {
|
|
|
176
229
|
const unblinded = inputPoint.multiply(skS).toBytes();
|
|
177
230
|
return hashInput(input, unblinded);
|
|
178
231
|
}
|
|
179
|
-
const oprf = {
|
|
232
|
+
const oprf = Object.freeze({
|
|
180
233
|
generateKeyPair,
|
|
181
234
|
deriveKeyPair: (seed, keyInfo) => deriveKeyPair(ctxOPRF, seed, keyInfo),
|
|
182
235
|
blind: (input, rng = randomBytes) => blind(ctxOPRF, input, rng),
|
|
183
236
|
blindEvaluate(secretKey, blindedPoint) {
|
|
184
237
|
const skS = Fn.fromBytes(secretKey);
|
|
185
|
-
const elm =
|
|
238
|
+
const elm = wirePoint('blinded', blindedPoint);
|
|
186
239
|
return elm.multiply(skS).toBytes();
|
|
187
240
|
},
|
|
188
241
|
finalize(input, blindBytes, evaluatedBytes) {
|
|
242
|
+
input = inputBytes('input', input);
|
|
189
243
|
const blind = Fn.fromBytes(blindBytes);
|
|
190
|
-
const evalPoint =
|
|
244
|
+
const evalPoint = wirePoint('evaluated', evaluatedBytes);
|
|
191
245
|
const unblinded = evalPoint.multiply(Fn.inv(blind)).toBytes();
|
|
192
246
|
return hashInput(input, unblinded);
|
|
193
247
|
},
|
|
194
248
|
evaluate: (secretKey, input) => evaluate(ctxOPRF, secretKey, input),
|
|
195
|
-
};
|
|
196
|
-
const voprf = {
|
|
249
|
+
});
|
|
250
|
+
const voprf = Object.freeze({
|
|
197
251
|
generateKeyPair,
|
|
198
252
|
deriveKeyPair: (seed, keyInfo) => deriveKeyPair(ctxVOPRF, seed, keyInfo),
|
|
199
253
|
blind: (input, rng = randomBytes) => blind(ctxVOPRF, input, rng),
|
|
@@ -201,8 +255,8 @@ export function createORPF(opts) {
|
|
|
201
255
|
if (!Array.isArray(blinded))
|
|
202
256
|
throw new Error('expected array');
|
|
203
257
|
const skS = Fn.fromBytes(secretKey);
|
|
204
|
-
const pkS =
|
|
205
|
-
const blindedPoints = blinded.map(
|
|
258
|
+
const pkS = wirePoint('public key', publicKey);
|
|
259
|
+
const blindedPoints = blinded.map((i) => wirePoint('blinded', i));
|
|
206
260
|
const evaluated = blindedPoints.map((i) => i.multiply(skS));
|
|
207
261
|
const proof = generateProof(ctxVOPRF, skS, pkS, blindedPoints, evaluated, rng);
|
|
208
262
|
return { evaluated: evaluated.map((i) => i.toBytes()), proof };
|
|
@@ -214,9 +268,9 @@ export function createORPF(opts) {
|
|
|
214
268
|
finalizeBatch(items, publicKey, proof) {
|
|
215
269
|
if (!Array.isArray(items))
|
|
216
270
|
throw new Error('expected array');
|
|
217
|
-
const pkS =
|
|
218
|
-
const blindedPoints = items.map((i) => i.blinded)
|
|
219
|
-
const evalPoints = items.map((i) => i.evaluated)
|
|
271
|
+
const pkS = wirePoint('public key', publicKey);
|
|
272
|
+
const blindedPoints = items.map((i) => wirePoint('blinded', i.blinded));
|
|
273
|
+
const evalPoints = items.map((i) => wirePoint('evaluated', i.evaluated));
|
|
220
274
|
verifyProof(ctxVOPRF, pkS, blindedPoints, evalPoints, proof);
|
|
221
275
|
return items.map((i) => oprf.finalize(i.input, i.blind, i.evaluated));
|
|
222
276
|
},
|
|
@@ -224,16 +278,18 @@ export function createORPF(opts) {
|
|
|
224
278
|
return this.finalizeBatch([{ input, blind, evaluated, blinded }], publicKey, proof)[0];
|
|
225
279
|
},
|
|
226
280
|
evaluate: (secretKey, input) => evaluate(ctxVOPRF, secretKey, input),
|
|
227
|
-
};
|
|
281
|
+
});
|
|
228
282
|
// NOTE: info is domain separation
|
|
229
283
|
const poprf = (info) => {
|
|
284
|
+
info = inputBytes('info', info);
|
|
230
285
|
const m = hashToScalarPrefixed(encode('Info', info), ctxPOPRF);
|
|
231
286
|
const T = Point.BASE.multiply(m);
|
|
232
|
-
return {
|
|
287
|
+
return Object.freeze({
|
|
233
288
|
generateKeyPair,
|
|
234
289
|
deriveKeyPair: (seed, keyInfo) => deriveKeyPair(ctxPOPRF, seed, keyInfo),
|
|
235
290
|
blind(input, publicKey, rng = randomBytes) {
|
|
236
|
-
|
|
291
|
+
input = inputBytes('input', input);
|
|
292
|
+
const pkS = wirePoint('public key', publicKey);
|
|
237
293
|
const tweakedKey = T.add(pkS);
|
|
238
294
|
if (tweakedKey.equals(Point.ZERO))
|
|
239
295
|
throw new Error('tweakedKey point at infinity');
|
|
@@ -253,10 +309,10 @@ export function createORPF(opts) {
|
|
|
253
309
|
throw new Error('expected array');
|
|
254
310
|
const skS = Fn.fromBytes(secretKey);
|
|
255
311
|
const t = Fn.add(skS, m);
|
|
256
|
-
// "Hence, this error can be a signal for the server to replace its
|
|
257
|
-
// should be impossible.
|
|
312
|
+
// "Hence, this error can be a signal for the server to replace its
|
|
313
|
+
// private key". We throw inside; this should be impossible.
|
|
258
314
|
const invT = Fn.inv(t);
|
|
259
|
-
const blindedPoints = blinded.map(
|
|
315
|
+
const blindedPoints = blinded.map((i) => wirePoint('blinded', i));
|
|
260
316
|
const evalPoints = blindedPoints.map((i) => i.multiply(invT));
|
|
261
317
|
const tweakedKey = Point.BASE.multiply(t);
|
|
262
318
|
const proof = generateProof(ctxPOPRF, t, tweakedKey, evalPoints, blindedPoints, rng);
|
|
@@ -269,18 +325,20 @@ export function createORPF(opts) {
|
|
|
269
325
|
finalizeBatch(items, proof, tweakedKey) {
|
|
270
326
|
if (!Array.isArray(items))
|
|
271
327
|
throw new Error('expected array');
|
|
272
|
-
const
|
|
273
|
-
|
|
328
|
+
const inputs = items.map((i) => inputBytes('input', i.input));
|
|
329
|
+
const evalPoints = items.map((i) => wirePoint('evaluated', i.evaluated));
|
|
330
|
+
verifyProof(ctxPOPRF, wirePoint('tweakedKey', tweakedKey), evalPoints, items.map((i) => wirePoint('blinded', i.blinded)), proof);
|
|
274
331
|
return items.map((i, j) => {
|
|
275
332
|
const blind = Fn.fromBytes(i.blind);
|
|
276
333
|
const point = evalPoints[j].multiply(Fn.inv(blind)).toBytes();
|
|
277
|
-
return hashInput(
|
|
334
|
+
return hashInput(inputs[j], info, point);
|
|
278
335
|
});
|
|
279
336
|
},
|
|
280
337
|
finalize(input, blind, evaluated, blinded, proof, tweakedKey) {
|
|
281
338
|
return this.finalizeBatch([{ input, blind, evaluated, blinded }], proof, tweakedKey)[0];
|
|
282
339
|
},
|
|
283
340
|
evaluate(secretKey, input) {
|
|
341
|
+
input = inputBytes('input', input);
|
|
284
342
|
const skS = Fn.fromBytes(secretKey);
|
|
285
343
|
const inputPoint = hashToGroup(input, ctxPOPRF);
|
|
286
344
|
if (inputPoint.equals(Point.ZERO))
|
|
@@ -290,8 +348,9 @@ export function createORPF(opts) {
|
|
|
290
348
|
const unblinded = inputPoint.multiply(invT).toBytes();
|
|
291
349
|
return hashInput(input, info, unblinded);
|
|
292
350
|
},
|
|
293
|
-
};
|
|
351
|
+
});
|
|
294
352
|
};
|
|
295
|
-
|
|
353
|
+
const res = { name, oprf, voprf, poprf, __tests: Object.freeze({ Fn }) };
|
|
354
|
+
return Object.freeze(res);
|
|
296
355
|
}
|
|
297
356
|
//# sourceMappingURL=oprf.js.map
|
package/abstract/oprf.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oprf.js","sourceRoot":"","sources":["../src/abstract/oprf.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"oprf.js","sourceRoot":"","sources":["../src/abstract/oprf.ts"],"names":[],"mappings":"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"}
|
package/abstract/poseidon.d.ts
CHANGED
|
@@ -1,24 +1,75 @@
|
|
|
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 { type TArg, type TRet } from '../utils.ts';
|
|
1
11
|
import { type IField } from './modular.ts';
|
|
12
|
+
/** Core Poseidon permutation parameters shared by all variants. */
|
|
2
13
|
export type PoseidonBasicOpts = {
|
|
14
|
+
/** Prime field used by the permutation. */
|
|
3
15
|
Fp: IField<bigint>;
|
|
16
|
+
/** Poseidon width `t = rate + capacity`. */
|
|
4
17
|
t: number;
|
|
18
|
+
/** Number of full S-box rounds. */
|
|
5
19
|
roundsFull: number;
|
|
20
|
+
/** Number of partial S-box rounds. */
|
|
6
21
|
roundsPartial: number;
|
|
22
|
+
/** Whether to use the inverse S-box variant. */
|
|
7
23
|
isSboxInverse?: boolean;
|
|
8
24
|
};
|
|
25
|
+
/** Poseidon settings used by the Grain-LFSR constant generator. */
|
|
9
26
|
export type PoseidonGrainOpts = PoseidonBasicOpts & {
|
|
27
|
+
/** S-box power used while generating constants. */
|
|
10
28
|
sboxPower?: number;
|
|
11
29
|
};
|
|
12
30
|
type PoseidonConstants = {
|
|
13
31
|
mds: bigint[][];
|
|
14
32
|
roundConstants: bigint[][];
|
|
15
33
|
};
|
|
16
|
-
|
|
34
|
+
/**
|
|
35
|
+
* @param opts - Poseidon grain options. See {@link PoseidonGrainOpts}.
|
|
36
|
+
* @param skipMDS - Number of MDS samples to skip.
|
|
37
|
+
* @returns Generated constants.
|
|
38
|
+
* @throws If the generated MDS matrix contains a zero denominator. {@link Error}
|
|
39
|
+
* @example
|
|
40
|
+
* Generate Poseidon round constants and an MDS matrix from the Grain LFSR.
|
|
41
|
+
*
|
|
42
|
+
* ```ts
|
|
43
|
+
* import { grainGenConstants } from '@noble/curves/abstract/poseidon.js';
|
|
44
|
+
* import { Field } from '@noble/curves/abstract/modular.js';
|
|
45
|
+
* const Fp = Field(17n);
|
|
46
|
+
* const constants = grainGenConstants({ Fp, t: 2, roundsFull: 8, roundsPartial: 8 });
|
|
47
|
+
* ```
|
|
48
|
+
*/
|
|
49
|
+
export declare function grainGenConstants(opts: TArg<PoseidonGrainOpts>, skipMDS?: number): PoseidonConstants;
|
|
50
|
+
/** Fully specified Poseidon permutation options with explicit constants. */
|
|
17
51
|
export type PoseidonOpts = PoseidonBasicOpts & PoseidonConstants & {
|
|
52
|
+
/** S-box power used by the permutation. */
|
|
18
53
|
sboxPower?: number;
|
|
54
|
+
/** Whether to reverse the partial-round S-box index. */
|
|
19
55
|
reversePartialPowIdx?: boolean;
|
|
20
56
|
};
|
|
21
|
-
|
|
57
|
+
/**
|
|
58
|
+
* @param opts - Poseidon options. See {@link PoseidonOpts}.
|
|
59
|
+
* @returns Normalized poseidon options.
|
|
60
|
+
* @throws If the Poseidon options, constants, or MDS matrix are invalid. {@link Error}
|
|
61
|
+
* @example
|
|
62
|
+
* Validate generated constants before constructing a permutation.
|
|
63
|
+
*
|
|
64
|
+
* ```ts
|
|
65
|
+
* import { grainGenConstants, validateOpts } from '@noble/curves/abstract/poseidon.js';
|
|
66
|
+
* import { Field } from '@noble/curves/abstract/modular.js';
|
|
67
|
+
* const Fp = Field(17n);
|
|
68
|
+
* const constants = grainGenConstants({ Fp, t: 2, roundsFull: 8, roundsPartial: 8 });
|
|
69
|
+
* const opts = validateOpts({ ...constants, Fp, t: 2, roundsFull: 8, roundsPartial: 8, sboxPower: 3 });
|
|
70
|
+
* ```
|
|
71
|
+
*/
|
|
72
|
+
export declare function validateOpts(opts: TArg<PoseidonOpts>): TRet<Readonly<{
|
|
22
73
|
rounds: number;
|
|
23
74
|
sboxFn: (n: bigint) => bigint;
|
|
24
75
|
roundConstants: bigint[][];
|
|
@@ -29,14 +80,67 @@ export declare function validateOpts(opts: PoseidonOpts): Readonly<{
|
|
|
29
80
|
roundsPartial: number;
|
|
30
81
|
sboxPower?: number;
|
|
31
82
|
reversePartialPowIdx?: boolean;
|
|
32
|
-
}
|
|
83
|
+
}>>;
|
|
84
|
+
/**
|
|
85
|
+
* @param rc - Flattened round constants.
|
|
86
|
+
* @param t - Poseidon width.
|
|
87
|
+
* @returns Constants grouped by round.
|
|
88
|
+
* @throws If the width or flattened constant array is invalid. {@link Error}
|
|
89
|
+
* @example
|
|
90
|
+
* Regroup a flat constant list into per-round chunks.
|
|
91
|
+
*
|
|
92
|
+
* ```ts
|
|
93
|
+
* const rounds = splitConstants([1n, 2n, 3n, 4n], 2);
|
|
94
|
+
* ```
|
|
95
|
+
*/
|
|
33
96
|
export declare function splitConstants(rc: bigint[], t: number): bigint[][];
|
|
97
|
+
/**
|
|
98
|
+
* Poseidon permutation callable.
|
|
99
|
+
* @param values - Poseidon state vector. Non-canonical bigints are normalized with `Fp.create(...)`.
|
|
100
|
+
* @returns Permuted state vector.
|
|
101
|
+
*/
|
|
34
102
|
export type PoseidonFn = {
|
|
35
103
|
(values: bigint[]): bigint[];
|
|
104
|
+
/** Round constants captured by the permutation instance. */
|
|
36
105
|
roundConstants: bigint[][];
|
|
37
106
|
};
|
|
38
107
|
/** Poseidon NTT-friendly hash. */
|
|
39
|
-
|
|
108
|
+
/**
|
|
109
|
+
* @param opts - Poseidon options. See {@link PoseidonOpts}.
|
|
110
|
+
* @returns Poseidon permutation.
|
|
111
|
+
* @throws If the Poseidon options or state vector are invalid. {@link Error}
|
|
112
|
+
* @example
|
|
113
|
+
* Build a Poseidon permutation from validated parameters and constants.
|
|
114
|
+
*
|
|
115
|
+
* ```ts
|
|
116
|
+
* import { grainGenConstants, poseidon } from '@noble/curves/abstract/poseidon.js';
|
|
117
|
+
* import { Field } from '@noble/curves/abstract/modular.js';
|
|
118
|
+
* const Fp = Field(17n);
|
|
119
|
+
* const constants = grainGenConstants({ Fp, t: 2, roundsFull: 8, roundsPartial: 8 });
|
|
120
|
+
* const hash = poseidon({ ...constants, Fp, t: 2, roundsFull: 8, roundsPartial: 8, sboxPower: 3 });
|
|
121
|
+
* const state = hash([1n, 2n]);
|
|
122
|
+
* ```
|
|
123
|
+
*/
|
|
124
|
+
export declare function poseidon(opts: TArg<PoseidonOpts>): PoseidonFn;
|
|
125
|
+
/**
|
|
126
|
+
* @param Fp - Field implementation.
|
|
127
|
+
* @param rate - Sponge rate.
|
|
128
|
+
* @param capacity - Sponge capacity.
|
|
129
|
+
* @param hash - Poseidon permutation.
|
|
130
|
+
* @example
|
|
131
|
+
* Wrap one Poseidon permutation in a sponge interface.
|
|
132
|
+
*
|
|
133
|
+
* ```ts
|
|
134
|
+
* import { PoseidonSponge, grainGenConstants, poseidon } from '@noble/curves/abstract/poseidon.js';
|
|
135
|
+
* import { Field } from '@noble/curves/abstract/modular.js';
|
|
136
|
+
* const Fp = Field(17n);
|
|
137
|
+
* const constants = grainGenConstants({ Fp, t: 2, roundsFull: 8, roundsPartial: 8 });
|
|
138
|
+
* const hash = poseidon({ ...constants, Fp, t: 2, roundsFull: 8, roundsPartial: 8, sboxPower: 3 });
|
|
139
|
+
* const sponge = new PoseidonSponge(Fp, 1, 1, hash);
|
|
140
|
+
* sponge.absorb([1n]);
|
|
141
|
+
* const out = sponge.squeeze(1);
|
|
142
|
+
* ```
|
|
143
|
+
*/
|
|
40
144
|
export declare class PoseidonSponge {
|
|
41
145
|
private Fp;
|
|
42
146
|
readonly rate: number;
|
|
@@ -52,17 +156,44 @@ export declare class PoseidonSponge {
|
|
|
52
156
|
clean(): void;
|
|
53
157
|
clone(): PoseidonSponge;
|
|
54
158
|
}
|
|
159
|
+
/** Options for the non-standard but commonly used Poseidon sponge wrapper. */
|
|
55
160
|
export type PoseidonSpongeOpts = Omit<PoseidonOpts, 't'> & {
|
|
161
|
+
/** Sponge rate. */
|
|
56
162
|
rate: number;
|
|
163
|
+
/** Sponge capacity. */
|
|
57
164
|
capacity: number;
|
|
58
165
|
};
|
|
59
166
|
/**
|
|
60
167
|
* The method is not defined in spec, but nevertheless used often.
|
|
61
168
|
* Check carefully for compatibility: there are many edge cases, like absorbing an empty array.
|
|
62
169
|
* We cross-test against:
|
|
63
|
-
* - https://github.com/ProvableHQ/snarkVM/tree/staging/algorithms
|
|
64
|
-
* - https://github.com/arkworks-rs/crypto-primitives/tree/main
|
|
170
|
+
* - {@link https://github.com/ProvableHQ/snarkVM/tree/staging/algorithms | snarkVM algorithms}
|
|
171
|
+
* - {@link https://github.com/arkworks-rs/crypto-primitives/tree/main | arkworks crypto-primitives}
|
|
172
|
+
* @param opts - Sponge options. See {@link PoseidonSpongeOpts}.
|
|
173
|
+
* @returns Factory for sponge instances.
|
|
174
|
+
* @throws If the sponge dimensions or backing permutation options are invalid. {@link Error}
|
|
175
|
+
* @example
|
|
176
|
+
* Use the sponge helper to absorb several field elements and squeeze one digest.
|
|
177
|
+
*
|
|
178
|
+
* ```ts
|
|
179
|
+
* import { grainGenConstants, poseidonSponge } from '@noble/curves/abstract/poseidon.js';
|
|
180
|
+
* import { Field } from '@noble/curves/abstract/modular.js';
|
|
181
|
+
* const Fp = Field(17n);
|
|
182
|
+
* const constants = grainGenConstants({ Fp, t: 2, roundsFull: 8, roundsPartial: 8 });
|
|
183
|
+
* const makeSponge = poseidonSponge({
|
|
184
|
+
* ...constants,
|
|
185
|
+
* Fp,
|
|
186
|
+
* rate: 1,
|
|
187
|
+
* capacity: 1,
|
|
188
|
+
* roundsFull: 8,
|
|
189
|
+
* roundsPartial: 8,
|
|
190
|
+
* sboxPower: 3,
|
|
191
|
+
* });
|
|
192
|
+
* const sponge = makeSponge();
|
|
193
|
+
* sponge.absorb([1n]);
|
|
194
|
+
* const out = sponge.squeeze(1);
|
|
195
|
+
* ```
|
|
65
196
|
*/
|
|
66
|
-
export declare function poseidonSponge(opts: PoseidonSpongeOpts): () => PoseidonSponge
|
|
197
|
+
export declare function poseidonSponge(opts: TArg<PoseidonSpongeOpts>): TRet<() => PoseidonSponge>;
|
|
67
198
|
export {};
|
|
68
199
|
//# sourceMappingURL=poseidon.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"poseidon.d.ts","sourceRoot":"","sources":["../src/abstract/poseidon.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"poseidon.d.ts","sourceRoot":"","sources":["../src/abstract/poseidon.ts"],"names":[],"mappings":"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"}
|