@noble/curves 0.7.3 → 0.8.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 (105) hide show
  1. package/README.md +8 -4
  2. package/_shortw_utils.js +8 -13
  3. package/_shortw_utils.js.map +1 -1
  4. package/abstract/bls.js +12 -16
  5. package/abstract/bls.js.map +1 -1
  6. package/abstract/curve.js +7 -12
  7. package/abstract/curve.js.map +1 -1
  8. package/abstract/edwards.js +16 -20
  9. package/abstract/edwards.js.map +1 -1
  10. package/abstract/hash-to-curve.d.ts +5 -3
  11. package/abstract/hash-to-curve.d.ts.map +1 -1
  12. package/abstract/hash-to-curve.js +25 -33
  13. package/abstract/hash-to-curve.js.map +1 -1
  14. package/abstract/modular.d.ts.map +1 -1
  15. package/abstract/modular.js +25 -44
  16. package/abstract/modular.js.map +1 -1
  17. package/abstract/montgomery.js +11 -15
  18. package/abstract/montgomery.js.map +1 -1
  19. package/abstract/poseidon.js +6 -12
  20. package/abstract/poseidon.js.map +1 -1
  21. package/abstract/utils.js +19 -41
  22. package/abstract/utils.js.map +1 -1
  23. package/abstract/weierstrass.d.ts.map +1 -1
  24. package/abstract/weierstrass.js +25 -37
  25. package/abstract/weierstrass.js.map +1 -1
  26. package/bls12-381.js +63 -66
  27. package/bls12-381.js.map +1 -1
  28. package/bn.js +7 -10
  29. package/bn.js.map +1 -1
  30. package/ed25519.d.ts +3 -0
  31. package/ed25519.d.ts.map +1 -1
  32. package/ed25519.js +81 -74
  33. package/ed25519.js.map +1 -1
  34. package/ed448.js +37 -41
  35. package/ed448.js.map +1 -1
  36. package/jubjub.js +17 -22
  37. package/jubjub.js.map +1 -1
  38. package/p256.js +13 -17
  39. package/p256.js.map +1 -1
  40. package/p384.js +13 -17
  41. package/p384.js.map +1 -1
  42. package/p521.js +13 -17
  43. package/p521.js.map +1 -1
  44. package/package.json +4 -26
  45. package/pasta.js +16 -19
  46. package/pasta.js.map +1 -1
  47. package/secp256k1.d.ts +0 -6
  48. package/secp256k1.d.ts.map +1 -1
  49. package/secp256k1.js +58 -63
  50. package/secp256k1.js.map +1 -1
  51. package/src/abstract/hash-to-curve.ts +13 -12
  52. package/src/abstract/modular.ts +1 -0
  53. package/src/abstract/weierstrass.ts +4 -10
  54. package/src/ed25519.ts +17 -1
  55. package/src/secp256k1.ts +7 -7
  56. package/src/stark.ts +50 -27
  57. package/stark.d.ts +17 -19
  58. package/stark.d.ts.map +1 -1
  59. package/stark.js +76 -72
  60. package/stark.js.map +1 -1
  61. package/esm/_shortw_utils.js +0 -17
  62. package/esm/_shortw_utils.js.map +0 -1
  63. package/esm/abstract/bls.js +0 -226
  64. package/esm/abstract/bls.js.map +0 -1
  65. package/esm/abstract/curve.js +0 -152
  66. package/esm/abstract/curve.js.map +0 -1
  67. package/esm/abstract/edwards.js +0 -409
  68. package/esm/abstract/edwards.js.map +0 -1
  69. package/esm/abstract/hash-to-curve.js +0 -166
  70. package/esm/abstract/hash-to-curve.js.map +0 -1
  71. package/esm/abstract/modular.js +0 -345
  72. package/esm/abstract/modular.js.map +0 -1
  73. package/esm/abstract/montgomery.js +0 -157
  74. package/esm/abstract/montgomery.js.map +0 -1
  75. package/esm/abstract/poseidon.js +0 -110
  76. package/esm/abstract/poseidon.js.map +0 -1
  77. package/esm/abstract/utils.js +0 -222
  78. package/esm/abstract/utils.js.map +0 -1
  79. package/esm/abstract/weierstrass.js +0 -1016
  80. package/esm/abstract/weierstrass.js.map +0 -1
  81. package/esm/bls12-381.js +0 -1173
  82. package/esm/bls12-381.js.map +0 -1
  83. package/esm/bn.js +0 -22
  84. package/esm/bn.js.map +0 -1
  85. package/esm/ed25519.js +0 -385
  86. package/esm/ed25519.js.map +0 -1
  87. package/esm/ed448.js +0 -213
  88. package/esm/ed448.js.map +0 -1
  89. package/esm/index.js +0 -3
  90. package/esm/index.js.map +0 -1
  91. package/esm/jubjub.js +0 -54
  92. package/esm/jubjub.js.map +0 -1
  93. package/esm/p256.js +0 -42
  94. package/esm/p256.js.map +0 -1
  95. package/esm/p384.js +0 -47
  96. package/esm/p384.js.map +0 -1
  97. package/esm/p521.js +0 -48
  98. package/esm/p521.js.map +0 -1
  99. package/esm/package.json +0 -7
  100. package/esm/pasta.js +0 -30
  101. package/esm/pasta.js.map +0 -1
  102. package/esm/secp256k1.js +0 -253
  103. package/esm/secp256k1.js.map +0 -1
  104. package/esm/stark.js +0 -251
  105. package/esm/stark.js.map +0 -1
package/secp256k1.js CHANGED
@@ -1,15 +1,11 @@
1
- "use strict";
2
- var _a;
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.encodeToCurve = exports.hashToCurve = exports.schnorr = exports.secp256k1 = void 0;
5
1
  /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */
6
- const sha256_1 = require("@noble/hashes/sha256");
7
- const utils_1 = require("@noble/hashes/utils");
8
- const modular_js_1 = require("./abstract/modular.js");
9
- const weierstrass_js_1 = require("./abstract/weierstrass.js");
10
- const utils_js_1 = require("./abstract/utils.js");
11
- const htf = require("./abstract/hash-to-curve.js");
12
- const _shortw_utils_js_1 = require("./_shortw_utils.js");
2
+ import { sha256 } from '@noble/hashes/sha256';
3
+ import { randomBytes } from '@noble/hashes/utils';
4
+ import { Fp as Field, mod, pow2 } from './abstract/modular.js';
5
+ import { mapToCurveSimpleSWU } from './abstract/weierstrass.js';
6
+ import { bytesToNumberBE, concatBytes, ensureBytes, numberToBytesBE } from './abstract/utils.js';
7
+ import * as htf from './abstract/hash-to-curve.js';
8
+ import { createCurve } from './_shortw_utils.js';
13
9
  const secp256k1P = BigInt('0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f');
14
10
  const secp256k1N = BigInt('0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141');
15
11
  const _1n = BigInt(1);
@@ -27,24 +23,24 @@ function sqrtMod(y) {
27
23
  const _23n = BigInt(23), _44n = BigInt(44), _88n = BigInt(88);
28
24
  const b2 = (y * y * y) % P; // x^3, 11
29
25
  const b3 = (b2 * b2 * y) % P; // x^7
30
- const b6 = ((0, modular_js_1.pow2)(b3, _3n, P) * b3) % P;
31
- const b9 = ((0, modular_js_1.pow2)(b6, _3n, P) * b3) % P;
32
- const b11 = ((0, modular_js_1.pow2)(b9, _2n, P) * b2) % P;
33
- const b22 = ((0, modular_js_1.pow2)(b11, _11n, P) * b11) % P;
34
- const b44 = ((0, modular_js_1.pow2)(b22, _22n, P) * b22) % P;
35
- const b88 = ((0, modular_js_1.pow2)(b44, _44n, P) * b44) % P;
36
- const b176 = ((0, modular_js_1.pow2)(b88, _88n, P) * b88) % P;
37
- const b220 = ((0, modular_js_1.pow2)(b176, _44n, P) * b44) % P;
38
- const b223 = ((0, modular_js_1.pow2)(b220, _3n, P) * b3) % P;
39
- const t1 = ((0, modular_js_1.pow2)(b223, _23n, P) * b22) % P;
40
- const t2 = ((0, modular_js_1.pow2)(t1, _6n, P) * b2) % P;
41
- const root = (0, modular_js_1.pow2)(t2, _2n, P);
26
+ const b6 = (pow2(b3, _3n, P) * b3) % P;
27
+ const b9 = (pow2(b6, _3n, P) * b3) % P;
28
+ const b11 = (pow2(b9, _2n, P) * b2) % P;
29
+ const b22 = (pow2(b11, _11n, P) * b11) % P;
30
+ const b44 = (pow2(b22, _22n, P) * b22) % P;
31
+ const b88 = (pow2(b44, _44n, P) * b44) % P;
32
+ const b176 = (pow2(b88, _88n, P) * b88) % P;
33
+ const b220 = (pow2(b176, _44n, P) * b44) % P;
34
+ const b223 = (pow2(b220, _3n, P) * b3) % P;
35
+ const t1 = (pow2(b223, _23n, P) * b22) % P;
36
+ const t2 = (pow2(t1, _6n, P) * b2) % P;
37
+ const root = pow2(t2, _2n, P);
42
38
  if (!Fp.eql(Fp.sqr(root), y))
43
39
  throw new Error('Cannot find square root');
44
40
  return root;
45
41
  }
46
- const Fp = (0, modular_js_1.Fp)(secp256k1P, undefined, undefined, { sqrt: sqrtMod });
47
- exports.secp256k1 = (0, _shortw_utils_js_1.createCurve)({
42
+ const Fp = Field(secp256k1P, undefined, undefined, { sqrt: sqrtMod });
43
+ export const secp256k1 = createCurve({
48
44
  a: BigInt(0),
49
45
  b: BigInt(7),
50
46
  Fp,
@@ -71,8 +67,8 @@ exports.secp256k1 = (0, _shortw_utils_js_1.createCurve)({
71
67
  const POW_2_128 = BigInt('0x100000000000000000000000000000000'); // (2n**128n).toString(16)
72
68
  const c1 = divNearest(b2 * k, n);
73
69
  const c2 = divNearest(-b1 * k, n);
74
- let k1 = (0, modular_js_1.mod)(k - c1 * a1 - c2 * a2, n);
75
- let k2 = (0, modular_js_1.mod)(-c1 * b1 - c2 * b2, n);
70
+ let k1 = mod(k - c1 * a1 - c2 * a2, n);
71
+ let k2 = mod(-c1 * b1 - c2 * b2, n);
76
72
  const k1neg = k1 > POW_2_128;
77
73
  const k2neg = k2 > POW_2_128;
78
74
  if (k1neg)
@@ -85,7 +81,7 @@ exports.secp256k1 = (0, _shortw_utils_js_1.createCurve)({
85
81
  return { k1neg, k1, k2neg, k2 };
86
82
  },
87
83
  },
88
- }, sha256_1.sha256);
84
+ }, sha256);
89
85
  // Schnorr signatures are superior to ECDSA from above. Below is Schnorr-specific BIP0340 code.
90
86
  // https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki
91
87
  const _0n = BigInt(0);
@@ -96,25 +92,25 @@ const TAGGED_HASH_PREFIXES = {};
96
92
  function taggedHash(tag, ...messages) {
97
93
  let tagP = TAGGED_HASH_PREFIXES[tag];
98
94
  if (tagP === undefined) {
99
- const tagH = (0, sha256_1.sha256)(Uint8Array.from(tag, (c) => c.charCodeAt(0)));
100
- tagP = (0, utils_js_1.concatBytes)(tagH, tagH);
95
+ const tagH = sha256(Uint8Array.from(tag, (c) => c.charCodeAt(0)));
96
+ tagP = concatBytes(tagH, tagH);
101
97
  TAGGED_HASH_PREFIXES[tag] = tagP;
102
98
  }
103
- return (0, sha256_1.sha256)((0, utils_js_1.concatBytes)(tagP, ...messages));
99
+ return sha256(concatBytes(tagP, ...messages));
104
100
  }
105
101
  // ECDSA compact points are 33-byte. Schnorr is 32: we strip first byte 0x02 or 0x03
106
102
  const pointToBytes = (point) => point.toRawBytes(true).slice(1);
107
- const numTo32b = (n) => (0, utils_js_1.numberToBytesBE)(n, 32);
108
- const modP = (x) => (0, modular_js_1.mod)(x, secp256k1P);
109
- const modN = (x) => (0, modular_js_1.mod)(x, secp256k1N);
110
- const Point = exports.secp256k1.ProjectivePoint;
103
+ const numTo32b = (n) => numberToBytesBE(n, 32);
104
+ const modP = (x) => mod(x, secp256k1P);
105
+ const modN = (x) => mod(x, secp256k1N);
106
+ const Point = secp256k1.ProjectivePoint;
111
107
  const GmulAdd = (Q, a, b) => Point.BASE.multiplyAndAddUnsafe(Q, a, b);
112
108
  // Calculate point, scalar and bytes
113
109
  function schnorrGetExtPubKey(priv) {
114
- const d = exports.secp256k1.utils.normPrivateKeyToScalar(priv); // same method executed in fromPrivateKey
115
- const point = Point.fromPrivateKey(d); // P = d'⋅G; 0 < d' < n check is done inside
116
- const scalar = point.hasEvenY() ? d : modN(-d); // d = d' if has_even_y(P), otherwise d = n-d'
117
- return { point, scalar, bytes: pointToBytes(point) };
110
+ let d_ = secp256k1.utils.normPrivateKeyToScalar(priv); // same method executed in fromPrivateKey
111
+ let p = Point.fromPrivateKey(d_); // P = d'⋅G; 0 < d' < n check is done inside
112
+ const scalar = p.hasEvenY() ? d_ : modN(-d_);
113
+ return { scalar: scalar, bytes: pointToBytes(p) };
118
114
  }
119
115
  /**
120
116
  * lift_x from BIP340. Convert 32-byte x coordinate to elliptic curve point.
@@ -136,7 +132,7 @@ function lift_x(x) {
136
132
  * Create tagged hash, convert it to bigint, reduce modulo-n.
137
133
  */
138
134
  function challenge(...args) {
139
- return modN((0, utils_js_1.bytesToNumberBE)(taggedHash('BIP0340/challenge', ...args)));
135
+ return modN(bytesToNumberBE(taggedHash('BIP0340/challenge', ...args)));
140
136
  }
141
137
  /**
142
138
  * Schnorr public key is just `x` coordinate of Point as per BIP340.
@@ -148,19 +144,19 @@ function schnorrGetPublicKey(privateKey) {
148
144
  * Creates Schnorr signature as per BIP340. Verifies itself before returning anything.
149
145
  * auxRand is optional and is not the sole source of k generation: bad CSPRNG won't be dangerous.
150
146
  */
151
- function schnorrSign(message, privateKey, auxRand = (0, utils_1.randomBytes)(32)) {
152
- const m = (0, utils_js_1.ensureBytes)('message', message);
147
+ function schnorrSign(message, privateKey, auxRand = randomBytes(32)) {
148
+ const m = ensureBytes('message', message);
153
149
  const { bytes: px, scalar: d } = schnorrGetExtPubKey(privateKey); // checks for isWithinCurveOrder
154
- const a = (0, utils_js_1.ensureBytes)('auxRand', auxRand, 32); // Auxiliary random data a: a 32-byte array
155
- const t = numTo32b(d ^ (0, utils_js_1.bytesToNumberBE)(taggedHash('BIP0340/aux', a))); // Let t be the byte-wise xor of bytes(d) and hash/aux(a)
150
+ const a = ensureBytes('auxRand', auxRand, 32); // Auxiliary random data a: a 32-byte array
151
+ const t = numTo32b(d ^ bytesToNumberBE(taggedHash('BIP0340/aux', a))); // Let t be the byte-wise xor of bytes(d) and hash/aux(a)
156
152
  const rand = taggedHash('BIP0340/nonce', t, px, m); // Let rand = hash/nonce(t || bytes(P) || m)
157
- const k_ = modN((0, utils_js_1.bytesToNumberBE)(rand)); // Let k' = int(rand) mod n
153
+ const k_ = modN(bytesToNumberBE(rand)); // Let k' = int(rand) mod n
158
154
  if (k_ === _0n)
159
155
  throw new Error('sign failed: k is zero'); // Fail if k' = 0.
160
- const { point: R, bytes: rx, scalar: k } = schnorrGetExtPubKey(k_); // Let R = k'⋅G.
156
+ const { bytes: rx, scalar: k } = schnorrGetExtPubKey(k_); // Let R = k'⋅G.
161
157
  const e = challenge(rx, px, m); // Let e = int(hash/challenge(bytes(R) || bytes(P) || m)) mod n.
162
158
  const sig = new Uint8Array(64); // Let sig = bytes(R) || bytes((k + ed) mod n).
163
- sig.set(numTo32b(R.px), 0);
159
+ sig.set(rx, 0);
164
160
  sig.set(numTo32b(modN(k + e * d)), 32);
165
161
  // If Verify(bytes(P), m, sig) (see below) returns failure, abort
166
162
  if (!schnorrVerify(sig, m, px))
@@ -172,15 +168,15 @@ function schnorrSign(message, privateKey, auxRand = (0, utils_1.randomBytes)(32)
172
168
  * Will swallow errors & return false except for initial type validation of arguments.
173
169
  */
174
170
  function schnorrVerify(signature, message, publicKey) {
175
- const sig = (0, utils_js_1.ensureBytes)('signature', signature, 64);
176
- const m = (0, utils_js_1.ensureBytes)('message', message);
177
- const pub = (0, utils_js_1.ensureBytes)('publicKey', publicKey, 32);
171
+ const sig = ensureBytes('signature', signature, 64);
172
+ const m = ensureBytes('message', message);
173
+ const pub = ensureBytes('publicKey', publicKey, 32);
178
174
  try {
179
- const P = lift_x((0, utils_js_1.bytesToNumberBE)(pub)); // P = lift_x(int(pk)); fail if that fails
180
- const r = (0, utils_js_1.bytesToNumberBE)(sig.subarray(0, 32)); // Let r = int(sig[0:32]); fail if r ≥ p.
175
+ const P = lift_x(bytesToNumberBE(pub)); // P = lift_x(int(pk)); fail if that fails
176
+ const r = bytesToNumberBE(sig.subarray(0, 32)); // Let r = int(sig[0:32]); fail if r ≥ p.
181
177
  if (!fe(r))
182
178
  return false;
183
- const s = (0, utils_js_1.bytesToNumberBE)(sig.subarray(32, 64)); // Let s = int(sig[32:64]); fail if s ≥ n.
179
+ const s = bytesToNumberBE(sig.subarray(32, 64)); // Let s = int(sig[32:64]); fail if s ≥ n.
184
180
  if (!ge(s))
185
181
  return false;
186
182
  const e = challenge(numTo32b(r), pointToBytes(P), m); // int(challenge(bytes(r)||bytes(P)||m))%n
@@ -193,19 +189,18 @@ function schnorrVerify(signature, message, publicKey) {
193
189
  return false;
194
190
  }
195
191
  }
196
- exports.schnorr = {
192
+ export const schnorr = {
197
193
  getPublicKey: schnorrGetPublicKey,
198
194
  sign: schnorrSign,
199
195
  verify: schnorrVerify,
200
196
  utils: {
201
- randomPrivateKey: exports.secp256k1.utils.randomPrivateKey,
202
- getExtendedPublicKey: schnorrGetExtPubKey,
197
+ randomPrivateKey: secp256k1.utils.randomPrivateKey,
203
198
  lift_x,
204
199
  pointToBytes,
205
- numberToBytesBE: utils_js_1.numberToBytesBE,
206
- bytesToNumberBE: utils_js_1.bytesToNumberBE,
200
+ numberToBytesBE,
201
+ bytesToNumberBE,
207
202
  taggedHash,
208
- mod: modular_js_1.mod,
203
+ mod,
209
204
  },
210
205
  };
211
206
  const isoMap = htf.isogenyMap(Fp, [
@@ -237,12 +232,12 @@ const isoMap = htf.isogenyMap(Fp, [
237
232
  '0x0000000000000000000000000000000000000000000000000000000000000001', // LAST 1
238
233
  ],
239
234
  ].map((i) => i.map((j) => BigInt(j))));
240
- const mapSWU = (0, weierstrass_js_1.mapToCurveSimpleSWU)(Fp, {
235
+ const mapSWU = mapToCurveSimpleSWU(Fp, {
241
236
  A: BigInt('0x3f8731abdd661adca08a5558f0f5d272e953d363cb6f0e5d405447c01a444533'),
242
237
  B: BigInt('1771'),
243
238
  Z: Fp.create(BigInt('-11')),
244
239
  });
245
- _a = htf.createHasher(exports.secp256k1.ProjectivePoint, (scalars) => {
240
+ export const { hashToCurve, encodeToCurve } = htf.createHasher(secp256k1.ProjectivePoint, (scalars) => {
246
241
  const { x, y } = mapSWU(Fp.create(scalars[0]));
247
242
  return isoMap(x, y);
248
243
  }, {
@@ -252,6 +247,6 @@ _a = htf.createHasher(exports.secp256k1.ProjectivePoint, (scalars) => {
252
247
  m: 1,
253
248
  k: 128,
254
249
  expand: 'xmd',
255
- hash: sha256_1.sha256,
256
- }), exports.hashToCurve = _a.hashToCurve, exports.encodeToCurve = _a.encodeToCurve;
250
+ hash: sha256,
251
+ });
257
252
  //# sourceMappingURL=secp256k1.js.map
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":"AAAA,sEAAsE;AACtE,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,EAAE,IAAI,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAA8B,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAE5F,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACjG,OAAO,KAAK,GAAG,MAAM,6BAA6B,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,UAAU,GAAG,MAAM,CAAC,oEAAoE,CAAC,CAAC;AAChG,MAAM,UAAU,GAAG,MAAM,CAAC,oEAAoE,CAAC,CAAC;AAChG,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACtB,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACtB,MAAM,UAAU,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;AAE/D;;;GAGG;AACH,SAAS,OAAO,CAAC,CAAS;IACxB,MAAM,CAAC,GAAG,UAAU,CAAC;IACrB,kBAAkB;IAClB,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;IAC7E,kBAAkB;IAClB,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;IAC9D,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU;IACtC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM;IACpC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;IACxC,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7C,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;IAC9B,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IACzE,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,EAAE,GAAG,KAAK,CAAC,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;AAGtE,MAAM,CAAC,MAAM,SAAS,GAAG,WAAW,CAClC;IACE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACZ,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACZ,EAAE;IACF,CAAC,EAAE,UAAU;IACb,wCAAwC;IACxC,EAAE,EAAE,MAAM,CAAC,+EAA+E,CAAC;IAC3F,EAAE,EAAE,MAAM,CAAC,+EAA+E,CAAC;IAC3F,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACZ,IAAI,EAAE,IAAI;IACV;;;;;OAKG;IACH,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM,CAAC,oEAAoE,CAAC;QAClF,WAAW,EAAE,CAAC,CAAS,EAAE,EAAE;YACzB,MAAM,CAAC,GAAG,UAAU,CAAC;YACrB,MAAM,EAAE,GAAG,MAAM,CAAC,oCAAoC,CAAC,CAAC;YACxD,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,MAAM,CAAC,oCAAoC,CAAC,CAAC;YAC/D,MAAM,EAAE,GAAG,MAAM,CAAC,qCAAqC,CAAC,CAAC;YACzD,MAAM,EAAE,GAAG,EAAE,CAAC;YACd,MAAM,SAAS,GAAG,MAAM,CAAC,qCAAqC,CAAC,CAAC,CAAC,0BAA0B;YAE3F,MAAM,EAAE,GAAG,UAAU,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YACjC,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YAClC,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;YACvC,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;YACpC,MAAM,KAAK,GAAG,EAAE,GAAG,SAAS,CAAC;YAC7B,MAAM,KAAK,GAAG,EAAE,GAAG,SAAS,CAAC;YAC7B,IAAI,KAAK;gBAAE,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC;YACvB,IAAI,KAAK;gBAAE,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC;YACvB,IAAI,EAAE,GAAG,SAAS,IAAI,EAAE,GAAG,SAAS,EAAE;gBACpC,MAAM,IAAI,KAAK,CAAC,sCAAsC,GAAG,CAAC,CAAC,CAAC;aAC7D;YACD,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;QAClC,CAAC;KACF;CACF,EACD,MAAM,CACP,CAAC;AAEF,+FAA+F;AAC/F,iEAAiE;AACjE,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACtB,MAAM,EAAE,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC;AAC7E,MAAM,EAAE,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC;AAC7E,wFAAwF;AACxF,MAAM,oBAAoB,GAAkC,EAAE,CAAC;AAC/D,SAAS,UAAU,CAAC,GAAW,EAAE,GAAG,QAAsB;IACxD,IAAI,IAAI,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;IACrC,IAAI,IAAI,KAAK,SAAS,EAAE;QACtB,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClE,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC/B,oBAAoB,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;KAClC;IACD,OAAO,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC;AAChD,CAAC;AAED,oFAAoF;AACpF,MAAM,YAAY,GAAG,CAAC,KAAwB,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnF,MAAM,QAAQ,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACvD,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;AAC/C,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;AAC/C,MAAM,KAAK,GAAG,SAAS,CAAC,eAAe,CAAC;AACxC,MAAM,OAAO,GAAG,CAAC,CAAoB,EAAE,CAAS,EAAE,CAAS,EAAE,EAAE,CAC7D,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAE3C,oCAAoC;AACpC,SAAS,mBAAmB,CAAC,IAAa;IACxC,IAAI,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,yCAAyC;IAChG,IAAI,CAAC,GAAG,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,4CAA4C;IAC9E,MAAM,MAAM,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;IAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;AACpD,CAAC;AACD;;;GAGG;AACH,SAAS,MAAM,CAAC,CAAS;IACvB,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAC,iBAAiB;IACvE,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,wBAAwB;IAC5D,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,2BAA2B;IAC/C,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE;QAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,mDAAmD;IACpF,MAAM,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,mDAAmD;IACnF,CAAC,CAAC,cAAc,EAAE,CAAC;IACnB,OAAO,CAAC,CAAC;AACX,CAAC;AACD;;GAEG;AACH,SAAS,SAAS,CAAC,GAAG,IAAkB;IACtC,OAAO,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,mBAAmB,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACzE,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CAAC,UAAe;IAC1C,OAAO,mBAAmB,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,oDAAoD;AACpG,CAAC;AAED;;;GAGG;AACH,SAAS,WAAW,CAClB,OAAY,EACZ,UAAmB,EACnB,UAAe,WAAW,CAAC,EAAE,CAAC;IAE9B,MAAM,CAAC,GAAG,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC1C,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC,CAAC,gCAAgC;IAClG,MAAM,CAAC,GAAG,WAAW,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,2CAA2C;IAC1F,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,GAAG,eAAe,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,yDAAyD;IAChI,MAAM,IAAI,GAAG,UAAU,CAAC,eAAe,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,4CAA4C;IAChG,MAAM,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,2BAA2B;IACnE,IAAI,EAAE,KAAK,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC,kBAAkB;IAC7E,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,mBAAmB,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB;IAC1E,MAAM,CAAC,GAAG,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,gEAAgE;IAChG,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,+CAA+C;IAC/E,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACf,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACvC,iEAAiE;IACjE,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACpF,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;GAGG;AACH,SAAS,aAAa,CAAC,SAAc,EAAE,OAAY,EAAE,SAAc;IACjE,MAAM,GAAG,GAAG,WAAW,CAAC,WAAW,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;IACpD,MAAM,CAAC,GAAG,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC1C,MAAM,GAAG,GAAG,WAAW,CAAC,WAAW,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;IACpD,IAAI;QACF,MAAM,CAAC,GAAG,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,0CAA0C;QAClF,MAAM,CAAC,GAAG,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,yCAAyC;QACzF,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;QACzB,MAAM,CAAC,GAAG,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,0CAA0C;QAC3F,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;QACzB,MAAM,CAAC,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,0CAA0C;QAChG,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB;QACnD,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC,CAAC,gBAAgB;QAC/E,OAAO,IAAI,CAAC,CAAC,yDAAyD;KACvE;IAAC,OAAO,KAAK,EAAE;QACd,OAAO,KAAK,CAAC;KACd;AACH,CAAC;AAED,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,YAAY,EAAE,mBAAmB;IACjC,IAAI,EAAE,WAAW;IACjB,MAAM,EAAE,aAAa;IACrB,KAAK,EAAE;QACL,gBAAgB,EAAE,SAAS,CAAC,KAAK,CAAC,gBAAgB;QAClD,MAAM;QACN,YAAY;QACZ,eAAe;QACf,eAAe;QACf,UAAU;QACV,GAAG;KACJ;CACF,CAAC;AAEF,MAAM,MAAM,GAAG,GAAG,CAAC,UAAU,CAC3B,EAAE,EACF;IACE,OAAO;IACP;QACE,oEAAoE;QACpE,mEAAmE;QACnE,oEAAoE;QACpE,oEAAoE;KACrE;IACD,OAAO;IACP;QACE,oEAAoE;QACpE,oEAAoE;QACpE,oEAAoE,EAAE,SAAS;KAChF;IACD,OAAO;IACP;QACE,oEAAoE;QACpE,oEAAoE;QACpE,oEAAoE;QACpE,oEAAoE;KACrE;IACD,OAAO;IACP;QACE,oEAAoE;QACpE,oEAAoE;QACpE,oEAAoE;QACpE,oEAAoE,EAAE,SAAS;KAChF;CACF,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAA6B,CAClE,CAAC;AACF,MAAM,MAAM,GAAG,mBAAmB,CAAC,EAAE,EAAE;IACrC,CAAC,EAAE,MAAM,CAAC,oEAAoE,CAAC;IAC/E,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;CAC5B,CAAC,CAAC;AACH,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,GAAG,GAAG,CAAC,YAAY,CAC5D,SAAS,CAAC,eAAe,EACzB,CAAC,OAAiB,EAAE,EAAE;IACpB,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/C,OAAO,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACtB,CAAC,EACD;IACE,GAAG,EAAE,gCAAgC;IACrC,SAAS,EAAE,gCAAgC;IAC3C,CAAC,EAAE,EAAE,CAAC,KAAK;IACX,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,GAAG;IACN,MAAM,EAAE,KAAK;IACb,IAAI,EAAE,MAAM;CACb,CACF,CAAC"}
@@ -11,8 +11,9 @@ import { bytesToNumberBE, CHash, concatBytes, utf8ToBytes, validateObject } from
11
11
  * * `expand` is `xmd` (SHA2, SHA3, BLAKE) or `xof` (SHAKE, BLAKE-XOF)
12
12
  * * `hash` conforming to `utils.CHash` interface, with `outputLen` / `blockLen` props
13
13
  */
14
+ type UnicodeOrBytes = string | Uint8Array;
14
15
  export type Opts = {
15
- DST: string | Uint8Array;
16
+ DST: UnicodeOrBytes;
16
17
  p: bigint;
17
18
  m: number;
18
19
  k: number;
@@ -20,7 +21,7 @@ export type Opts = {
20
21
  hash: CHash;
21
22
  };
22
23
 
23
- function validateDST(dst: string | Uint8Array): Uint8Array {
24
+ function validateDST(dst: UnicodeOrBytes): Uint8Array {
24
25
  if (dst instanceof Uint8Array) return dst;
25
26
  if (typeof dst === 'string') return utf8ToBytes(dst);
26
27
  throw new Error('DST must be Uint8Array or string');
@@ -125,6 +126,13 @@ export function expand_message_xof(
125
126
  * @returns [u_0, ..., u_(count - 1)], a list of field elements.
126
127
  */
127
128
  export function hash_to_field(msg: Uint8Array, count: number, options: Opts): bigint[][] {
129
+ validateObject(options, {
130
+ DST: 'string',
131
+ p: 'bigint',
132
+ m: 'isSafeInteger',
133
+ k: 'isSafeInteger',
134
+ hash: 'hash',
135
+ });
128
136
  const { p, k, m, hash, expand, DST: _DST } = options;
129
137
  isBytes(msg);
130
138
  isNum(count);
@@ -183,24 +191,17 @@ export type MapToCurve<T> = (scalar: bigint[]) => AffinePoint<T>;
183
191
 
184
192
  // Separated from initialization opts, so users won't accidentally change per-curve parameters
185
193
  // (changing DST is ok!)
186
- export type htfBasicOpts = { DST: string };
194
+ export type htfBasicOpts = { DST: UnicodeOrBytes };
187
195
 
188
196
  export function createHasher<T>(
189
197
  Point: H2CPointConstructor<T>,
190
198
  mapToCurve: MapToCurve<T>,
191
- def: Opts & { encodeDST?: string }
199
+ def: Opts & { encodeDST?: UnicodeOrBytes }
192
200
  ) {
193
- validateObject(def, {
194
- DST: 'string',
195
- p: 'bigint',
196
- m: 'isSafeInteger',
197
- k: 'isSafeInteger',
198
- hash: 'hash',
199
- });
200
201
  if (typeof mapToCurve !== 'function') throw new Error('mapToCurve() must be defined');
201
202
  return {
202
203
  // Encodes byte string to elliptic curve
203
- // https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-hash-to-curve-11#section-3
204
+ // https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-hash-to-curve-16#section-3
204
205
  hashToCurve(msg: Uint8Array, options?: htfBasicOpts) {
205
206
  const u = hash_to_field(msg, 2, { ...def, DST: def.DST, ...options } as Opts);
206
207
  const u0 = Point.fromAffine(mapToCurve(u[0]));
@@ -56,6 +56,7 @@ export function invert(number: bigint, modulo: bigint): bigint {
56
56
  throw new Error(`invert: expected positive integers, got n=${number} mod=${modulo}`);
57
57
  }
58
58
  // Eucledian GCD https://brilliant.org/wiki/extended-euclidean-algorithm/
59
+ // Fermat's little theorem "CT-like" version inv(n) = n^(m-2) mod m is 30x slower.
59
60
  let a = mod(number, modulo);
60
61
  let b = modulo;
61
62
  // prettier-ignore
@@ -943,16 +943,10 @@ export function weierstrass(curveDef: CurveType): CurveFn {
943
943
  const q = Point.BASE.multiply(k).toAffine(); // q = Gk
944
944
  const r = modN(q.x); // r = q.x mod n
945
945
  if (r === _0n) return;
946
- // X blinding according to https://tches.iacr.org/index.php/TCHES/article/view/7337/6509
947
- // b * m + b * r * d ∈ [0,q−1] exposed via side-channel, but d (private scalar) is not.
948
- // NOTE: there is still probable some leak in multiplication, since it is not constant-time
949
- const b = ut.bytesToNumberBE(utils.randomPrivateKey()); // random scalar, b ∈ [1,q−1]
950
- const bi = invN(b); // b^-1
951
- const bdr = modN(b * d * r); // b * d * r
952
- const bm = modN(b * m); // b * m
953
- const mrx = modN(bi * modN(bdr + bm)); // b^-1(bm + bdr) -> m + rd
954
-
955
- const s = modN(ik * mrx); // s = k^-1(m + rd) mod n
946
+ // Can use scalar blinding b^-1(bm + bdr) where b ∈ [1,q−1] according to
947
+ // https://tches.iacr.org/index.php/TCHES/article/view/7337/6509. We've decided against it:
948
+ // a) dependency on CSPRNG b) 15% slowdown c) doesn't really help since bigints are not CT
949
+ const s = modN(ik * modN(m + r * d)); // Not using blinding here
956
950
  if (s === _0n) return;
957
951
  let recovery = (q.x === r ? 0 : 2) | Number(q.y & _1n); // recovery bit (2 or 3, when q.x > n)
958
952
  let normS = s;
package/src/ed25519.ts CHANGED
@@ -13,6 +13,7 @@ import {
13
13
  ensureBytes,
14
14
  } from './abstract/utils.js';
15
15
  import * as htf from './abstract/hash-to-curve.js';
16
+ import { AffinePoint } from './abstract/curve.js';
16
17
 
17
18
  /**
18
19
  * ed25519 Twisted Edwards curve with following addons:
@@ -309,6 +310,11 @@ export class RistrettoPoint {
309
310
  // Private property to discourage combining ExtendedPoint + RistrettoPoint
310
311
  // Always use Ristretto encoding/decoding instead.
311
312
  constructor(private readonly ep: ExtendedPoint) {}
313
+
314
+ static fromAffine(ap: AffinePoint<bigint>) {
315
+ return new RistrettoPoint(ed25519.ExtendedPoint.fromAffine(ap));
316
+ }
317
+
312
318
  /**
313
319
  * Takes uniform output of 64-bit hash function like sha512 and converts it to `RistrettoPoint`.
314
320
  * The hash-to-group operation applies Elligator twice and adds the results.
@@ -401,7 +407,7 @@ export class RistrettoPoint {
401
407
  equals(other: RistrettoPoint): boolean {
402
408
  assertRstPoint(other);
403
409
  const { ex: X1, ey: Y1 } = this.ep;
404
- const { ex: X2, ey: Y2 } = this.ep;
410
+ const { ex: X2, ey: Y2 } = other.ep;
405
411
  const mod = ed25519.CURVE.Fp.create;
406
412
  // (x1 * y2 == y1 * x2) | (y1 * y2 == x1 * x2)
407
413
  const one = mod(X1 * Y2) === mod(Y1 * X2);
@@ -427,3 +433,13 @@ export class RistrettoPoint {
427
433
  return new RistrettoPoint(this.ep.multiplyUnsafe(scalar));
428
434
  }
429
435
  }
436
+
437
+ // https://datatracker.ietf.org/doc/draft-irtf-cfrg-hash-to-curve/14/
438
+ // Appendix B. Hashing to ristretto255
439
+ export const hash_to_ristretto255 = (msg: Uint8Array, options: htf.htfBasicOpts) => {
440
+ const d = options.DST;
441
+ const DST = typeof d === 'string' ? utf8ToBytes(d) : d;
442
+ const uniform_bytes = htf.expand_message_xmd(msg, DST, 64, sha512);
443
+ const P = RistrettoPoint.hashToCurve(uniform_bytes);
444
+ return P;
445
+ };
package/src/secp256k1.ts CHANGED
@@ -115,12 +115,13 @@ const modN = (x: bigint) => mod(x, secp256k1N);
115
115
  const Point = secp256k1.ProjectivePoint;
116
116
  const GmulAdd = (Q: PointType<bigint>, a: bigint, b: bigint) =>
117
117
  Point.BASE.multiplyAndAddUnsafe(Q, a, b);
118
+
118
119
  // Calculate point, scalar and bytes
119
120
  function schnorrGetExtPubKey(priv: PrivKey) {
120
- const d = secp256k1.utils.normPrivateKeyToScalar(priv); // same method executed in fromPrivateKey
121
- const point = Point.fromPrivateKey(d); // P = d'⋅G; 0 < d' < n check is done inside
122
- const scalar = point.hasEvenY() ? d : modN(-d); // d = d' if has_even_y(P), otherwise d = n-d'
123
- return { point, scalar, bytes: pointToBytes(point) };
121
+ let d_ = secp256k1.utils.normPrivateKeyToScalar(priv); // same method executed in fromPrivateKey
122
+ let p = Point.fromPrivateKey(d_); // P = d'⋅G; 0 < d' < n check is done inside
123
+ const scalar = p.hasEvenY() ? d_ : modN(-d_);
124
+ return { scalar: scalar, bytes: pointToBytes(p) };
124
125
  }
125
126
  /**
126
127
  * lift_x from BIP340. Convert 32-byte x coordinate to elliptic curve point.
@@ -166,10 +167,10 @@ function schnorrSign(
166
167
  const rand = taggedHash('BIP0340/nonce', t, px, m); // Let rand = hash/nonce(t || bytes(P) || m)
167
168
  const k_ = modN(bytesToNumberBE(rand)); // Let k' = int(rand) mod n
168
169
  if (k_ === _0n) throw new Error('sign failed: k is zero'); // Fail if k' = 0.
169
- const { point: R, bytes: rx, scalar: k } = schnorrGetExtPubKey(k_); // Let R = k'⋅G.
170
+ const { bytes: rx, scalar: k } = schnorrGetExtPubKey(k_); // Let R = k'⋅G.
170
171
  const e = challenge(rx, px, m); // Let e = int(hash/challenge(bytes(R) || bytes(P) || m)) mod n.
171
172
  const sig = new Uint8Array(64); // Let sig = bytes(R) || bytes((k + ed) mod n).
172
- sig.set(numTo32b(R.px), 0);
173
+ sig.set(rx, 0);
173
174
  sig.set(numTo32b(modN(k + e * d)), 32);
174
175
  // If Verify(bytes(P), m, sig) (see below) returns failure, abort
175
176
  if (!schnorrVerify(sig, m, px)) throw new Error('sign: Invalid signature produced');
@@ -205,7 +206,6 @@ export const schnorr = {
205
206
  verify: schnorrVerify,
206
207
  utils: {
207
208
  randomPrivateKey: secp256k1.utils.randomPrivateKey,
208
- getExtendedPublicKey: schnorrGetExtPubKey,
209
209
  lift_x,
210
210
  pointToBytes,
211
211
  numberToBytesBE,
package/src/stark.ts CHANGED
@@ -5,17 +5,8 @@ import { utf8ToBytes } from '@noble/hashes/utils';
5
5
  import { Fp, mod, Field, validateField } from './abstract/modular.js';
6
6
  import { poseidon } from './abstract/poseidon.js';
7
7
  import { weierstrass, ProjPointType, SignatureType } from './abstract/weierstrass.js';
8
- import {
9
- Hex,
10
- bitMask,
11
- bytesToHex,
12
- bytesToNumberBE,
13
- concatBytes,
14
- ensureBytes as ensureBytesOrig,
15
- hexToBytes,
16
- hexToNumber,
17
- numberToVarBytesBE,
18
- } from './abstract/utils.js';
8
+ import * as u from './abstract/utils.js';
9
+ import type { Hex } from './abstract/utils.js';
19
10
  import { getHash } from './_shortw_utils.js';
20
11
 
21
12
  // Stark-friendly elliptic curve
@@ -30,7 +21,7 @@ function bits2int(bytes: Uint8Array): bigint {
30
21
  while (bytes[0] === 0) bytes = bytes.subarray(1); // strip leading 0s
31
22
  // Copy-pasted from weierstrass.ts
32
23
  const delta = bytes.length * 8 - nBitLength;
33
- const num = bytesToNumberBE(bytes);
24
+ const num = u.bytesToNumberBE(bytes);
34
25
  return delta > 0 ? num >> BigInt(delta) : num;
35
26
  }
36
27
  function hex0xToBytes(hex: string): Uint8Array {
@@ -38,7 +29,7 @@ function hex0xToBytes(hex: string): Uint8Array {
38
29
  hex = strip0x(hex); // allow 0x prefix
39
30
  if (hex.length & 1) hex = '0' + hex; // allow unpadded hex
40
31
  }
41
- return hexToBytes(hex);
32
+ return u.hexToBytes(hex);
42
33
  }
43
34
  const curve = weierstrass({
44
35
  a: BigInt(1), // Params: a, b
@@ -59,7 +50,7 @@ const curve = weierstrass({
59
50
  bits2int_modN: (bytes: Uint8Array): bigint => {
60
51
  // 2102820b232636d200cb21f1d330f20d096cae09d1bf3edb1cc333ddee11318 =>
61
52
  // 2102820b232636d200cb21f1d330f20d096cae09d1bf3edb1cc333ddee113180
62
- const hex = bytesToNumberBE(bytes).toString(16); // toHex unpadded
53
+ const hex = u.bytesToNumberBE(bytes).toString(16); // toHex unpadded
63
54
  if (hex.length === 63) bytes = hex0xToBytes(hex + '0'); // append trailing 0
64
55
  return mod(bits2int(bytes), CURVE_ORDER);
65
56
  },
@@ -67,11 +58,11 @@ const curve = weierstrass({
67
58
  export const _starkCurve = curve;
68
59
 
69
60
  function ensureBytes(hex: Hex): Uint8Array {
70
- return ensureBytesOrig('', typeof hex === 'string' ? hex0xToBytes(hex) : hex);
61
+ return u.ensureBytes('', typeof hex === 'string' ? hex0xToBytes(hex) : hex);
71
62
  }
72
63
 
73
64
  function normPrivKey(privKey: Hex): string {
74
- return bytesToHex(ensureBytes(privKey)).padStart(64, '0');
65
+ return u.bytesToHex(ensureBytes(privKey)).padStart(64, '0');
75
66
  }
76
67
  export function getPublicKey(privKey: Hex, isCompressed = false): Uint8Array {
77
68
  return curve.getPublicKey(normPrivKey(privKey), isCompressed);
@@ -91,7 +82,7 @@ const { CURVE, ProjectivePoint, Signature, utils } = curve;
91
82
  export { CURVE, ProjectivePoint, Signature, utils };
92
83
 
93
84
  function extractX(bytes: Uint8Array): string {
94
- const hex = bytesToHex(bytes.subarray(1));
85
+ const hex = u.bytesToHex(bytes.subarray(1));
95
86
  const stripped = hex.replace(/^0+/gm, ''); // strip leading 0s
96
87
  return `0x${stripped}`;
97
88
  }
@@ -109,7 +100,7 @@ export function grindKey(seed: Hex) {
109
100
  const sha256mask = 2n ** 256n;
110
101
  const limit = sha256mask - mod(sha256mask, CURVE_ORDER);
111
102
  for (let i = 0; ; i++) {
112
- const key = sha256Num(concatBytes(_seed, numberToVarBytesBE(BigInt(i))));
103
+ const key = sha256Num(u.concatBytes(_seed, u.numberToVarBytesBE(BigInt(i))));
113
104
  if (key < limit) return mod(key, CURVE_ORDER).toString(16); // key should be in [0, limit)
114
105
  if (i === 100000) throw new Error('grindKey is broken: tried 100k vals'); // prevent dos
115
106
  }
@@ -135,7 +126,7 @@ export function getAccountPath(
135
126
  ): string {
136
127
  const layerNum = int31(sha256Num(layer));
137
128
  const applicationNum = int31(sha256Num(application));
138
- const eth = hexToNumber(strip0x(ethereumAddress));
129
+ const eth = u.hexToNumber(strip0x(ethereumAddress));
139
130
  return `m/2645'/${layerNum}'/${applicationNum}'/${int31(eth)}'/${int31(eth >> 31n)}'/${index}`;
140
131
  }
141
132
 
@@ -196,7 +187,7 @@ function pedersenArg(arg: PedersenArg): bigint {
196
187
  if (!Number.isSafeInteger(arg)) throw new Error(`Invalid pedersenArg: ${arg}`);
197
188
  value = BigInt(arg);
198
189
  } else {
199
- value = bytesToNumberBE(ensureBytes(arg));
190
+ value = u.bytesToNumberBE(ensureBytes(arg));
200
191
  }
201
192
  if (!(0n <= value && value < curve.CURVE.Fp.ORDER))
202
193
  throw new Error(`PedersenArg should be 0 <= value < CURVE.P: ${value}`); // [0..Fp)
@@ -207,7 +198,7 @@ function pedersenSingle(point: ProjectivePoint, value: PedersenArg, constants: P
207
198
  let x = pedersenArg(value);
208
199
  for (let j = 0; j < 252; j++) {
209
200
  const pt = constants[j];
210
- if (pt.px === point.px) throw new Error('Same point');
201
+ if (pt.equals(point)) throw new Error('Same point');
211
202
  if ((x & 1n) !== 0n) point = point.add(pt);
212
203
  x >>= 1n;
213
204
  }
@@ -234,9 +225,9 @@ export function hashChain(data: PedersenArg[], fn = pedersen) {
234
225
  export const computeHashOnElements = (data: PedersenArg[], fn = pedersen) =>
235
226
  [0, ...data, data.length].reduce((x, y) => fn(x, y));
236
227
 
237
- const MASK_250 = bitMask(250);
238
- export const keccak = (data: Uint8Array): bigint => bytesToNumberBE(keccak_256(data)) & MASK_250;
239
- const sha256Num = (data: Uint8Array | string): bigint => bytesToNumberBE(sha256(data));
228
+ const MASK_250 = u.bitMask(250);
229
+ export const keccak = (data: Uint8Array): bigint => u.bytesToNumberBE(keccak_256(data)) & MASK_250;
230
+ const sha256Num = (data: Uint8Array | string): bigint => u.bytesToNumberBE(sha256(data));
240
231
 
241
232
  // Poseidon hash
242
233
  export const Fp253 = Fp(
@@ -280,7 +271,13 @@ export type PoseidonOpts = {
280
271
  roundsPartial: number;
281
272
  };
282
273
 
283
- export function poseidonBasic(opts: PoseidonOpts, mds: bigint[][]) {
274
+ export type PoseidonFn = ReturnType<typeof poseidon> & {
275
+ m: number;
276
+ rate: number;
277
+ capacity: number;
278
+ };
279
+
280
+ export function poseidonBasic(opts: PoseidonOpts, mds: bigint[][]): PoseidonFn {
284
281
  validateField(opts.Fp);
285
282
  if (!Number.isSafeInteger(opts.rate) || !Number.isSafeInteger(opts.capacity))
286
283
  throw new Error(`Wrong poseidon opts: ${opts}`);
@@ -292,7 +289,7 @@ export function poseidonBasic(opts: PoseidonOpts, mds: bigint[][]) {
292
289
  for (let j = 0; j < m; j++) row.push(poseidonRoundConstant(opts.Fp, 'Hades', m * i + j));
293
290
  roundConstants.push(row);
294
291
  }
295
- return poseidon({
292
+ const res: Partial<PoseidonFn> = poseidon({
296
293
  ...opts,
297
294
  t: m,
298
295
  sboxPower: 3,
@@ -300,6 +297,10 @@ export function poseidonBasic(opts: PoseidonOpts, mds: bigint[][]) {
300
297
  mds,
301
298
  roundConstants,
302
299
  });
300
+ res.m = m;
301
+ res.rate = opts.rate;
302
+ res.capacity = opts.capacity;
303
+ return res as PoseidonFn;
303
304
  }
304
305
 
305
306
  export function poseidonCreate(opts: PoseidonOpts, mdsAttempt = 0) {
@@ -313,6 +314,28 @@ export const poseidonSmall = poseidonBasic(
313
314
  MDS_SMALL
314
315
  );
315
316
 
316
- export function poseidonHash(x: bigint, y: bigint, fn = poseidonSmall) {
317
+ export function poseidonHash(x: bigint, y: bigint, fn = poseidonSmall): bigint {
317
318
  return fn([x, y, 2n])[0];
318
319
  }
320
+
321
+ export function poseidonHashFunc(x: Uint8Array, y: Uint8Array, fn = poseidonSmall): Uint8Array {
322
+ return u.numberToVarBytesBE(poseidonHash(u.bytesToNumberBE(x), u.bytesToNumberBE(y), fn));
323
+ }
324
+
325
+ export function poseidonHashSingle(x: bigint, fn = poseidonSmall): bigint {
326
+ return fn([x, 0n, 1n])[0];
327
+ }
328
+
329
+ export function poseidonHashMany(values: bigint[], fn = poseidonSmall): bigint {
330
+ const { m, rate } = fn;
331
+ if (!Array.isArray(values)) throw new Error('bigint array expected in values');
332
+ const padded = Array.from(values); // copy
333
+ padded.push(1n);
334
+ while (padded.length % rate !== 0) padded.push(0n);
335
+ let state: bigint[] = new Array(m).fill(0n);
336
+ for (let i = 0; i < padded.length; i += rate) {
337
+ for (let j = 0; j < rate; j++) state[j] += padded[i + j];
338
+ state = fn(state);
339
+ }
340
+ return state[0];
341
+ }