@noble/curves 2.0.1 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/README.md +214 -122
  2. package/abstract/bls.d.ts +299 -16
  3. package/abstract/bls.d.ts.map +1 -1
  4. package/abstract/bls.js +82 -22
  5. package/abstract/bls.js.map +1 -1
  6. package/abstract/curve.d.ts +274 -27
  7. package/abstract/curve.d.ts.map +1 -1
  8. package/abstract/curve.js +177 -23
  9. package/abstract/curve.js.map +1 -1
  10. package/abstract/edwards.d.ts +166 -30
  11. package/abstract/edwards.d.ts.map +1 -1
  12. package/abstract/edwards.js +221 -86
  13. package/abstract/edwards.js.map +1 -1
  14. package/abstract/fft.d.ts +322 -10
  15. package/abstract/fft.d.ts.map +1 -1
  16. package/abstract/fft.js +154 -12
  17. package/abstract/fft.js.map +1 -1
  18. package/abstract/frost.d.ts +293 -0
  19. package/abstract/frost.d.ts.map +1 -0
  20. package/abstract/frost.js +704 -0
  21. package/abstract/frost.js.map +1 -0
  22. package/abstract/hash-to-curve.d.ts +173 -24
  23. package/abstract/hash-to-curve.d.ts.map +1 -1
  24. package/abstract/hash-to-curve.js +170 -31
  25. package/abstract/hash-to-curve.js.map +1 -1
  26. package/abstract/modular.d.ts +429 -37
  27. package/abstract/modular.d.ts.map +1 -1
  28. package/abstract/modular.js +414 -119
  29. package/abstract/modular.js.map +1 -1
  30. package/abstract/montgomery.d.ts +83 -12
  31. package/abstract/montgomery.d.ts.map +1 -1
  32. package/abstract/montgomery.js +32 -7
  33. package/abstract/montgomery.js.map +1 -1
  34. package/abstract/oprf.d.ts +164 -91
  35. package/abstract/oprf.d.ts.map +1 -1
  36. package/abstract/oprf.js +88 -29
  37. package/abstract/oprf.js.map +1 -1
  38. package/abstract/poseidon.d.ts +138 -7
  39. package/abstract/poseidon.d.ts.map +1 -1
  40. package/abstract/poseidon.js +178 -15
  41. package/abstract/poseidon.js.map +1 -1
  42. package/abstract/tower.d.ts +122 -3
  43. package/abstract/tower.d.ts.map +1 -1
  44. package/abstract/tower.js +323 -139
  45. package/abstract/tower.js.map +1 -1
  46. package/abstract/weierstrass.d.ts +339 -76
  47. package/abstract/weierstrass.d.ts.map +1 -1
  48. package/abstract/weierstrass.js +395 -205
  49. package/abstract/weierstrass.js.map +1 -1
  50. package/bls12-381.d.ts +16 -2
  51. package/bls12-381.d.ts.map +1 -1
  52. package/bls12-381.js +199 -209
  53. package/bls12-381.js.map +1 -1
  54. package/bn254.d.ts +11 -2
  55. package/bn254.d.ts.map +1 -1
  56. package/bn254.js +93 -38
  57. package/bn254.js.map +1 -1
  58. package/ed25519.d.ts +125 -14
  59. package/ed25519.d.ts.map +1 -1
  60. package/ed25519.js +202 -40
  61. package/ed25519.js.map +1 -1
  62. package/ed448.d.ts +108 -14
  63. package/ed448.d.ts.map +1 -1
  64. package/ed448.js +194 -42
  65. package/ed448.js.map +1 -1
  66. package/index.js +7 -1
  67. package/index.js.map +1 -1
  68. package/misc.d.ts +106 -7
  69. package/misc.d.ts.map +1 -1
  70. package/misc.js +141 -32
  71. package/misc.js.map +1 -1
  72. package/nist.d.ts +112 -11
  73. package/nist.d.ts.map +1 -1
  74. package/nist.js +139 -17
  75. package/nist.js.map +1 -1
  76. package/package.json +11 -6
  77. package/secp256k1.d.ts +92 -15
  78. package/secp256k1.d.ts.map +1 -1
  79. package/secp256k1.js +211 -28
  80. package/secp256k1.js.map +1 -1
  81. package/src/abstract/bls.ts +350 -67
  82. package/src/abstract/curve.ts +327 -44
  83. package/src/abstract/edwards.ts +367 -143
  84. package/src/abstract/fft.ts +369 -36
  85. package/src/abstract/frost.ts +1092 -0
  86. package/src/abstract/hash-to-curve.ts +255 -56
  87. package/src/abstract/modular.ts +591 -144
  88. package/src/abstract/montgomery.ts +114 -30
  89. package/src/abstract/oprf.ts +383 -194
  90. package/src/abstract/poseidon.ts +235 -35
  91. package/src/abstract/tower.ts +428 -159
  92. package/src/abstract/weierstrass.ts +710 -312
  93. package/src/bls12-381.ts +239 -236
  94. package/src/bn254.ts +107 -46
  95. package/src/ed25519.ts +227 -55
  96. package/src/ed448.ts +227 -57
  97. package/src/index.ts +7 -1
  98. package/src/misc.ts +154 -35
  99. package/src/nist.ts +143 -20
  100. package/src/secp256k1.ts +284 -41
  101. package/src/utils.ts +583 -81
  102. package/src/webcrypto.ts +302 -73
  103. package/utils.d.ts +457 -24
  104. package/utils.d.ts.map +1 -1
  105. package/utils.js +410 -53
  106. package/utils.js.map +1 -1
  107. package/webcrypto.d.ts +167 -25
  108. package/webcrypto.d.ts.map +1 -1
  109. package/webcrypto.js +165 -58
  110. package/webcrypto.js.map +1 -1
package/bls12-381.js CHANGED
@@ -90,7 +90,8 @@ import { mapToCurveSimpleSWU, weierstrass, } from "./abstract/weierstrass.js";
90
90
  const _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _3n = BigInt(3), _4n = BigInt(4);
91
91
  // To verify math:
92
92
  // https://tools.ietf.org/html/draft-irtf-cfrg-pairing-friendly-curves-11
93
- // The BLS parameter x (seed) for BLS12-381. NOTE: it is negative!
93
+ // The BLS parameter x (seed) for BLS12-381. The stored constant is `|x|`; call
94
+ // sites that need the signed parameter apply the minus sign themselves.
94
95
  // x = -2^63 - 2^62 - 2^60 - 2^57 - 2^48 - 2^16
95
96
  const BLS_X = BigInt('0xd201000000010000');
96
97
  // t = x (called differently in different places)
@@ -104,7 +105,7 @@ const BLS_X_LEN = bitLen(BLS_X);
104
105
  // where r is order of prime subgroup and h is cofactor.
105
106
  // r = t⁴-t²+1
106
107
  // r = (t**4n - t**2n + 1n)
107
- // cofactor h of G1: (t - 1)²/3
108
+ // cofactor h of G1: (t - 1)²/3, with the signed convention `t = -x`
108
109
  // cofactorG1 = (t-1n)**2n/3n
109
110
  // x = 3685416753713387016781088315183077757961620795782546409894578378688607592378376318836054947676345821548104185464507
110
111
  // y = 1339506544944476473020471379941921221584933875938349620426543736416511423956333506472724655353366534992391756441569
@@ -119,7 +120,10 @@ const bls12_381_CURVE_G1 = {
119
120
  };
120
121
  // CURVE FIELDS
121
122
  // r = z⁴ − z² + 1; CURVE.n from other curves
122
- /** bls12-381 Fr (Fn) field. Note: does mod() on fromBytes, due to modFromBytes option. */
123
+ /**
124
+ * bls12-381 Fr (Fn) field.
125
+ * `fromBytes()` reduces modulo `q` instead of rejecting non-canonical encodings.
126
+ */
123
127
  export const bls12_381_Fr = Field(bls12_381_CURVE_G1.n, {
124
128
  modFromBytes: true,
125
129
  });
@@ -128,6 +132,8 @@ const { Fp, Fp2, Fp6, Fp12 } = tower12({
128
132
  X_LEN: BLS_X_LEN,
129
133
  // Finite extension field over irreducible polynominal.
130
134
  // Fp(u) / (u² - β) where β = -1
135
+ // Public `Fp2.NONRESIDUE` below is the sextic-tower value `(1, 1) = u + 1`;
136
+ // the quadratic non-residue for the base Fp2 construction is still `-1`.
131
137
  FP2_NONRESIDUE: [_1n, _1n],
132
138
  Fp2mulByB: ({ c0, c1 }) => {
133
139
  const t0 = Fp.mul(c0, _4n); // 4 * c0
@@ -155,14 +161,30 @@ const { Fp, Fp2, Fp6, Fp12 } = tower12({
155
161
  return Fp12.mul(Fp12.mul(Fp12.mul(t2_t5_pow_q2, t4_t1_pow_q3), t6_t1c_pow_q1), t7_t3c_t1);
156
162
  },
157
163
  });
158
- // GLV endomorphism Ψ(P), for fast cofactor clearing
159
- const { G2psi, G2psi2 } = psiFrobenius(Fp, Fp2, Fp2.div(Fp2.ONE, Fp2.NONRESIDUE)); // 1/(u+1)
164
+ // GLV endomorphism Ψ(P), for fast cofactor clearing. `Fp2.NONRESIDUE` here is
165
+ // the tower value `u + 1`, so the Frobenius base passed to psiFrobenius is
166
+ // `1 / (u + 1)`, and psi2 derives the published `1 / 2^((p - 1) / 3)` constant internally.
167
+ let frob;
168
+ const getFrob = () => frob || (frob = psiFrobenius(Fp, Fp2, Fp2.div(Fp2.ONE, Fp2.NONRESIDUE)));
169
+ // Eager psiFrobenius setup now dominates `bls12-381.js` import, so defer it to
170
+ // first use. After that these locals are rewritten to the direct helper refs.
171
+ let G2psi = (c, P) => {
172
+ const fn = getFrob().G2psi;
173
+ G2psi = fn;
174
+ return fn(c, P);
175
+ };
176
+ let G2psi2 = (c, P) => {
177
+ const fn = getFrob().G2psi2;
178
+ G2psi2 = fn;
179
+ return fn(c, P);
180
+ };
160
181
  /**
161
182
  * Default hash_to_field / hash-to-curve for BLS.
162
183
  * m: 1 for G1, 2 for G2
163
184
  * k: target security level in bits
164
185
  * hash: any function, e.g. BBS+ uses BLAKE2: see [github](https://github.com/hyperledger/aries-framework-go/issues/2247).
165
- * Parameter values come from [section 8.8.2 of RFC 9380](https://www.rfc-editor.org/rfc/rfc9380#section-8.8.2).
186
+ * Field/hash parameters come from [section 8.8.2 of RFC 9380](https://www.rfc-editor.org/rfc/rfc9380#section-8.8.2),
187
+ * but the `DST` / `encodeDST` strings below are the BLS-signature-suite override.
166
188
  */
167
189
  const hasher_opts = Object.freeze({
168
190
  DST: 'BLS_SIG_BLS12381G2_XMD:SHA-256_SSWU_RO_NUL_',
@@ -174,7 +196,7 @@ const hasher_opts = Object.freeze({
174
196
  hash: sha256,
175
197
  });
176
198
  // a=0, b=4
177
- // cofactor h of G2
199
+ // cofactor h of G2, derived with the signed convention `t = -x`
178
200
  // (t^8 - 4t^7 + 5t^6 - 4t^4 + 6t^3 - 4t^2 - 4t + 13)/9
179
201
  // cofactorG2 = (t**8n - 4n*t**7n + 5n*t**6n - 4n*t**4n + 6n*t**3n - 4n*t**2n - 4n*t+13n)/9n
180
202
  // x = 3059144344244213709971259814753781636986470325476647558659373206291635324768958432433509563104347017837885763365758*u + 352701069587466618187139116011060144890029952792775240219908644239793785735715026873347600343865175952761926303160
@@ -195,9 +217,98 @@ const bls12_381_CURVE_G2 = {
195
217
  ]),
196
218
  };
197
219
  // Encoding utils
198
- // Compressed point of infinity
199
- // Set compressed & point-at-infinity bits
200
- const COMPZERO = setMask(Fp.toBytes(_0n), { infinity: true, compressed: true });
220
+ const sortBit = (parts, p) => {
221
+ for (const part of parts) {
222
+ if (part !== _0n)
223
+ return Boolean((part * _2n) / p);
224
+ }
225
+ return false;
226
+ };
227
+ const fp2 = {
228
+ // Generic tower bytes use `c0 || c1`, but the BLS12-381 G2 point/signature wire encoding uses
229
+ // `c1 || c0`, so keep this local wrapper instead of changing generic field serialization.
230
+ encode({ c0, c1 }) {
231
+ const { BYTES: L } = Fp;
232
+ return concatBytes(numberToBytesBE(c1, L), numberToBytesBE(c0, L));
233
+ },
234
+ decode(bytes) {
235
+ const { BYTES: L } = Fp;
236
+ return Fp2.create({
237
+ c0: Fp.create(bytesToNumberBE(bytes.subarray(L))),
238
+ c1: Fp.create(bytesToNumberBE(bytes.subarray(0, L))),
239
+ });
240
+ },
241
+ };
242
+ const BaseFp = Fp;
243
+ // Keep BLS12-381 point/signature codecs on one control-flow skeleton: the G1/G2
244
+ // and point/signature variants differ only in field packing, subgroup bytes, and
245
+ // whether uncompressed form is allowed. Copy-paste decoders were diverging.
246
+ const coder = (name, Fp, b, encode, decode, yparts) => {
247
+ const F = Fp;
248
+ const enc = encode;
249
+ const dec = decode;
250
+ const W = F.BYTES;
251
+ return (allowUncompressed) => ({
252
+ encode(point, compressed = true) {
253
+ if (!compressed && !allowUncompressed)
254
+ throw new Error('invalid signature: expected compressed encoding');
255
+ const infinity = point.is0();
256
+ const { x, y } = point.toAffine();
257
+ const bytes = compressed ? enc(x) : concatBytes(enc(x), enc(y));
258
+ let sort;
259
+ if (compressed && !infinity)
260
+ sort = sortBit(yparts(y), BaseFp.ORDER);
261
+ return setMask(bytes, { compressed, infinity, sort });
262
+ },
263
+ decode(bytes) {
264
+ const raw = allowUncompressed
265
+ ? abytes(bytes, undefined, 'point')
266
+ : abytes(bytes, W, 'signature');
267
+ const { compressed, infinity, sort, value } = parseMask(raw);
268
+ if (!allowUncompressed && !compressed)
269
+ throw new Error('invalid signature: expected compressed encoding');
270
+ const len = compressed ? W : 2 * W;
271
+ if (value.length !== len)
272
+ throw new Error(`invalid ${name} point: expected ${len} bytes`);
273
+ if (infinity) {
274
+ // Infinity canonicality has to be checked on raw bytes before decode()
275
+ // reduces coordinates modulo p and turns non-empty payloads into zero.
276
+ for (const b of value) {
277
+ if (b)
278
+ throw new Error(`invalid ${name} point: non-canonical zero`);
279
+ }
280
+ return { x: F.ZERO, y: F.ZERO };
281
+ }
282
+ const x = dec(compressed ? value : value.subarray(0, W));
283
+ let y;
284
+ if (compressed) {
285
+ y = F.sqrt(F.add(F.pow(x, _3n), b));
286
+ if (!y)
287
+ throw new Error(`invalid ${name} point: compressed`);
288
+ if (sortBit(yparts(y), BaseFp.ORDER) !== sort)
289
+ y = F.neg(y);
290
+ }
291
+ else {
292
+ y = dec(value.subarray(W));
293
+ }
294
+ // Noble keeps the permissive coordinate reduction path here, but an
295
+ // omitted infinity flag must not still decode to ZERO afterwards.
296
+ if (!compressed && F.is0(x) && F.is0(y))
297
+ throw new Error(`invalid ${name} point: uncompressed`);
298
+ return { x, y };
299
+ },
300
+ });
301
+ };
302
+ // Internal helper only: it copies before clearing the top flag bits. The
303
+ // pairing-friendly-curves draft C.2 step 1 rejects 0x20 / 0x60 / 0xe0 because
304
+ // S_bit must be zero for infinity and for all uncompressed encodings.
305
+ function validateMask({ compressed, infinity, sort }) {
306
+ if ((!compressed && !infinity && sort) || // 0010_0000 = 0x20
307
+ (!compressed && infinity && sort) || // 0110_0000 = 0x60
308
+ (compressed && infinity && sort) // 1110_0000 = 0xe0
309
+ )
310
+ throw new Error('invalid encoding flag');
311
+ }
201
312
  function parseMask(bytes) {
202
313
  // Copy, so we can remove mask data.
203
314
  // It will be removed also later, when Fp.create will call modulo.
@@ -206,12 +317,17 @@ function parseMask(bytes) {
206
317
  const compressed = !!((mask >> 7) & 1); // compression bit (0b1000_0000)
207
318
  const infinity = !!((mask >> 6) & 1); // point at infinity bit (0b0100_0000)
208
319
  const sort = !!((mask >> 5) & 1); // sort bit (0b0010_0000)
320
+ validateMask({ compressed, infinity, sort });
209
321
  bytes[0] &= 0b0001_1111; // clear mask (zero first 3 bits)
210
322
  return { compressed, infinity, sort, value: bytes };
211
323
  }
324
+ // Internal helper only: mutates a non-empty fresh buffer in place and just
325
+ // sets bits. Keep the same invalid-flag guard as parseMask() so encoders cannot
326
+ // manufacture states that decoders already reject.
212
327
  function setMask(bytes, mask) {
213
328
  if (bytes[0] & 0b1110_0000)
214
329
  throw new Error('setMask: non-empty mask');
330
+ validateMask({ compressed: !!mask.compressed, infinity: !!mask.infinity, sort: !!mask.sort });
215
331
  if (mask.compressed)
216
332
  bytes[0] |= 0b1000_0000;
217
333
  if (mask.infinity)
@@ -220,194 +336,30 @@ function setMask(bytes, mask) {
220
336
  bytes[0] |= 0b0010_0000;
221
337
  return bytes;
222
338
  }
223
- function pointG1ToBytes(_c, point, isComp) {
224
- const { BYTES: L, ORDER: P } = Fp;
225
- const is0 = point.is0();
226
- const { x, y } = point.toAffine();
227
- if (isComp) {
228
- if (is0)
229
- return COMPZERO.slice();
230
- const sort = Boolean((y * _2n) / P);
231
- return setMask(numberToBytesBE(x, L), { compressed: true, sort });
232
- }
233
- else {
234
- if (is0) {
235
- return concatBytes(Uint8Array.of(0x40), new Uint8Array(2 * L - 1));
236
- }
237
- else {
238
- return concatBytes(numberToBytesBE(x, L), numberToBytesBE(y, L));
239
- }
240
- }
241
- }
242
- function signatureG1ToBytes(point) {
339
+ const g1coder = coder('G1', Fp, Fp.create(bls12_381_CURVE_G1.b), (x) => numberToBytesBE(x, Fp.BYTES), (bytes) => Fp.create(bytesToNumberBE(bytes) & bitMask(Fp.BITS)), (y) => [y]);
340
+ const g1 = { point: g1coder(true), sig: g1coder(false) };
341
+ const signatureG1ToBytes = (point) => {
243
342
  point.assertValidity();
244
- const { BYTES: L, ORDER: P } = Fp;
245
- const { x, y } = point.toAffine();
246
- if (point.is0())
247
- return COMPZERO.slice();
248
- const sort = Boolean((y * _2n) / P);
249
- return setMask(numberToBytesBE(x, L), { compressed: true, sort });
250
- }
251
- function pointG1FromBytes(bytes) {
252
- const { compressed, infinity, sort, value } = parseMask(bytes);
253
- const { BYTES: L, ORDER: P } = Fp;
254
- if (value.length === 48 && compressed) {
255
- const compressedValue = bytesToNumberBE(value);
256
- // Zero
257
- const x = Fp.create(compressedValue & bitMask(Fp.BITS));
258
- if (infinity) {
259
- if (x !== _0n)
260
- throw new Error('invalid G1 point: non-empty, at infinity, with compression');
261
- return { x: _0n, y: _0n };
262
- }
263
- const right = Fp.add(Fp.pow(x, _3n), Fp.create(bls12_381_CURVE_G1.b)); // y² = x³ + b
264
- let y = Fp.sqrt(right);
265
- if (!y)
266
- throw new Error('invalid G1 point: compressed point');
267
- if ((y * _2n) / P !== BigInt(sort))
268
- y = Fp.neg(y);
269
- return { x: Fp.create(x), y: Fp.create(y) };
270
- }
271
- else if (value.length === 96 && !compressed) {
272
- // Check if the infinity flag is set
273
- const x = bytesToNumberBE(value.subarray(0, L));
274
- const y = bytesToNumberBE(value.subarray(L));
275
- if (infinity) {
276
- if (x !== _0n || y !== _0n)
277
- throw new Error('G1: non-empty point at infinity');
278
- return bls12_381.G1.Point.ZERO.toAffine();
279
- }
280
- return { x: Fp.create(x), y: Fp.create(y) };
281
- }
282
- else {
283
- throw new Error('invalid G1 point: expected 48/96 bytes');
284
- }
285
- }
343
+ return g1.sig.encode(point);
344
+ };
286
345
  function signatureG1FromBytes(bytes) {
287
- const { infinity, sort, value } = parseMask(abytes(bytes, 48, 'signature'));
288
- const P = Fp.ORDER;
289
346
  const Point = bls12_381.G1.Point;
290
- const compressedValue = bytesToNumberBE(value);
291
- // Zero
292
- if (infinity)
293
- return Point.ZERO;
294
- const x = Fp.create(compressedValue & bitMask(Fp.BITS));
295
- const right = Fp.add(Fp.pow(x, _3n), Fp.create(bls12_381_CURVE_G1.b)); // y² = x³ + b
296
- let y = Fp.sqrt(right);
297
- if (!y)
298
- throw new Error('invalid G1 point: compressed');
299
- const aflag = BigInt(sort);
300
- if ((y * _2n) / P !== aflag)
301
- y = Fp.neg(y);
302
- const point = Point.fromAffine({ x, y });
347
+ const point = Point.fromAffine(g1.sig.decode(bytes));
303
348
  point.assertValidity();
304
349
  return point;
305
350
  }
306
- function pointG2ToBytes(_c, point, isComp) {
307
- const { BYTES: L, ORDER: P } = Fp;
308
- const is0 = point.is0();
309
- const { x, y } = point.toAffine();
310
- if (isComp) {
311
- if (is0)
312
- return concatBytes(COMPZERO, numberToBytesBE(_0n, L));
313
- const flag = Boolean(y.c1 === _0n ? (y.c0 * _2n) / P : (y.c1 * _2n) / P);
314
- return concatBytes(setMask(numberToBytesBE(x.c1, L), { compressed: true, sort: flag }), numberToBytesBE(x.c0, L));
315
- }
316
- else {
317
- if (is0)
318
- return concatBytes(Uint8Array.of(0x40), new Uint8Array(4 * L - 1));
319
- const { re: x0, im: x1 } = Fp2.reim(x);
320
- const { re: y0, im: y1 } = Fp2.reim(y);
321
- return concatBytes(numberToBytesBE(x1, L), numberToBytesBE(x0, L), numberToBytesBE(y1, L), numberToBytesBE(y0, L));
322
- }
323
- }
324
- function signatureG2ToBytes(point) {
351
+ const g2coder = coder('G2', Fp2, bls12_381_CURVE_G2.b, fp2.encode, fp2.decode, (y) => [
352
+ y.c1,
353
+ y.c0,
354
+ ]);
355
+ const g2 = { point: g2coder(true), sig: g2coder(false) };
356
+ const signatureG2ToBytes = (point) => {
325
357
  point.assertValidity();
326
- const { BYTES: L } = Fp;
327
- if (point.is0())
328
- return concatBytes(COMPZERO, numberToBytesBE(_0n, L));
329
- const { x, y } = point.toAffine();
330
- const { re: x0, im: x1 } = Fp2.reim(x);
331
- const { re: y0, im: y1 } = Fp2.reim(y);
332
- const tmp = y1 > _0n ? y1 * _2n : y0 * _2n;
333
- const sort = Boolean((tmp / Fp.ORDER) & _1n);
334
- const z2 = x0;
335
- return concatBytes(setMask(numberToBytesBE(x1, L), { sort, compressed: true }), numberToBytesBE(z2, L));
336
- }
337
- function pointG2FromBytes(bytes) {
338
- const { BYTES: L, ORDER: P } = Fp;
339
- const { compressed, infinity, sort, value } = parseMask(bytes);
340
- if ((!compressed && !infinity && sort) || // 00100000
341
- (!compressed && infinity && sort) || // 01100000
342
- (sort && infinity && compressed) // 11100000
343
- ) {
344
- throw new Error('invalid encoding flag: ' + (bytes[0] & 0b1110_0000));
345
- }
346
- const slc = (b, from, to) => bytesToNumberBE(b.slice(from, to));
347
- if (value.length === 96 && compressed) {
348
- if (infinity) {
349
- // check that all bytes are 0
350
- if (value.reduce((p, c) => (p !== 0 ? c + 1 : c), 0) > 0) {
351
- throw new Error('invalid G2 point: compressed');
352
- }
353
- return { x: Fp2.ZERO, y: Fp2.ZERO };
354
- }
355
- const x_1 = slc(value, 0, L);
356
- const x_0 = slc(value, L, 2 * L);
357
- const x = Fp2.create({ c0: Fp.create(x_0), c1: Fp.create(x_1) });
358
- const right = Fp2.add(Fp2.pow(x, _3n), bls12_381_CURVE_G2.b); // y² = x³ + 4 * (u+1) = x³ + b
359
- let y = Fp2.sqrt(right);
360
- const Y_bit = y.c1 === _0n ? (y.c0 * _2n) / P : (y.c1 * _2n) / P ? _1n : _0n;
361
- y = sort && Y_bit > 0 ? y : Fp2.neg(y);
362
- return { x, y };
363
- }
364
- else if (value.length === 192 && !compressed) {
365
- if (infinity) {
366
- if (value.reduce((p, c) => (p !== 0 ? c + 1 : c), 0) > 0) {
367
- throw new Error('invalid G2 point: uncompressed');
368
- }
369
- return { x: Fp2.ZERO, y: Fp2.ZERO };
370
- }
371
- const x1 = slc(value, 0 * L, 1 * L);
372
- const x0 = slc(value, 1 * L, 2 * L);
373
- const y1 = slc(value, 2 * L, 3 * L);
374
- const y0 = slc(value, 3 * L, 4 * L);
375
- return { x: Fp2.fromBigTuple([x0, x1]), y: Fp2.fromBigTuple([y0, y1]) };
376
- }
377
- else {
378
- throw new Error('invalid G2 point: expected 96/192 bytes');
379
- }
380
- }
358
+ return g2.sig.encode(point);
359
+ };
381
360
  function signatureG2FromBytes(bytes) {
382
- const { ORDER: P } = Fp;
383
- // TODO: Optimize, it's very slow because of sqrt.
384
- const { infinity, sort, value } = parseMask(abytes(bytes));
385
361
  const Point = bls12_381.G2.Point;
386
- const half = value.length / 2;
387
- if (half !== 48 && half !== 96)
388
- throw new Error('invalid compressed signature length, expected 96/192 bytes');
389
- const z1 = bytesToNumberBE(value.slice(0, half));
390
- const z2 = bytesToNumberBE(value.slice(half));
391
- // Indicates the infinity point
392
- if (infinity)
393
- return Point.ZERO;
394
- const x1 = Fp.create(z1 & bitMask(Fp.BITS));
395
- const x2 = Fp.create(z2);
396
- const x = Fp2.create({ c0: x2, c1: x1 });
397
- const y2 = Fp2.add(Fp2.pow(x, _3n), bls12_381_CURVE_G2.b); // y² = x³ + 4
398
- // The slow part
399
- let y = Fp2.sqrt(y2);
400
- if (!y)
401
- throw new Error('Failed to find a square root');
402
- // Choose the y whose leftmost bit of the imaginary part is equal to the a_flag1
403
- // If y1 happens to be zero, then use the bit of y0
404
- const { re: y0, im: y1 } = Fp2.reim(y);
405
- const aflag1 = BigInt(sort);
406
- const isGreater = y1 > _0n && (y1 * _2n) / P !== aflag1;
407
- const is0 = y1 === _0n && (y0 * _2n) / P !== aflag1;
408
- if (isGreater || is0)
409
- y = Fp2.neg(y);
410
- const point = Point.fromAffine({ x, y });
362
+ const point = Point.fromAffine(g2.sig.decode(bytes));
411
363
  point.assertValidity();
412
364
  return point;
413
365
  }
@@ -422,6 +374,7 @@ const signatureCoders = {
422
374
  toBytes(point) {
423
375
  return signatureG1ToBytes(point);
424
376
  },
377
+ // Historical alias: BLS signatures have a single compressed byte format here.
425
378
  toRawBytes(point) {
426
379
  return signatureG1ToBytes(point);
427
380
  },
@@ -439,6 +392,7 @@ const signatureCoders = {
439
392
  toBytes(point) {
440
393
  return signatureG2ToBytes(point);
441
394
  },
395
+ // Historical alias: BLS signatures have a single compressed byte format here.
442
396
  toRawBytes(point) {
443
397
  return signatureG2ToBytes(point);
444
398
  },
@@ -455,10 +409,12 @@ const fields = {
455
409
  Fr: bls12_381_Fr,
456
410
  };
457
411
  const G1_Point = weierstrass(bls12_381_CURVE_G1, {
412
+ // Public point APIs still accept infinity, even though the Zcash proof
413
+ // encoding rules cited above only define nonzero point encodings.
458
414
  allowInfinityPoint: true,
459
415
  Fn: bls12_381_Fr,
460
- fromBytes: pointG1FromBytes,
461
- toBytes: pointG1ToBytes,
416
+ fromBytes: g1.point.decode,
417
+ toBytes: (_c, point, isComp) => g1.point.encode(point, isComp),
462
418
  // Checks is the point resides in prime-order subgroup.
463
419
  // point.isTorsionFree() should return true for valid points
464
420
  // It returns false for shitty points.
@@ -481,10 +437,12 @@ const G1_Point = weierstrass(bls12_381_CURVE_G1, {
481
437
  });
482
438
  const G2_Point = weierstrass(bls12_381_CURVE_G2, {
483
439
  Fp: Fp2,
440
+ // Public point APIs still accept infinity, even though the Zcash proof
441
+ // encoding rules cited above only define nonzero point encodings.
484
442
  allowInfinityPoint: true,
485
443
  Fn: bls12_381_Fr,
486
- fromBytes: pointG2FromBytes,
487
- toBytes: pointG2ToBytes,
444
+ fromBytes: g2.point.decode,
445
+ toBytes: (_c, point, isComp) => g2.point.encode(point, isComp),
488
446
  // https://eprint.iacr.org/2021/1130.pdf
489
447
  // Older version: https://eprint.iacr.org/2019/814.pdf
490
448
  isTorsionFree: (c, P) => {
@@ -512,7 +470,15 @@ const bls12_hasher_opts = {
512
470
  mapToG1: mapToG1,
513
471
  mapToG2: mapToG2,
514
472
  hasherOpts: hasher_opts,
515
- hasherOptsG1: { ...hasher_opts, m: 1, DST: 'BLS_SIG_BLS12381G1_XMD:SHA-256_SSWU_RO_NUL_' },
473
+ // RFC 9380 Appendix J defines distinct G1/G2 RO and NU suite IDs, and
474
+ // draft-irtf-cfrg-bls-signature-06 §4.2.1 gives separate G1/G2 `_NUL_` DSTs.
475
+ // Keep G1 encode-to-curve on the G1 domain instead of inheriting G2's `encodeDST`.
476
+ hasherOptsG1: {
477
+ ...hasher_opts,
478
+ m: 1,
479
+ DST: 'BLS_SIG_BLS12381G1_XMD:SHA-256_SSWU_RO_NUL_',
480
+ encodeDST: 'BLS_SIG_BLS12381G1_XMD:SHA-256_SSWU_RO_NUL_',
481
+ },
516
482
  hasherOptsG2: { ...hasher_opts },
517
483
  };
518
484
  const bls12_params = {
@@ -524,9 +490,21 @@ const bls12_params = {
524
490
  /**
525
491
  * bls12-381 pairing-friendly curve construction.
526
492
  * Provides both longSignatures and shortSignatures.
493
+ * @example
494
+ * bls12-381 pairing-friendly curve construction.
495
+ *
496
+ * ```ts
497
+ * const bls = bls12_381.longSignatures;
498
+ * const { secretKey, publicKey } = bls.keygen();
499
+ * const msg = bls.hash(new TextEncoder().encode('hello noble'));
500
+ * const sig = bls.sign(msg, secretKey);
501
+ * const isValid = bls.verify(sig, msg, publicKey);
502
+ * ```
527
503
  */
528
504
  export const bls12_381 = bls(fields, G1_Point, G2_Point, bls12_params, bls12_hasher_opts, signatureCoders);
529
505
  // 3-isogeny map from E' to E https://www.rfc-editor.org/rfc/rfc9380#appendix-E.3
506
+ // Coefficients stay in ascending `k_(?,0)`..`k_(?,d)` order; isogenyMap()
507
+ // reverses them internally for Horner evaluation.
530
508
  const isogenyMapG2 = isogenyMap(Fp2, [
531
509
  // xNum
532
510
  [
@@ -595,7 +573,8 @@ const isogenyMapG2 = isogenyMap(Fp2, [
595
573
  ['0x1', '0x0'], // LAST 1
596
574
  ],
597
575
  ].map((i) => i.map((pair) => Fp2.fromBigTuple(pair.map(BigInt)))));
598
- // 11-isogeny map from E' to E
576
+ // 11-isogeny map from E' to E. Coefficients stay in ascending
577
+ // `k_(?,0)`..`k_(?,d)` order; isogenyMap() reverses them for Horner evaluation.
599
578
  const isogenyMapG1 = isogenyMap(Fp, [
600
579
  // xNum
601
580
  [
@@ -665,24 +644,35 @@ const isogenyMapG1 = isogenyMap(Fp, [
665
644
  '0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001', // LAST 1
666
645
  ],
667
646
  ].map((i) => i.map((j) => BigInt(j))));
668
- // Optimized SWU Map - Fp to G1
669
- const G1_SWU = mapToCurveSimpleSWU(Fp, {
670
- A: Fp.create(BigInt('0x144698a3b8e9433d693a02c96d4982b0ea985383ee66a8d8e8981aefd881ac98936f8da0e0f97f5cf428082d584c1d')),
671
- B: Fp.create(BigInt('0x12e2908d11688030018b12e8753eee3b2016c1f0f24f4070a0b9c14fcef35ef55a23215a316ceaa5d1cc48e98e172be0')),
672
- Z: Fp.create(BigInt(11)),
673
- });
674
- // SWU Map - Fp2 to G2': y² = + 240i * x + 1012 + 1012i
675
- const G2_SWU = mapToCurveSimpleSWU(Fp2, {
676
- A: Fp2.create({ c0: Fp.create(_0n), c1: Fp.create(BigInt(240)) }), // A' = 240 * I
677
- B: Fp2.create({ c0: Fp.create(BigInt(1012)), c1: Fp.create(BigInt(1012)) }), // B' = 1012 * (1 + I)
678
- Z: Fp2.create({ c0: Fp.create(BigInt(-2)), c1: Fp.create(BigInt(-1)) }), // Z: -(2 + I)
679
- });
647
+ let G1_SWU;
648
+ let G2_SWU;
649
+ // SWU setup validates the pre-isogeny curve parameters and builds sqrt-ratio helpers.
650
+ // Doing that eagerly adds about 10ms to `bls12-381.js` import here, so keep it lazy; after the
651
+ // first map call the cached mapper is reused directly.
652
+ const getG1_SWU = () => G1_SWU ||
653
+ (G1_SWU = mapToCurveSimpleSWU(Fp, {
654
+ A: Fp.create(BigInt('0x144698a3b8e9433d693a02c96d4982b0ea985383ee66a8d8e8981aefd881ac98936f8da0e0f97f5cf428082d584c1d')),
655
+ B: Fp.create(BigInt('0x12e2908d11688030018b12e8753eee3b2016c1f0f24f4070a0b9c14fcef35ef55a23215a316ceaa5d1cc48e98e172be0')),
656
+ Z: Fp.create(BigInt(11)),
657
+ }));
658
+ const getG2_SWU = () => G2_SWU ||
659
+ (G2_SWU = mapToCurveSimpleSWU(Fp2, {
660
+ // SWU map for the RFC 9380 §8.8.2 pre-isogeny G2 curve E':
661
+ // y² = x³ + 240i * x + 1012 + 1012i
662
+ A: Fp2.create({ c0: Fp.create(_0n), c1: Fp.create(BigInt(240)) }), // A' = 240 * I
663
+ B: Fp2.create({ c0: Fp.create(BigInt(1012)), c1: Fp.create(BigInt(1012)) }), // B' = 1012 * (1 + I)
664
+ Z: Fp2.create({ c0: Fp.create(BigInt(-2)), c1: Fp.create(BigInt(-1)) }), // Z: -(2 + I)
665
+ }));
666
+ // Internal hash-to-curve step: G1 uses `m = 1`, so only `scalars[0]` is read,
667
+ // and the result is the isogeny image on E before the subgroup clear.
680
668
  function mapToG1(scalars) {
681
- const { x, y } = G1_SWU(Fp.create(scalars[0]));
669
+ const { x, y } = getG1_SWU()(Fp.create(scalars[0]));
682
670
  return isogenyMapG1(x, y);
683
671
  }
672
+ // Internal hash-to-curve step: G2 expects the RFC `m = 2` pair, and the result
673
+ // is the isogeny image on E before the subgroup clear.
684
674
  function mapToG2(scalars) {
685
- const { x, y } = G2_SWU(Fp2.fromBigTuple(scalars));
675
+ const { x, y } = getG2_SWU()(Fp2.fromBigTuple(scalars));
686
676
  return isogenyMapG2(x, y);
687
677
  }
688
678
  //# sourceMappingURL=bls12-381.js.map
package/bls12-381.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"bls12-381.js","sourceRoot":"","sources":["src/bls12-381.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bls12-381.js","sourceRoot":"","sources":["src/bls12-381.ts"],"names":[],"mappings":"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"}