@noble/curves 0.9.1 → 1.0.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 (87) hide show
  1. package/README.md +197 -99
  2. package/abstract/bls.d.ts +43 -31
  3. package/abstract/bls.d.ts.map +1 -1
  4. package/abstract/bls.js +37 -28
  5. package/abstract/bls.js.map +1 -1
  6. package/abstract/edwards.d.ts +2 -2
  7. package/abstract/edwards.d.ts.map +1 -1
  8. package/abstract/edwards.js +30 -18
  9. package/abstract/edwards.js.map +1 -1
  10. package/abstract/hash-to-curve.d.ts +1 -1
  11. package/abstract/hash-to-curve.d.ts.map +1 -1
  12. package/abstract/hash-to-curve.js +3 -2
  13. package/abstract/hash-to-curve.js.map +1 -1
  14. package/abstract/utils.d.ts.map +1 -1
  15. package/abstract/utils.js +2 -2
  16. package/abstract/utils.js.map +1 -1
  17. package/abstract/weierstrass.d.ts +21 -0
  18. package/abstract/weierstrass.d.ts.map +1 -1
  19. package/abstract/weierstrass.js +27 -14
  20. package/abstract/weierstrass.js.map +1 -1
  21. package/bls12-381.d.ts.map +1 -1
  22. package/bls12-381.js +57 -61
  23. package/bls12-381.js.map +1 -1
  24. package/{bn.d.ts → bn254.d.ts} +1 -1
  25. package/bn254.d.ts.map +1 -0
  26. package/{bn.js → bn254.js} +1 -1
  27. package/bn254.js.map +1 -0
  28. package/ed25519.d.ts +9 -0
  29. package/ed25519.d.ts.map +1 -1
  30. package/ed25519.js +22 -8
  31. package/ed25519.js.map +1 -1
  32. package/ed448.d.ts +9 -0
  33. package/ed448.d.ts.map +1 -1
  34. package/ed448.js +16 -16
  35. package/ed448.js.map +1 -1
  36. package/esm/abstract/bls.js +37 -28
  37. package/esm/abstract/bls.js.map +1 -1
  38. package/esm/abstract/edwards.js +30 -18
  39. package/esm/abstract/edwards.js.map +1 -1
  40. package/esm/abstract/hash-to-curve.js +3 -2
  41. package/esm/abstract/hash-to-curve.js.map +1 -1
  42. package/esm/abstract/utils.js +2 -2
  43. package/esm/abstract/utils.js.map +1 -1
  44. package/esm/abstract/weierstrass.js +19 -6
  45. package/esm/abstract/weierstrass.js.map +1 -1
  46. package/esm/bls12-381.js +58 -62
  47. package/esm/bls12-381.js.map +1 -1
  48. package/esm/{bn.js → bn254.js} +1 -1
  49. package/esm/bn254.js.map +1 -0
  50. package/esm/ed25519.js +20 -7
  51. package/esm/ed25519.js.map +1 -1
  52. package/esm/ed448.js +14 -15
  53. package/esm/ed448.js.map +1 -1
  54. package/esm/p256.js +5 -6
  55. package/esm/p256.js.map +1 -1
  56. package/esm/p384.js +10 -12
  57. package/esm/p384.js.map +1 -1
  58. package/esm/p521.js +22 -18
  59. package/esm/p521.js.map +1 -1
  60. package/p256.d.ts +1 -1
  61. package/p256.d.ts.map +1 -1
  62. package/p256.js +6 -7
  63. package/p256.js.map +1 -1
  64. package/p384.d.ts +1 -1
  65. package/p384.d.ts.map +1 -1
  66. package/p384.js +11 -13
  67. package/p384.js.map +1 -1
  68. package/p521.d.ts +1 -1
  69. package/p521.d.ts.map +1 -1
  70. package/p521.js +23 -19
  71. package/p521.js.map +1 -1
  72. package/package.json +5 -8
  73. package/src/abstract/bls.ts +83 -61
  74. package/src/abstract/edwards.ts +38 -16
  75. package/src/abstract/hash-to-curve.ts +4 -3
  76. package/src/abstract/utils.ts +2 -2
  77. package/src/abstract/weierstrass.ts +18 -7
  78. package/src/bls12-381.ts +63 -67
  79. package/src/ed25519.ts +22 -8
  80. package/src/ed448.ts +15 -15
  81. package/src/p256.ts +15 -19
  82. package/src/p384.ts +17 -21
  83. package/src/p521.ts +34 -22
  84. package/bn.d.ts.map +0 -1
  85. package/bn.js.map +0 -1
  86. package/esm/bn.js.map +0 -1
  87. /package/src/{bn.ts → bn254.ts} +0 -0
package/src/p256.ts CHANGED
@@ -5,10 +5,9 @@ import { Field } from './abstract/modular.js';
5
5
  import { mapToCurveSimpleSWU } from './abstract/weierstrass.js';
6
6
  import * as htf from './abstract/hash-to-curve.js';
7
7
 
8
- // NIST secp256r1 aka P256
8
+ // NIST secp256r1 aka p256
9
9
  // https://www.secg.org/sec2-v2.pdf, https://neuromancer.sk/std/nist/P-256
10
10
 
11
- // Field over which we'll do calculations; 2n**224n * (2n**32n-1n) + 2n**192n + 2n**96n-1n
12
11
  const Fp = Field(BigInt('0xffffffff00000001000000000000000000000000ffffffffffffffffffffffff'));
13
12
  const CURVE_A = Fp.create(BigInt('-3'));
14
13
  const CURVE_B = BigInt('0x5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b');
@@ -19,23 +18,20 @@ const mapSWU = mapToCurveSimpleSWU(Fp, {
19
18
  Z: Fp.create(BigInt('-10')),
20
19
  });
21
20
 
22
- export const P256 = createCurve(
23
- {
24
- // Params: a, b
25
- a: CURVE_A,
26
- b: CURVE_B,
27
- Fp,
28
- // Curve order, total count of valid points in the field
29
- n: BigInt('0xffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551'),
30
- // Base point (x, y) aka generator point
31
- Gx: BigInt('0x6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296'),
32
- Gy: BigInt('0x4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5'),
33
- h: BigInt(1),
34
- lowS: false,
35
- } as const,
36
- sha256
37
- );
38
- export const secp256r1 = P256;
21
+ // prettier-ignore
22
+ export const p256 = createCurve({
23
+ a: CURVE_A, // Equation params: a, b
24
+ b: CURVE_B,
25
+ Fp, // Field: 2n**224n * (2n**32n-1n) + 2n**192n + 2n**96n-1n
26
+ // Curve order, total count of valid points in the field
27
+ n: BigInt('0xffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551'),
28
+ // Base (generator) point (x, y)
29
+ Gx: BigInt('0x6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296'),
30
+ Gy: BigInt('0x4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5'),
31
+ h: BigInt(1),
32
+ lowS: false,
33
+ } as const, sha256);
34
+ export const secp256r1 = p256;
39
35
 
40
36
  const { hashToCurve, encodeToCurve } = htf.createHasher(
41
37
  secp256r1.ProjectivePoint,
package/src/p384.ts CHANGED
@@ -5,10 +5,10 @@ import { Field } from './abstract/modular.js';
5
5
  import { mapToCurveSimpleSWU } from './abstract/weierstrass.js';
6
6
  import * as htf from './abstract/hash-to-curve.js';
7
7
 
8
- // NIST secp384r1 aka P384
8
+ // NIST secp384r1 aka p384
9
9
  // https://www.secg.org/sec2-v2.pdf, https://neuromancer.sk/std/nist/P-384
10
10
 
11
- // Field over which we'll do calculations. 2n**384n - 2n**128n - 2n**96n + 2n**32n - 1n
11
+ // Field over which we'll do calculations.
12
12
  // prettier-ignore
13
13
  const P = BigInt('0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff');
14
14
  const Fp = Field(P);
@@ -16,31 +16,27 @@ const CURVE_A = Fp.create(BigInt('-3'));
16
16
  // prettier-ignore
17
17
  const CURVE_B = BigInt('0xb3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef');
18
18
 
19
+ // prettier-ignore
20
+ export const p384 = createCurve({
21
+ a: CURVE_A, // Equation params: a, b
22
+ b: CURVE_B,
23
+ Fp, // Field: 2n**384n - 2n**128n - 2n**96n + 2n**32n - 1n
24
+ // Curve order, total count of valid points in the field.
25
+ n: BigInt('0xffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973'),
26
+ // Base (generator) point (x, y)
27
+ Gx: BigInt('0xaa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7'),
28
+ Gy: BigInt('0x3617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f'),
29
+ h: BigInt(1),
30
+ lowS: false,
31
+ } as const, sha384);
32
+ export const secp384r1 = p384;
33
+
19
34
  const mapSWU = mapToCurveSimpleSWU(Fp, {
20
35
  A: CURVE_A,
21
36
  B: CURVE_B,
22
37
  Z: Fp.create(BigInt('-12')),
23
38
  });
24
39
 
25
- // prettier-ignore
26
- export const P384 = createCurve({
27
- // Params: a, b
28
- a: CURVE_A,
29
- b: CURVE_B,
30
- // Field over which we'll do calculations. 2n**384n - 2n**128n - 2n**96n + 2n**32n - 1n
31
- Fp,
32
- // Curve order, total count of valid points in the field.
33
- n: BigInt('0xffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973'),
34
- // Base point (x, y) aka generator point
35
- Gx: BigInt('0xaa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7'),
36
- Gy: BigInt('0x3617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f'),
37
- h: BigInt(1),
38
- lowS: false,
39
- } as const,
40
- sha384
41
- );
42
- export const secp384r1 = P384;
43
-
44
40
  const { hashToCurve, encodeToCurve } = htf.createHasher(
45
41
  secp384r1.ProjectivePoint,
46
42
  (scalars: bigint[]) => mapSWU(scalars[0]),
package/src/p521.ts CHANGED
@@ -5,41 +5,53 @@ import { Field } from './abstract/modular.js';
5
5
  import { mapToCurveSimpleSWU } from './abstract/weierstrass.js';
6
6
  import * as htf from './abstract/hash-to-curve.js';
7
7
 
8
- // NIST secp521r1 aka P521
8
+ // NIST secp521r1 aka p521
9
9
  // Note that it's 521, which differs from 512 of its hash function.
10
10
  // https://www.secg.org/sec2-v2.pdf, https://neuromancer.sk/std/nist/P-521
11
11
 
12
- // Field over which we'll do calculations; 2n**521n - 1n
12
+ // Field over which we'll do calculations.
13
13
  // prettier-ignore
14
14
  const P = BigInt('0x1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff');
15
15
  const Fp = Field(P);
16
16
 
17
- const CURVE_A = Fp.create(BigInt('-3'));
18
- // prettier-ignore
19
- const CURVE_B = BigInt('0x0051953eb9618e1c9a1f929a21a0b68540eea2da725b99b315f3b8b489918ef109e156193951ec7e937b1652c0bd3bb1bf073573df883d2c34f1ef451fd46b503f00');
20
-
21
- const mapSWU = mapToCurveSimpleSWU(Fp, {
22
- A: CURVE_A,
23
- B: CURVE_B,
24
- Z: Fp.create(BigInt('-4')),
25
- });
17
+ const CURVE = {
18
+ a: Fp.create(BigInt('-3')),
19
+ b: BigInt(
20
+ '0x0051953eb9618e1c9a1f929a21a0b68540eea2da725b99b315f3b8b489918ef109e156193951ec7e937b1652c0bd3bb1bf073573df883d2c34f1ef451fd46b503f00'
21
+ ),
22
+ Fp,
23
+ n: BigInt(
24
+ '0x01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409'
25
+ ),
26
+ Gx: BigInt(
27
+ '0x00c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66'
28
+ ),
29
+ Gy: BigInt(
30
+ '0x011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650'
31
+ ),
32
+ h: BigInt(1),
33
+ };
26
34
 
27
35
  // prettier-ignore
28
- export const P521 = createCurve({
29
- // Params: a, b
30
- a: CURVE_A,
31
- b: CURVE_B,
32
- Fp,
36
+ export const p521 = createCurve({
37
+ a: CURVE.a, // Equation params: a, b
38
+ b: CURVE.b,
39
+ Fp, // Field: 2n**521n - 1n
33
40
  // Curve order, total count of valid points in the field
34
- n: BigInt('0x01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409'),
35
- // Base point (x, y) aka generator point
36
- Gx: BigInt('0x00c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66'),
37
- Gy: BigInt('0x011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650'),
38
- h: BigInt(1),
41
+ n: CURVE.n,
42
+ Gx: CURVE.Gx, // Base point (x, y) aka generator point
43
+ Gy: CURVE.Gy,
44
+ h: CURVE.h,
39
45
  lowS: false,
40
46
  allowedPrivateKeyLengths: [130, 131, 132] // P521 keys are variable-length. Normalize to 132b
41
47
  } as const, sha512);
42
- export const secp521r1 = P521;
48
+ export const secp521r1 = p521;
49
+
50
+ const mapSWU = mapToCurveSimpleSWU(Fp, {
51
+ A: CURVE.a,
52
+ B: CURVE.b,
53
+ Z: Fp.create(BigInt('-4')),
54
+ });
43
55
 
44
56
  const { hashToCurve, encodeToCurve } = htf.createHasher(
45
57
  secp521r1.ProjectivePoint,
package/bn.d.ts.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"bn.d.ts","sourceRoot":"","sources":["src/bn.ts"],"names":[],"mappings":"AAKA;;;;;GAKG;AACH,eAAO,MAAM,KAAK,6CAShB,CAAC"}
package/bn.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"bn.js","sourceRoot":"","sources":["src/bn.ts"],"names":[],"mappings":";;;AAAA,sEAAsE;AACtE,iDAA8C;AAC9C,8DAAwD;AACxD,yDAA6C;AAC7C,sDAA8C;AAC9C;;;;;GAKG;AACU,QAAA,KAAK,GAAG,IAAA,4BAAW,EAAC;IAC/B,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACZ,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACZ,EAAE,EAAE,IAAA,kBAAK,EAAC,MAAM,CAAC,oEAAoE,CAAC,CAAC;IACvF,CAAC,EAAE,MAAM,CAAC,oEAAoE,CAAC;IAC/E,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;IACb,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;IACb,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACZ,GAAG,IAAA,0BAAO,EAAC,eAAM,CAAC;CACnB,CAAC,CAAC"}
package/esm/bn.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"bn.js","sourceRoot":"","sources":["../src/bn.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C;;;;;GAKG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,WAAW,CAAC;IAC/B,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACZ,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACZ,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC,oEAAoE,CAAC,CAAC;IACvF,CAAC,EAAE,MAAM,CAAC,oEAAoE,CAAC;IAC/E,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;IACb,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;IACb,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACZ,GAAG,OAAO,CAAC,MAAM,CAAC;CACnB,CAAC,CAAC"}
File without changes