@noble/curves 1.9.7 → 2.0.0-beta.2

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 (242) hide show
  1. package/README.md +520 -505
  2. package/abstract/bls.d.ts +58 -120
  3. package/abstract/bls.d.ts.map +1 -1
  4. package/abstract/bls.js +108 -152
  5. package/abstract/bls.js.map +1 -1
  6. package/abstract/curve.d.ts +18 -54
  7. package/abstract/curve.d.ts.map +1 -1
  8. package/abstract/curve.js +30 -49
  9. package/abstract/curve.js.map +1 -1
  10. package/abstract/edwards.d.ts +18 -77
  11. package/abstract/edwards.d.ts.map +1 -1
  12. package/abstract/edwards.js +68 -144
  13. package/abstract/edwards.js.map +1 -1
  14. package/abstract/fft.js +14 -27
  15. package/abstract/fft.js.map +1 -1
  16. package/abstract/hash-to-curve.d.ts +35 -47
  17. package/abstract/hash-to-curve.d.ts.map +1 -1
  18. package/abstract/hash-to-curve.js +42 -46
  19. package/abstract/hash-to-curve.js.map +1 -1
  20. package/abstract/modular.d.ts +5 -17
  21. package/abstract/modular.d.ts.map +1 -1
  22. package/abstract/modular.js +170 -169
  23. package/abstract/modular.js.map +1 -1
  24. package/abstract/montgomery.d.ts +7 -12
  25. package/abstract/montgomery.d.ts.map +1 -1
  26. package/abstract/montgomery.js +22 -29
  27. package/abstract/montgomery.js.map +1 -1
  28. package/abstract/oprf.d.ts +282 -0
  29. package/abstract/oprf.d.ts.map +1 -0
  30. package/abstract/oprf.js +297 -0
  31. package/abstract/oprf.js.map +1 -0
  32. package/abstract/poseidon.d.ts.map +1 -1
  33. package/abstract/poseidon.js +26 -31
  34. package/abstract/poseidon.js.map +1 -1
  35. package/abstract/tower.d.ts.map +1 -1
  36. package/abstract/tower.js +43 -19
  37. package/abstract/tower.js.map +1 -1
  38. package/abstract/weierstrass.d.ts +77 -168
  39. package/abstract/weierstrass.d.ts.map +1 -1
  40. package/abstract/weierstrass.js +184 -389
  41. package/abstract/weierstrass.js.map +1 -1
  42. package/bls12-381.d.ts +5 -11
  43. package/bls12-381.d.ts.map +1 -1
  44. package/bls12-381.js +161 -181
  45. package/bls12-381.js.map +1 -1
  46. package/bn254.d.ts +59 -11
  47. package/bn254.d.ts.map +1 -1
  48. package/bn254.js +69 -97
  49. package/bn254.js.map +1 -1
  50. package/ed25519.d.ts +33 -48
  51. package/ed25519.d.ts.map +1 -1
  52. package/ed25519.js +147 -161
  53. package/ed25519.js.map +1 -1
  54. package/ed448.d.ts +27 -36
  55. package/ed448.d.ts.map +1 -1
  56. package/ed448.js +143 -164
  57. package/ed448.js.map +1 -1
  58. package/index.d.ts +1 -0
  59. package/index.js +20 -4
  60. package/index.js.map +1 -1
  61. package/misc.d.ts +10 -14
  62. package/misc.d.ts.map +1 -1
  63. package/misc.js +53 -62
  64. package/misc.js.map +1 -1
  65. package/nist.d.ts +31 -16
  66. package/nist.d.ts.map +1 -1
  67. package/nist.js +75 -64
  68. package/nist.js.map +1 -1
  69. package/package.json +20 -234
  70. package/secp256k1.d.ts +17 -30
  71. package/secp256k1.d.ts.map +1 -1
  72. package/secp256k1.js +59 -73
  73. package/secp256k1.js.map +1 -1
  74. package/src/abstract/bls.ts +207 -354
  75. package/src/abstract/curve.ts +25 -84
  76. package/src/abstract/edwards.ts +68 -193
  77. package/src/abstract/hash-to-curve.ts +71 -85
  78. package/src/abstract/modular.ts +150 -134
  79. package/src/abstract/montgomery.ts +28 -35
  80. package/src/abstract/oprf.ts +600 -0
  81. package/src/abstract/poseidon.ts +6 -8
  82. package/src/abstract/tower.ts +0 -3
  83. package/src/abstract/weierstrass.ts +203 -525
  84. package/src/bls12-381.ts +133 -139
  85. package/src/bn254.ts +69 -93
  86. package/src/ed25519.ts +106 -133
  87. package/src/ed448.ts +111 -138
  88. package/src/index.ts +19 -3
  89. package/src/misc.ts +68 -51
  90. package/src/nist.ts +77 -70
  91. package/src/secp256k1.ts +46 -81
  92. package/src/utils.ts +67 -137
  93. package/src/webcrypto.ts +403 -0
  94. package/utils.d.ts +31 -38
  95. package/utils.d.ts.map +1 -1
  96. package/utils.js +66 -185
  97. package/utils.js.map +1 -1
  98. package/webcrypto.d.ts +99 -0
  99. package/webcrypto.d.ts.map +1 -0
  100. package/webcrypto.js +256 -0
  101. package/webcrypto.js.map +1 -0
  102. package/_shortw_utils.d.ts +0 -19
  103. package/_shortw_utils.d.ts.map +0 -1
  104. package/_shortw_utils.js +0 -20
  105. package/_shortw_utils.js.map +0 -1
  106. package/abstract/utils.d.ts +0 -78
  107. package/abstract/utils.d.ts.map +0 -1
  108. package/abstract/utils.js +0 -73
  109. package/abstract/utils.js.map +0 -1
  110. package/esm/_shortw_utils.d.ts +0 -19
  111. package/esm/_shortw_utils.d.ts.map +0 -1
  112. package/esm/_shortw_utils.js +0 -16
  113. package/esm/_shortw_utils.js.map +0 -1
  114. package/esm/abstract/bls.d.ts +0 -190
  115. package/esm/abstract/bls.d.ts.map +0 -1
  116. package/esm/abstract/bls.js +0 -408
  117. package/esm/abstract/bls.js.map +0 -1
  118. package/esm/abstract/curve.d.ts +0 -231
  119. package/esm/abstract/curve.d.ts.map +0 -1
  120. package/esm/abstract/curve.js +0 -465
  121. package/esm/abstract/curve.js.map +0 -1
  122. package/esm/abstract/edwards.d.ts +0 -243
  123. package/esm/abstract/edwards.d.ts.map +0 -1
  124. package/esm/abstract/edwards.js +0 -627
  125. package/esm/abstract/edwards.js.map +0 -1
  126. package/esm/abstract/fft.d.ts +0 -122
  127. package/esm/abstract/fft.d.ts.map +0 -1
  128. package/esm/abstract/fft.js +0 -425
  129. package/esm/abstract/fft.js.map +0 -1
  130. package/esm/abstract/hash-to-curve.d.ts +0 -102
  131. package/esm/abstract/hash-to-curve.d.ts.map +0 -1
  132. package/esm/abstract/hash-to-curve.js +0 -203
  133. package/esm/abstract/hash-to-curve.js.map +0 -1
  134. package/esm/abstract/modular.d.ts +0 -171
  135. package/esm/abstract/modular.d.ts.map +0 -1
  136. package/esm/abstract/modular.js +0 -530
  137. package/esm/abstract/modular.js.map +0 -1
  138. package/esm/abstract/montgomery.d.ts +0 -30
  139. package/esm/abstract/montgomery.d.ts.map +0 -1
  140. package/esm/abstract/montgomery.js +0 -157
  141. package/esm/abstract/montgomery.js.map +0 -1
  142. package/esm/abstract/poseidon.d.ts +0 -68
  143. package/esm/abstract/poseidon.d.ts.map +0 -1
  144. package/esm/abstract/poseidon.js +0 -296
  145. package/esm/abstract/poseidon.js.map +0 -1
  146. package/esm/abstract/tower.d.ts +0 -95
  147. package/esm/abstract/tower.d.ts.map +0 -1
  148. package/esm/abstract/tower.js +0 -714
  149. package/esm/abstract/tower.js.map +0 -1
  150. package/esm/abstract/utils.d.ts +0 -78
  151. package/esm/abstract/utils.d.ts.map +0 -1
  152. package/esm/abstract/utils.js +0 -70
  153. package/esm/abstract/utils.js.map +0 -1
  154. package/esm/abstract/weierstrass.d.ts +0 -416
  155. package/esm/abstract/weierstrass.d.ts.map +0 -1
  156. package/esm/abstract/weierstrass.js +0 -1413
  157. package/esm/abstract/weierstrass.js.map +0 -1
  158. package/esm/bls12-381.d.ts +0 -16
  159. package/esm/bls12-381.d.ts.map +0 -1
  160. package/esm/bls12-381.js +0 -705
  161. package/esm/bls12-381.js.map +0 -1
  162. package/esm/bn254.d.ts +0 -18
  163. package/esm/bn254.d.ts.map +0 -1
  164. package/esm/bn254.js +0 -214
  165. package/esm/bn254.js.map +0 -1
  166. package/esm/ed25519.d.ts +0 -106
  167. package/esm/ed25519.d.ts.map +0 -1
  168. package/esm/ed25519.js +0 -467
  169. package/esm/ed25519.js.map +0 -1
  170. package/esm/ed448.d.ts +0 -100
  171. package/esm/ed448.d.ts.map +0 -1
  172. package/esm/ed448.js +0 -459
  173. package/esm/ed448.js.map +0 -1
  174. package/esm/index.d.ts +0 -2
  175. package/esm/index.d.ts.map +0 -1
  176. package/esm/index.js +0 -17
  177. package/esm/index.js.map +0 -1
  178. package/esm/jubjub.d.ts +0 -12
  179. package/esm/jubjub.d.ts.map +0 -1
  180. package/esm/jubjub.js +0 -12
  181. package/esm/jubjub.js.map +0 -1
  182. package/esm/misc.d.ts +0 -19
  183. package/esm/misc.d.ts.map +0 -1
  184. package/esm/misc.js +0 -109
  185. package/esm/misc.js.map +0 -1
  186. package/esm/nist.d.ts +0 -21
  187. package/esm/nist.d.ts.map +0 -1
  188. package/esm/nist.js +0 -132
  189. package/esm/nist.js.map +0 -1
  190. package/esm/p256.d.ts +0 -16
  191. package/esm/p256.d.ts.map +0 -1
  192. package/esm/p256.js +0 -16
  193. package/esm/p256.js.map +0 -1
  194. package/esm/p384.d.ts +0 -16
  195. package/esm/p384.d.ts.map +0 -1
  196. package/esm/p384.js +0 -16
  197. package/esm/p384.js.map +0 -1
  198. package/esm/p521.d.ts +0 -16
  199. package/esm/p521.d.ts.map +0 -1
  200. package/esm/p521.js +0 -16
  201. package/esm/p521.js.map +0 -1
  202. package/esm/package.json +0 -4
  203. package/esm/pasta.d.ts +0 -10
  204. package/esm/pasta.d.ts.map +0 -1
  205. package/esm/pasta.js +0 -10
  206. package/esm/pasta.js.map +0 -1
  207. package/esm/secp256k1.d.ts +0 -89
  208. package/esm/secp256k1.d.ts.map +0 -1
  209. package/esm/secp256k1.js +0 -294
  210. package/esm/secp256k1.js.map +0 -1
  211. package/esm/utils.d.ts +0 -110
  212. package/esm/utils.d.ts.map +0 -1
  213. package/esm/utils.js +0 -322
  214. package/esm/utils.js.map +0 -1
  215. package/jubjub.d.ts +0 -12
  216. package/jubjub.d.ts.map +0 -1
  217. package/jubjub.js +0 -15
  218. package/jubjub.js.map +0 -1
  219. package/p256.d.ts +0 -16
  220. package/p256.d.ts.map +0 -1
  221. package/p256.js +0 -13
  222. package/p256.js.map +0 -1
  223. package/p384.d.ts +0 -16
  224. package/p384.d.ts.map +0 -1
  225. package/p384.js +0 -13
  226. package/p384.js.map +0 -1
  227. package/p521.d.ts +0 -16
  228. package/p521.d.ts.map +0 -1
  229. package/p521.js +0 -13
  230. package/p521.js.map +0 -1
  231. package/pasta.d.ts +0 -10
  232. package/pasta.d.ts.map +0 -1
  233. package/pasta.js +0 -13
  234. package/pasta.js.map +0 -1
  235. package/src/_shortw_utils.ts +0 -21
  236. package/src/abstract/utils.ts +0 -80
  237. package/src/jubjub.ts +0 -12
  238. package/src/p256.ts +0 -15
  239. package/src/p384.ts +0 -15
  240. package/src/p521.ts +0 -15
  241. package/src/package.json +0 -3
  242. package/src/pasta.ts +0 -9
package/bn254.d.ts CHANGED
@@ -1,18 +1,66 @@
1
- import { type CurveFn as BLSCurveFn, type PostPrecomputeFn } from './abstract/bls.ts';
1
+ /**
2
+ * bn254, previously known as alt_bn_128, when it had 128-bit security.
3
+
4
+ Barbulescu-Duquesne 2017 shown it's weaker: just about 100 bits,
5
+ so the naming has been adjusted to its prime bit count:
6
+ https://hal.science/hal-01534101/file/main.pdf.
7
+ Compatible with EIP-196 and EIP-197.
8
+
9
+ There are huge compatibility issues in the ecosystem:
10
+
11
+ 1. Different libraries call it in different ways: "bn254", "bn256", "alt_bn128", "bn128".
12
+ 2. libff has bn128, but it's a different curve with different G2:
13
+ https://github.com/scipr-lab/libff/blob/a44f482e18b8ac04d034c193bd9d7df7817ad73f/libff/algebra/curves/bn128/bn128_init.cpp#L166-L169
14
+ 3. halo2curves bn256 is also incompatible and returns different outputs
15
+
16
+ We don't implement Point methods toHex / toBytes.
17
+ To work around this limitation, has to initialize points on their own from BigInts.
18
+ Reason it's not implemented is because [there is no standard](https://github.com/privacy-scaling-explorations/halo2curves/issues/109).
19
+ Points of divergence:
20
+
21
+ - Endianness: LE vs BE (byte-swapped)
22
+ - Flags as first hex bits (similar to BLS) vs no-flags
23
+ - Imaginary part last in G2 vs first (c0, c1 vs c1, c0)
24
+
25
+ The goal of our implementation is to support "Ethereum" variant of the curve,
26
+ because it at least has specs:
27
+
28
+ - EIP196 (https://eips.ethereum.org/EIPS/eip-196) describes bn254 ECADD and ECMUL opcodes for EVM
29
+ - EIP197 (https://eips.ethereum.org/EIPS/eip-197) describes bn254 pairings
30
+ - It's hard: EIPs don't have proper tests. EIP-197 returns boolean output instead of Fp12
31
+ - The existing implementations are bad. Some are deprecated:
32
+ - https://github.com/paritytech/bn (old version)
33
+ - https://github.com/ewasm/ethereum-bn128.rs (uses paritytech/bn)
34
+ - https://github.com/zcash-hackworks/bn
35
+ - https://github.com/arkworks-rs/curves/blob/master/bn254/src/lib.rs
36
+ - Python implementations use different towers and produce different Fp12 outputs:
37
+ - https://github.com/ethereum/py_pairing
38
+ - https://github.com/ethereum/execution-specs/blob/master/src/ethereum/crypto/alt_bn128.py
39
+ - Points are encoded differently in different implementations
40
+
41
+ ### Params
42
+ Seed (X): 4965661367192848881
43
+ Fr: (36x⁴+36x³+18x²+6x+1)
44
+ Fp: (36x⁴+36x³+24x²+6x+1)
45
+ (E / Fp ): Y² = X³+3
46
+ (Et / Fp²): Y² = X³+3/(u+9) (D-type twist)
47
+ Ate loop size: 6x+2
48
+
49
+ ### Towers
50
+ - Fp²[u] = Fp/u²+1
51
+ - Fp⁶[v] = Fp²/v³-9-u
52
+ - Fp¹²[w] = Fp⁶/w²-v
53
+
54
+ * @module
55
+ */
56
+ /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */
57
+ import { type BlsCurvePair, type BlsPostPrecomputeFn } from './abstract/bls.ts';
2
58
  import { type IField } from './abstract/modular.ts';
3
- import { type CurveFn } from './abstract/weierstrass.ts';
4
59
  export declare const bn254_Fr: IField<bigint>;
5
- export declare const _postPrecompute: PostPrecomputeFn;
60
+ export declare const _postPrecompute: BlsPostPrecomputeFn;
6
61
  /**
7
62
  * bn254 (a.k.a. alt_bn128) pairing-friendly curve.
8
63
  * Contains G1 / G2 operations and pairings.
9
64
  */
10
- export declare const bn254: BLSCurveFn;
11
- /**
12
- * bn254 weierstrass curve with ECDSA.
13
- * This is very rare and probably not used anywhere.
14
- * Instead, you should use G1 / G2, defined above.
15
- * @deprecated
16
- */
17
- export declare const bn254_weierstrass: CurveFn;
65
+ export declare const bn254: BlsCurvePair;
18
66
  //# sourceMappingURL=bn254.d.ts.map
package/bn254.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"bn254.d.ts","sourceRoot":"","sources":["src/bn254.ts"],"names":[],"mappings":"AAyDA,OAAO,EAEL,KAAK,OAAO,IAAI,UAAU,EAC1B,KAAK,gBAAgB,EAEtB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAS,KAAK,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAG3D,OAAO,EAAE,KAAK,OAAO,EAAqC,MAAM,2BAA2B,CAAC;AAsB5F,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,MAAM,CAA2B,CAAC;AAsDhE,eAAO,MAAM,eAAe,EAAE,gBAY7B,CAAC;AAmBF;;;GAGG;AACH,eAAO,MAAM,KAAK,EAAE,UAgDlB,CAAC;AAEH;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,EAAE,OAS9B,CAAC"}
1
+ {"version":3,"file":"bn254.d.ts","sourceRoot":"","sources":["src/bn254.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;AACH,sEAAsE;AACtE,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,mBAAmB,EAEzB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAS,KAAK,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAyB3D,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,MAAM,CAA2B,CAAC;AAoChE,eAAO,MAAM,eAAe,EAAE,mBAY7B,CAAC;AA8EF;;;GAGG;AAEH,eAAO,MAAM,KAAK,EAAE,YAAiE,CAAC"}
package/bn254.js CHANGED
@@ -1,6 +1,3 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.bn254_weierstrass = exports.bn254 = exports._postPrecompute = exports.bn254_Fr = void 0;
4
1
  /**
5
2
  * bn254, previously known as alt_bn_128, when it had 128-bit security.
6
3
 
@@ -57,17 +54,16 @@ Ate loop size: 6x+2
57
54
  * @module
58
55
  */
59
56
  /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */
60
- const sha2_js_1 = require("@noble/hashes/sha2.js");
61
- const bls_ts_1 = require("./abstract/bls.js");
62
- const modular_ts_1 = require("./abstract/modular.js");
63
- const tower_ts_1 = require("./abstract/tower.js");
64
- const weierstrass_ts_1 = require("./abstract/weierstrass.js");
65
- const utils_ts_1 = require("./utils.js");
57
+ import { blsBasic, } from "./abstract/bls.js";
58
+ import { Field } from "./abstract/modular.js";
59
+ import { psiFrobenius, tower12 } from "./abstract/tower.js";
60
+ import { weierstrass } from "./abstract/weierstrass.js";
61
+ import { bitLen } from "./utils.js";
66
62
  // prettier-ignore
67
63
  const _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _3n = BigInt(3);
68
64
  const _6n = BigInt(6);
69
65
  const BN_X = BigInt('4965661367192848881');
70
- const BN_X_LEN = (0, utils_ts_1.bitLen)(BN_X);
66
+ const BN_X_LEN = bitLen(BN_X);
71
67
  const SIX_X_SQUARED = _6n * BN_X ** _2n;
72
68
  const bn254_G1_CURVE = {
73
69
  p: BigInt('0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47'),
@@ -80,13 +76,13 @@ const bn254_G1_CURVE = {
80
76
  };
81
77
  // r == n
82
78
  // Finite field over r. It's for convenience and is not used in the code below.
83
- exports.bn254_Fr = (0, modular_ts_1.Field)(bn254_G1_CURVE.n);
79
+ export const bn254_Fr = Field(bn254_G1_CURVE.n);
84
80
  // Fp2.div(Fp2.mul(Fp2.ONE, _3n), Fp2.NONRESIDUE)
85
81
  const Fp2B = {
86
82
  c0: BigInt('19485874751759354771024239261021720505790618469301721065564631296452457478373'),
87
83
  c1: BigInt('266929791119991161246907387137283842545076965332900288569378510910307636690'),
88
84
  };
89
- const { Fp, Fp2, Fp6, Fp12 } = (0, tower_ts_1.tower12)({
85
+ const { Fp, Fp2, Fp6, Fp12 } = tower12({
90
86
  ORDER: bn254_G1_CURVE.p,
91
87
  X_LEN: BN_X_LEN,
92
88
  FP2_NONRESIDUE: [BigInt(9), _1n],
@@ -105,31 +101,13 @@ const { Fp, Fp2, Fp6, Fp12 } = (0, tower_ts_1.tower12)({
105
101
  },
106
102
  });
107
103
  // END OF CURVE FIELDS
108
- const { G2psi, psi } = (0, tower_ts_1.psiFrobenius)(Fp, Fp2, Fp2.NONRESIDUE);
109
- /*
110
- No hashToCurve for now (and signatures):
111
-
112
- - RFC 9380 doesn't mention bn254 and doesn't provide test vectors
113
- - Overall seems like nobody is using BLS signatures on top of bn254
114
- - Seems like it can utilize SVDW, which is not implemented yet
115
- */
116
- const htfDefaults = Object.freeze({
117
- // DST: a domain separation tag defined in section 2.2.5
118
- DST: 'BN254G2_XMD:SHA-256_SVDW_RO_',
119
- encodeDST: 'BN254G2_XMD:SHA-256_SVDW_RO_',
120
- p: Fp.ORDER,
121
- m: 2,
122
- k: 128,
123
- expand: 'xmd',
124
- hash: sha2_js_1.sha256,
125
- });
126
- const _postPrecompute = (Rx, Ry, Rz, Qx, Qy, pointAdd) => {
104
+ const { G2psi, psi } = psiFrobenius(Fp, Fp2, Fp2.NONRESIDUE);
105
+ export const _postPrecompute = (Rx, Ry, Rz, Qx, Qy, pointAdd) => {
127
106
  const q = psi(Qx, Qy);
128
107
  ({ Rx, Ry, Rz } = pointAdd(Rx, Ry, Rz, q[0], q[1]));
129
108
  const q2 = psi(q[0], q[1]);
130
109
  pointAdd(Rx, Ry, Rz, q2[0], Fp2.neg(q2[1]));
131
110
  };
132
- exports._postPrecompute = _postPrecompute;
133
111
  // cofactor: (36 * X^4) + (36 * X^3) + (30 * X^2) + 6*X + 1
134
112
  const bn254_G2_CURVE = {
135
113
  p: Fp2.ORDER,
@@ -146,73 +124,67 @@ const bn254_G2_CURVE = {
146
124
  BigInt('4082367875863433681332203403145435568316851327593401208105741076214120093531'),
147
125
  ]),
148
126
  };
127
+ const fields = { Fp, Fp2, Fp6, Fp12, Fr: bn254_Fr };
128
+ const bn254_G1 = weierstrass(bn254_G1_CURVE, {
129
+ Fp,
130
+ Fn: bn254_Fr,
131
+ allowInfinityPoint: true,
132
+ });
133
+ const bn254_G2 = weierstrass(bn254_G2_CURVE, {
134
+ Fp: Fp2,
135
+ Fn: bn254_Fr,
136
+ allowInfinityPoint: true,
137
+ isTorsionFree: (c, P) => P.multiplyUnsafe(SIX_X_SQUARED).equals(G2psi(c, P)), // [p]P = [6X^2]P
138
+ });
139
+ /*
140
+ No hashToCurve for now (and signatures):
141
+
142
+ - RFC 9380 doesn't mention bn254 and doesn't provide test vectors
143
+ - Overall seems like nobody is using BLS signatures on top of bn254
144
+ - Seems like it can utilize SVDW, which is not implemented yet
145
+ */
146
+ // const htfDefaults = Object.freeze({
147
+ // // DST: a domain separation tag defined in section 2.2.5
148
+ // DST: 'BN254G2_XMD:SHA-256_SVDW_RO_',
149
+ // encodeDST: 'BN254G2_XMD:SHA-256_SVDW_RO_',
150
+ // p: Fp.ORDER,
151
+ // m: 2,
152
+ // k: 128,
153
+ // expand: 'xmd',
154
+ // hash: sha256,
155
+ // });
156
+ // const hasherOpts = {
157
+ // { ...htfDefaults, m: 1, DST: 'BN254G2_XMD:SHA-256_SVDW_RO_' }
158
+ // };
159
+ const bn254_params = {
160
+ ateLoopSize: BN_X * _6n + _2n,
161
+ r: bn254_Fr.ORDER,
162
+ xNegative: false,
163
+ twistType: 'divisive',
164
+ postPrecompute: _postPrecompute,
165
+ };
166
+ // const bn254_hasher = {
167
+ // hasherOpts: htfDefaults,
168
+ // hasherOptsG1: { m: 1, DST: 'BN254G2_XMD:SHA-256_SVDW_RO_' },
169
+ // hasherOptsG2: htfDefaults
170
+ // };
171
+ // G2_heff hEff: BigInt('21888242871839275222246405745257275088844257914179612981679871602714643921549'),
172
+ // fromBytes: notImplemented,
173
+ // toBytes: notImplemented,
174
+ // mapToCurve: notImplemented,
175
+ // fromBytes: notImplemented,
176
+ // toBytes: notImplemented,
177
+ // ShortSignature: {
178
+ // fromBytes: notImplemented,
179
+ // fromHex: notImplemented,
180
+ // toBytes: notImplemented,
181
+ // toRawBytes: notImplemented,
182
+ // toHex: notImplemented,
183
+ // },
149
184
  /**
150
185
  * bn254 (a.k.a. alt_bn128) pairing-friendly curve.
151
186
  * Contains G1 / G2 operations and pairings.
152
187
  */
153
- exports.bn254 = (0, bls_ts_1.bls)({
154
- // Fields
155
- fields: { Fp, Fp2, Fp6, Fp12, Fr: exports.bn254_Fr },
156
- G1: {
157
- ...bn254_G1_CURVE,
158
- Fp,
159
- htfDefaults: { ...htfDefaults, m: 1, DST: 'BN254G2_XMD:SHA-256_SVDW_RO_' },
160
- wrapPrivateKey: true,
161
- allowInfinityPoint: true,
162
- mapToCurve: utils_ts_1.notImplemented,
163
- fromBytes: utils_ts_1.notImplemented,
164
- toBytes: utils_ts_1.notImplemented,
165
- ShortSignature: {
166
- fromBytes: utils_ts_1.notImplemented,
167
- fromHex: utils_ts_1.notImplemented,
168
- toBytes: utils_ts_1.notImplemented,
169
- toRawBytes: utils_ts_1.notImplemented,
170
- toHex: utils_ts_1.notImplemented,
171
- },
172
- },
173
- G2: {
174
- ...bn254_G2_CURVE,
175
- Fp: Fp2,
176
- hEff: BigInt('21888242871839275222246405745257275088844257914179612981679871602714643921549'),
177
- htfDefaults: { ...htfDefaults },
178
- wrapPrivateKey: true,
179
- allowInfinityPoint: true,
180
- isTorsionFree: (c, P) => P.multiplyUnsafe(SIX_X_SQUARED).equals(G2psi(c, P)), // [p]P = [6X^2]P
181
- mapToCurve: utils_ts_1.notImplemented,
182
- fromBytes: utils_ts_1.notImplemented,
183
- toBytes: utils_ts_1.notImplemented,
184
- Signature: {
185
- fromBytes: utils_ts_1.notImplemented,
186
- fromHex: utils_ts_1.notImplemented,
187
- toBytes: utils_ts_1.notImplemented,
188
- toRawBytes: utils_ts_1.notImplemented,
189
- toHex: utils_ts_1.notImplemented,
190
- },
191
- },
192
- params: {
193
- ateLoopSize: BN_X * _6n + _2n,
194
- r: exports.bn254_Fr.ORDER,
195
- xNegative: false,
196
- twistType: 'divisive',
197
- },
198
- htfDefaults,
199
- hash: sha2_js_1.sha256,
200
- postPrecompute: exports._postPrecompute,
201
- });
202
- /**
203
- * bn254 weierstrass curve with ECDSA.
204
- * This is very rare and probably not used anywhere.
205
- * Instead, you should use G1 / G2, defined above.
206
- * @deprecated
207
- */
208
- exports.bn254_weierstrass = (0, weierstrass_ts_1.weierstrass)({
209
- a: BigInt(0),
210
- b: BigInt(3),
211
- Fp,
212
- n: BigInt('21888242871839275222246405745257275088548364400416034343698204186575808495617'),
213
- Gx: BigInt(1),
214
- Gy: BigInt(2),
215
- h: BigInt(1),
216
- hash: sha2_js_1.sha256,
217
- });
188
+ // bn254_hasher
189
+ export const bn254 = blsBasic(fields, bn254_G1, bn254_G2, bn254_params);
218
190
  //# sourceMappingURL=bn254.js.map
package/bn254.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"bn254.js","sourceRoot":"","sources":["src/bn254.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;AACH,sEAAsE;AACtE,mDAA+C;AAC/C,8CAK2B;AAC3B,sDAA2D;AAE3D,kDAA4D;AAC5D,8DAA4F;AAC5F,yCAAoD;AACpD,kBAAkB;AAClB,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACzE,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AAEtB,MAAM,IAAI,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAC;AAC3C,MAAM,QAAQ,GAAG,IAAA,iBAAM,EAAC,IAAI,CAAC,CAAC;AAC9B,MAAM,aAAa,GAAG,GAAG,GAAG,IAAI,IAAI,GAAG,CAAC;AAExC,MAAM,cAAc,GAA4B;IAC9C,CAAC,EAAE,MAAM,CAAC,oEAAoE,CAAC;IAC/E,CAAC,EAAE,MAAM,CAAC,oEAAoE,CAAC;IAC/E,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,EAAE,EAAE,GAAG;IACP,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;CACd,CAAC;AAEF,SAAS;AACT,+EAA+E;AAClE,QAAA,QAAQ,GAAmB,IAAA,kBAAK,EAAC,cAAc,CAAC,CAAC,CAAC,CAAC;AAEhE,iDAAiD;AACjD,MAAM,IAAI,GAAG;IACX,EAAE,EAAE,MAAM,CAAC,+EAA+E,CAAC;IAC3F,EAAE,EAAE,MAAM,CAAC,6EAA6E,CAAC;CAC1F,CAAC;AAEF,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,IAAA,kBAAO,EAAC;IACrC,KAAK,EAAE,cAAc,CAAC,CAAC;IACvB,KAAK,EAAE,QAAQ;IACf,cAAc,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC;IAChC,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC;IACtC,qBAAqB,EAAE,CAAC,GAAG,EAAE,EAAE;QAC7B,MAAM,SAAS,GAAG,CAAC,GAAS,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;QAChF,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACxD,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACjD,MAAM,EAAE,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QAChD,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACpD,MAAM,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;QACzB,MAAM,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC;QACjD,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1E,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAC5B,OAAO,IAAI,CAAC,GAAG,CACb,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EACrD,IAAI,CAAC,GAAG,CACN,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC,CAAC,EACxB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAClE,CACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC;AAEH,sBAAsB;AACtB,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,IAAA,uBAAY,EAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;AAE7D;;;;;;EAME;AACF,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC;IAChC,wDAAwD;IACxD,GAAG,EAAE,8BAA8B;IACnC,SAAS,EAAE,8BAA8B;IACzC,CAAC,EAAE,EAAE,CAAC,KAAK;IACX,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,GAAG;IACN,MAAM,EAAE,KAAK;IACb,IAAI,EAAE,gBAAM;CACb,CAAC,CAAC;AAEI,MAAM,eAAe,GAAqB,CAC/C,EAAO,EACP,EAAO,EACP,EAAO,EACP,EAAO,EACP,EAAO,EACP,QAAkC,EAClC,EAAE;IACF,MAAM,CAAC,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACtB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3B,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9C,CAAC,CAAC;AAZW,QAAA,eAAe,mBAY1B;AAEF,2DAA2D;AAC3D,MAAM,cAAc,GAAyB;IAC3C,CAAC,EAAE,GAAG,CAAC,KAAK;IACZ,CAAC,EAAE,cAAc,CAAC,CAAC;IACnB,CAAC,EAAE,MAAM,CAAC,oEAAoE,CAAC;IAC/E,CAAC,EAAE,GAAG,CAAC,IAAI;IACX,CAAC,EAAE,IAAI;IACP,EAAE,EAAE,GAAG,CAAC,YAAY,CAAC;QACnB,MAAM,CAAC,+EAA+E,CAAC;QACvF,MAAM,CAAC,+EAA+E,CAAC;KACxF,CAAC;IACF,EAAE,EAAE,GAAG,CAAC,YAAY,CAAC;QACnB,MAAM,CAAC,8EAA8E,CAAC;QACtF,MAAM,CAAC,8EAA8E,CAAC;KACvF,CAAC;CACH,CAAC;AAEF;;;GAGG;AACU,QAAA,KAAK,GAAe,IAAA,YAAG,EAAC;IACnC,SAAS;IACT,MAAM,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,gBAAQ,EAAE;IAC5C,EAAE,EAAE;QACF,GAAG,cAAc;QACjB,EAAE;QACF,WAAW,EAAE,EAAE,GAAG,WAAW,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,8BAA8B,EAAE;QAC1E,cAAc,EAAE,IAAI;QACpB,kBAAkB,EAAE,IAAI;QACxB,UAAU,EAAE,yBAAc;QAC1B,SAAS,EAAE,yBAAc;QACzB,OAAO,EAAE,yBAAc;QACvB,cAAc,EAAE;YACd,SAAS,EAAE,yBAAc;YACzB,OAAO,EAAE,yBAAc;YACvB,OAAO,EAAE,yBAAc;YACvB,UAAU,EAAE,yBAAc;YAC1B,KAAK,EAAE,yBAAc;SACtB;KACF;IACD,EAAE,EAAE;QACF,GAAG,cAAc;QACjB,EAAE,EAAE,GAAG;QACP,IAAI,EAAE,MAAM,CAAC,+EAA+E,CAAC;QAC7F,WAAW,EAAE,EAAE,GAAG,WAAW,EAAE;QAC/B,cAAc,EAAE,IAAI;QACpB,kBAAkB,EAAE,IAAI;QACxB,aAAa,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,iBAAiB;QAC/F,UAAU,EAAE,yBAAc;QAC1B,SAAS,EAAE,yBAAc;QACzB,OAAO,EAAE,yBAAc;QACvB,SAAS,EAAE;YACT,SAAS,EAAE,yBAAc;YACzB,OAAO,EAAE,yBAAc;YACvB,OAAO,EAAE,yBAAc;YACvB,UAAU,EAAE,yBAAc;YAC1B,KAAK,EAAE,yBAAc;SACtB;KACF;IACD,MAAM,EAAE;QACN,WAAW,EAAE,IAAI,GAAG,GAAG,GAAG,GAAG;QAC7B,CAAC,EAAE,gBAAQ,CAAC,KAAK;QACjB,SAAS,EAAE,KAAK;QAChB,SAAS,EAAE,UAAU;KACtB;IACD,WAAW;IACX,IAAI,EAAE,gBAAM;IACZ,cAAc,EAAE,uBAAe;CAChC,CAAC,CAAC;AAEH;;;;;GAKG;AACU,QAAA,iBAAiB,GAAY,IAAA,4BAAW,EAAC;IACpD,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACZ,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACZ,EAAE;IACF,CAAC,EAAE,MAAM,CAAC,+EAA+E,CAAC;IAC1F,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;IACb,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;IACb,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACZ,IAAI,EAAE,gBAAM;CACb,CAAC,CAAC"}
1
+ {"version":3,"file":"bn254.js","sourceRoot":"","sources":["src/bn254.ts"],"names":[],"mappings":"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"}
package/ed25519.d.ts CHANGED
@@ -1,44 +1,47 @@
1
1
  import { type AffinePoint } from './abstract/curve.ts';
2
- import { PrimeEdwardsPoint, type CurveFn, type EdwardsPoint } from './abstract/edwards.ts';
3
- import { type H2CHasher, type H2CHasherBase, type H2CMethod, type htfBasicOpts } from './abstract/hash-to-curve.ts';
2
+ import { PrimeEdwardsPoint, type EdDSA, type EdwardsPoint, type EdwardsPointCons } from './abstract/edwards.ts';
3
+ import { type H2CHasher, type H2CHasherBase } from './abstract/hash-to-curve.ts';
4
4
  import { type IField } from './abstract/modular.ts';
5
- import { type MontgomeryECDH as XCurveFn } from './abstract/montgomery.ts';
6
- import { type Hex } from './utils.ts';
5
+ import { type MontgomeryECDH } from './abstract/montgomery.ts';
6
+ import { type OPRF } from './abstract/oprf.ts';
7
7
  /**
8
8
  * ed25519 curve with EdDSA signatures.
9
9
  * @example
10
- * import { ed25519 } from '@noble/curves/ed25519';
10
+ * ```js
11
+ * import { ed25519 } from '@noble/curves/ed25519.js';
11
12
  * const { secretKey, publicKey } = ed25519.keygen();
12
- * const msg = new TextEncoder().encode('hello');
13
- * const sig = ed25519.sign(msg, priv);
14
- * ed25519.verify(sig, msg, pub); // Default mode: follows ZIP215
15
- * ed25519.verify(sig, msg, pub, { zip215: false }); // RFC8032 / FIPS 186-5
13
+ * // const publicKey = ed25519.getPublicKey(secretKey);
14
+ * const msg = new TextEncoder().encode('hello noble');
15
+ * const sig = ed25519.sign(msg, secretKey);
16
+ * const isValid = ed25519.verify(sig, msg, pub); // ZIP215
17
+ * // RFC8032 / FIPS 186-5
18
+ * const isValid2 = ed25519.verify(sig, msg, pub, { zip215: false });
19
+ * ```
16
20
  */
17
- export declare const ed25519: CurveFn;
18
- /** Context of ed25519. Uses context for domain separation. */
19
- export declare const ed25519ctx: CurveFn;
20
- /** Prehashed version of ed25519. Accepts already-hashed messages in sign() and verify(). */
21
- export declare const ed25519ph: CurveFn;
21
+ export declare const ed25519: EdDSA;
22
+ /** Context version of ed25519 (ctx for domain separation). See {@link ed25519} */
23
+ export declare const ed25519ctx: EdDSA;
24
+ /** Prehashed version of ed25519. See {@link ed25519} */
25
+ export declare const ed25519ph: EdDSA;
22
26
  /**
23
27
  * ECDH using curve25519 aka x25519.
24
28
  * @example
25
- * import { x25519 } from '@noble/curves/ed25519';
26
- * const priv = 'a546e36bf0527c9d3b16154b82465edd62144c0ac1fc5a18506a2244ba449ac4';
27
- * const pub = 'e6db6867583030db3594c1a424b15f7c726624ec26b3353b10a903a6d0ab1c4c';
28
- * x25519.getSharedSecret(priv, pub) === x25519.scalarMult(priv, pub); // aliases
29
- * x25519.getPublicKey(priv) === x25519.scalarMultBase(priv);
30
- * x25519.getPublicKey(x25519.utils.randomSecretKey());
29
+ * ```js
30
+ * import { x25519 } from '@noble/curves/ed25519.js';
31
+ * const alice = x25519.keygen();
32
+ * const bob = x25519.keygen();
33
+ * const shared = x25519.getSharedSecret(alice.secretKey, bob.publicKey);
34
+ * ```
31
35
  */
32
- export declare const x25519: XCurveFn;
36
+ export declare const x25519: MontgomeryECDH;
33
37
  /** Hashing to ed25519 points / field. RFC 9380 methods. */
34
- export declare const ed25519_hasher: H2CHasher<bigint>;
35
- type ExtendedPoint = EdwardsPoint;
38
+ export declare const ed25519_hasher: H2CHasher<EdwardsPointCons>;
36
39
  /**
37
40
  * Wrapper over Edwards Point for ristretto255.
38
41
  *
39
- * Each ed25519/ExtendedPoint has 8 different equivalent points. This can be
42
+ * Each ed25519/EdwardsPoint has 8 different equivalent points. This can be
40
43
  * a source of bugs for protocols like ring signatures. Ristretto was created to solve this.
41
- * Ristretto point operates in X:Y:Z:T extended coordinates like ExtendedPoint,
44
+ * Ristretto point operates in X:Y:Z:T extended coordinates like EdwardsPoint,
42
45
  * but it should work in its own namespace: do not combine those two.
43
46
  * See [RFC9496](https://www.rfc-editor.org/rfc/rfc9496).
44
47
  */
@@ -47,20 +50,17 @@ declare class _RistrettoPoint extends PrimeEdwardsPoint<_RistrettoPoint> {
47
50
  static ZERO: _RistrettoPoint;
48
51
  static Fp: IField<bigint>;
49
52
  static Fn: IField<bigint>;
50
- constructor(ep: ExtendedPoint);
53
+ constructor(ep: EdwardsPoint);
51
54
  static fromAffine(ap: AffinePoint<bigint>): _RistrettoPoint;
52
55
  protected assertSame(other: _RistrettoPoint): void;
53
56
  protected init(ep: EdwardsPoint): _RistrettoPoint;
54
- /** @deprecated use `import { ristretto255_hasher } from '@noble/curves/ed25519.js';` */
55
- static hashToCurve(hex: Hex): _RistrettoPoint;
56
57
  static fromBytes(bytes: Uint8Array): _RistrettoPoint;
57
58
  /**
58
59
  * Converts ristretto-encoded string to ristretto point.
59
60
  * Described in [RFC9496](https://www.rfc-editor.org/rfc/rfc9496#name-decode).
60
61
  * @param hex Ristretto-encoded 32 bytes. Not every 32-byte string is valid ristretto encoding
61
62
  */
62
- static fromHex(hex: Hex): _RistrettoPoint;
63
- static msm(points: _RistrettoPoint[], scalars: bigint[]): _RistrettoPoint;
63
+ static fromHex(hex: string): _RistrettoPoint;
64
64
  /**
65
65
  * Encodes ristretto point to Uint8Array.
66
66
  * Described in [RFC9496](https://www.rfc-editor.org/rfc/rfc9496#name-encode).
@@ -77,7 +77,9 @@ export declare const ristretto255: {
77
77
  Point: typeof _RistrettoPoint;
78
78
  };
79
79
  /** Hashing to ristretto255 points / field. RFC 9380 methods. */
80
- export declare const ristretto255_hasher: H2CHasherBase<bigint>;
80
+ export declare const ristretto255_hasher: H2CHasherBase<typeof _RistrettoPoint>;
81
+ /** ristretto255 OPRF, defined in RFC 9497. */
82
+ export declare const ristretto255_oprf: OPRF;
81
83
  /**
82
84
  * Weird / bogus points, useful for debugging.
83
85
  * All 8 ed25519 points of 8-torsion subgroup can be generated from the point
@@ -85,22 +87,5 @@ export declare const ristretto255_hasher: H2CHasherBase<bigint>;
85
87
  * ⟨T⟩ = { O, T, 2T, 3T, 4T, 5T, 6T, 7T }
86
88
  */
87
89
  export declare const ED25519_TORSION_SUBGROUP: string[];
88
- /** @deprecated use `ed25519.utils.toMontgomery` */
89
- export declare function edwardsToMontgomeryPub(edwardsPub: Hex): Uint8Array;
90
- /** @deprecated use `ed25519.utils.toMontgomery` */
91
- export declare const edwardsToMontgomery: typeof edwardsToMontgomeryPub;
92
- /** @deprecated use `ed25519.utils.toMontgomerySecret` */
93
- export declare function edwardsToMontgomeryPriv(edwardsPriv: Uint8Array): Uint8Array;
94
- /** @deprecated use `ristretto255.Point` */
95
- export declare const RistrettoPoint: typeof _RistrettoPoint;
96
- /** @deprecated use `import { ed25519_hasher } from '@noble/curves/ed25519.js';` */
97
- export declare const hashToCurve: H2CMethod<bigint>;
98
- /** @deprecated use `import { ed25519_hasher } from '@noble/curves/ed25519.js';` */
99
- export declare const encodeToCurve: H2CMethod<bigint>;
100
- type RistHasher = (msg: Uint8Array, options: htfBasicOpts) => _RistrettoPoint;
101
- /** @deprecated use `import { ristretto255_hasher } from '@noble/curves/ed25519.js';` */
102
- export declare const hashToRistretto255: RistHasher;
103
- /** @deprecated use `import { ristretto255_hasher } from '@noble/curves/ed25519.js';` */
104
- export declare const hash_to_ristretto255: RistHasher;
105
90
  export {};
106
91
  //# sourceMappingURL=ed25519.d.ts.map
package/ed25519.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"ed25519.d.ts","sourceRoot":"","sources":["src/ed25519.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ed25519.d.ts","sourceRoot":"","sources":["src/ed25519.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAGL,iBAAiB,EACjB,KAAK,KAAK,EAGV,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAKL,KAAK,SAAS,EACd,KAAK,aAAa,EACnB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAML,KAAK,MAAM,EACZ,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAc,KAAK,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC3E,OAAO,EAAc,KAAK,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAmG3D;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,OAAO,EAAE,KAA8B,CAAC;AACrD,kFAAkF;AAClF,eAAO,MAAM,UAAU,EAAE,KAAsD,CAAC;AAChF,wDAAwD;AACxD,eAAO,MAAM,SAAS,EAAE,KAAuE,CAAC;AAEhG;;;;;;;;;GASG;AACH,eAAO,MAAM,MAAM,EAAE,cAYjB,CAAC;AA0EL,2DAA2D;AAC3D,eAAO,MAAM,cAAc,EAAE,SAAS,CAAC,gBAAgB,CAajD,CAAC;AAuDP;;;;;;;;GAQG;AACH,cAAM,eAAgB,SAAQ,iBAAiB,CAAC,eAAe,CAAC;IAI9D,MAAM,CAAC,IAAI,EAAE,eAAe,CACwC;IAEpE,MAAM,CAAC,IAAI,EAAE,eAAe,CACwC;IAEpE,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,CACM;IAE/B,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,CACM;gBAEnB,EAAE,EAAE,YAAY;IAI5B,MAAM,CAAC,UAAU,CAAC,EAAE,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,eAAe;IAI3D,SAAS,CAAC,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI;IAIlD,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,YAAY,GAAG,eAAe;IAIjD,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,eAAe;IA4BpD;;;;OAIG;IACH,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe;IAI5C;;;OAGG;IACH,OAAO,IAAI,UAAU;IA4BrB;;;OAGG;IACH,MAAM,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO;IAWvC,GAAG,IAAI,OAAO;CAGf;AAED,eAAO,MAAM,YAAY,EAAE;IACzB,KAAK,EAAE,OAAO,eAAe,CAAC;CACF,CAAC;AAE/B,gEAAgE;AAChE,eAAO,MAAM,mBAAmB,EAAE,aAAa,CAAC,OAAO,eAAe,CA0CrE,CAAC;AAEF,8CAA8C;AAC9C,eAAO,MAAM,iBAAiB,EAAE,IAOzB,CAAC;AAER;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,EAAE,MAAM,EAS5C,CAAC"}