@noble/curves 0.7.3 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/README.md +16 -17
  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/esm/abstract/hash-to-curve.js +8 -8
  37. package/esm/abstract/hash-to-curve.js.map +1 -1
  38. package/esm/abstract/modular.js +1 -0
  39. package/esm/abstract/modular.js.map +1 -1
  40. package/esm/abstract/weierstrass.js +4 -9
  41. package/esm/abstract/weierstrass.js.map +1 -1
  42. package/esm/ed25519.js +13 -1
  43. package/esm/ed25519.js.map +1 -1
  44. package/esm/package.json +1 -1
  45. package/esm/secp256k1.js +6 -7
  46. package/esm/secp256k1.js.map +1 -1
  47. package/jubjub.js +17 -22
  48. package/jubjub.js.map +1 -1
  49. package/p256.js +13 -17
  50. package/p256.js.map +1 -1
  51. package/p384.js +13 -17
  52. package/p384.js.map +1 -1
  53. package/p521.js +13 -17
  54. package/p521.js.map +1 -1
  55. package/package.json +3 -7
  56. package/pasta.js +16 -19
  57. package/pasta.js.map +1 -1
  58. package/secp256k1.d.ts +0 -6
  59. package/secp256k1.d.ts.map +1 -1
  60. package/secp256k1.js +58 -63
  61. package/secp256k1.js.map +1 -1
  62. package/src/abstract/hash-to-curve.ts +13 -12
  63. package/src/abstract/modular.ts +1 -0
  64. package/src/abstract/weierstrass.ts +4 -10
  65. package/src/ed25519.ts +17 -1
  66. package/src/secp256k1.ts +7 -7
  67. package/esm/stark.js +0 -251
  68. package/esm/stark.js.map +0 -1
  69. package/src/stark.ts +0 -318
  70. package/stark.d.ts +0 -83
  71. package/stark.d.ts.map +0 -1
  72. package/stark.js +0 -273
  73. package/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":";;;;AAAA,sEAAsE;AACtE,iDAA8C;AAC9C,+CAAkD;AAClD,sDAA+D;AAC/D,8DAA4F;AAE5F,kDAAiG;AACjG,mDAAmD;AACnD,yDAAiD;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,IAAA,iBAAI,EAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,EAAE,GAAG,CAAC,IAAA,iBAAI,EAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,GAAG,GAAG,CAAC,IAAA,iBAAI,EAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;IACxC,MAAM,GAAG,GAAG,CAAC,IAAA,iBAAI,EAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,GAAG,GAAG,CAAC,IAAA,iBAAI,EAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,GAAG,GAAG,CAAC,IAAA,iBAAI,EAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,CAAC,IAAA,iBAAI,EAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAG,CAAC,IAAA,iBAAI,EAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7C,MAAM,IAAI,GAAG,CAAC,IAAA,iBAAI,EAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,EAAE,GAAG,CAAC,IAAA,iBAAI,EAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,EAAE,GAAG,CAAC,IAAA,iBAAI,EAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,IAAA,iBAAI,EAAC,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,IAAA,eAAK,EAAC,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;AAGzD,QAAA,SAAS,GAAG,IAAA,8BAAW,EAClC;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,IAAA,gBAAG,EAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;YACvC,IAAI,EAAE,GAAG,IAAA,gBAAG,EAAC,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,eAAM,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,IAAA,eAAM,EAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClE,IAAI,GAAG,IAAA,sBAAW,EAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC/B,oBAAoB,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;KAClC;IACD,OAAO,IAAA,eAAM,EAAC,IAAA,sBAAW,EAAC,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,IAAA,0BAAe,EAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACvD,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,IAAA,gBAAG,EAAC,CAAC,EAAE,UAAU,CAAC,CAAC;AAC/C,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,IAAA,gBAAG,EAAC,CAAC,EAAE,UAAU,CAAC,CAAC;AAC/C,MAAM,KAAK,GAAG,iBAAS,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;AAC3C,oCAAoC;AACpC,SAAS,mBAAmB,CAAC,IAAa;IACxC,MAAM,CAAC,GAAG,iBAAS,CAAC,KAAK,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,yCAAyC;IACjG,MAAM,KAAK,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,4CAA4C;IACnF,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,8CAA8C;IAC9F,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;AACvD,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,IAAA,0BAAe,EAAC,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,IAAA,mBAAW,EAAC,EAAE,CAAC;IAE9B,MAAM,CAAC,GAAG,IAAA,sBAAW,EAAC,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,IAAA,sBAAW,EAAC,SAAS,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,2CAA2C;IAC1F,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,GAAG,IAAA,0BAAe,EAAC,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,IAAA,0BAAe,EAAC,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,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,mBAAmB,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB;IACpF,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,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3B,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,IAAA,sBAAW,EAAC,WAAW,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;IACpD,MAAM,CAAC,GAAG,IAAA,sBAAW,EAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC1C,MAAM,GAAG,GAAG,IAAA,sBAAW,EAAC,WAAW,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;IACpD,IAAI;QACF,MAAM,CAAC,GAAG,MAAM,CAAC,IAAA,0BAAe,EAAC,GAAG,CAAC,CAAC,CAAC,CAAC,0CAA0C;QAClF,MAAM,CAAC,GAAG,IAAA,0BAAe,EAAC,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,IAAA,0BAAe,EAAC,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;AAEY,QAAA,OAAO,GAAG;IACrB,YAAY,EAAE,mBAAmB;IACjC,IAAI,EAAE,WAAW;IACjB,MAAM,EAAE,aAAa;IACrB,KAAK,EAAE;QACL,gBAAgB,EAAE,iBAAS,CAAC,KAAK,CAAC,gBAAgB;QAClD,oBAAoB,EAAE,mBAAmB;QACzC,MAAM;QACN,YAAY;QACZ,eAAe,EAAf,0BAAe;QACf,eAAe,EAAf,0BAAe;QACf,UAAU;QACV,GAAG,EAAH,gBAAG;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,IAAA,oCAAmB,EAAC,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;AACU,KAAiC,GAAG,CAAC,YAAY,CAC5D,iBAAS,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,eAAM;CACb,CACF,EAfc,mBAAW,mBAAE,qBAAa,oBAevC"}
1
+ {"version":3,"file":"secp256k1.js","sourceRoot":"","sources":["src/secp256k1.ts"],"names":[],"mappings":"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"}
@@ -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,