@noble/curves 1.0.0 → 1.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.
Files changed (103) hide show
  1. package/README.md +399 -247
  2. package/_shortw_utils.d.ts +1 -1
  3. package/abstract/bls.d.ts.map +1 -1
  4. package/abstract/bls.js +2 -2
  5. package/abstract/bls.js.map +1 -1
  6. package/abstract/edwards.d.ts +7 -2
  7. package/abstract/edwards.d.ts.map +1 -1
  8. package/abstract/edwards.js +7 -2
  9. package/abstract/edwards.js.map +1 -1
  10. package/abstract/hash-to-curve.d.ts +1 -1
  11. package/abstract/hash-to-curve.d.ts.map +1 -1
  12. package/abstract/hash-to-curve.js +14 -8
  13. package/abstract/hash-to-curve.js.map +1 -1
  14. package/abstract/modular.d.ts +55 -13
  15. package/abstract/modular.d.ts.map +1 -1
  16. package/abstract/modular.js +82 -22
  17. package/abstract/modular.js.map +1 -1
  18. package/abstract/poseidon.d.ts.map +1 -1
  19. package/abstract/poseidon.js +39 -41
  20. package/abstract/poseidon.js.map +1 -1
  21. package/abstract/utils.d.ts +43 -5
  22. package/abstract/utils.d.ts.map +1 -1
  23. package/abstract/utils.js +70 -26
  24. package/abstract/utils.js.map +1 -1
  25. package/abstract/weierstrass.d.ts +18 -2
  26. package/abstract/weierstrass.d.ts.map +1 -1
  27. package/abstract/weierstrass.js +40 -22
  28. package/abstract/weierstrass.js.map +1 -1
  29. package/bls12-381.d.ts.map +1 -1
  30. package/bls12-381.js +11 -11
  31. package/bls12-381.js.map +1 -1
  32. package/ed25519.d.ts +33 -20
  33. package/ed25519.d.ts.map +1 -1
  34. package/ed25519.js +60 -38
  35. package/ed25519.js.map +1 -1
  36. package/ed448.d.ts +53 -4
  37. package/ed448.d.ts.map +1 -1
  38. package/ed448.js +217 -38
  39. package/ed448.js.map +1 -1
  40. package/esm/abstract/bls.js +3 -3
  41. package/esm/abstract/bls.js.map +1 -1
  42. package/esm/abstract/edwards.js +7 -2
  43. package/esm/abstract/edwards.js.map +1 -1
  44. package/esm/abstract/hash-to-curve.js +14 -8
  45. package/esm/abstract/hash-to-curve.js.map +1 -1
  46. package/esm/abstract/modular.js +78 -21
  47. package/esm/abstract/modular.js.map +1 -1
  48. package/esm/abstract/poseidon.js +39 -41
  49. package/esm/abstract/poseidon.js.map +1 -1
  50. package/esm/abstract/utils.js +70 -26
  51. package/esm/abstract/utils.js.map +1 -1
  52. package/esm/abstract/weierstrass.js +40 -22
  53. package/esm/abstract/weierstrass.js.map +1 -1
  54. package/esm/bls12-381.js +11 -11
  55. package/esm/bls12-381.js.map +1 -1
  56. package/esm/ed25519.js +60 -38
  57. package/esm/ed25519.js.map +1 -1
  58. package/esm/ed448.js +217 -38
  59. package/esm/ed448.js.map +1 -1
  60. package/esm/jubjub.js +1 -1
  61. package/esm/jubjub.js.map +1 -1
  62. package/esm/p256.js +10 -9
  63. package/esm/p256.js.map +1 -1
  64. package/esm/p384.js +7 -6
  65. package/esm/p384.js.map +1 -1
  66. package/esm/p521.js +7 -6
  67. package/esm/p521.js.map +1 -1
  68. package/esm/package.json +1 -4
  69. package/esm/secp256k1.js +11 -9
  70. package/esm/secp256k1.js.map +1 -1
  71. package/jubjub.js.map +1 -1
  72. package/p256.d.ts +4 -5
  73. package/p256.d.ts.map +1 -1
  74. package/p256.js +10 -10
  75. package/p256.js.map +1 -1
  76. package/p384.d.ts +4 -5
  77. package/p384.d.ts.map +1 -1
  78. package/p384.js +7 -7
  79. package/p384.js.map +1 -1
  80. package/p521.d.ts +4 -5
  81. package/p521.d.ts.map +1 -1
  82. package/p521.js +7 -7
  83. package/p521.js.map +1 -1
  84. package/package.json +7 -9
  85. package/secp256k1.d.ts +5 -5
  86. package/secp256k1.d.ts.map +1 -1
  87. package/secp256k1.js +11 -10
  88. package/secp256k1.js.map +1 -1
  89. package/src/abstract/bls.ts +3 -3
  90. package/src/abstract/edwards.ts +13 -4
  91. package/src/abstract/hash-to-curve.ts +14 -8
  92. package/src/abstract/modular.ts +84 -27
  93. package/src/abstract/poseidon.ts +39 -40
  94. package/src/abstract/utils.ts +77 -33
  95. package/src/abstract/weierstrass.ts +51 -29
  96. package/src/bls12-381.ts +12 -17
  97. package/src/ed25519.ts +105 -75
  98. package/src/ed448.ts +286 -64
  99. package/src/jubjub.ts +1 -1
  100. package/src/p256.ts +13 -14
  101. package/src/p384.ts +12 -13
  102. package/src/p521.ts +12 -13
  103. package/src/secp256k1.ts +60 -55
package/secp256k1.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"secp256k1.js","sourceRoot":"","sources":["src/secp256k1.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"secp256k1.js","sourceRoot":"","sources":["src/secp256k1.ts"],"names":[],"mappings":"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"}
@@ -12,7 +12,7 @@
12
12
  * Some projects may prefer to swap this relation, it is not supported for now.
13
13
  */
14
14
  import { AffinePoint } from './curve.js';
15
- import { IField, hashToPrivateScalar } from './modular.js';
15
+ import { IField, getMinHashLength, mapHashToField } from './modular.js';
16
16
  import { Hex, PrivKey, CHash, bitLen, bitGet, ensureBytes } from './utils.js';
17
17
  import * as htf from './hash-to-curve.js';
18
18
  import {
@@ -122,7 +122,6 @@ export function bls<Fp2, Fp6, Fp12>(
122
122
  // Fields are specific for curve, so for now we'll need to pass them with opts
123
123
  const { Fp, Fr, Fp2, Fp6, Fp12 } = CURVE.fields;
124
124
  const BLS_X_LEN = bitLen(CURVE.params.x);
125
- const groupLen = 32; // TODO: calculate; hardcoded for now
126
125
 
127
126
  // Pre-compute coefficients for sparse multiplication
128
127
  // Point addition and point double calculations is reused for coefficients
@@ -189,7 +188,8 @@ export function bls<Fp2, Fp6, Fp12>(
189
188
 
190
189
  const utils = {
191
190
  randomPrivateKey: (): Uint8Array => {
192
- return Fr.toBytes(hashToPrivateScalar(CURVE.randomBytes(groupLen + 8), CURVE.params.r));
191
+ const length = getMinHashLength(Fr.ORDER);
192
+ return mapHashToField(CURVE.randomBytes(length), Fr.ORDER);
193
193
  },
194
194
  calcPairingPrecomputes,
195
195
  };
@@ -75,8 +75,13 @@ export interface ExtPointConstructor extends GroupConstructor<ExtPointType> {
75
75
  export type CurveFn = {
76
76
  CURVE: ReturnType<typeof validateOpts>;
77
77
  getPublicKey: (privateKey: Hex) => Uint8Array;
78
- sign: (message: Hex, privateKey: Hex) => Uint8Array;
79
- verify: (sig: Hex, message: Hex, publicKey: Hex) => boolean;
78
+ sign: (message: Hex, privateKey: Hex, options?: { context?: Hex }) => Uint8Array;
79
+ verify: (
80
+ sig: Hex,
81
+ message: Hex,
82
+ publicKey: Hex,
83
+ options?: { context?: Hex; zip215: boolean }
84
+ ) => boolean;
80
85
  ExtendedPoint: ExtPointConstructor;
81
86
  utils: {
82
87
  randomPrivateKey: () => Uint8Array;
@@ -102,7 +107,7 @@ export function twistedEdwards(curveDef: CurveType): CurveFn {
102
107
  nByteLength,
103
108
  h: cofactor,
104
109
  } = CURVE;
105
- const MASK = _2n ** BigInt(nByteLength * 8);
110
+ const MASK = _2n << (BigInt(nByteLength * 8) - _1n);
106
111
  const modP = Fp.create; // Function overrides
107
112
 
108
113
  // sqrt(u/v)
@@ -379,7 +384,10 @@ export function twistedEdwards(curveDef: CurveType): CurveFn {
379
384
  let { isValid, value: x } = uvRatio(u, v); // √(u/v)
380
385
  if (!isValid) throw new Error('Point.fromHex: invalid y coordinate');
381
386
  const isXOdd = (x & _1n) === _1n; // There are 2 square roots. Use x_0 bit to select proper
382
- const isLastByteOdd = (lastByte & 0x80) !== 0; // if x=0 and x_0 = 1, fail
387
+ const isLastByteOdd = (lastByte & 0x80) !== 0; // x_0, last bit
388
+ if (!zip215 && x === _0n && isLastByteOdd)
389
+ // if x=0 and x_0 = 1, fail
390
+ throw new Error('Point.fromHex: x=0 and x_0=1');
383
391
  if (isLastByteOdd !== isXOdd) x = modP(-x); // if x_0 != x mod 2, set x = p-x
384
392
  return Point.fromAffine({ x, y });
385
393
  }
@@ -466,6 +474,7 @@ export function twistedEdwards(curveDef: CurveType): CurveFn {
466
474
  } catch (error) {
467
475
  return false;
468
476
  }
477
+ if (!zip215 && A.isSmallOrder()) return false;
469
478
 
470
479
  const k = hashDomainToScalar(context, R.toRawBytes(), A.toRawBytes(), msg);
471
480
  const RkA = R.add(A.multiplyUnsafe(k));
@@ -59,7 +59,7 @@ function isNum(item: unknown): void {
59
59
  }
60
60
 
61
61
  // Produces a uniformly random byte string using a cryptographic hash function H that outputs b bits
62
- // https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-hash-to-curve-11#section-5.4.1
62
+ // https://www.rfc-editor.org/rfc/rfc9380#section-5.3.1
63
63
  export function expand_message_xmd(
64
64
  msg: Uint8Array,
65
65
  DST: Uint8Array,
@@ -69,7 +69,7 @@ export function expand_message_xmd(
69
69
  isBytes(msg);
70
70
  isBytes(DST);
71
71
  isNum(lenInBytes);
72
- // https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-hash-to-curve-16#section-5.3.3
72
+ // https://www.rfc-editor.org/rfc/rfc9380#section-5.3.3
73
73
  if (DST.length > 255) DST = H(concatBytes(utf8ToBytes('H2C-OVERSIZE-DST-'), DST));
74
74
  const { outputLen: b_in_bytes, blockLen: r_in_bytes } = H;
75
75
  const ell = Math.ceil(lenInBytes / b_in_bytes);
@@ -88,6 +88,11 @@ export function expand_message_xmd(
88
88
  return pseudo_random_bytes.slice(0, lenInBytes);
89
89
  }
90
90
 
91
+ // Produces a uniformly random byte string using an extendable-output function (XOF) H.
92
+ // 1. The collision resistance of H MUST be at least k bits.
93
+ // 2. H MUST be an XOF that has been proved indifferentiable from
94
+ // a random oracle under a reasonable cryptographic assumption.
95
+ // https://www.rfc-editor.org/rfc/rfc9380#section-5.3.2
91
96
  export function expand_message_xof(
92
97
  msg: Uint8Array,
93
98
  DST: Uint8Array,
@@ -98,7 +103,7 @@ export function expand_message_xof(
98
103
  isBytes(msg);
99
104
  isBytes(DST);
100
105
  isNum(lenInBytes);
101
- // https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-hash-to-curve-16#section-5.3.3
106
+ // https://www.rfc-editor.org/rfc/rfc9380#section-5.3.3
102
107
  // DST = H('H2C-OVERSIZE-DST-' || a_very_long_DST, Math.ceil((lenInBytes * k) / 8));
103
108
  if (DST.length > 255) {
104
109
  const dkLen = Math.ceil((2 * k) / 8);
@@ -119,7 +124,7 @@ export function expand_message_xof(
119
124
 
120
125
  /**
121
126
  * Hashes arbitrary-length byte strings to a list of one or more elements of a finite field F
122
- * https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-hash-to-curve-11#section-5.3
127
+ * https://www.rfc-editor.org/rfc/rfc9380#section-5.2
123
128
  * @param msg a byte string containing the message to hash
124
129
  * @param count the number of elements of F to output
125
130
  * @param options `{DST: string, p: bigint, m: number, k: number, expand: 'xmd' | 'xof', hash: H}`, see above
@@ -127,7 +132,7 @@ export function expand_message_xof(
127
132
  */
128
133
  export function hash_to_field(msg: Uint8Array, count: number, options: Opts): bigint[][] {
129
134
  validateObject(options, {
130
- DST: 'string',
135
+ DST: 'stringOrUint8Array',
131
136
  p: 'bigint',
132
137
  m: 'isSafeInteger',
133
138
  k: 'isSafeInteger',
@@ -201,8 +206,8 @@ export function createHasher<T>(
201
206
  ) {
202
207
  if (typeof mapToCurve !== 'function') throw new Error('mapToCurve() must be defined');
203
208
  return {
204
- // Encodes byte string to elliptic curve
205
- // https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-hash-to-curve-16#section-3
209
+ // Encodes byte string to elliptic curve.
210
+ // hash_to_curve from https://www.rfc-editor.org/rfc/rfc9380#section-3
206
211
  hashToCurve(msg: Uint8Array, options?: htfBasicOpts) {
207
212
  const u = hash_to_field(msg, 2, { ...def, DST: def.DST, ...options } as Opts);
208
213
  const u0 = Point.fromAffine(mapToCurve(u[0]));
@@ -212,7 +217,8 @@ export function createHasher<T>(
212
217
  return P;
213
218
  },
214
219
 
215
- // https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-hash-to-curve-16#section-3
220
+ // Encodes byte string to elliptic curve.
221
+ // encode_to_curve from https://www.rfc-editor.org/rfc/rfc9380#section-3
216
222
  encodeToCurve(msg: Uint8Array, options?: htfBasicOpts) {
217
223
  const u = hash_to_field(msg, 1, { ...def, DST: def.encodeDST, ...options } as Opts);
218
224
  const P = Point.fromAffine(mapToCurve(u[0])).clearCofactor();
@@ -22,10 +22,10 @@ export function mod(a: bigint, b: bigint): bigint {
22
22
  return result >= _0n ? result : b + result;
23
23
  }
24
24
  /**
25
- * Efficiently exponentiate num to power and do modular division.
25
+ * Efficiently raise num to power and do modular division.
26
26
  * Unsafe in some contexts: uses ladder, so can expose bigint bits.
27
27
  * @example
28
- * powMod(2n, 6n, 11n) // 64n % 11n == 9n
28
+ * pow(2n, 6n, 11n) // 64n % 11n == 9n
29
29
  */
30
30
  // TODO: use field version && remove
31
31
  export function pow(num: bigint, power: bigint, modulo: bigint): bigint {
@@ -55,7 +55,7 @@ export function invert(number: bigint, modulo: bigint): bigint {
55
55
  if (number === _0n || modulo <= _0n) {
56
56
  throw new Error(`invert: expected positive integers, got n=${number} mod=${modulo}`);
57
57
  }
58
- // Eucledian GCD https://brilliant.org/wiki/extended-euclidean-algorithm/
58
+ // Euclidean GCD https://brilliant.org/wiki/extended-euclidean-algorithm/
59
59
  // Fermat's little theorem "CT-like" version inv(n) = n^(m-2) mod m is 30x slower.
60
60
  let a = mod(number, modulo);
61
61
  let b = modulo;
@@ -75,9 +75,14 @@ export function invert(number: bigint, modulo: bigint): bigint {
75
75
  return mod(x, modulo);
76
76
  }
77
77
 
78
- // Tonelli-Shanks algorithm
79
- // Paper 1: https://eprint.iacr.org/2012/685.pdf (page 12)
80
- // Paper 2: Square Roots from 1; 24, 51, 10 to Dan Shanks
78
+ /**
79
+ * Tonelli-Shanks square root search algorithm.
80
+ * 1. https://eprint.iacr.org/2012/685.pdf (page 12)
81
+ * 2. Square Roots from 1; 24, 51, 10 to Dan Shanks
82
+ * Will start an infinite loop if field order P is not prime.
83
+ * @param P field order
84
+ * @returns function that takes field Fp (created from P) and number n
85
+ */
81
86
  export function tonelliShanks(P: bigint) {
82
87
  // Legendre constant: used to calculate Legendre symbol (a | p),
83
88
  // which denotes the value of a^((p-1)/2) (mod p).
@@ -198,11 +203,7 @@ export function FpSqrt(P: bigint) {
198
203
  // Little-endian check for first LE bit (last BE bit);
199
204
  export const isNegativeLE = (num: bigint, modulo: bigint) => (mod(num, modulo) & _1n) === _1n;
200
205
 
201
- // Currently completly inconsistent naming:
202
- // - readable: add, mul, sqr, sqrt, inv, div, pow, eq, sub
203
- // - unreadable mess: addition, multiply, square, squareRoot, inversion, divide, power, equals, subtract
204
-
205
- // Field is not always over prime, Fp2 for example has ORDER(q)=p^m
206
+ // Field is not always over prime: for example, Fp2 has ORDER(q)=p^m
206
207
  export interface IField<T> {
207
208
  ORDER: bigint;
208
209
  BYTES: number;
@@ -232,7 +233,8 @@ export interface IField<T> {
232
233
  sqrN(num: T): T;
233
234
 
234
235
  // Optional
235
- // Should be same as sgn0 function in https://datatracker.ietf.org/doc/draft-irtf-cfrg-hash-to-curve/
236
+ // Should be same as sgn0 function in
237
+ // [RFC9380](https://www.rfc-editor.org/rfc/rfc9380#section-4.1).
236
238
  // NOTE: sgn0 is 'negative in LE', which is same as odd. And negative in LE is kinda strange definition anyway.
237
239
  isOdd?(num: T): boolean; // Odd instead of even since we have it for Fp2
238
240
  // legendre?(num: T): T;
@@ -264,6 +266,11 @@ export function validateField<T>(field: IField<T>) {
264
266
  }
265
267
 
266
268
  // Generic field functions
269
+
270
+ /**
271
+ * Same as `pow` but for Fp: non-constant-time.
272
+ * Unsafe in some contexts: uses ladder, so can expose bigint bits.
273
+ */
267
274
  export function FpPow<T>(f: IField<T>, num: T, power: bigint): T {
268
275
  // Should have same speed as pow for bigints
269
276
  // TODO: benchmark!
@@ -280,7 +287,10 @@ export function FpPow<T>(f: IField<T>, num: T, power: bigint): T {
280
287
  return p;
281
288
  }
282
289
 
283
- // 0 is non-invertible: non-batched version will throw on 0
290
+ /**
291
+ * Efficiently invert an array of Field elements.
292
+ * `inv(0)` will return `undefined` here: make sure to throw an error.
293
+ */
284
294
  export function FpInvertBatch<T>(f: IField<T>, nums: T[]): T[] {
285
295
  const tmp = new Array(nums.length);
286
296
  // Walk from first to last, multiply them by each other MOD p
@@ -323,12 +333,12 @@ export function nLength(n: bigint, nBitLength?: number) {
323
333
 
324
334
  type FpField = IField<bigint> & Required<Pick<IField<bigint>, 'isOdd'>>;
325
335
  /**
326
- * Initializes a galois field over prime. Non-primes are not supported for now.
327
- * Do not init in loop: slow. Very fragile: always run a benchmark on change.
328
- * Major performance gains:
329
- * a) non-normalized operations like mulN instead of mul
330
- * b) `Object.freeze`
331
- * c) Same object shape: never add or remove keys
336
+ * Initializes a finite field over prime. **Non-primes are not supported.**
337
+ * Do not init in loop: slow. Very fragile: always run a benchmark on a change.
338
+ * Major performance optimizations:
339
+ * * a) denormalized operations like mulN instead of mul
340
+ * * b) same object shape: never add or remove keys
341
+ * * c) Object.freeze
332
342
  * @param ORDER prime positive bigint
333
343
  * @param bitLen how many bits the field consumes
334
344
  * @param isLE (def: false) if encoding / decoding should be in little-endian
@@ -340,7 +350,7 @@ export function Field(
340
350
  isLE = false,
341
351
  redef: Partial<IField<bigint>> = {}
342
352
  ): Readonly<FpField> {
343
- if (ORDER <= _0n) throw new Error(`Expected Fp ORDER > 0, got ${ORDER}`);
353
+ if (ORDER <= _0n) throw new Error(`Expected Field ORDER > 0, got ${ORDER}`);
344
354
  const { nBitLength: BITS, nByteLength: BYTES } = nLength(ORDER, bitLen);
345
355
  if (BYTES > 2048) throw new Error('Field lengths over 2048 bytes are not supported');
346
356
  const sqrtP = FpSqrt(ORDER);
@@ -404,13 +414,10 @@ export function FpSqrtEven<T>(Fp: IField<T>, elm: T) {
404
414
  }
405
415
 
406
416
  /**
407
- * FIPS 186 B.4.1-compliant "constant-time" private key generation utility.
408
- * Can take (n+8) or more bytes of uniform input e.g. from CSPRNG or KDF
409
- * and convert them into private scalar, with the modulo bias being neglible.
410
- * Needs at least 40 bytes of input for 32-byte private key.
411
- * https://research.kudelskisecurity.com/2020/07/28/the-definitive-guide-to-modulo-bias-and-how-to-avoid-it/
412
- * @param hash hash output from SHA3 or a similar function
413
- * @returns valid private scalar
417
+ * "Constant-time" private key generation utility.
418
+ * Same as mapKeyToField, but accepts less bytes (40 instead of 48 for 32-byte field).
419
+ * Which makes it slightly more biased, less secure.
420
+ * @deprecated use mapKeyToField instead
414
421
  */
415
422
  export function hashToPrivateScalar(
416
423
  hash: string | Uint8Array,
@@ -425,3 +432,53 @@ export function hashToPrivateScalar(
425
432
  const num = isLE ? bytesToNumberLE(hash) : bytesToNumberBE(hash);
426
433
  return mod(num, groupOrder - _1n) + _1n;
427
434
  }
435
+
436
+ /**
437
+ * Returns total number of bytes consumed by the field element.
438
+ * For example, 32 bytes for usual 256-bit weierstrass curve.
439
+ * @param fieldOrder number of field elements, usually CURVE.n
440
+ * @returns byte length of field
441
+ */
442
+ export function getFieldBytesLength(fieldOrder: bigint): number {
443
+ if (typeof fieldOrder !== 'bigint') throw new Error('field order must be bigint');
444
+ const bitLength = fieldOrder.toString(2).length;
445
+ return Math.ceil(bitLength / 8);
446
+ }
447
+
448
+ /**
449
+ * Returns minimal amount of bytes that can be safely reduced
450
+ * by field order.
451
+ * Should be 2^-128 for 128-bit curve such as P256.
452
+ * @param fieldOrder number of field elements, usually CURVE.n
453
+ * @returns byte length of target hash
454
+ */
455
+ export function getMinHashLength(fieldOrder: bigint): number {
456
+ const length = getFieldBytesLength(fieldOrder);
457
+ return length + Math.ceil(length / 2);
458
+ }
459
+
460
+ /**
461
+ * "Constant-time" private key generation utility.
462
+ * Can take (n + n/2) or more bytes of uniform input e.g. from CSPRNG or KDF
463
+ * and convert them into private scalar, with the modulo bias being negligible.
464
+ * Needs at least 48 bytes of input for 32-byte private key.
465
+ * https://research.kudelskisecurity.com/2020/07/28/the-definitive-guide-to-modulo-bias-and-how-to-avoid-it/
466
+ * FIPS 186-5, A.2 https://csrc.nist.gov/publications/detail/fips/186/5/final
467
+ * RFC 9380, https://www.rfc-editor.org/rfc/rfc9380#section-5
468
+ * @param hash hash output from SHA3 or a similar function
469
+ * @param groupOrder size of subgroup - (e.g. secp256k1.CURVE.n)
470
+ * @param isLE interpret hash bytes as LE num
471
+ * @returns valid private scalar
472
+ */
473
+ export function mapHashToField(key: Uint8Array, fieldOrder: bigint, isLE = false): Uint8Array {
474
+ const len = key.length;
475
+ const fieldLen = getFieldBytesLength(fieldOrder);
476
+ const minLen = getMinHashLength(fieldOrder);
477
+ // No small numbers: need to understand bias story. No huge numbers: easier to detect JS timings.
478
+ if (len < 16 || len < minLen || len > 1024)
479
+ throw new Error(`expected ${minLen}-1024 bytes of input, got ${len}`);
480
+ const num = isLE ? bytesToNumberBE(key) : bytesToNumberLE(key);
481
+ // `mod(x, 11)` can sometimes produce 0. `mod(x, 10) + 1` is the same, but no 0
482
+ const reduced = mod(num, fieldOrder - _1n) + _1n;
483
+ return isLE ? numberToBytesLE(reduced, fieldLen) : numberToBytesBE(reduced, fieldLen);
484
+ }
@@ -15,34 +15,36 @@ export type PoseidonOpts = {
15
15
  };
16
16
 
17
17
  export function validateOpts(opts: PoseidonOpts) {
18
- const { Fp } = opts;
18
+ const { Fp, mds, reversePartialPowIdx: rev, roundConstants: rc } = opts;
19
+ const { roundsFull, roundsPartial, sboxPower, t } = opts;
20
+
19
21
  validateField(Fp);
20
22
  for (const i of ['t', 'roundsFull', 'roundsPartial'] as const) {
21
23
  if (typeof opts[i] !== 'number' || !Number.isSafeInteger(opts[i]))
22
24
  throw new Error(`Poseidon: invalid param ${i}=${opts[i]} (${typeof opts[i]})`);
23
25
  }
24
- if (opts.reversePartialPowIdx !== undefined && typeof opts.reversePartialPowIdx !== 'boolean')
25
- throw new Error(`Poseidon: invalid param reversePartialPowIdx=${opts.reversePartialPowIdx}`);
26
- // Default is 5, but by some reasons stark uses 3
27
- let sboxPower = opts.sboxPower;
28
- if (sboxPower === undefined) sboxPower = 5;
29
- if (typeof sboxPower !== 'number' || !Number.isSafeInteger(sboxPower))
30
- throw new Error(`Poseidon wrong sboxPower=${sboxPower}`);
31
26
 
32
- const _sboxPower = BigInt(sboxPower);
33
- let sboxFn = (n: bigint) => FpPow(Fp, n, _sboxPower);
34
- // Unwrapped sbox power for common cases (195->142μs)
35
- if (sboxPower === 3) sboxFn = (n: bigint) => Fp.mul(Fp.sqrN(n), n);
36
- else if (sboxPower === 5) sboxFn = (n: bigint) => Fp.mul(Fp.sqrN(Fp.sqrN(n)), n);
27
+ // MDS is TxT matrix
28
+ if (!Array.isArray(mds) || mds.length !== t) throw new Error('Poseidon: wrong MDS matrix');
29
+ const _mds = mds.map((mdsRow) => {
30
+ if (!Array.isArray(mdsRow) || mdsRow.length !== t)
31
+ throw new Error(`Poseidon MDS matrix row: ${mdsRow}`);
32
+ return mdsRow.map((i) => {
33
+ if (typeof i !== 'bigint') throw new Error(`Poseidon MDS matrix value=${i}`);
34
+ return Fp.create(i);
35
+ });
36
+ });
37
+
38
+ if (rev !== undefined && typeof rev !== 'boolean')
39
+ throw new Error(`Poseidon: invalid param reversePartialPowIdx=${rev}`);
37
40
 
38
- if (opts.roundsFull % 2 !== 0)
39
- throw new Error(`Poseidon roundsFull is not even: ${opts.roundsFull}`);
40
- const rounds = opts.roundsFull + opts.roundsPartial;
41
+ if (roundsFull % 2 !== 0) throw new Error(`Poseidon roundsFull is not even: ${roundsFull}`);
42
+ const rounds = roundsFull + roundsPartial;
41
43
 
42
- if (!Array.isArray(opts.roundConstants) || opts.roundConstants.length !== rounds)
44
+ if (!Array.isArray(rc) || rc.length !== rounds)
43
45
  throw new Error('Poseidon: wrong round constants');
44
- const roundConstants = opts.roundConstants.map((rc) => {
45
- if (!Array.isArray(rc) || rc.length !== opts.t)
46
+ const roundConstants = rc.map((rc) => {
47
+ if (!Array.isArray(rc) || rc.length !== t)
46
48
  throw new Error(`Poseidon wrong round constants: ${rc}`);
47
49
  return rc.map((i) => {
48
50
  if (typeof i !== 'bigint' || !Fp.isValid(i))
@@ -50,18 +52,16 @@ export function validateOpts(opts: PoseidonOpts) {
50
52
  return Fp.create(i);
51
53
  });
52
54
  });
53
- // MDS is TxT matrix
54
- if (!Array.isArray(opts.mds) || opts.mds.length !== opts.t)
55
- throw new Error('Poseidon: wrong MDS matrix');
56
- const mds = opts.mds.map((mdsRow) => {
57
- if (!Array.isArray(mdsRow) || mdsRow.length !== opts.t)
58
- throw new Error(`Poseidon MDS matrix row: ${mdsRow}`);
59
- return mdsRow.map((i) => {
60
- if (typeof i !== 'bigint') throw new Error(`Poseidon MDS matrix value=${i}`);
61
- return Fp.create(i);
62
- });
63
- });
64
- return Object.freeze({ ...opts, rounds, sboxFn, roundConstants, mds });
55
+
56
+ if (!sboxPower || ![3, 5, 7].includes(sboxPower))
57
+ throw new Error(`Poseidon wrong sboxPower=${sboxPower}`);
58
+ const _sboxPower = BigInt(sboxPower);
59
+ let sboxFn = (n: bigint) => FpPow(Fp, n, _sboxPower);
60
+ // Unwrapped sbox power for common cases (195->142μs)
61
+ if (sboxPower === 3) sboxFn = (n: bigint) => Fp.mul(Fp.sqrN(n), n);
62
+ else if (sboxPower === 5) sboxFn = (n: bigint) => Fp.mul(Fp.sqrN(Fp.sqrN(n)), n);
63
+
64
+ return Object.freeze({ ...opts, rounds, sboxFn, roundConstants, mds: _mds });
65
65
  }
66
66
 
67
67
  export function splitConstants(rc: bigint[], t: number) {
@@ -80,18 +80,17 @@ export function splitConstants(rc: bigint[], t: number) {
80
80
  }
81
81
 
82
82
  export function poseidon(opts: PoseidonOpts) {
83
- const { t, Fp, rounds, sboxFn, reversePartialPowIdx } = validateOpts(opts);
84
- const halfRoundsFull = Math.floor(opts.roundsFull / 2);
85
- const partialIdx = reversePartialPowIdx ? t - 1 : 0;
83
+ const _opts = validateOpts(opts);
84
+ const { Fp, mds, roundConstants, rounds, roundsPartial, sboxFn, t } = _opts;
85
+ const halfRoundsFull = _opts.roundsFull / 2;
86
+ const partialIdx = _opts.reversePartialPowIdx ? t - 1 : 0;
86
87
  const poseidonRound = (values: bigint[], isFull: boolean, idx: number) => {
87
- values = values.map((i, j) => Fp.add(i, opts.roundConstants[idx][j]));
88
+ values = values.map((i, j) => Fp.add(i, roundConstants[idx][j]));
88
89
 
89
90
  if (isFull) values = values.map((i) => sboxFn(i));
90
91
  else values[partialIdx] = sboxFn(values[partialIdx]);
91
92
  // Matrix multiplication
92
- values = opts.mds.map((i) =>
93
- i.reduce((acc, i, j) => Fp.add(acc, Fp.mulN(i, values[j])), Fp.ZERO)
94
- );
93
+ values = mds.map((i) => i.reduce((acc, i, j) => Fp.add(acc, Fp.mulN(i, values[j])), Fp.ZERO));
95
94
  return values;
96
95
  };
97
96
  const poseidonHash = function poseidonHash(values: bigint[]) {
@@ -105,7 +104,7 @@ export function poseidon(opts: PoseidonOpts) {
105
104
  // Apply r_f/2 full rounds.
106
105
  for (let i = 0; i < halfRoundsFull; i++) values = poseidonRound(values, true, round++);
107
106
  // Apply r_p partial rounds.
108
- for (let i = 0; i < opts.roundsPartial; i++) values = poseidonRound(values, false, round++);
107
+ for (let i = 0; i < roundsPartial; i++) values = poseidonRound(values, false, round++);
109
108
  // Apply r_f/2 full rounds.
110
109
  for (let i = 0; i < halfRoundsFull; i++) values = poseidonRound(values, true, round++);
111
110
 
@@ -114,6 +113,6 @@ export function poseidon(opts: PoseidonOpts) {
114
113
  return values;
115
114
  };
116
115
  // For verification in tests
117
- poseidonHash.roundConstants = opts.roundConstants;
116
+ poseidonHash.roundConstants = roundConstants;
118
117
  return poseidonHash;
119
118
  }