@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/utils.js CHANGED
@@ -1,136 +1,68 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.notImplemented = exports.bitMask = exports.utf8ToBytes = exports.randomBytes = exports.isBytes = exports.hexToBytes = exports.concatBytes = exports.bytesToUtf8 = exports.bytesToHex = exports.anumber = exports.abytes = void 0;
4
- exports.abool = abool;
5
- exports._abool2 = _abool2;
6
- exports._abytes2 = _abytes2;
7
- exports.numberToHexUnpadded = numberToHexUnpadded;
8
- exports.hexToNumber = hexToNumber;
9
- exports.bytesToNumberBE = bytesToNumberBE;
10
- exports.bytesToNumberLE = bytesToNumberLE;
11
- exports.numberToBytesBE = numberToBytesBE;
12
- exports.numberToBytesLE = numberToBytesLE;
13
- exports.numberToVarBytesBE = numberToVarBytesBE;
14
- exports.ensureBytes = ensureBytes;
15
- exports.equalBytes = equalBytes;
16
- exports.copyBytes = copyBytes;
17
- exports.asciiToBytes = asciiToBytes;
18
- exports.inRange = inRange;
19
- exports.aInRange = aInRange;
20
- exports.bitLen = bitLen;
21
- exports.bitGet = bitGet;
22
- exports.bitSet = bitSet;
23
- exports.createHmacDrbg = createHmacDrbg;
24
- exports.validateObject = validateObject;
25
- exports.isHash = isHash;
26
- exports._validateObject = _validateObject;
27
- exports.memoized = memoized;
28
1
  /**
29
2
  * Hex, bytes and number utilities.
30
3
  * @module
31
4
  */
32
5
  /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */
33
- const utils_js_1 = require("@noble/hashes/utils.js");
34
- var utils_js_2 = require("@noble/hashes/utils.js");
35
- Object.defineProperty(exports, "abytes", { enumerable: true, get: function () { return utils_js_2.abytes; } });
36
- Object.defineProperty(exports, "anumber", { enumerable: true, get: function () { return utils_js_2.anumber; } });
37
- Object.defineProperty(exports, "bytesToHex", { enumerable: true, get: function () { return utils_js_2.bytesToHex; } });
38
- Object.defineProperty(exports, "bytesToUtf8", { enumerable: true, get: function () { return utils_js_2.bytesToUtf8; } });
39
- Object.defineProperty(exports, "concatBytes", { enumerable: true, get: function () { return utils_js_2.concatBytes; } });
40
- Object.defineProperty(exports, "hexToBytes", { enumerable: true, get: function () { return utils_js_2.hexToBytes; } });
41
- Object.defineProperty(exports, "isBytes", { enumerable: true, get: function () { return utils_js_2.isBytes; } });
42
- Object.defineProperty(exports, "randomBytes", { enumerable: true, get: function () { return utils_js_2.randomBytes; } });
43
- Object.defineProperty(exports, "utf8ToBytes", { enumerable: true, get: function () { return utils_js_2.utf8ToBytes; } });
6
+ import { abytes as abytes_, anumber, bytesToHex as bytesToHex_, concatBytes as concatBytes_, hexToBytes as hexToBytes_, } from '@noble/hashes/utils.js';
7
+ export { abytes, anumber, bytesToHex, concatBytes, hexToBytes, isBytes, randomBytes, } from '@noble/hashes/utils.js';
44
8
  const _0n = /* @__PURE__ */ BigInt(0);
45
9
  const _1n = /* @__PURE__ */ BigInt(1);
46
- function abool(title, value) {
47
- if (typeof value !== 'boolean')
48
- throw new Error(title + ' boolean expected, got ' + value);
49
- }
50
- // tmp name until v2
51
- function _abool2(value, title = '') {
10
+ export function abool(value, title = '') {
52
11
  if (typeof value !== 'boolean') {
53
- const prefix = title && `"${title}"`;
12
+ const prefix = title && `"${title}" `;
54
13
  throw new Error(prefix + 'expected boolean, got type=' + typeof value);
55
14
  }
56
15
  return value;
57
16
  }
58
- // tmp name until v2
59
- /** Asserts something is Uint8Array. */
60
- function _abytes2(value, length, title = '') {
61
- const bytes = (0, utils_js_1.isBytes)(value);
62
- const len = value?.length;
63
- const needsLen = length !== undefined;
64
- if (!bytes || (needsLen && len !== length)) {
17
+ // Used in weierstrass, der
18
+ function abignumber(n) {
19
+ if (typeof n === 'bigint') {
20
+ if (!isPosBig(n))
21
+ throw new Error('positive bigint expected, got ' + n);
22
+ }
23
+ else
24
+ anumber(n);
25
+ return n;
26
+ }
27
+ export function asafenumber(value, title = '') {
28
+ if (!Number.isSafeInteger(value)) {
65
29
  const prefix = title && `"${title}" `;
66
- const ofLen = needsLen ? ` of length ${length}` : '';
67
- const got = bytes ? `length=${len}` : `type=${typeof value}`;
68
- throw new Error(prefix + 'expected Uint8Array' + ofLen + ', got ' + got);
30
+ throw new Error(prefix + 'expected safe integer, got type=' + typeof value);
69
31
  }
70
- return value;
71
32
  }
72
- // Used in weierstrass, der
73
- function numberToHexUnpadded(num) {
74
- const hex = num.toString(16);
33
+ export function numberToHexUnpadded(num) {
34
+ const hex = abignumber(num).toString(16);
75
35
  return hex.length & 1 ? '0' + hex : hex;
76
36
  }
77
- function hexToNumber(hex) {
37
+ export function hexToNumber(hex) {
78
38
  if (typeof hex !== 'string')
79
39
  throw new Error('hex string expected, got ' + typeof hex);
80
40
  return hex === '' ? _0n : BigInt('0x' + hex); // Big Endian
81
41
  }
82
42
  // BE: Big Endian, LE: Little Endian
83
- function bytesToNumberBE(bytes) {
84
- return hexToNumber((0, utils_js_1.bytesToHex)(bytes));
85
- }
86
- function bytesToNumberLE(bytes) {
87
- (0, utils_js_1.abytes)(bytes);
88
- return hexToNumber((0, utils_js_1.bytesToHex)(Uint8Array.from(bytes).reverse()));
89
- }
90
- function numberToBytesBE(n, len) {
91
- return (0, utils_js_1.hexToBytes)(n.toString(16).padStart(len * 2, '0'));
43
+ export function bytesToNumberBE(bytes) {
44
+ return hexToNumber(bytesToHex_(bytes));
45
+ }
46
+ export function bytesToNumberLE(bytes) {
47
+ return hexToNumber(bytesToHex_(copyBytes(abytes_(bytes)).reverse()));
48
+ }
49
+ export function numberToBytesBE(n, len) {
50
+ anumber(len);
51
+ n = abignumber(n);
52
+ const res = hexToBytes_(n.toString(16).padStart(len * 2, '0'));
53
+ if (res.length !== len)
54
+ throw new Error('number too large');
55
+ return res;
92
56
  }
93
- function numberToBytesLE(n, len) {
57
+ export function numberToBytesLE(n, len) {
94
58
  return numberToBytesBE(n, len).reverse();
95
59
  }
96
60
  // Unpadded, rarely used
97
- function numberToVarBytesBE(n) {
98
- return (0, utils_js_1.hexToBytes)(numberToHexUnpadded(n));
99
- }
100
- /**
101
- * Takes hex string or Uint8Array, converts to Uint8Array.
102
- * Validates output length.
103
- * Will throw error for other types.
104
- * @param title descriptive title for an error e.g. 'secret key'
105
- * @param hex hex string or Uint8Array
106
- * @param expectedLength optional, will compare to result array's length
107
- * @returns
108
- */
109
- function ensureBytes(title, hex, expectedLength) {
110
- let res;
111
- if (typeof hex === 'string') {
112
- try {
113
- res = (0, utils_js_1.hexToBytes)(hex);
114
- }
115
- catch (e) {
116
- throw new Error(title + ' must be hex string or Uint8Array, cause: ' + e);
117
- }
118
- }
119
- else if ((0, utils_js_1.isBytes)(hex)) {
120
- // Uint8Array.from() instead of hash.slice() because node.js Buffer
121
- // is instance of Uint8Array, and its slice() creates **mutable** copy
122
- res = Uint8Array.from(hex);
123
- }
124
- else {
125
- throw new Error(title + ' must be hex string or Uint8Array');
126
- }
127
- const len = res.length;
128
- if (typeof expectedLength === 'number' && len !== expectedLength)
129
- throw new Error(title + ' of length ' + expectedLength + ' expected, got ' + len);
130
- return res;
61
+ export function numberToVarBytesBE(n) {
62
+ return hexToBytes_(numberToHexUnpadded(abignumber(n)));
131
63
  }
132
64
  // Compares 2 u8a-s in kinda constant time
133
- function equalBytes(a, b) {
65
+ export function equalBytes(a, b) {
134
66
  if (a.length !== b.length)
135
67
  return false;
136
68
  let diff = 0;
@@ -142,7 +74,7 @@ function equalBytes(a, b) {
142
74
  * Copies Uint8Array. We can't use u8a.slice(), because u8a can be Buffer,
143
75
  * and Buffer#slice creates mutable copy. Never use Buffers!
144
76
  */
145
- function copyBytes(bytes) {
77
+ export function copyBytes(bytes) {
146
78
  return Uint8Array.from(bytes);
147
79
  }
148
80
  /**
@@ -150,7 +82,7 @@ function copyBytes(bytes) {
150
82
  * Should be safe to use for things expected to be ASCII.
151
83
  * Returns exact same result as utf8ToBytes for ASCII or throws.
152
84
  */
153
- function asciiToBytes(ascii) {
85
+ export function asciiToBytes(ascii) {
154
86
  return Uint8Array.from(ascii, (c, i) => {
155
87
  const charCode = c.charCodeAt(0);
156
88
  if (c.length !== 1 || charCode > 127) {
@@ -159,18 +91,9 @@ function asciiToBytes(ascii) {
159
91
  return charCode;
160
92
  });
161
93
  }
162
- /**
163
- * @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99])
164
- */
165
- // export const utf8ToBytes: typeof utf8ToBytes_ = utf8ToBytes_;
166
- /**
167
- * Converts bytes to string using UTF8 encoding.
168
- * @example bytesToUtf8(Uint8Array.from([97, 98, 99])) // 'abc'
169
- */
170
- // export const bytesToUtf8: typeof bytesToUtf8_ = bytesToUtf8_;
171
94
  // Is positive bigint
172
95
  const isPosBig = (n) => typeof n === 'bigint' && _0n <= n;
173
- function inRange(n, min, max) {
96
+ export function inRange(n, min, max) {
174
97
  return isPosBig(n) && isPosBig(min) && isPosBig(max) && min <= n && n < max;
175
98
  }
176
99
  /**
@@ -178,7 +101,7 @@ function inRange(n, min, max) {
178
101
  * @example
179
102
  * aInRange('x', x, 1n, 256n); // would assume x is in (1n..255n)
180
103
  */
181
- function aInRange(title, n, min, max) {
104
+ export function aInRange(title, n, min, max) {
182
105
  // Why min <= n < max and not a (min < n < max) OR b (min <= n <= max)?
183
106
  // consider P=256n, min=0n, max=P
184
107
  // - a for min=0 would require -1: `inRange('x', x, -1n, P)`
@@ -193,7 +116,7 @@ function aInRange(title, n, min, max) {
193
116
  * Same as `n.toString(2).length`
194
117
  * TODO: merge with nLength in modular
195
118
  */
196
- function bitLen(n) {
119
+ export function bitLen(n) {
197
120
  let len;
198
121
  for (len = 0; n > _0n; n >>= _1n, len += 1)
199
122
  ;
@@ -204,21 +127,20 @@ function bitLen(n) {
204
127
  * NOTE: first bit position is 0 (same as arrays)
205
128
  * Same as `!!+Array.from(n.toString(2)).reverse()[pos]`
206
129
  */
207
- function bitGet(n, pos) {
130
+ export function bitGet(n, pos) {
208
131
  return (n >> BigInt(pos)) & _1n;
209
132
  }
210
133
  /**
211
134
  * Sets single bit at position.
212
135
  */
213
- function bitSet(n, pos, value) {
136
+ export function bitSet(n, pos, value) {
214
137
  return n | ((value ? _1n : _0n) << BigInt(pos));
215
138
  }
216
139
  /**
217
140
  * Calculate mask for N bits. Not using ** operator with bigints because of old engines.
218
141
  * Same as BigInt(`0b${Array(i).fill('1').join('')}`)
219
142
  */
220
- const bitMask = (n) => (_1n << BigInt(n)) - _1n;
221
- exports.bitMask = bitMask;
143
+ export const bitMask = (n) => (_1n << BigInt(n)) - _1n;
222
144
  /**
223
145
  * Minimal HMAC-DRBG from NIST 800-90 for RFC6979 sigs.
224
146
  * @returns function that will call DRBG until 2nd arg returns something meaningful
@@ -226,16 +148,17 @@ exports.bitMask = bitMask;
226
148
  * const drbg = createHmacDRBG<Key>(32, 32, hmac);
227
149
  * drbg(seed, bytesToKey); // bytesToKey must return Key or undefined
228
150
  */
229
- function createHmacDrbg(hashLen, qByteLen, hmacFn) {
230
- if (typeof hashLen !== 'number' || hashLen < 2)
231
- throw new Error('hashLen must be a number');
232
- if (typeof qByteLen !== 'number' || qByteLen < 2)
233
- throw new Error('qByteLen must be a number');
151
+ export function createHmacDrbg(hashLen, qByteLen, hmacFn) {
152
+ anumber(hashLen, 'hashLen');
153
+ anumber(qByteLen, 'qByteLen');
234
154
  if (typeof hmacFn !== 'function')
235
155
  throw new Error('hmacFn must be a function');
236
- // Step B, Step C: set hashLen to 8*ceil(hlen/8)
237
156
  const u8n = (len) => new Uint8Array(len); // creates Uint8Array
238
- const u8of = (byte) => Uint8Array.of(byte); // another shortcut
157
+ const NULL = u8n(0);
158
+ const byte0 = Uint8Array.of(0x00);
159
+ const byte1 = Uint8Array.of(0x01);
160
+ const _maxDrbgIters = 1000;
161
+ // Step B, Step C: set hashLen to 8*ceil(hlen/8)
239
162
  let v = u8n(hashLen); // Minimal non-full-spec HMAC-DRBG from NIST 800-90 for RFC6979 sigs.
240
163
  let k = u8n(hashLen); // Steps B and C of RFC6979 3.2: set hashLen, in our case always same
241
164
  let i = 0; // Iterations counter, will throw when over 1000
@@ -244,20 +167,20 @@ function createHmacDrbg(hashLen, qByteLen, hmacFn) {
244
167
  k.fill(0);
245
168
  i = 0;
246
169
  };
247
- const h = (...b) => hmacFn(k, v, ...b); // hmac(k)(v, ...values)
248
- const reseed = (seed = u8n(0)) => {
170
+ const h = (...msgs) => hmacFn(k, concatBytes_(v, ...msgs)); // hmac(k)(v, ...values)
171
+ const reseed = (seed = NULL) => {
249
172
  // HMAC-DRBG reseed() function. Steps D-G
250
- k = h(u8of(0x00), seed); // k = hmac(k || v || 0x00 || seed)
173
+ k = h(byte0, seed); // k = hmac(k || v || 0x00 || seed)
251
174
  v = h(); // v = hmac(k || v)
252
175
  if (seed.length === 0)
253
176
  return;
254
- k = h(u8of(0x01), seed); // k = hmac(k || v || 0x01 || seed)
177
+ k = h(byte1, seed); // k = hmac(k || v || 0x01 || seed)
255
178
  v = h(); // v = hmac(k || v)
256
179
  };
257
180
  const gen = () => {
258
181
  // HMAC-DRBG generate() function
259
- if (i++ >= 1000)
260
- throw new Error('drbg: tried 1000 values');
182
+ if (i++ >= _maxDrbgIters)
183
+ throw new Error('drbg: tried max amount of iterations');
261
184
  let len = 0;
262
185
  const out = [];
263
186
  while (len < qByteLen) {
@@ -266,7 +189,7 @@ function createHmacDrbg(hashLen, qByteLen, hmacFn) {
266
189
  out.push(sl);
267
190
  len += v.length;
268
191
  }
269
- return (0, utils_js_1.concatBytes)(...out);
192
+ return concatBytes_(...out);
270
193
  };
271
194
  const genUntil = (seed, pred) => {
272
195
  reset();
@@ -279,49 +202,7 @@ function createHmacDrbg(hashLen, qByteLen, hmacFn) {
279
202
  };
280
203
  return genUntil;
281
204
  }
282
- // Validating curves and fields
283
- const validatorFns = {
284
- bigint: (val) => typeof val === 'bigint',
285
- function: (val) => typeof val === 'function',
286
- boolean: (val) => typeof val === 'boolean',
287
- string: (val) => typeof val === 'string',
288
- stringOrUint8Array: (val) => typeof val === 'string' || (0, utils_js_1.isBytes)(val),
289
- isSafeInteger: (val) => Number.isSafeInteger(val),
290
- array: (val) => Array.isArray(val),
291
- field: (val, object) => object.Fp.isValid(val),
292
- hash: (val) => typeof val === 'function' && Number.isSafeInteger(val.outputLen),
293
- };
294
- // type Record<K extends string | number | symbol, T> = { [P in K]: T; }
295
- function validateObject(object, validators, optValidators = {}) {
296
- const checkField = (fieldName, type, isOptional) => {
297
- const checkVal = validatorFns[type];
298
- if (typeof checkVal !== 'function')
299
- throw new Error('invalid validator function');
300
- const val = object[fieldName];
301
- if (isOptional && val === undefined)
302
- return;
303
- if (!checkVal(val, object)) {
304
- throw new Error('param ' + String(fieldName) + ' is invalid. Expected ' + type + ', got ' + val);
305
- }
306
- };
307
- for (const [fieldName, type] of Object.entries(validators))
308
- checkField(fieldName, type, false);
309
- for (const [fieldName, type] of Object.entries(optValidators))
310
- checkField(fieldName, type, true);
311
- return object;
312
- }
313
- // validate type tests
314
- // const o: { a: number; b: number; c: number } = { a: 1, b: 5, c: 6 };
315
- // const z0 = validateObject(o, { a: 'isSafeInteger' }, { c: 'bigint' }); // Ok!
316
- // // Should fail type-check
317
- // const z1 = validateObject(o, { a: 'tmp' }, { c: 'zz' });
318
- // const z2 = validateObject(o, { a: 'isSafeInteger' }, { c: 'zz' });
319
- // const z3 = validateObject(o, { test: 'boolean', z: 'bug' });
320
- // const z4 = validateObject(o, { a: 'boolean', z: 'bug' });
321
- function isHash(val) {
322
- return typeof val === 'function' && Number.isSafeInteger(val.outputLen);
323
- }
324
- function _validateObject(object, fields, optFields = {}) {
205
+ export function validateObject(object, fields = {}, optFields = {}) {
325
206
  if (!object || typeof object !== 'object')
326
207
  throw new Error('expected valid options object');
327
208
  function checkField(fieldName, expectedType, isOpt) {
@@ -332,21 +213,21 @@ function _validateObject(object, fields, optFields = {}) {
332
213
  if (current !== expectedType || val === null)
333
214
  throw new Error(`param "${fieldName}" is invalid: expected ${expectedType}, got ${current}`);
334
215
  }
335
- Object.entries(fields).forEach(([k, v]) => checkField(k, v, false));
336
- Object.entries(optFields).forEach(([k, v]) => checkField(k, v, true));
216
+ const iter = (f, isOpt) => Object.entries(f).forEach(([k, v]) => checkField(k, v, isOpt));
217
+ iter(fields, false);
218
+ iter(optFields, true);
337
219
  }
338
220
  /**
339
221
  * throws not implemented error
340
222
  */
341
- const notImplemented = () => {
223
+ export const notImplemented = () => {
342
224
  throw new Error('not implemented');
343
225
  };
344
- exports.notImplemented = notImplemented;
345
226
  /**
346
227
  * Memoizes (caches) computation result.
347
228
  * Uses WeakMap: the value is going auto-cleaned by GC after last reference is removed.
348
229
  */
349
- function memoized(fn) {
230
+ export function memoized(fn) {
350
231
  const map = new WeakMap();
351
232
  return (arg, ...args) => {
352
233
  const val = map.get(arg);
package/utils.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["src/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["src/utils.ts"],"names":[],"mappings":"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"}
package/webcrypto.d.ts ADDED
@@ -0,0 +1,99 @@
1
+ /**
2
+ * Friendly wrapper over elliptic curves from built-in WebCrypto. Experimental: API may change.
3
+
4
+ # WebCrypto issues
5
+
6
+ ## No way to get public keys
7
+
8
+ - Export of raw secret key is prohibited by spec:
9
+ - https://w3c.github.io/webcrypto/#ecdsa-operations-export-key
10
+ -> "If format is "raw":" -> "If the [[type]] internal slot of key is not "public",
11
+ then throw an InvalidAccessError."
12
+ - Import of raw secret keys is prohibited by spec:
13
+ - https://w3c.github.io/webcrypto/#ecdsa-operations-import-key
14
+ -> "If format is "raw":" -> "If usages contains a value which is not "verify"
15
+ then throw a SyntaxError."
16
+ - SPKI (Simple public-key infrastructure) is public-key-only
17
+ - PKCS8 is secret-key-only
18
+ - No way to get public key from secret key, but we convert to jwk and then create it manually, since jwk secret key is priv+pub.
19
+ - Noble supports generating keys for both sign, verify & getSharedSecret,
20
+ but JWK key includes usage, which forces us to patch it (non-JWK is ok)
21
+ - We have import/export for 'raw', but it doesn't work in Firefox / Safari
22
+
23
+ ## Point encoding
24
+
25
+ - Raw export of public points returns uncompressed points,
26
+ but this is implementation specific and not much we can do there.
27
+ - `getSharedSecret` differs for p256, p384, p521:
28
+ Noble returns 33-byte output (y-parity + x coordinate),
29
+ while in WebCrypto returns 32-byte output (x coordinate)
30
+ - `getSharedSecret` identical for X25519, X448
31
+
32
+ ## Availability
33
+
34
+ Node.js additionally supports ed448.
35
+ There seems no reasonable way to check for availability, other than actually calling methods.
36
+
37
+ * @module
38
+ */
39
+ /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */
40
+ /** Raw type */
41
+ declare const TYPE_RAW = "raw";
42
+ declare const TYPE_JWK = "jwk";
43
+ declare const TYPE_SPKI = "spki";
44
+ declare const TYPE_PKCS = "pkcs8";
45
+ export type WebCryptoFormat = typeof TYPE_RAW | typeof TYPE_JWK | typeof TYPE_SPKI | typeof TYPE_PKCS;
46
+ /** WebCrypto keys can be in raw, jwk, pkcs8/spki formats. Raw is internal and fragile. */
47
+ export type WebCryptoOpts = {
48
+ formatSec?: WebCryptoFormat;
49
+ formatPub?: WebCryptoFormat;
50
+ };
51
+ type JsonWebKey = {
52
+ crv?: string;
53
+ d?: string;
54
+ kty?: string;
55
+ x?: string;
56
+ y?: string;
57
+ [key: string]: unknown;
58
+ };
59
+ type Key = JsonWebKey | Uint8Array;
60
+ type WebCryptoBaseCurve = {
61
+ name: string;
62
+ isSupported(): Promise<boolean>;
63
+ keygen(): Promise<{
64
+ secretKey: Uint8Array;
65
+ publicKey: Uint8Array;
66
+ }>;
67
+ getPublicKey(secretKey: Key, opts?: WebCryptoOpts): Promise<Key>;
68
+ utils: {
69
+ randomSecretKey: (format?: WebCryptoFormat) => Promise<Key>;
70
+ convertSecretKey: (key: Key, inFormat?: WebCryptoFormat, outFormat?: WebCryptoFormat) => Promise<Key>;
71
+ convertPublicKey: (key: Key, inFormat?: WebCryptoFormat, outFormat?: WebCryptoFormat) => Promise<Key>;
72
+ };
73
+ };
74
+ export type WebCryptoSigner = {
75
+ sign(message: Uint8Array, secretKey: Key, opts?: WebCryptoOpts): Promise<Uint8Array>;
76
+ verify(signature: Uint8Array, message: Uint8Array, publicKey: Key, opts?: WebCryptoOpts): Promise<boolean>;
77
+ };
78
+ export type WebCryptoECDH = {
79
+ getSharedSecret(secA: Uint8Array, pubB: Uint8Array, opts?: WebCryptoOpts): Promise<Uint8Array>;
80
+ };
81
+ export type WebCryptoECDSA = WebCryptoBaseCurve & WebCryptoSigner & WebCryptoECDH;
82
+ export type WebCryptoEdDSA = WebCryptoBaseCurve & WebCryptoSigner;
83
+ export type WebCryptoMontgomery = WebCryptoBaseCurve & WebCryptoECDH;
84
+ /** Friendly wrapper over built-in WebCrypto NIST P-256 (secp256r1). */
85
+ export declare const p256: WebCryptoECDSA;
86
+ /** Friendly wrapper over built-in WebCrypto NIST P-384 (secp384r1). */
87
+ export declare const p384: WebCryptoECDSA;
88
+ /** Friendly wrapper over built-in WebCrypto NIST P-521 (secp521r1). */
89
+ export declare const p521: WebCryptoECDSA;
90
+ /** Friendly wrapper over built-in WebCrypto ed25519. */
91
+ export declare const ed25519: WebCryptoEdDSA;
92
+ /** Friendly wrapper over built-in WebCrypto ed448. */
93
+ export declare const ed448: WebCryptoEdDSA;
94
+ /** Friendly wrapper over built-in WebCrypto x25519 (ECDH over Curve25519). */
95
+ export declare const x25519: WebCryptoMontgomery;
96
+ /** Friendly wrapper over built-in WebCrypto x448 (ECDH over Curve448). */
97
+ export declare const x448: WebCryptoMontgomery;
98
+ export {};
99
+ //# sourceMappingURL=webcrypto.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webcrypto.d.ts","sourceRoot":"","sources":["src/webcrypto.ts"],"names":[],"mappings":"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"}