@noble/curves 0.7.2 → 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 +32 -13
  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 +16 -5
  11. package/abstract/hash-to-curve.d.ts.map +1 -1
  12. package/abstract/hash-to-curve.js +51 -56
  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 +49 -47
  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 -163
  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":"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"}
@@ -1,33 +1,36 @@
1
1
  /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */
2
2
  import type { Group, GroupConstructor, AffinePoint } from './curve.js';
3
3
  import { mod, Field } from './modular.js';
4
- import { CHash, concatBytes, utf8ToBytes, validateObject } from './utils.js';
4
+ import { bytesToNumberBE, CHash, concatBytes, utf8ToBytes, validateObject } from './utils.js';
5
5
 
6
+ /**
7
+ * * `DST` is a domain separation tag, defined in section 2.2.5
8
+ * * `p` characteristic of F, where F is a finite field of characteristic p and order q = p^m
9
+ * * `m` is extension degree (1 for prime fields)
10
+ * * `k` is the target security target in bits (e.g. 128), from section 5.1
11
+ * * `expand` is `xmd` (SHA2, SHA3, BLAKE) or `xof` (SHAKE, BLAKE-XOF)
12
+ * * `hash` conforming to `utils.CHash` interface, with `outputLen` / `blockLen` props
13
+ */
14
+ type UnicodeOrBytes = string | Uint8Array;
6
15
  export type Opts = {
7
- DST: string; // DST: a domain separation tag, defined in section 2.2.5
8
- encodeDST: string;
9
- p: bigint; // characteristic of F, where F is a finite field of characteristic p and order q = p^m
10
- m: number; // extension degree of F, m >= 1
11
- k: number; // k: the target security level for the suite in bits, defined in section 5.1
12
- expand?: 'xmd' | 'xof'; // use a message that has already been processed by expand_message_xmd
13
- // Hash functions for: expand_message_xmd is appropriate for use with a
14
- // wide range of hash functions, including SHA-2, SHA-3, BLAKE2, and others.
15
- // BBS+ uses blake2: https://github.com/hyperledger/aries-framework-go/issues/2247
16
- // TODO: verify that hash is shake if expand==='xof' via types
16
+ DST: UnicodeOrBytes;
17
+ p: bigint;
18
+ m: number;
19
+ k: number;
20
+ expand?: 'xmd' | 'xof';
17
21
  hash: CHash;
18
22
  };
19
23
 
20
- // Octet Stream to Integer (bytesToNumberBE)
21
- function os2ip(bytes: Uint8Array): bigint {
22
- let result = 0n;
23
- for (let i = 0; i < bytes.length; i++) {
24
- result <<= 8n;
25
- result += BigInt(bytes[i]);
26
- }
27
- return result;
24
+ function validateDST(dst: UnicodeOrBytes): Uint8Array {
25
+ if (dst instanceof Uint8Array) return dst;
26
+ if (typeof dst === 'string') return utf8ToBytes(dst);
27
+ throw new Error('DST must be Uint8Array or string');
28
28
  }
29
29
 
30
- // Integer to Octet Stream
30
+ // Octet Stream to Integer. "spec" implementation of os2ip is 2.5x slower vs bytesToNumberBE.
31
+ const os2ip = bytesToNumberBE;
32
+
33
+ // Integer to Octet Stream (numberToBytesBE)
31
34
  function i2osp(value: number, length: number): Uint8Array {
32
35
  if (value < 0 || value >= 1 << (8 * length)) {
33
36
  throw new Error(`bad I2OSP call: value=${value} length=${length}`);
@@ -68,13 +71,12 @@ export function expand_message_xmd(
68
71
  isNum(lenInBytes);
69
72
  // https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-hash-to-curve-16#section-5.3.3
70
73
  if (DST.length > 255) DST = H(concatBytes(utf8ToBytes('H2C-OVERSIZE-DST-'), DST));
71
- const b_in_bytes = H.outputLen;
72
- const r_in_bytes = H.blockLen;
74
+ const { outputLen: b_in_bytes, blockLen: r_in_bytes } = H;
73
75
  const ell = Math.ceil(lenInBytes / b_in_bytes);
74
76
  if (ell > 255) throw new Error('Invalid xmd length');
75
77
  const DST_prime = concatBytes(DST, i2osp(DST.length, 1));
76
78
  const Z_pad = i2osp(0, r_in_bytes);
77
- const l_i_b_str = i2osp(lenInBytes, 2);
79
+ const l_i_b_str = i2osp(lenInBytes, 2); // len_in_bytes_str
78
80
  const b = new Array<Uint8Array>(ell);
79
81
  const b_0 = H(concatBytes(Z_pad, msg, l_i_b_str, i2osp(0, 1), DST_prime));
80
82
  b[0] = H(concatBytes(b_0, i2osp(1, 1), DST_prime));
@@ -120,30 +122,40 @@ export function expand_message_xof(
120
122
  * https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-hash-to-curve-11#section-5.3
121
123
  * @param msg a byte string containing the message to hash
122
124
  * @param count the number of elements of F to output
123
- * @param options `{DST: string, p: bigint, m: number, k: number, expand: 'xmd' | 'xof', hash: H}`
125
+ * @param options `{DST: string, p: bigint, m: number, k: number, expand: 'xmd' | 'xof', hash: H}`, see above
124
126
  * @returns [u_0, ..., u_(count - 1)], a list of field elements.
125
127
  */
126
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
+ });
127
136
  const { p, k, m, hash, expand, DST: _DST } = options;
128
137
  isBytes(msg);
129
138
  isNum(count);
130
- if (typeof _DST !== 'string') throw new Error('DST must be valid');
139
+ const DST = validateDST(_DST);
131
140
  const log2p = p.toString(2).length;
132
141
  const L = Math.ceil((log2p + k) / 8); // section 5.1 of ietf draft link above
133
142
  const len_in_bytes = count * m * L;
134
- const DST = utf8ToBytes(_DST);
135
- const pseudo_random_bytes =
136
- expand === 'xmd'
137
- ? expand_message_xmd(msg, DST, len_in_bytes, hash)
138
- : expand === 'xof'
139
- ? expand_message_xof(msg, DST, len_in_bytes, k, hash)
140
- : msg;
143
+ let prb; // pseudo_random_bytes
144
+ if (expand === 'xmd') {
145
+ prb = expand_message_xmd(msg, DST, len_in_bytes, hash);
146
+ } else if (expand === 'xof') {
147
+ prb = expand_message_xof(msg, DST, len_in_bytes, k, hash);
148
+ } else if (expand === undefined) {
149
+ prb = msg;
150
+ } else {
151
+ throw new Error('expand must be "xmd", "xof" or undefined');
152
+ }
141
153
  const u = new Array(count);
142
154
  for (let i = 0; i < count; i++) {
143
155
  const e = new Array(m);
144
156
  for (let j = 0; j < m; j++) {
145
157
  const elm_offset = L * (j + i * m);
146
- const tv = pseudo_random_bytes.subarray(elm_offset, elm_offset + L);
158
+ const tv = prb.subarray(elm_offset, elm_offset + L);
147
159
  e[j] = mod(os2ip(tv), p);
148
160
  }
149
161
  u[i] = e;
@@ -179,27 +191,17 @@ export type MapToCurve<T> = (scalar: bigint[]) => AffinePoint<T>;
179
191
 
180
192
  // Separated from initialization opts, so users won't accidentally change per-curve parameters
181
193
  // (changing DST is ok!)
182
- export type htfBasicOpts = { DST: string };
194
+ export type htfBasicOpts = { DST: UnicodeOrBytes };
183
195
 
184
196
  export function createHasher<T>(
185
197
  Point: H2CPointConstructor<T>,
186
198
  mapToCurve: MapToCurve<T>,
187
- def: Opts
199
+ def: Opts & { encodeDST?: UnicodeOrBytes }
188
200
  ) {
189
- validateObject(def, {
190
- DST: 'string',
191
- p: 'bigint',
192
- m: 'isSafeInteger',
193
- k: 'isSafeInteger',
194
- hash: 'hash',
195
- });
196
- if (def.expand !== 'xmd' && def.expand !== 'xof' && def.expand !== undefined)
197
- throw new Error('Invalid htf/expand');
198
- if (typeof mapToCurve !== 'function')
199
- throw new Error('hashToCurve: mapToCurve() has not been defined');
201
+ if (typeof mapToCurve !== 'function') throw new Error('mapToCurve() must be defined');
200
202
  return {
201
203
  // Encodes byte string to elliptic curve
202
- // 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
203
205
  hashToCurve(msg: Uint8Array, options?: htfBasicOpts) {
204
206
  const u = hash_to_field(msg, 2, { ...def, DST: def.DST, ...options } as Opts);
205
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,