@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/esm/ed448.js DELETED
@@ -1,459 +0,0 @@
1
- /**
2
- * Edwards448 (not Ed448-Goldilocks) curve with following addons:
3
- * - X448 ECDH
4
- * - Decaf cofactor elimination
5
- * - Elligator hash-to-group / point indistinguishability
6
- * Conforms to RFC 8032 https://www.rfc-editor.org/rfc/rfc8032.html#section-5.2
7
- * @module
8
- */
9
- /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */
10
- import { shake256 } from '@noble/hashes/sha3.js';
11
- import { abytes, concatBytes, createHasher as wrapConstructor } from '@noble/hashes/utils.js';
12
- import { pippenger } from "./abstract/curve.js";
13
- import { edwards, PrimeEdwardsPoint, twistedEdwards, } from "./abstract/edwards.js";
14
- import { _DST_scalar, createHasher, expand_message_xof, } from "./abstract/hash-to-curve.js";
15
- import { Field, FpInvertBatch, isNegativeLE, mod, pow2 } from "./abstract/modular.js";
16
- import { montgomery } from "./abstract/montgomery.js";
17
- import { asciiToBytes, bytesToNumberLE, ensureBytes, equalBytes } from "./utils.js";
18
- // edwards448 curve
19
- // a = 1n
20
- // d = Fp.neg(39081n)
21
- // Finite field 2n**448n - 2n**224n - 1n
22
- // Subgroup order
23
- // 2n**446n - 13818066809895115352007386748515426880336692474882178609894547503885n
24
- const ed448_CURVE = {
25
- p: BigInt('0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffff'),
26
- n: BigInt('0x3fffffffffffffffffffffffffffffffffffffffffffffffffffffff7cca23e9c44edb49aed63690216cc2728dc58f552378c292ab5844f3'),
27
- h: BigInt(4),
28
- a: BigInt(1),
29
- d: BigInt('0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffff6756'),
30
- Gx: BigInt('0x4f1970c66bed0ded221d15a622bf36da9e146570470f1767ea6de324a3d3a46412ae1af72ab66511433b80e18b00938e2626a82bc70cc05e'),
31
- Gy: BigInt('0x693f46716eb6bc248876203756c9c7624bea73736ca3984087789c1e05a0c2d73ad3ff1ce67c39c4fdbd132c4ed7c8ad9808795bf230fa14'),
32
- };
33
- // E448 NIST curve is identical to edwards448, except for:
34
- // d = 39082/39081
35
- // Gx = 3/2
36
- const E448_CURVE = Object.assign({}, ed448_CURVE, {
37
- d: BigInt('0xd78b4bdc7f0daf19f24f38c29373a2ccad46157242a50f37809b1da3412a12e79ccc9c81264cfe9ad080997058fb61c4243cc32dbaa156b9'),
38
- Gx: BigInt('0x79a70b2b70400553ae7c9df416c792c61128751ac92969240c25a07d728bdc93e21f7787ed6972249de732f38496cd11698713093e9c04fc'),
39
- Gy: BigInt('0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000000000000000000000000000000000000000000000000001'),
40
- });
41
- const shake256_114 = /* @__PURE__ */ wrapConstructor(() => shake256.create({ dkLen: 114 }));
42
- const shake256_64 = /* @__PURE__ */ wrapConstructor(() => shake256.create({ dkLen: 64 }));
43
- // prettier-ignore
44
- const _1n = BigInt(1), _2n = BigInt(2), _3n = BigInt(3), _4n = BigInt(4), _11n = BigInt(11);
45
- // prettier-ignore
46
- const _22n = BigInt(22), _44n = BigInt(44), _88n = BigInt(88), _223n = BigInt(223);
47
- // powPminus3div4 calculates z = x^k mod p, where k = (p-3)/4.
48
- // Used for efficient square root calculation.
49
- // ((P-3)/4).toString(2) would produce bits [223x 1, 0, 222x 1]
50
- function ed448_pow_Pminus3div4(x) {
51
- const P = ed448_CURVE.p;
52
- const b2 = (x * x * x) % P;
53
- const b3 = (b2 * b2 * x) % P;
54
- const b6 = (pow2(b3, _3n, P) * b3) % P;
55
- const b9 = (pow2(b6, _3n, P) * b3) % P;
56
- const b11 = (pow2(b9, _2n, P) * b2) % P;
57
- const b22 = (pow2(b11, _11n, P) * b11) % P;
58
- const b44 = (pow2(b22, _22n, P) * b22) % P;
59
- const b88 = (pow2(b44, _44n, P) * b44) % P;
60
- const b176 = (pow2(b88, _88n, P) * b88) % P;
61
- const b220 = (pow2(b176, _44n, P) * b44) % P;
62
- const b222 = (pow2(b220, _2n, P) * b2) % P;
63
- const b223 = (pow2(b222, _1n, P) * x) % P;
64
- return (pow2(b223, _223n, P) * b222) % P;
65
- }
66
- function adjustScalarBytes(bytes) {
67
- // Section 5: Likewise, for X448, set the two least significant bits of the first byte to 0,
68
- bytes[0] &= 252; // 0b11111100
69
- // and the most significant bit of the last byte to 1.
70
- bytes[55] |= 128; // 0b10000000
71
- // NOTE: is NOOP for 56 bytes scalars (X25519/X448)
72
- bytes[56] = 0; // Byte outside of group (456 buts vs 448 bits)
73
- return bytes;
74
- }
75
- // Constant-time ratio of u to v. Allows to combine inversion and square root u/√v.
76
- // Uses algo from RFC8032 5.1.3.
77
- function uvRatio(u, v) {
78
- const P = ed448_CURVE.p;
79
- // https://www.rfc-editor.org/rfc/rfc8032#section-5.2.3
80
- // To compute the square root of (u/v), the first step is to compute the
81
- // candidate root x = (u/v)^((p+1)/4). This can be done using the
82
- // following trick, to use a single modular powering for both the
83
- // inversion of v and the square root:
84
- // x = (u/v)^((p+1)/4) = u³v(u⁵v³)^((p-3)/4) (mod p)
85
- const u2v = mod(u * u * v, P); // u²v
86
- const u3v = mod(u2v * u, P); // u³v
87
- const u5v3 = mod(u3v * u2v * v, P); // u⁵v³
88
- const root = ed448_pow_Pminus3div4(u5v3);
89
- const x = mod(u3v * root, P);
90
- // Verify that root is exists
91
- const x2 = mod(x * x, P); // x²
92
- // If vx² = u, the recovered x-coordinate is x. Otherwise, no
93
- // square root exists, and the decoding fails.
94
- return { isValid: mod(x2 * v, P) === u, value: x };
95
- }
96
- // Finite field 2n**448n - 2n**224n - 1n
97
- // The value fits in 448 bits, but we use 456-bit (57-byte) elements because of bitflags.
98
- // - ed25519 fits in 255 bits, allowing using last 1 byte for specifying bit flag of point negation.
99
- // - ed448 fits in 448 bits. We can't use last 1 byte: we can only use a bit 224 in the middle.
100
- const Fp = /* @__PURE__ */ (() => Field(ed448_CURVE.p, { BITS: 456, isLE: true }))();
101
- const Fn = /* @__PURE__ */ (() => Field(ed448_CURVE.n, { BITS: 456, isLE: true }))();
102
- // decaf448 uses 448-bit (56-byte) keys
103
- const Fp448 = /* @__PURE__ */ (() => Field(ed448_CURVE.p, { BITS: 448, isLE: true }))();
104
- const Fn448 = /* @__PURE__ */ (() => Field(ed448_CURVE.n, { BITS: 448, isLE: true }))();
105
- // SHAKE256(dom4(phflag,context)||x, 114)
106
- function dom4(data, ctx, phflag) {
107
- if (ctx.length > 255)
108
- throw new Error('context must be smaller than 255, got: ' + ctx.length);
109
- return concatBytes(asciiToBytes('SigEd448'), new Uint8Array([phflag ? 1 : 0, ctx.length]), ctx, data);
110
- }
111
- // const ed448_eddsa_opts = { adjustScalarBytes, domain: dom4 };
112
- // const ed448_Point = edwards(ed448_CURVE, { Fp, Fn, uvRatio });
113
- const ED448_DEF = /* @__PURE__ */ (() => ({
114
- ...ed448_CURVE,
115
- Fp,
116
- Fn,
117
- nBitLength: Fn.BITS,
118
- hash: shake256_114,
119
- adjustScalarBytes,
120
- domain: dom4,
121
- uvRatio,
122
- }))();
123
- /**
124
- * ed448 EdDSA curve and methods.
125
- * @example
126
- * import { ed448 } from '@noble/curves/ed448';
127
- * const { secretKey, publicKey } = ed448.keygen();
128
- * const msg = new TextEncoder().encode('hello');
129
- * const sig = ed448.sign(msg, secretKey);
130
- * const isValid = ed448.verify(sig, msg, publicKey);
131
- */
132
- export const ed448 = twistedEdwards(ED448_DEF);
133
- // There is no ed448ctx, since ed448 supports ctx by default
134
- /** Prehashed version of ed448. Accepts already-hashed messages in sign() and verify(). */
135
- export const ed448ph = /* @__PURE__ */ (() => twistedEdwards({
136
- ...ED448_DEF,
137
- prehash: shake256_64,
138
- }))();
139
- /**
140
- * E448 curve, defined by NIST.
141
- * E448 != edwards448 used in ed448.
142
- * E448 is birationally equivalent to edwards448.
143
- */
144
- export const E448 = edwards(E448_CURVE);
145
- /**
146
- * ECDH using curve448 aka x448.
147
- * x448 has 56-byte keys as per RFC 7748, while
148
- * ed448 has 57-byte keys as per RFC 8032.
149
- */
150
- export const x448 = /* @__PURE__ */ (() => {
151
- const P = ed448_CURVE.p;
152
- return montgomery({
153
- P,
154
- type: 'x448',
155
- powPminus2: (x) => {
156
- const Pminus3div4 = ed448_pow_Pminus3div4(x);
157
- const Pminus3 = pow2(Pminus3div4, _2n, P);
158
- return mod(Pminus3 * x, P); // Pminus3 * x = Pminus2
159
- },
160
- adjustScalarBytes,
161
- });
162
- })();
163
- // Hash To Curve Elligator2 Map
164
- const ELL2_C1 = /* @__PURE__ */ (() => (Fp.ORDER - BigInt(3)) / BigInt(4))(); // 1. c1 = (q - 3) / 4 # Integer arithmetic
165
- const ELL2_J = /* @__PURE__ */ BigInt(156326);
166
- function map_to_curve_elligator2_curve448(u) {
167
- let tv1 = Fp.sqr(u); // 1. tv1 = u^2
168
- let e1 = Fp.eql(tv1, Fp.ONE); // 2. e1 = tv1 == 1
169
- tv1 = Fp.cmov(tv1, Fp.ZERO, e1); // 3. tv1 = CMOV(tv1, 0, e1) # If Z * u^2 == -1, set tv1 = 0
170
- let xd = Fp.sub(Fp.ONE, tv1); // 4. xd = 1 - tv1
171
- let x1n = Fp.neg(ELL2_J); // 5. x1n = -J
172
- let tv2 = Fp.sqr(xd); // 6. tv2 = xd^2
173
- let gxd = Fp.mul(tv2, xd); // 7. gxd = tv2 * xd # gxd = xd^3
174
- let gx1 = Fp.mul(tv1, Fp.neg(ELL2_J)); // 8. gx1 = -J * tv1 # x1n + J * xd
175
- gx1 = Fp.mul(gx1, x1n); // 9. gx1 = gx1 * x1n # x1n^2 + J * x1n * xd
176
- gx1 = Fp.add(gx1, tv2); // 10. gx1 = gx1 + tv2 # x1n^2 + J * x1n * xd + xd^2
177
- gx1 = Fp.mul(gx1, x1n); // 11. gx1 = gx1 * x1n # x1n^3 + J * x1n^2 * xd + x1n * xd^2
178
- let tv3 = Fp.sqr(gxd); // 12. tv3 = gxd^2
179
- tv2 = Fp.mul(gx1, gxd); // 13. tv2 = gx1 * gxd # gx1 * gxd
180
- tv3 = Fp.mul(tv3, tv2); // 14. tv3 = tv3 * tv2 # gx1 * gxd^3
181
- let y1 = Fp.pow(tv3, ELL2_C1); // 15. y1 = tv3^c1 # (gx1 * gxd^3)^((p - 3) / 4)
182
- y1 = Fp.mul(y1, tv2); // 16. y1 = y1 * tv2 # gx1 * gxd * (gx1 * gxd^3)^((p - 3) / 4)
183
- let x2n = Fp.mul(x1n, Fp.neg(tv1)); // 17. x2n = -tv1 * x1n # x2 = x2n / xd = -1 * u^2 * x1n / xd
184
- let y2 = Fp.mul(y1, u); // 18. y2 = y1 * u
185
- y2 = Fp.cmov(y2, Fp.ZERO, e1); // 19. y2 = CMOV(y2, 0, e1)
186
- tv2 = Fp.sqr(y1); // 20. tv2 = y1^2
187
- tv2 = Fp.mul(tv2, gxd); // 21. tv2 = tv2 * gxd
188
- let e2 = Fp.eql(tv2, gx1); // 22. e2 = tv2 == gx1
189
- let xn = Fp.cmov(x2n, x1n, e2); // 23. xn = CMOV(x2n, x1n, e2) # If e2, x = x1, else x = x2
190
- let y = Fp.cmov(y2, y1, e2); // 24. y = CMOV(y2, y1, e2) # If e2, y = y1, else y = y2
191
- let e3 = Fp.isOdd(y); // 25. e3 = sgn0(y) == 1 # Fix sign of y
192
- y = Fp.cmov(y, Fp.neg(y), e2 !== e3); // 26. y = CMOV(y, -y, e2 XOR e3)
193
- return { xn, xd, yn: y, yd: Fp.ONE }; // 27. return (xn, xd, y, 1)
194
- }
195
- function map_to_curve_elligator2_edwards448(u) {
196
- let { xn, xd, yn, yd } = map_to_curve_elligator2_curve448(u); // 1. (xn, xd, yn, yd) = map_to_curve_elligator2_curve448(u)
197
- let xn2 = Fp.sqr(xn); // 2. xn2 = xn^2
198
- let xd2 = Fp.sqr(xd); // 3. xd2 = xd^2
199
- let xd4 = Fp.sqr(xd2); // 4. xd4 = xd2^2
200
- let yn2 = Fp.sqr(yn); // 5. yn2 = yn^2
201
- let yd2 = Fp.sqr(yd); // 6. yd2 = yd^2
202
- let xEn = Fp.sub(xn2, xd2); // 7. xEn = xn2 - xd2
203
- let tv2 = Fp.sub(xEn, xd2); // 8. tv2 = xEn - xd2
204
- xEn = Fp.mul(xEn, xd2); // 9. xEn = xEn * xd2
205
- xEn = Fp.mul(xEn, yd); // 10. xEn = xEn * yd
206
- xEn = Fp.mul(xEn, yn); // 11. xEn = xEn * yn
207
- xEn = Fp.mul(xEn, _4n); // 12. xEn = xEn * 4
208
- tv2 = Fp.mul(tv2, xn2); // 13. tv2 = tv2 * xn2
209
- tv2 = Fp.mul(tv2, yd2); // 14. tv2 = tv2 * yd2
210
- let tv3 = Fp.mul(yn2, _4n); // 15. tv3 = 4 * yn2
211
- let tv1 = Fp.add(tv3, yd2); // 16. tv1 = tv3 + yd2
212
- tv1 = Fp.mul(tv1, xd4); // 17. tv1 = tv1 * xd4
213
- let xEd = Fp.add(tv1, tv2); // 18. xEd = tv1 + tv2
214
- tv2 = Fp.mul(tv2, xn); // 19. tv2 = tv2 * xn
215
- let tv4 = Fp.mul(xn, xd4); // 20. tv4 = xn * xd4
216
- let yEn = Fp.sub(tv3, yd2); // 21. yEn = tv3 - yd2
217
- yEn = Fp.mul(yEn, tv4); // 22. yEn = yEn * tv4
218
- yEn = Fp.sub(yEn, tv2); // 23. yEn = yEn - tv2
219
- tv1 = Fp.add(xn2, xd2); // 24. tv1 = xn2 + xd2
220
- tv1 = Fp.mul(tv1, xd2); // 25. tv1 = tv1 * xd2
221
- tv1 = Fp.mul(tv1, xd); // 26. tv1 = tv1 * xd
222
- tv1 = Fp.mul(tv1, yn2); // 27. tv1 = tv1 * yn2
223
- tv1 = Fp.mul(tv1, BigInt(-2)); // 28. tv1 = -2 * tv1
224
- let yEd = Fp.add(tv2, tv1); // 29. yEd = tv2 + tv1
225
- tv4 = Fp.mul(tv4, yd2); // 30. tv4 = tv4 * yd2
226
- yEd = Fp.add(yEd, tv4); // 31. yEd = yEd + tv4
227
- tv1 = Fp.mul(xEd, yEd); // 32. tv1 = xEd * yEd
228
- let e = Fp.eql(tv1, Fp.ZERO); // 33. e = tv1 == 0
229
- xEn = Fp.cmov(xEn, Fp.ZERO, e); // 34. xEn = CMOV(xEn, 0, e)
230
- xEd = Fp.cmov(xEd, Fp.ONE, e); // 35. xEd = CMOV(xEd, 1, e)
231
- yEn = Fp.cmov(yEn, Fp.ONE, e); // 36. yEn = CMOV(yEn, 1, e)
232
- yEd = Fp.cmov(yEd, Fp.ONE, e); // 37. yEd = CMOV(yEd, 1, e)
233
- const inv = FpInvertBatch(Fp, [xEd, yEd], true); // batch division
234
- return { x: Fp.mul(xEn, inv[0]), y: Fp.mul(yEn, inv[1]) }; // 38. return (xEn, xEd, yEn, yEd)
235
- }
236
- /** Hashing / encoding to ed448 points / field. RFC 9380 methods. */
237
- export const ed448_hasher = /* @__PURE__ */ (() => createHasher(ed448.Point, (scalars) => map_to_curve_elligator2_edwards448(scalars[0]), {
238
- DST: 'edwards448_XOF:SHAKE256_ELL2_RO_',
239
- encodeDST: 'edwards448_XOF:SHAKE256_ELL2_NU_',
240
- p: Fp.ORDER,
241
- m: 1,
242
- k: 224,
243
- expand: 'xof',
244
- hash: shake256,
245
- }))();
246
- // 1-d
247
- const ONE_MINUS_D = /* @__PURE__ */ BigInt('39082');
248
- // 1-2d
249
- const ONE_MINUS_TWO_D = /* @__PURE__ */ BigInt('78163');
250
- // √(-d)
251
- const SQRT_MINUS_D = /* @__PURE__ */ BigInt('98944233647732219769177004876929019128417576295529901074099889598043702116001257856802131563896515373927712232092845883226922417596214');
252
- // 1 / √(-d)
253
- const INVSQRT_MINUS_D = /* @__PURE__ */ BigInt('315019913931389607337177038330951043522456072897266928557328499619017160722351061360252776265186336876723201881398623946864393857820716');
254
- // Calculates 1/√(number)
255
- const invertSqrt = (number) => uvRatio(_1n, number);
256
- /**
257
- * Elligator map for hash-to-curve of decaf448.
258
- * Described in [RFC9380](https://www.rfc-editor.org/rfc/rfc9380#appendix-C)
259
- * and [RFC9496](https://www.rfc-editor.org/rfc/rfc9496#name-element-derivation-2).
260
- */
261
- function calcElligatorDecafMap(r0) {
262
- const { d } = ed448_CURVE;
263
- const P = Fp.ORDER;
264
- const mod = (n) => Fp.create(n);
265
- const r = mod(-(r0 * r0)); // 1
266
- const u0 = mod(d * (r - _1n)); // 2
267
- const u1 = mod((u0 + _1n) * (u0 - r)); // 3
268
- const { isValid: was_square, value: v } = uvRatio(ONE_MINUS_TWO_D, mod((r + _1n) * u1)); // 4
269
- let v_prime = v; // 5
270
- if (!was_square)
271
- v_prime = mod(r0 * v);
272
- let sgn = _1n; // 6
273
- if (!was_square)
274
- sgn = mod(-_1n);
275
- const s = mod(v_prime * (r + _1n)); // 7
276
- let s_abs = s;
277
- if (isNegativeLE(s, P))
278
- s_abs = mod(-s);
279
- const s2 = s * s;
280
- const W0 = mod(s_abs * _2n); // 8
281
- const W1 = mod(s2 + _1n); // 9
282
- const W2 = mod(s2 - _1n); // 10
283
- const W3 = mod(v_prime * s * (r - _1n) * ONE_MINUS_TWO_D + sgn); // 11
284
- return new ed448.Point(mod(W0 * W3), mod(W2 * W1), mod(W1 * W3), mod(W0 * W2));
285
- }
286
- function decaf448_map(bytes) {
287
- abytes(bytes, 112);
288
- const skipValidation = true;
289
- // Note: Similar to the field element decoding described in
290
- // [RFC7748], and unlike the field element decoding described in
291
- // Section 5.3.1, non-canonical values are accepted.
292
- const r1 = Fp448.create(Fp448.fromBytes(bytes.subarray(0, 56), skipValidation));
293
- const R1 = calcElligatorDecafMap(r1);
294
- const r2 = Fp448.create(Fp448.fromBytes(bytes.subarray(56, 112), skipValidation));
295
- const R2 = calcElligatorDecafMap(r2);
296
- return new _DecafPoint(R1.add(R2));
297
- }
298
- /**
299
- * Each ed448/EdwardsPoint has 4 different equivalent points. This can be
300
- * a source of bugs for protocols like ring signatures. Decaf was created to solve this.
301
- * Decaf point operates in X:Y:Z:T extended coordinates like EdwardsPoint,
302
- * but it should work in its own namespace: do not combine those two.
303
- * See [RFC9496](https://www.rfc-editor.org/rfc/rfc9496).
304
- */
305
- class _DecafPoint extends PrimeEdwardsPoint {
306
- constructor(ep) {
307
- super(ep);
308
- }
309
- static fromAffine(ap) {
310
- return new _DecafPoint(ed448.Point.fromAffine(ap));
311
- }
312
- assertSame(other) {
313
- if (!(other instanceof _DecafPoint))
314
- throw new Error('DecafPoint expected');
315
- }
316
- init(ep) {
317
- return new _DecafPoint(ep);
318
- }
319
- /** @deprecated use `import { decaf448_hasher } from '@noble/curves/ed448.js';` */
320
- static hashToCurve(hex) {
321
- return decaf448_map(ensureBytes('decafHash', hex, 112));
322
- }
323
- static fromBytes(bytes) {
324
- abytes(bytes, 56);
325
- const { d } = ed448_CURVE;
326
- const P = Fp.ORDER;
327
- const mod = (n) => Fp448.create(n);
328
- const s = Fp448.fromBytes(bytes);
329
- // 1. Check that s_bytes is the canonical encoding of a field element, or else abort.
330
- // 2. Check that s is non-negative, or else abort
331
- if (!equalBytes(Fn448.toBytes(s), bytes) || isNegativeLE(s, P))
332
- throw new Error('invalid decaf448 encoding 1');
333
- const s2 = mod(s * s); // 1
334
- const u1 = mod(_1n + s2); // 2
335
- const u1sq = mod(u1 * u1);
336
- const u2 = mod(u1sq - _4n * d * s2); // 3
337
- const { isValid, value: invsqrt } = invertSqrt(mod(u2 * u1sq)); // 4
338
- let u3 = mod((s + s) * invsqrt * u1 * SQRT_MINUS_D); // 5
339
- if (isNegativeLE(u3, P))
340
- u3 = mod(-u3);
341
- const x = mod(u3 * invsqrt * u2 * INVSQRT_MINUS_D); // 6
342
- const y = mod((_1n - s2) * invsqrt * u1); // 7
343
- const t = mod(x * y); // 8
344
- if (!isValid)
345
- throw new Error('invalid decaf448 encoding 2');
346
- return new _DecafPoint(new ed448.Point(x, y, _1n, t));
347
- }
348
- /**
349
- * Converts decaf-encoded string to decaf point.
350
- * Described in [RFC9496](https://www.rfc-editor.org/rfc/rfc9496#name-decode-2).
351
- * @param hex Decaf-encoded 56 bytes. Not every 56-byte string is valid decaf encoding
352
- */
353
- static fromHex(hex) {
354
- return _DecafPoint.fromBytes(ensureBytes('decafHex', hex, 56));
355
- }
356
- /** @deprecated use `import { pippenger } from '@noble/curves/abstract/curve.js';` */
357
- static msm(points, scalars) {
358
- return pippenger(_DecafPoint, Fn, points, scalars);
359
- }
360
- /**
361
- * Encodes decaf point to Uint8Array.
362
- * Described in [RFC9496](https://www.rfc-editor.org/rfc/rfc9496#name-encode-2).
363
- */
364
- toBytes() {
365
- const { X, Z, T } = this.ep;
366
- const P = Fp.ORDER;
367
- const mod = (n) => Fp.create(n);
368
- const u1 = mod(mod(X + T) * mod(X - T)); // 1
369
- const x2 = mod(X * X);
370
- const { value: invsqrt } = invertSqrt(mod(u1 * ONE_MINUS_D * x2)); // 2
371
- let ratio = mod(invsqrt * u1 * SQRT_MINUS_D); // 3
372
- if (isNegativeLE(ratio, P))
373
- ratio = mod(-ratio);
374
- const u2 = mod(INVSQRT_MINUS_D * ratio * Z - T); // 4
375
- let s = mod(ONE_MINUS_D * invsqrt * X * u2); // 5
376
- if (isNegativeLE(s, P))
377
- s = mod(-s);
378
- return Fn448.toBytes(s);
379
- }
380
- /**
381
- * Compare one point to another.
382
- * Described in [RFC9496](https://www.rfc-editor.org/rfc/rfc9496#name-equals-2).
383
- */
384
- equals(other) {
385
- this.assertSame(other);
386
- const { X: X1, Y: Y1 } = this.ep;
387
- const { X: X2, Y: Y2 } = other.ep;
388
- // (x1 * y2 == y1 * x2)
389
- return Fp.create(X1 * Y2) === Fp.create(Y1 * X2);
390
- }
391
- is0() {
392
- return this.equals(_DecafPoint.ZERO);
393
- }
394
- }
395
- // The following gymnastics is done because typescript strips comments otherwise
396
- // prettier-ignore
397
- _DecafPoint.BASE =
398
- /* @__PURE__ */ (() => new _DecafPoint(ed448.Point.BASE).multiplyUnsafe(_2n))();
399
- // prettier-ignore
400
- _DecafPoint.ZERO =
401
- /* @__PURE__ */ (() => new _DecafPoint(ed448.Point.ZERO))();
402
- // prettier-ignore
403
- _DecafPoint.Fp =
404
- /* @__PURE__ */ (() => Fp448)();
405
- // prettier-ignore
406
- _DecafPoint.Fn =
407
- /* @__PURE__ */ (() => Fn448)();
408
- export const decaf448 = { Point: _DecafPoint };
409
- /** Hashing to decaf448 points / field. RFC 9380 methods. */
410
- export const decaf448_hasher = {
411
- hashToCurve(msg, options) {
412
- const DST = options?.DST || 'decaf448_XOF:SHAKE256_D448MAP_RO_';
413
- return decaf448_map(expand_message_xof(msg, DST, 112, 224, shake256));
414
- },
415
- // Warning: has big modulo bias of 2^-64.
416
- // RFC is invalid. RFC says "use 64-byte xof", while for 2^-112 bias
417
- // it must use 84-byte xof (56+56/2), not 64.
418
- hashToScalar(msg, options = { DST: _DST_scalar }) {
419
- // Can't use `Fn448.fromBytes()`. 64-byte input => 56-byte field element
420
- const xof = expand_message_xof(msg, options.DST, 64, 256, shake256);
421
- return Fn448.create(bytesToNumberLE(xof));
422
- },
423
- };
424
- // export const decaf448_oprf: OPRF = createORPF({
425
- // name: 'decaf448-SHAKE256',
426
- // Point: DecafPoint,
427
- // hash: (msg: Uint8Array) => shake256(msg, { dkLen: 64 }),
428
- // hashToGroup: decaf448_hasher.hashToCurve,
429
- // hashToScalar: decaf448_hasher.hashToScalar,
430
- // });
431
- /**
432
- * Weird / bogus points, useful for debugging.
433
- * Unlike ed25519, there is no ed448 generator point which can produce full T subgroup.
434
- * Instead, there is a Klein four-group, which spans over 2 independent 2-torsion points:
435
- * (0, 1), (0, -1), (-1, 0), (1, 0).
436
- */
437
- export const ED448_TORSION_SUBGROUP = [
438
- '010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',
439
- 'fefffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffff00',
440
- '000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',
441
- '000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080',
442
- ];
443
- /** @deprecated use `decaf448.Point` */
444
- export const DecafPoint = _DecafPoint;
445
- /** @deprecated use `import { ed448_hasher } from '@noble/curves/ed448.js';` */
446
- export const hashToCurve = /* @__PURE__ */ (() => ed448_hasher.hashToCurve)();
447
- /** @deprecated use `import { ed448_hasher } from '@noble/curves/ed448.js';` */
448
- export const encodeToCurve = /* @__PURE__ */ (() => ed448_hasher.encodeToCurve)();
449
- /** @deprecated use `import { decaf448_hasher } from '@noble/curves/ed448.js';` */
450
- export const hashToDecaf448 = /* @__PURE__ */ (() => decaf448_hasher.hashToCurve)();
451
- /** @deprecated use `import { decaf448_hasher } from '@noble/curves/ed448.js';` */
452
- export const hash_to_decaf448 = /* @__PURE__ */ (() => decaf448_hasher.hashToCurve)();
453
- /** @deprecated use `ed448.utils.toMontgomery` */
454
- export function edwardsToMontgomeryPub(edwardsPub) {
455
- return ed448.utils.toMontgomery(ensureBytes('pub', edwardsPub));
456
- }
457
- /** @deprecated use `ed448.utils.toMontgomery` */
458
- export const edwardsToMontgomery = edwardsToMontgomeryPub;
459
- //# sourceMappingURL=ed448.js.map
package/esm/ed448.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"ed448.js","sourceRoot":"","sources":["../src/ed448.ts"],"names":[],"mappings":"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"}
package/esm/index.d.ts DELETED
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/esm/index.js DELETED
@@ -1,17 +0,0 @@
1
- /**
2
- * Audited & minimal JS implementation of elliptic curve cryptography.
3
- * @module
4
- * @example
5
- ```js
6
- import { secp256k1, schnorr } from '@noble/curves/secp256k1.js';
7
- import { ed25519, ed25519ph, ed25519ctx, x25519, RistrettoPoint } from '@noble/curves/ed25519.js';
8
- import { ed448, ed448ph, ed448ctx, x448 } from '@noble/curves/ed448.js';
9
- import { p256, p384, p521 } from '@noble/curves/nist.js';
10
- import { bls12_381 } from '@noble/curves/bls12-381.js';
11
- import { bn254 } from '@noble/curves/bn254.js';
12
- import { bytesToHex, hexToBytes, concatBytes, utf8ToBytes } from '@noble/curves/abstract/utils.js';
13
- ```
14
- */
15
- throw new Error('root module cannot be imported: import submodules instead. Check out README');
16
- export {};
17
- //# sourceMappingURL=index.js.map
package/esm/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,MAAM,IAAI,KAAK,CAAC,6EAA6E,CAAC,CAAC"}
package/esm/jubjub.d.ts DELETED
@@ -1,12 +0,0 @@
1
- /**
2
- * @deprecated
3
- * @module
4
- */
5
- import { jubjub_findGroupHash, jubjub_groupHash, jubjub as jubjubn } from './misc.ts';
6
- /** @deprecated use `import { jubjub } from '@noble/curves/misc.js';` */
7
- export declare const jubjub: typeof jubjubn;
8
- /** @deprecated use `import { jubjub_findGroupHash } from '@noble/curves/misc.js';` */
9
- export declare const findGroupHash: typeof jubjub_findGroupHash;
10
- /** @deprecated use `import { jubjub_groupHash } from '@noble/curves/misc.js';` */
11
- export declare const groupHash: typeof jubjub_groupHash;
12
- //# sourceMappingURL=jubjub.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"jubjub.d.ts","sourceRoot":"","sources":["../src/jubjub.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,IAAI,OAAO,EAAE,MAAM,WAAW,CAAC;AAEtF,wEAAwE;AACxE,eAAO,MAAM,MAAM,EAAE,OAAO,OAAiB,CAAC;AAC9C,sFAAsF;AACtF,eAAO,MAAM,aAAa,EAAE,OAAO,oBAA2C,CAAC;AAC/E,kFAAkF;AAClF,eAAO,MAAM,SAAS,EAAE,OAAO,gBAAmC,CAAC"}
package/esm/jubjub.js DELETED
@@ -1,12 +0,0 @@
1
- /**
2
- * @deprecated
3
- * @module
4
- */
5
- import { jubjub_findGroupHash, jubjub_groupHash, jubjub as jubjubn } from "./misc.js";
6
- /** @deprecated use `import { jubjub } from '@noble/curves/misc.js';` */
7
- export const jubjub = jubjubn;
8
- /** @deprecated use `import { jubjub_findGroupHash } from '@noble/curves/misc.js';` */
9
- export const findGroupHash = jubjub_findGroupHash;
10
- /** @deprecated use `import { jubjub_groupHash } from '@noble/curves/misc.js';` */
11
- export const groupHash = jubjub_groupHash;
12
- //# sourceMappingURL=jubjub.js.map
package/esm/jubjub.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"jubjub.js","sourceRoot":"","sources":["../src/jubjub.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,IAAI,OAAO,EAAE,MAAM,WAAW,CAAC;AAEtF,wEAAwE;AACxE,MAAM,CAAC,MAAM,MAAM,GAAmB,OAAO,CAAC;AAC9C,sFAAsF;AACtF,MAAM,CAAC,MAAM,aAAa,GAAgC,oBAAoB,CAAC;AAC/E,kFAAkF;AAClF,MAAM,CAAC,MAAM,SAAS,GAA4B,gBAAgB,CAAC"}
package/esm/misc.d.ts DELETED
@@ -1,19 +0,0 @@
1
- import { type CurveFn, type EdwardsPoint } from './abstract/edwards.ts';
2
- import { type CurveFn as WCurveFn } from './abstract/weierstrass.ts';
3
- /** Curve over scalar field of bls12-381. jubjub Fp = bls n */
4
- export declare const jubjub: CurveFn;
5
- /** Curve over scalar field of bn254. babyjubjub Fp = bn254 n */
6
- export declare const babyjubjub: CurveFn;
7
- export declare function jubjub_groupHash(tag: Uint8Array, personalization: Uint8Array): EdwardsPoint;
8
- export declare function jubjub_findGroupHash(m: Uint8Array, personalization: Uint8Array): EdwardsPoint;
9
- export declare const pasta_p: bigint;
10
- export declare const pasta_q: bigint;
11
- /**
12
- * @deprecated
13
- */
14
- export declare const pallas: WCurveFn;
15
- /**
16
- * @deprecated
17
- */
18
- export declare const vesta: WCurveFn;
19
- //# sourceMappingURL=misc.d.ts.map
package/esm/misc.d.ts.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"misc.d.ts","sourceRoot":"","sources":["../src/misc.ts"],"names":[],"mappings":"AAUA,OAAO,EAEL,KAAK,OAAO,EAEZ,KAAK,YAAY,EAClB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAe,KAAK,OAAO,IAAI,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAgBlF,8DAA8D;AAC9D,eAAO,MAAM,MAAM,EAAE,OAInB,CAAC;AAWH,gEAAgE;AAChE,eAAO,MAAM,UAAU,EAAE,OAIvB,CAAC;AAOH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,UAAU,EAAE,eAAe,EAAE,UAAU,GAAG,YAAY,CAU3F;AAKD,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,UAAU,EAAE,eAAe,EAAE,UAAU,GAAG,YAAY,CAW7F;AAID,eAAO,MAAM,OAAO,EAAE,MAErB,CAAC;AACF,eAAO,MAAM,OAAO,EAAE,MAErB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,MAAM,EAAE,QASnB,CAAC;AACH;;GAEG;AACH,eAAO,MAAM,KAAK,EAAE,QASlB,CAAC"}