@noble/curves 1.9.0 → 1.9.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 (116) hide show
  1. package/README.md +22 -9
  2. package/abstract/curve.d.ts.map +1 -1
  3. package/abstract/curve.js +13 -4
  4. package/abstract/curve.js.map +1 -1
  5. package/abstract/edwards.d.ts.map +1 -1
  6. package/abstract/edwards.js +14 -1
  7. package/abstract/edwards.js.map +1 -1
  8. package/abstract/fft.d.ts +120 -0
  9. package/abstract/fft.d.ts.map +1 -0
  10. package/abstract/fft.js +439 -0
  11. package/abstract/fft.js.map +1 -0
  12. package/abstract/modular.d.ts +4 -6
  13. package/abstract/modular.d.ts.map +1 -1
  14. package/abstract/modular.js +107 -119
  15. package/abstract/modular.js.map +1 -1
  16. package/abstract/montgomery.d.ts +4 -9
  17. package/abstract/montgomery.d.ts.map +1 -1
  18. package/abstract/montgomery.js +70 -91
  19. package/abstract/montgomery.js.map +1 -1
  20. package/abstract/tower.js +1 -1
  21. package/abstract/tower.js.map +1 -1
  22. package/abstract/weierstrass.d.ts +27 -4
  23. package/abstract/weierstrass.d.ts.map +1 -1
  24. package/abstract/weierstrass.js +61 -42
  25. package/abstract/weierstrass.js.map +1 -1
  26. package/bls12-381.d.ts.map +1 -1
  27. package/bls12-381.js +9 -23
  28. package/bls12-381.js.map +1 -1
  29. package/ed25519.d.ts +17 -4
  30. package/ed25519.d.ts.map +1 -1
  31. package/ed25519.js +23 -12
  32. package/ed25519.js.map +1 -1
  33. package/ed448.d.ts +19 -4
  34. package/ed448.d.ts.map +1 -1
  35. package/ed448.js +41 -29
  36. package/ed448.js.map +1 -1
  37. package/esm/abstract/curve.d.ts.map +1 -1
  38. package/esm/abstract/curve.js +13 -4
  39. package/esm/abstract/curve.js.map +1 -1
  40. package/esm/abstract/edwards.d.ts.map +1 -1
  41. package/esm/abstract/edwards.js +14 -1
  42. package/esm/abstract/edwards.js.map +1 -1
  43. package/esm/abstract/fft.d.ts +120 -0
  44. package/esm/abstract/fft.d.ts.map +1 -0
  45. package/esm/abstract/fft.js +426 -0
  46. package/esm/abstract/fft.js.map +1 -0
  47. package/esm/abstract/modular.d.ts +4 -6
  48. package/esm/abstract/modular.d.ts.map +1 -1
  49. package/esm/abstract/modular.js +107 -119
  50. package/esm/abstract/modular.js.map +1 -1
  51. package/esm/abstract/montgomery.d.ts +4 -9
  52. package/esm/abstract/montgomery.d.ts.map +1 -1
  53. package/esm/abstract/montgomery.js +71 -92
  54. package/esm/abstract/montgomery.js.map +1 -1
  55. package/esm/abstract/tower.js +1 -1
  56. package/esm/abstract/tower.js.map +1 -1
  57. package/esm/abstract/weierstrass.d.ts +27 -4
  58. package/esm/abstract/weierstrass.d.ts.map +1 -1
  59. package/esm/abstract/weierstrass.js +61 -42
  60. package/esm/abstract/weierstrass.js.map +1 -1
  61. package/esm/bls12-381.d.ts.map +1 -1
  62. package/esm/bls12-381.js +9 -23
  63. package/esm/bls12-381.js.map +1 -1
  64. package/esm/ed25519.d.ts +17 -4
  65. package/esm/ed25519.d.ts.map +1 -1
  66. package/esm/ed25519.js +23 -12
  67. package/esm/ed25519.js.map +1 -1
  68. package/esm/ed448.d.ts +19 -4
  69. package/esm/ed448.d.ts.map +1 -1
  70. package/esm/ed448.js +42 -30
  71. package/esm/ed448.js.map +1 -1
  72. package/esm/jubjub.d.ts +4 -0
  73. package/esm/jubjub.d.ts.map +1 -1
  74. package/esm/jubjub.js +4 -0
  75. package/esm/jubjub.js.map +1 -1
  76. package/esm/nist.d.ts +1 -0
  77. package/esm/nist.d.ts.map +1 -1
  78. package/esm/nist.js +1 -0
  79. package/esm/nist.js.map +1 -1
  80. package/esm/pasta.d.ts +4 -0
  81. package/esm/pasta.d.ts.map +1 -1
  82. package/esm/pasta.js +4 -0
  83. package/esm/pasta.js.map +1 -1
  84. package/esm/secp256k1.d.ts.map +1 -1
  85. package/esm/secp256k1.js +3 -3
  86. package/esm/secp256k1.js.map +1 -1
  87. package/jubjub.d.ts +4 -0
  88. package/jubjub.d.ts.map +1 -1
  89. package/jubjub.js +4 -0
  90. package/jubjub.js.map +1 -1
  91. package/nist.d.ts +1 -0
  92. package/nist.d.ts.map +1 -1
  93. package/nist.js +1 -0
  94. package/nist.js.map +1 -1
  95. package/package.json +13 -4
  96. package/pasta.d.ts +4 -0
  97. package/pasta.d.ts.map +1 -1
  98. package/pasta.js +4 -0
  99. package/pasta.js.map +1 -1
  100. package/secp256k1.d.ts.map +1 -1
  101. package/secp256k1.js +3 -3
  102. package/secp256k1.js.map +1 -1
  103. package/src/abstract/curve.ts +10 -5
  104. package/src/abstract/edwards.ts +15 -1
  105. package/src/abstract/fft.ts +508 -0
  106. package/src/abstract/modular.ts +107 -115
  107. package/src/abstract/montgomery.ts +78 -110
  108. package/src/abstract/tower.ts +1 -1
  109. package/src/abstract/weierstrass.ts +93 -49
  110. package/src/bls12-381.ts +11 -27
  111. package/src/ed25519.ts +24 -12
  112. package/src/ed448.ts +84 -70
  113. package/src/jubjub.ts +4 -0
  114. package/src/nist.ts +1 -0
  115. package/src/pasta.ts +5 -1
  116. package/src/secp256k1.ts +3 -3
@@ -34,8 +34,6 @@ const utils_ts_1 = require("./utils.js");
34
34
  const _0n = BigInt(0), _1n = BigInt(1), _2n = /* @__PURE__ */ BigInt(2), _3n = /* @__PURE__ */ BigInt(3);
35
35
  // prettier-ignore
36
36
  const _4n = /* @__PURE__ */ BigInt(4), _5n = /* @__PURE__ */ BigInt(5), _8n = /* @__PURE__ */ BigInt(8);
37
- // prettier-ignore
38
- const _9n = /* @__PURE__ */ BigInt(9), _16n = /* @__PURE__ */ BigInt(16);
39
37
  // Calculates a modulo b
40
38
  function mod(a, b) {
41
39
  const result = a % b;
@@ -49,20 +47,7 @@ function mod(a, b) {
49
47
  * pow(2n, 6n, 11n) // 64n % 11n == 9n
50
48
  */
51
49
  function pow(num, power, modulo) {
52
- if (power < _0n)
53
- throw new Error('invalid exponent, negatives unsupported');
54
- if (modulo <= _0n)
55
- throw new Error('invalid modulus');
56
- if (modulo === _1n)
57
- return _0n;
58
- let res = _1n;
59
- while (power > _0n) {
60
- if (power & _1n)
61
- res = (res * num) % modulo;
62
- num = (num * num) % modulo;
63
- power >>= _1n;
64
- }
65
- return res;
50
+ return FpPow(Field(modulo), num, power);
66
51
  }
67
52
  /** Does `x^(2^power)` mod p. `pow2(30, 4)` == `30^(2^4)` */
68
53
  function pow2(x, power, modulo) {
@@ -101,6 +86,51 @@ function invert(number, modulo) {
101
86
  throw new Error('invert: does not exist');
102
87
  return mod(x, modulo);
103
88
  }
89
+ // Not all roots are possible! Example which will throw:
90
+ // const NUM =
91
+ // n = 72057594037927816n;
92
+ // Fp = Field(BigInt('0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaab'));
93
+ function sqrt3mod4(Fp, n) {
94
+ const p1div4 = (Fp.ORDER + _1n) / _4n;
95
+ const root = Fp.pow(n, p1div4);
96
+ // Throw if root^2 != n
97
+ if (!Fp.eql(Fp.sqr(root), n))
98
+ throw new Error('Cannot find square root');
99
+ return root;
100
+ }
101
+ function sqrt5mod8(Fp, n) {
102
+ const p5div8 = (Fp.ORDER - _5n) / _8n;
103
+ const n2 = Fp.mul(n, _2n);
104
+ const v = Fp.pow(n2, p5div8);
105
+ const nv = Fp.mul(n, v);
106
+ const i = Fp.mul(Fp.mul(nv, _2n), v);
107
+ const root = Fp.mul(nv, Fp.sub(i, Fp.ONE));
108
+ if (!Fp.eql(Fp.sqr(root), n))
109
+ throw new Error('Cannot find square root');
110
+ return root;
111
+ }
112
+ // TODO: Commented-out for now. Provide test vectors.
113
+ // Tonelli is too slow for extension fields Fp2.
114
+ // That means we can't use sqrt (c1, c2...) even for initialization constants.
115
+ // if (P % _16n === _9n) return sqrt9mod16;
116
+ // // prettier-ignore
117
+ // function sqrt9mod16<T>(Fp: IField<T>, n: T, p7div16?: bigint) {
118
+ // if (p7div16 === undefined) p7div16 = (Fp.ORDER + BigInt(7)) / _16n;
119
+ // const c1 = Fp.sqrt(Fp.neg(Fp.ONE)); // 1. c1 = sqrt(-1) in F, i.e., (c1^2) == -1 in F
120
+ // const c2 = Fp.sqrt(c1); // 2. c2 = sqrt(c1) in F, i.e., (c2^2) == c1 in F
121
+ // const c3 = Fp.sqrt(Fp.neg(c1)); // 3. c3 = sqrt(-c1) in F, i.e., (c3^2) == -c1 in F
122
+ // const c4 = p7div16; // 4. c4 = (q + 7) / 16 # Integer arithmetic
123
+ // let tv1 = Fp.pow(n, c4); // 1. tv1 = x^c4
124
+ // let tv2 = Fp.mul(c1, tv1); // 2. tv2 = c1 * tv1
125
+ // const tv3 = Fp.mul(c2, tv1); // 3. tv3 = c2 * tv1
126
+ // let tv4 = Fp.mul(c3, tv1); // 4. tv4 = c3 * tv1
127
+ // const e1 = Fp.eql(Fp.sqr(tv2), n); // 5. e1 = (tv2^2) == x
128
+ // const e2 = Fp.eql(Fp.sqr(tv3), n); // 6. e2 = (tv3^2) == x
129
+ // tv1 = Fp.cmov(tv1, tv2, e1); // 7. tv1 = CMOV(tv1, tv2, e1) # Select tv2 if (tv2^2) == x
130
+ // tv2 = Fp.cmov(tv4, tv3, e2); // 8. tv2 = CMOV(tv4, tv3, e2) # Select tv3 if (tv3^2) == x
131
+ // const e3 = Fp.eql(Fp.sqr(tv2), n); // 9. e3 = (tv2^2) == x
132
+ // return Fp.cmov(tv1, tv2, e3); // 10. z = CMOV(tv1, tv2, e3) # Select the sqrt from tv1 and tv2
133
+ // }
104
134
  /**
105
135
  * Tonelli-Shanks square root search algorithm.
106
136
  * 1. https://eprint.iacr.org/2012/685.pdf (page 12)
@@ -109,131 +139,88 @@ function invert(number, modulo) {
109
139
  * @returns function that takes field Fp (created from P) and number n
110
140
  */
111
141
  function tonelliShanks(P) {
112
- // Do expensive precomputation step
113
- // Step 1: By factoring out powers of 2 from p - 1,
114
- // find q and s such that p-1 == q*(2^s) with q odd
142
+ // Initialization (precomputation).
143
+ if (P < BigInt(3))
144
+ throw new Error('sqrt is not defined for small field');
145
+ // Factor P - 1 = Q * 2^S, where Q is odd
115
146
  let Q = P - _1n;
116
147
  let S = 0;
117
148
  while (Q % _2n === _0n) {
118
149
  Q /= _2n;
119
150
  S++;
120
151
  }
121
- // Step 2: Select a non-square z such that (z | p) ≡ -1 and set c ≡ zq
152
+ // Find the first quadratic non-residue Z >= 2
122
153
  let Z = _2n;
123
154
  const _Fp = Field(P);
124
- while (Z < P && FpIsSquare(_Fp, Z)) {
155
+ while (FpLegendre(_Fp, Z) === 1) {
156
+ // Basic primality test for P. After x iterations, chance of
157
+ // not finding quadratic non-residue is 2^x, so 2^1000.
125
158
  if (Z++ > 1000)
126
159
  throw new Error('Cannot find square root: probably non-prime P');
127
160
  }
128
- // Fast-path
129
- if (S === 1) {
130
- const p1div4 = (P + _1n) / _4n;
131
- return function tonelliFast(Fp, n) {
132
- const root = Fp.pow(n, p1div4);
133
- if (!Fp.eql(Fp.sqr(root), n))
134
- throw new Error('Cannot find square root');
135
- return root;
136
- };
137
- }
161
+ // Fast-path; usually done before Z, but we do "primality test".
162
+ if (S === 1)
163
+ return sqrt3mod4;
138
164
  // Slow-path
165
+ // TODO: test on Fp2 and others
166
+ let cc = _Fp.pow(Z, Q); // c = z^Q
139
167
  const Q1div2 = (Q + _1n) / _2n;
140
168
  return function tonelliSlow(Fp, n) {
141
- // Step 0: Check that n is indeed a square: (n | p) should not be ≡ -1
142
- if (!FpIsSquare(Fp, n))
169
+ if (Fp.is0(n))
170
+ return n;
171
+ // Check if n is a quadratic residue using Legendre symbol
172
+ if (FpLegendre(Fp, n) !== 1)
143
173
  throw new Error('Cannot find square root');
144
- let r = S;
145
- // TODO: test on Fp2 and others
146
- let g = Fp.pow(Fp.mul(Fp.ONE, Z), Q); // will update both x and b
147
- let x = Fp.pow(n, Q1div2); // first guess at the square root
148
- let b = Fp.pow(n, Q); // first guess at the fudge factor
149
- while (!Fp.eql(b, Fp.ONE)) {
150
- // (4. If t = 0, return r = 0)
151
- // https://en.wikipedia.org/wiki/Tonelli%E2%80%93Shanks_algorithm
152
- if (Fp.eql(b, Fp.ZERO))
153
- return Fp.ZERO;
154
- // Find m such b^(2^m)==1
155
- let m = 1;
156
- for (let t2 = Fp.sqr(b); m < r; m++) {
157
- if (Fp.eql(t2, Fp.ONE))
158
- break;
159
- t2 = Fp.sqr(t2); // t2 *= t2
174
+ // Initialize variables for the main loop
175
+ let M = S;
176
+ let c = Fp.mul(Fp.ONE, cc); // c = z^Q, move cc from field _Fp into field Fp
177
+ let t = Fp.pow(n, Q); // t = n^Q, first guess at the fudge factor
178
+ let R = Fp.pow(n, Q1div2); // R = n^((Q+1)/2), first guess at the square root
179
+ // Main loop
180
+ // while t != 1
181
+ while (!Fp.eql(t, Fp.ONE)) {
182
+ if (Fp.is0(t))
183
+ return Fp.ZERO; // if t=0 return R=0
184
+ let i = 1;
185
+ // Find the smallest i >= 1 such that t^(2^i) ≡ 1 (mod P)
186
+ let t_tmp = Fp.sqr(t); // t^(2^1)
187
+ while (!Fp.eql(t_tmp, Fp.ONE)) {
188
+ i++;
189
+ t_tmp = Fp.sqr(t_tmp); // t^(2^2)...
190
+ if (i === M)
191
+ throw new Error('Cannot find square root');
160
192
  }
161
- // NOTE: r-m-1 can be bigger than 32, need to convert to bigint before shift,
162
- // otherwise there will be overflow.
163
- const ge = Fp.pow(g, _1n << BigInt(r - m - 1)); // ge = 2^(r-m-1)
164
- g = Fp.sqr(ge); // g = ge * ge
165
- x = Fp.mul(x, ge); // x *= ge
166
- b = Fp.mul(b, g); // b *= g
167
- r = m;
193
+ // Calculate the exponent for b: 2^(M - i - 1)
194
+ const exponent = _1n << BigInt(M - i - 1); // bigint is important
195
+ const b = Fp.pow(c, exponent); // b = 2^(M - i - 1)
196
+ // Update variables
197
+ M = i;
198
+ c = Fp.sqr(b); // c = b^2
199
+ t = Fp.mul(t, c); // t = (t * b^2)
200
+ R = Fp.mul(R, b); // R = R*b
168
201
  }
169
- return x;
202
+ return R;
170
203
  };
171
204
  }
172
205
  /**
173
- * Square root for a finite field. It will try to check if optimizations are applicable and fall back to 4:
206
+ * Square root for a finite field. Will try optimized versions first:
174
207
  *
175
208
  * 1. P ≡ 3 (mod 4)
176
209
  * 2. P ≡ 5 (mod 8)
177
- * 3. P ≡ 9 (mod 16)
178
- * 4. Tonelli-Shanks algorithm
210
+ * 3. Tonelli-Shanks algorithm
179
211
  *
180
212
  * Different algorithms can give different roots, it is up to user to decide which one they want.
181
213
  * For example there is FpSqrtOdd/FpSqrtEven to choice root based on oddness (used for hash-to-curve).
182
214
  */
183
215
  function FpSqrt(P) {
184
- // P ≡ 3 (mod 4)
185
- // √n = n^((P+1)/4)
186
- if (P % _4n === _3n) {
187
- // Not all roots possible!
188
- // const ORDER =
189
- // 0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaabn;
190
- // const NUM = 72057594037927816n;
191
- return function sqrt3mod4(Fp, n) {
192
- const p1div4 = (P + _1n) / _4n;
193
- const root = Fp.pow(n, p1div4);
194
- // Throw if root**2 != n
195
- if (!Fp.eql(Fp.sqr(root), n))
196
- throw new Error('Cannot find square root');
197
- return root;
198
- };
199
- }
200
- // Atkin algorithm for q ≡ 5 (mod 8), https://eprint.iacr.org/2012/685.pdf (page 10)
201
- if (P % _8n === _5n) {
202
- return function sqrt5mod8(Fp, n) {
203
- const n2 = Fp.mul(n, _2n);
204
- const c1 = (P - _5n) / _8n;
205
- const v = Fp.pow(n2, c1);
206
- const nv = Fp.mul(n, v);
207
- const i = Fp.mul(Fp.mul(nv, _2n), v);
208
- const root = Fp.mul(nv, Fp.sub(i, Fp.ONE));
209
- if (!Fp.eql(Fp.sqr(root), n))
210
- throw new Error('Cannot find square root');
211
- return root;
212
- };
213
- }
214
- // P ≡ 9 (mod 16)
215
- if (P % _16n === _9n) {
216
- // NOTE: tonelli is too slow for bls-Fp2 calculations even on start
217
- // Means we cannot use sqrt for constants at all!
218
- //
219
- // const c1 = Fp.sqrt(Fp.negate(Fp.ONE)); // 1. c1 = sqrt(-1) in F, i.e., (c1^2) == -1 in F
220
- // const c2 = Fp.sqrt(c1); // 2. c2 = sqrt(c1) in F, i.e., (c2^2) == c1 in F
221
- // const c3 = Fp.sqrt(Fp.negate(c1)); // 3. c3 = sqrt(-c1) in F, i.e., (c3^2) == -c1 in F
222
- // const c4 = (P + _7n) / _16n; // 4. c4 = (q + 7) / 16 # Integer arithmetic
223
- // sqrt = (x) => {
224
- // let tv1 = Fp.pow(x, c4); // 1. tv1 = x^c4
225
- // let tv2 = Fp.mul(c1, tv1); // 2. tv2 = c1 * tv1
226
- // const tv3 = Fp.mul(c2, tv1); // 3. tv3 = c2 * tv1
227
- // let tv4 = Fp.mul(c3, tv1); // 4. tv4 = c3 * tv1
228
- // const e1 = Fp.equals(Fp.square(tv2), x); // 5. e1 = (tv2^2) == x
229
- // const e2 = Fp.equals(Fp.square(tv3), x); // 6. e2 = (tv3^2) == x
230
- // tv1 = Fp.cmov(tv1, tv2, e1); // 7. tv1 = CMOV(tv1, tv2, e1) # Select tv2 if (tv2^2) == x
231
- // tv2 = Fp.cmov(tv4, tv3, e2); // 8. tv2 = CMOV(tv4, tv3, e2) # Select tv3 if (tv3^2) == x
232
- // const e3 = Fp.equals(Fp.square(tv2), x); // 9. e3 = (tv2^2) == x
233
- // return Fp.cmov(tv1, tv2, e3); // 10. z = CMOV(tv1, tv2, e3) # Select the sqrt from tv1 and tv2
234
- // }
235
- }
236
- // Other cases: Tonelli-Shanks algorithm
216
+ // P ≡ 3 (mod 4) => √n = n^((P+1)/4)
217
+ if (P % _4n === _3n)
218
+ return sqrt3mod4;
219
+ // P 5 (mod 8) => Atkin algorithm, page 10 of https://eprint.iacr.org/2012/685.pdf
220
+ if (P % _8n === _5n)
221
+ return sqrt5mod8;
222
+ // P 9 (mod 16) not implemented, see above
223
+ // Tonelli-Shanks algorithm
237
224
  return tonelliShanks(P);
238
225
  }
239
226
  // Little-endian check for first LE bit (last BE bit);
@@ -270,7 +257,6 @@ function FpPow(Fp, num, power) {
270
257
  return Fp.ONE;
271
258
  if (power === _1n)
272
259
  return num;
273
- // @ts-ignore
274
260
  let p = Fp.ONE;
275
261
  let d = num;
276
262
  while (power > _0n) {
@@ -313,26 +299,28 @@ function FpDiv(Fp, lhs, rhs) {
313
299
  /**
314
300
  * Legendre symbol.
315
301
  * Legendre constant is used to calculate Legendre symbol (a | p)
316
- * which denotes the value of a^((p-1)/2) (mod p)..
302
+ * which denotes the value of a^((p-1)/2) (mod p).
317
303
  *
318
304
  * * (a | p) ≡ 1 if a is a square (mod p), quadratic residue
319
305
  * * (a | p) ≡ -1 if a is not a square (mod p), quadratic non residue
320
306
  * * (a | p) ≡ 0 if a ≡ 0 (mod p)
321
307
  */
322
308
  function FpLegendre(Fp, n) {
323
- const legc = (Fp.ORDER - _1n) / _2n;
324
- const powered = Fp.pow(n, legc);
309
+ // We can use 3rd argument as optional cache of this value
310
+ // but seems unneeded for now. The operation is very fast.
311
+ const p1mod2 = (Fp.ORDER - _1n) / _2n;
312
+ const powered = Fp.pow(n, p1mod2);
325
313
  const yes = Fp.eql(powered, Fp.ONE);
326
314
  const zero = Fp.eql(powered, Fp.ZERO);
327
315
  const no = Fp.eql(powered, Fp.neg(Fp.ONE));
328
316
  if (!yes && !zero && !no)
329
- throw new Error('Cannot find square root: probably non-prime P');
317
+ throw new Error('invalid Legendre symbol result');
330
318
  return yes ? 1 : zero ? 0 : -1;
331
319
  }
332
320
  // This function returns True whenever the value x is a square in the field F.
333
321
  function FpIsSquare(Fp, n) {
334
322
  const l = FpLegendre(Fp, n);
335
- return l === 0 || l === 1;
323
+ return l === 1;
336
324
  }
337
325
  // CURVE.n lengths
338
326
  function nLength(n, nBitLength) {
@@ -1 +1 @@
1
- {"version":3,"file":"modular.js","sourceRoot":"","sources":["../src/abstract/modular.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"modular.js","sourceRoot":"","sources":["../src/abstract/modular.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,10 @@
1
1
  type Hex = string | Uint8Array;
2
2
  export type CurveType = {
3
3
  P: bigint;
4
- nByteLength: number;
5
- adjustScalarBytes?: (bytes: Uint8Array) => Uint8Array;
6
- domain?: (data: Uint8Array, ctx: Uint8Array, phflag: boolean) => Uint8Array;
7
- a: bigint;
8
- montgomeryBits: number;
9
- powPminus2?: (x: bigint) => bigint;
10
- xyToU?: (x: bigint, y: bigint) => bigint;
11
- Gu: bigint;
12
- randomBytes?: (bytesLength?: number) => Uint8Array;
4
+ type: 'x25519' | 'x448';
5
+ adjustScalarBytes: (bytes: Uint8Array) => Uint8Array;
6
+ powPminus2: (x: bigint) => bigint;
7
+ randomBytes: (bytesLength?: number) => Uint8Array;
13
8
  };
14
9
  export type CurveFn = {
15
10
  scalarMult: (scalar: Hex, u: Hex) => Uint8Array;
@@ -1 +1 @@
1
- {"version":3,"file":"montgomery.d.ts","sourceRoot":"","sources":["../src/abstract/montgomery.ts"],"names":[],"mappings":"AAkBA,KAAK,GAAG,GAAG,MAAM,GAAG,UAAU,CAAC;AAE/B,MAAM,MAAM,SAAS,GAAG;IACtB,CAAC,EAAE,MAAM,CAAC;IACV,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,UAAU,CAAC;IACtD,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,KAAK,UAAU,CAAC;IAC5E,CAAC,EAAE,MAAM,CAAC;IACV,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IACnC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IACzC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,MAAM,KAAK,UAAU,CAAC;CACpD,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG;IACpB,UAAU,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,KAAK,UAAU,CAAC;IAChD,cAAc,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,UAAU,CAAC;IAC5C,eAAe,EAAE,CAAC,WAAW,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,KAAK,UAAU,CAAC;IACnE,YAAY,EAAE,CAAC,UAAU,EAAE,GAAG,KAAK,UAAU,CAAC;IAC9C,KAAK,EAAE;QAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;KAAE,CAAC;IAC9C,OAAO,EAAE,UAAU,CAAC;CACrB,CAAC;AAsBF,wBAAgB,UAAU,CAAC,QAAQ,EAAE,SAAS,GAAG,OAAO,CAsIvD"}
1
+ {"version":3,"file":"montgomery.d.ts","sourceRoot":"","sources":["../src/abstract/montgomery.ts"],"names":[],"mappings":"AAmBA,KAAK,GAAG,GAAG,MAAM,GAAG,UAAU,CAAC;AAE/B,MAAM,MAAM,SAAS,GAAG;IACtB,CAAC,EAAE,MAAM,CAAC;IACV,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAC;IACxB,iBAAiB,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,UAAU,CAAC;IACrD,UAAU,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAClC,WAAW,EAAE,CAAC,WAAW,CAAC,EAAE,MAAM,KAAK,UAAU,CAAC;CACnD,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG;IACpB,UAAU,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,KAAK,UAAU,CAAC;IAChD,cAAc,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,UAAU,CAAC;IAC5C,eAAe,EAAE,CAAC,WAAW,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,KAAK,UAAU,CAAC;IACnE,YAAY,EAAE,CAAC,UAAU,EAAE,GAAG,KAAK,UAAU,CAAC;IAC9C,KAAK,EAAE;QAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;KAAE,CAAC;IAC9C,OAAO,EAAE,UAAU,CAAC;CACrB,CAAC;AAUF,wBAAgB,UAAU,CAAC,QAAQ,EAAE,SAAS,GAAG,OAAO,CAsHvD"}
@@ -12,61 +12,88 @@ const modular_ts_1 = require("./modular.js");
12
12
  const utils_ts_1 = require("./utils.js");
13
13
  const _0n = BigInt(0);
14
14
  const _1n = BigInt(1);
15
+ const _2n = BigInt(2);
15
16
  function validateOpts(curve) {
16
17
  (0, utils_ts_1.validateObject)(curve, {
17
- a: 'bigint',
18
- }, {
19
- montgomeryBits: 'isSafeInteger',
20
- nByteLength: 'isSafeInteger',
21
18
  adjustScalarBytes: 'function',
22
- domain: 'function',
23
19
  powPminus2: 'function',
24
- Gu: 'bigint',
25
20
  });
26
- // Set defaults
27
21
  return Object.freeze({ ...curve });
28
22
  }
29
- // Uses only one coordinate instead of two
30
23
  function montgomery(curveDef) {
31
24
  const CURVE = validateOpts(curveDef);
32
- const { P } = CURVE;
33
- const Fp = (0, modular_ts_1.Field)(P);
25
+ const { P, type, adjustScalarBytes, powPminus2 } = CURVE;
26
+ const is25519 = type === 'x25519';
27
+ if (!is25519 && type !== 'x448')
28
+ throw new Error('invalid type');
29
+ const montgomeryBits = is25519 ? 255 : 448;
30
+ const fieldLen = is25519 ? 32 : 56;
31
+ const Gu = is25519 ? BigInt(9) : BigInt(5);
32
+ // RFC 7748 #5:
33
+ // The constant a24 is (486662 - 2) / 4 = 121665 for curve25519/X25519 and
34
+ // (156326 - 2) / 4 = 39081 for curve448/X448
35
+ // const a = is25519 ? 156326n : 486662n;
36
+ const a24 = is25519 ? BigInt(121665) : BigInt(39081);
37
+ // RFC: x25519 "the resulting integer is of the form 2^254 plus
38
+ // eight times a value between 0 and 2^251 - 1 (inclusive)"
39
+ // x448: "2^447 plus four times a value between 0 and 2^445 - 1 (inclusive)"
40
+ const minScalar = is25519 ? _2n ** BigInt(254) : _2n ** BigInt(447);
41
+ const maxAdded = is25519
42
+ ? BigInt(8) * _2n ** BigInt(251) - _1n
43
+ : BigInt(4) * _2n ** BigInt(445) - _1n;
44
+ const maxScalar = minScalar + maxAdded + _1n; // (inclusive)
34
45
  const modP = (n) => (0, modular_ts_1.mod)(n, P);
35
- const montgomeryBits = CURVE.montgomeryBits;
36
- const montgomeryBytes = Math.ceil(montgomeryBits / 8);
37
- const fieldLen = CURVE.nByteLength;
38
- const adjustScalarBytes = CURVE.adjustScalarBytes || ((bytes) => bytes);
39
- const powPminus2 = CURVE.powPminus2 || ((x) => Fp.pow(x, P - BigInt(2)));
40
- // cswap from RFC7748. But it is not from RFC7748!
41
- /*
42
- cswap(swap, x_2, x_3):
43
- dummy = mask(swap) AND (x_2 XOR x_3)
44
- x_2 = x_2 XOR dummy
45
- x_3 = x_3 XOR dummy
46
- Return (x_2, x_3)
47
- Where mask(swap) is the all-1 or all-0 word of the same length as x_2
48
- and x_3, computed, e.g., as mask(swap) = 0 - swap.
49
- */
46
+ const GuBytes = encodeU(Gu);
47
+ function encodeU(u) {
48
+ return (0, utils_ts_1.numberToBytesLE)(modP(u), fieldLen);
49
+ }
50
+ function decodeU(u) {
51
+ const _u = (0, utils_ts_1.ensureBytes)('u coordinate', u, fieldLen);
52
+ // RFC: When receiving such an array, implementations of X25519
53
+ // (but not X448) MUST mask the most significant bit in the final byte.
54
+ if (is25519)
55
+ _u[31] &= 127; // 0b0111_1111
56
+ // RFC: Implementations MUST accept non-canonical values and process them as
57
+ // if they had been reduced modulo the field prime. The non-canonical
58
+ // values are 2^255 - 19 through 2^255 - 1 for X25519 and 2^448 - 2^224
59
+ // - 1 through 2^448 - 1 for X448.
60
+ return modP((0, utils_ts_1.bytesToNumberLE)(_u));
61
+ }
62
+ function decodeScalar(scalar) {
63
+ return (0, utils_ts_1.bytesToNumberLE)(adjustScalarBytes((0, utils_ts_1.ensureBytes)('scalar', scalar, fieldLen)));
64
+ }
65
+ function scalarMult(scalar, u) {
66
+ const pu = montgomeryLadder(decodeU(u), decodeScalar(scalar));
67
+ // Some public keys are useless, of low-order. Curve author doesn't think
68
+ // it needs to be validated, but we do it nonetheless.
69
+ // https://cr.yp.to/ecdh.html#validate
70
+ if (pu === _0n)
71
+ throw new Error('invalid private or public key received');
72
+ return encodeU(pu);
73
+ }
74
+ // Computes public key from private. By doing scalar multiplication of base point.
75
+ function scalarMultBase(scalar) {
76
+ return scalarMult(scalar, GuBytes);
77
+ }
78
+ // cswap from RFC7748 "example code"
50
79
  function cswap(swap, x_2, x_3) {
80
+ // dummy = mask(swap) AND (x_2 XOR x_3)
81
+ // Where mask(swap) is the all-1 or all-0 word of the same length as x_2
82
+ // and x_3, computed, e.g., as mask(swap) = 0 - swap.
51
83
  const dummy = modP(swap * (x_2 - x_3));
52
- x_2 = modP(x_2 - dummy);
53
- x_3 = modP(x_3 + dummy);
54
- return [x_2, x_3];
84
+ x_2 = modP(x_2 - dummy); // x_2 = x_2 XOR dummy
85
+ x_3 = modP(x_3 + dummy); // x_3 = x_3 XOR dummy
86
+ return { x_2, x_3 };
55
87
  }
56
- // x25519 from 4
57
- // The constant a24 is (486662 - 2) / 4 = 121665 for curve25519/X25519
58
- const a24 = (CURVE.a - BigInt(2)) / BigInt(4);
59
88
  /**
60
- *
89
+ * Montgomery x-only multiplication ladder.
61
90
  * @param pointU u coordinate (x) on Montgomery Curve 25519
62
91
  * @param scalar by which the point would be multiplied
63
92
  * @returns new Point on Montgomery curve
64
93
  */
65
94
  function montgomeryLadder(u, scalar) {
66
95
  (0, utils_ts_1.aInRange)('u', u, _0n, P);
67
- (0, utils_ts_1.aInRange)('scalar', scalar, _0n, P);
68
- // Section 5: Implementations MUST accept non-canonical values and process them as
69
- // if they had been reduced modulo the field prime.
96
+ (0, utils_ts_1.aInRange)('scalar', scalar, minScalar, maxScalar);
70
97
  const k = scalar;
71
98
  const x_1 = u;
72
99
  let x_2 = _1n;
@@ -74,16 +101,11 @@ function montgomery(curveDef) {
74
101
  let x_3 = u;
75
102
  let z_3 = _1n;
76
103
  let swap = _0n;
77
- let sw;
78
104
  for (let t = BigInt(montgomeryBits - 1); t >= _0n; t--) {
79
105
  const k_t = (k >> t) & _1n;
80
106
  swap ^= k_t;
81
- sw = cswap(swap, x_2, x_3);
82
- x_2 = sw[0];
83
- x_3 = sw[1];
84
- sw = cswap(swap, z_2, z_3);
85
- z_2 = sw[0];
86
- z_3 = sw[1];
107
+ ({ x_2, x_3 } = cswap(swap, x_2, x_3));
108
+ ({ x_2: z_2, x_3: z_3 } = cswap(swap, z_2, z_3));
87
109
  swap = k_t;
88
110
  const A = x_2 + z_2;
89
111
  const AA = modP(A * A);
@@ -101,61 +123,18 @@ function montgomery(curveDef) {
101
123
  x_2 = modP(AA * BB);
102
124
  z_2 = modP(E * (AA + modP(a24 * E)));
103
125
  }
104
- // (x_2, x_3) = cswap(swap, x_2, x_3)
105
- sw = cswap(swap, x_2, x_3);
106
- x_2 = sw[0];
107
- x_3 = sw[1];
108
- // (z_2, z_3) = cswap(swap, z_2, z_3)
109
- sw = cswap(swap, z_2, z_3);
110
- z_2 = sw[0];
111
- z_3 = sw[1];
112
- // z_2^(p - 2)
113
- const z2 = powPminus2(z_2);
114
- // Return x_2 * (z_2^(p - 2))
115
- return modP(x_2 * z2);
116
- }
117
- function encodeUCoordinate(u) {
118
- return (0, utils_ts_1.numberToBytesLE)(modP(u), montgomeryBytes);
119
- }
120
- function decodeUCoordinate(uEnc) {
121
- // Section 5: When receiving such an array, implementations of X25519
122
- // MUST mask the most significant bit in the final byte.
123
- const u = (0, utils_ts_1.ensureBytes)('u coordinate', uEnc, montgomeryBytes);
124
- if (fieldLen === 32)
125
- u[31] &= 127; // 0b0111_1111
126
- return (0, utils_ts_1.bytesToNumberLE)(u);
127
- }
128
- function decodeScalar(n) {
129
- const bytes = (0, utils_ts_1.ensureBytes)('scalar', n);
130
- const len = bytes.length;
131
- if (len !== montgomeryBytes && len !== fieldLen) {
132
- let valid = '' + montgomeryBytes + ' or ' + fieldLen;
133
- throw new Error('invalid scalar, expected ' + valid + ' bytes, got ' + len);
134
- }
135
- return (0, utils_ts_1.bytesToNumberLE)(adjustScalarBytes(bytes));
136
- }
137
- function scalarMult(scalar, u) {
138
- const pointU = decodeUCoordinate(u);
139
- const _scalar = decodeScalar(scalar);
140
- const pu = montgomeryLadder(pointU, _scalar);
141
- // The result was not contributory
142
- // https://cr.yp.to/ecdh.html#validate
143
- if (pu === _0n)
144
- throw new Error('invalid private or public key received');
145
- return encodeUCoordinate(pu);
146
- }
147
- // Computes public key from private. By doing scalar multiplication of base point.
148
- const GuBytes = encodeUCoordinate(CURVE.Gu);
149
- function scalarMultBase(scalar) {
150
- return scalarMult(scalar, GuBytes);
126
+ ({ x_2, x_3 } = cswap(swap, x_2, x_3));
127
+ ({ x_2: z_2, x_3: z_3 } = cswap(swap, z_2, z_3));
128
+ const z2 = powPminus2(z_2); // `Fp.pow(x, P - _2n)` is much slower equivalent
129
+ return modP(x_2 * z2); // Return x_2 * (z_2^(p - 2))
151
130
  }
152
131
  return {
153
132
  scalarMult,
154
133
  scalarMultBase,
155
134
  getSharedSecret: (privateKey, publicKey) => scalarMult(privateKey, publicKey),
156
135
  getPublicKey: (privateKey) => scalarMultBase(privateKey),
157
- utils: { randomPrivateKey: () => CURVE.randomBytes(CURVE.nByteLength) },
158
- GuBytes: GuBytes,
136
+ utils: { randomPrivateKey: () => CURVE.randomBytes(fieldLen) },
137
+ GuBytes: GuBytes.slice(),
159
138
  };
160
139
  }
161
140
  //# sourceMappingURL=montgomery.js.map