@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
@@ -6,23 +6,23 @@
6
6
  */
7
7
  /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */
8
8
  import {
9
- _validateObject,
10
9
  abytes,
11
10
  aInRange,
12
11
  bytesToNumberLE,
13
- ensureBytes,
12
+ copyBytes,
14
13
  numberToBytesLE,
15
14
  randomBytes,
15
+ validateObject,
16
+ type CryptoKeys,
16
17
  } from '../utils.ts';
17
- import type { CurveLengths } from './curve.ts';
18
+ import { createKeygen, type CurveLengths } from './curve.ts';
18
19
  import { mod } from './modular.ts';
19
20
 
20
21
  const _0n = BigInt(0);
21
22
  const _1n = BigInt(1);
22
23
  const _2n = BigInt(2);
23
- type Hex = string | Uint8Array;
24
24
 
25
- export type CurveType = {
25
+ export type MontgomeryOpts = {
26
26
  P: bigint; // finite field prime
27
27
  type: 'x25519' | 'x448';
28
28
  adjustScalarBytes: (bytes: Uint8Array) => Uint8Array;
@@ -31,30 +31,27 @@ export type CurveType = {
31
31
  };
32
32
 
33
33
  export type MontgomeryECDH = {
34
- scalarMult: (scalar: Hex, u: Hex) => Uint8Array;
35
- scalarMultBase: (scalar: Hex) => Uint8Array;
36
- getSharedSecret: (secretKeyA: Hex, publicKeyB: Hex) => Uint8Array;
37
- getPublicKey: (secretKey: Hex) => Uint8Array;
34
+ scalarMult: (scalar: Uint8Array, u: Uint8Array) => Uint8Array;
35
+ scalarMultBase: (scalar: Uint8Array) => Uint8Array;
36
+ getSharedSecret: (secretKeyA: Uint8Array, publicKeyB: Uint8Array) => Uint8Array;
37
+ getPublicKey: (secretKey: Uint8Array) => Uint8Array;
38
38
  utils: {
39
39
  randomSecretKey: () => Uint8Array;
40
- /** @deprecated use `randomSecretKey` */
41
- randomPrivateKey: () => Uint8Array;
42
40
  };
43
41
  GuBytes: Uint8Array;
44
42
  lengths: CurveLengths;
45
43
  keygen: (seed?: Uint8Array) => { secretKey: Uint8Array; publicKey: Uint8Array };
46
44
  };
47
- export type CurveFn = MontgomeryECDH;
48
45
 
49
- function validateOpts(curve: CurveType) {
50
- _validateObject(curve, {
46
+ function validateOpts(curve: MontgomeryOpts) {
47
+ validateObject(curve, {
51
48
  adjustScalarBytes: 'function',
52
49
  powPminus2: 'function',
53
50
  });
54
51
  return Object.freeze({ ...curve } as const);
55
52
  }
56
53
 
57
- export function montgomery(curveDef: CurveType): MontgomeryECDH {
54
+ export function montgomery(curveDef: MontgomeryOpts): MontgomeryECDH {
58
55
  const CURVE = validateOpts(curveDef);
59
56
  const { P, type, adjustScalarBytes, powPminus2, randomBytes: rand } = CURVE;
60
57
  const is25519 = type === 'x25519';
@@ -82,8 +79,8 @@ export function montgomery(curveDef: CurveType): MontgomeryECDH {
82
79
  function encodeU(u: bigint): Uint8Array {
83
80
  return numberToBytesLE(modP(u), fieldLen);
84
81
  }
85
- function decodeU(u: Hex): bigint {
86
- const _u = ensureBytes('u coordinate', u, fieldLen);
82
+ function decodeU(u: Uint8Array): bigint {
83
+ const _u = copyBytes(abytes(u, fieldLen, 'uCoordinate'));
87
84
  // RFC: When receiving such an array, implementations of X25519
88
85
  // (but not X448) MUST mask the most significant bit in the final byte.
89
86
  if (is25519) _u[31] &= 127; // 0b0111_1111
@@ -93,10 +90,10 @@ export function montgomery(curveDef: CurveType): MontgomeryECDH {
93
90
  // - 1 through 2^448 - 1 for X448.
94
91
  return modP(bytesToNumberLE(_u));
95
92
  }
96
- function decodeScalar(scalar: Hex): bigint {
97
- return bytesToNumberLE(adjustScalarBytes(ensureBytes('scalar', scalar, fieldLen)));
93
+ function decodeScalar(scalar: Uint8Array): bigint {
94
+ return bytesToNumberLE(adjustScalarBytes(copyBytes(abytes(scalar, fieldLen, 'scalar'))));
98
95
  }
99
- function scalarMult(scalar: Hex, u: Hex): Uint8Array {
96
+ function scalarMult(scalar: Uint8Array, u: Uint8Array): Uint8Array {
100
97
  const pu = montgomeryLadder(decodeU(u), decodeScalar(scalar));
101
98
  // Some public keys are useless, of low-order. Curve author doesn't think
102
99
  // it needs to be validated, but we do it nonetheless.
@@ -105,9 +102,11 @@ export function montgomery(curveDef: CurveType): MontgomeryECDH {
105
102
  return encodeU(pu);
106
103
  }
107
104
  // Computes public key from private. By doing scalar multiplication of base point.
108
- function scalarMultBase(scalar: Hex): Uint8Array {
105
+ function scalarMultBase(scalar: Uint8Array): Uint8Array {
109
106
  return scalarMult(scalar, GuBytes);
110
107
  }
108
+ const getPublicKey = scalarMultBase;
109
+ const getSharedSecret = scalarMult;
111
110
 
112
111
  // cswap from RFC7748 "example code"
113
112
  function cswap(swap: bigint, x_2: bigint, x_3: bigint): { x_2: bigint; x_3: bigint } {
@@ -170,25 +169,19 @@ export function montgomery(curveDef: CurveType): MontgomeryECDH {
170
169
  seed: fieldLen,
171
170
  };
172
171
  const randomSecretKey = (seed = randomBytes_(fieldLen)) => {
173
- abytes(seed, lengths.seed);
172
+ abytes(seed, lengths.seed, 'seed');
174
173
  return seed;
175
174
  };
176
- function keygen(seed?: Uint8Array) {
177
- const secretKey = randomSecretKey(seed);
178
- return { secretKey, publicKey: scalarMultBase(secretKey) };
179
- }
180
- const utils = {
181
- randomSecretKey,
182
- randomPrivateKey: randomSecretKey,
183
- };
184
- return {
185
- keygen,
186
- getSharedSecret: (secretKey: Hex, publicKey: Hex) => scalarMult(secretKey, publicKey),
187
- getPublicKey: (secretKey: Hex): Uint8Array => scalarMultBase(secretKey),
175
+ const utils = { randomSecretKey };
176
+
177
+ return Object.freeze({
178
+ keygen: createKeygen(randomSecretKey, getPublicKey),
179
+ getSharedSecret,
180
+ getPublicKey,
188
181
  scalarMult,
189
182
  scalarMultBase,
190
183
  utils,
191
184
  GuBytes: GuBytes.slice(),
192
185
  lengths,
193
- };
186
+ }) satisfies CryptoKeys;
194
187
  }