ccxt 4.2.17 → 4.2.19

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 (439) hide show
  1. package/README.md +9 -9
  2. package/dist/ccxt.browser.js +48992 -47725
  3. package/dist/ccxt.browser.min.js +3 -3
  4. package/dist/cjs/ccxt.js +12 -1
  5. package/dist/cjs/src/alpaca.js +18 -18
  6. package/dist/cjs/src/ascendex.js +13 -6
  7. package/dist/cjs/src/base/Exchange.js +266 -27
  8. package/dist/cjs/src/bigone.js +434 -168
  9. package/dist/cjs/src/binance.js +163 -34
  10. package/dist/cjs/src/binanceus.js +8 -0
  11. package/dist/cjs/src/bingx.js +183 -41
  12. package/dist/cjs/src/bitfinex.js +2 -3
  13. package/dist/cjs/src/bitget.js +59 -16
  14. package/dist/cjs/src/bitmart.js +5 -5
  15. package/dist/cjs/src/bitmex.js +4 -6
  16. package/dist/cjs/src/bitpanda.js +5 -1991
  17. package/dist/cjs/src/bitstamp.js +8 -0
  18. package/dist/cjs/src/bybit.js +27 -47
  19. package/dist/cjs/src/coinbase.js +176 -26
  20. package/dist/cjs/src/coincheck.js +1 -0
  21. package/dist/cjs/src/coinex.js +3 -0
  22. package/dist/cjs/src/coinlist.js +13 -6
  23. package/dist/cjs/src/coinone.js +2 -2
  24. package/dist/cjs/src/coinsph.js +4 -5
  25. package/dist/cjs/src/delta.js +7 -1
  26. package/dist/cjs/src/deribit.js +17 -4
  27. package/dist/cjs/src/gate.js +151 -169
  28. package/dist/cjs/src/gemini.js +1 -1
  29. package/dist/cjs/src/hitbtc.js +2 -3
  30. package/dist/cjs/src/htx.js +157 -7
  31. package/dist/cjs/src/huobijp.js +2 -3
  32. package/dist/cjs/src/independentreserve.js +7 -5
  33. package/dist/cjs/src/kraken.js +86 -54
  34. package/dist/cjs/src/kucoin.js +5 -0
  35. package/dist/cjs/src/kucoinfutures.js +131 -77
  36. package/dist/cjs/src/lbank.js +60 -33
  37. package/dist/cjs/src/luno.js +84 -2
  38. package/dist/cjs/src/mexc.js +3 -3
  39. package/dist/cjs/src/oceanex.js +1 -1
  40. package/dist/cjs/src/okx.js +23 -11
  41. package/dist/cjs/{js/src/bitpanda.js → src/onetrading.js} +39 -39
  42. package/dist/cjs/src/phemex.js +37 -27
  43. package/dist/cjs/src/poloniexfutures.js +1 -0
  44. package/dist/cjs/src/pro/binance.js +66 -25
  45. package/dist/cjs/src/pro/bitget.js +1 -1
  46. package/dist/cjs/src/pro/bitpanda.js +5 -1330
  47. package/dist/cjs/src/pro/coinbase.js +4 -1
  48. package/dist/cjs/src/pro/coincheck.js +208 -0
  49. package/dist/cjs/src/pro/hitbtc.js +5 -4
  50. package/dist/cjs/src/pro/htx.js +6 -1
  51. package/dist/cjs/src/pro/kraken.js +1 -1
  52. package/dist/cjs/src/pro/krakenfutures.js +7 -1
  53. package/dist/cjs/src/pro/kucoin.js +46 -36
  54. package/dist/cjs/src/pro/kucoinfutures.js +45 -37
  55. package/dist/cjs/src/pro/lbank.js +881 -0
  56. package/dist/cjs/src/pro/okx.js +52 -2
  57. package/dist/cjs/{js/src/pro/bitpanda.js → src/pro/onetrading.js} +4 -7
  58. package/dist/cjs/src/pro/poloniex.js +2 -2
  59. package/dist/cjs/src/pro/poloniexfutures.js +43 -35
  60. package/dist/cjs/src/pro/woo.js +126 -0
  61. package/dist/cjs/src/probit.js +4 -2
  62. package/dist/cjs/src/upbit.js +12 -12
  63. package/dist/cjs/src/wavesexchange.js +1 -1
  64. package/dist/cjs/src/whitebit.js +1 -0
  65. package/dist/cjs/src/woo.js +56 -0
  66. package/js/ccxt.d.ts +14 -2
  67. package/js/ccxt.js +10 -2
  68. package/js/src/abstract/bitpanda.d.ts +4 -4
  69. package/js/src/abstract/bitstamp.d.ts +8 -0
  70. package/js/src/abstract/gate.d.ts +1 -0
  71. package/js/src/abstract/gateio.d.ts +1 -0
  72. package/js/src/abstract/htx.d.ts +3 -0
  73. package/js/src/abstract/huobi.d.ts +3 -0
  74. package/js/src/abstract/luno.d.ts +1 -0
  75. package/js/src/abstract/onetrading.d.ts +38 -0
  76. package/js/src/ascendex.js +2 -0
  77. package/js/src/base/Exchange.d.ts +2 -3
  78. package/js/src/base/Exchange.js +5 -2
  79. package/js/src/binance.js +7 -1
  80. package/js/src/bingx.d.ts +1 -0
  81. package/js/src/bingx.js +26 -0
  82. package/js/src/bitget.js +22 -3
  83. package/js/src/bitpanda.d.ts +2 -72
  84. package/js/src/bitpanda.js +5 -1991
  85. package/js/src/bitstamp.js +8 -0
  86. package/js/src/bybit.js +21 -47
  87. package/js/src/coincheck.js +1 -0
  88. package/js/src/deribit.js +16 -4
  89. package/js/src/gate.d.ts +1 -0
  90. package/js/src/gate.js +50 -110
  91. package/js/src/htx.js +3 -0
  92. package/js/src/kraken.d.ts +1 -0
  93. package/js/src/kraken.js +40 -39
  94. package/js/src/lbank.js +1 -0
  95. package/js/src/luno.d.ts +3 -1
  96. package/js/src/luno.js +84 -2
  97. package/js/src/mexc.js +1 -2
  98. package/js/src/onetrading.d.ts +74 -0
  99. package/js/src/onetrading.js +2003 -0
  100. package/js/src/poloniexfutures.js +1 -0
  101. package/js/src/pro/binance.js +7 -2
  102. package/js/src/pro/bitget.js +1 -1
  103. package/js/src/pro/bitpanda.d.ts +2 -34
  104. package/js/src/pro/bitpanda.js +5 -1330
  105. package/js/src/pro/coincheck.d.ts +12 -0
  106. package/js/src/pro/coincheck.js +209 -0
  107. package/js/src/pro/kucoin.js +43 -35
  108. package/js/src/pro/kucoinfutures.js +45 -37
  109. package/js/src/pro/lbank.d.ts +29 -0
  110. package/js/src/pro/lbank.js +882 -0
  111. package/js/src/pro/onetrading.d.ts +36 -0
  112. package/js/src/pro/onetrading.js +1339 -0
  113. package/js/src/pro/poloniexfutures.js +43 -35
  114. package/js/src/whitebit.js +1 -0
  115. package/package.json +2 -2
  116. package/rollup.config.js +2 -0
  117. package/skip-tests.json +14 -2
  118. package/test-commonjs.cjs +25 -1
  119. package/dist/cjs/js/ccxt.js +0 -476
  120. package/dist/cjs/js/src/abstract/alpaca.js +0 -9
  121. package/dist/cjs/js/src/abstract/ascendex.js +0 -9
  122. package/dist/cjs/js/src/abstract/bigone.js +0 -9
  123. package/dist/cjs/js/src/abstract/binance.js +0 -9
  124. package/dist/cjs/js/src/abstract/bingx.js +0 -9
  125. package/dist/cjs/js/src/abstract/bit2c.js +0 -9
  126. package/dist/cjs/js/src/abstract/bitbank.js +0 -9
  127. package/dist/cjs/js/src/abstract/bitbns.js +0 -9
  128. package/dist/cjs/js/src/abstract/bitfinex.js +0 -9
  129. package/dist/cjs/js/src/abstract/bitfinex2.js +0 -9
  130. package/dist/cjs/js/src/abstract/bitflyer.js +0 -9
  131. package/dist/cjs/js/src/abstract/bitforex.js +0 -9
  132. package/dist/cjs/js/src/abstract/bitget.js +0 -9
  133. package/dist/cjs/js/src/abstract/bithumb.js +0 -9
  134. package/dist/cjs/js/src/abstract/bitmart.js +0 -9
  135. package/dist/cjs/js/src/abstract/bitmex.js +0 -9
  136. package/dist/cjs/js/src/abstract/bitopro.js +0 -9
  137. package/dist/cjs/js/src/abstract/bitpanda.js +0 -9
  138. package/dist/cjs/js/src/abstract/bitrue.js +0 -9
  139. package/dist/cjs/js/src/abstract/bitso.js +0 -9
  140. package/dist/cjs/js/src/abstract/bitstamp.js +0 -9
  141. package/dist/cjs/js/src/abstract/bitteam.js +0 -9
  142. package/dist/cjs/js/src/abstract/bitvavo.js +0 -9
  143. package/dist/cjs/js/src/abstract/bl3p.js +0 -9
  144. package/dist/cjs/js/src/abstract/blockchaincom.js +0 -9
  145. package/dist/cjs/js/src/abstract/btcalpha.js +0 -9
  146. package/dist/cjs/js/src/abstract/btcbox.js +0 -9
  147. package/dist/cjs/js/src/abstract/btcmarkets.js +0 -9
  148. package/dist/cjs/js/src/abstract/btcturk.js +0 -9
  149. package/dist/cjs/js/src/abstract/bybit.js +0 -9
  150. package/dist/cjs/js/src/abstract/cex.js +0 -9
  151. package/dist/cjs/js/src/abstract/coinbase.js +0 -9
  152. package/dist/cjs/js/src/abstract/coinbasepro.js +0 -9
  153. package/dist/cjs/js/src/abstract/coincheck.js +0 -9
  154. package/dist/cjs/js/src/abstract/coinex.js +0 -9
  155. package/dist/cjs/js/src/abstract/coinlist.js +0 -9
  156. package/dist/cjs/js/src/abstract/coinmate.js +0 -9
  157. package/dist/cjs/js/src/abstract/coinone.js +0 -9
  158. package/dist/cjs/js/src/abstract/coinsph.js +0 -9
  159. package/dist/cjs/js/src/abstract/coinspot.js +0 -9
  160. package/dist/cjs/js/src/abstract/cryptocom.js +0 -9
  161. package/dist/cjs/js/src/abstract/currencycom.js +0 -9
  162. package/dist/cjs/js/src/abstract/delta.js +0 -9
  163. package/dist/cjs/js/src/abstract/deribit.js +0 -9
  164. package/dist/cjs/js/src/abstract/digifinex.js +0 -9
  165. package/dist/cjs/js/src/abstract/exmo.js +0 -9
  166. package/dist/cjs/js/src/abstract/gate.js +0 -9
  167. package/dist/cjs/js/src/abstract/gemini.js +0 -9
  168. package/dist/cjs/js/src/abstract/hitbtc.js +0 -9
  169. package/dist/cjs/js/src/abstract/hollaex.js +0 -9
  170. package/dist/cjs/js/src/abstract/htx.js +0 -9
  171. package/dist/cjs/js/src/abstract/huobijp.js +0 -9
  172. package/dist/cjs/js/src/abstract/idex.js +0 -9
  173. package/dist/cjs/js/src/abstract/independentreserve.js +0 -9
  174. package/dist/cjs/js/src/abstract/indodax.js +0 -9
  175. package/dist/cjs/js/src/abstract/kraken.js +0 -9
  176. package/dist/cjs/js/src/abstract/krakenfutures.js +0 -9
  177. package/dist/cjs/js/src/abstract/kucoin.js +0 -9
  178. package/dist/cjs/js/src/abstract/kucoinfutures.js +0 -9
  179. package/dist/cjs/js/src/abstract/kuna.js +0 -9
  180. package/dist/cjs/js/src/abstract/latoken.js +0 -9
  181. package/dist/cjs/js/src/abstract/lbank.js +0 -9
  182. package/dist/cjs/js/src/abstract/luno.js +0 -9
  183. package/dist/cjs/js/src/abstract/lykke.js +0 -9
  184. package/dist/cjs/js/src/abstract/mercado.js +0 -9
  185. package/dist/cjs/js/src/abstract/mexc.js +0 -9
  186. package/dist/cjs/js/src/abstract/ndax.js +0 -9
  187. package/dist/cjs/js/src/abstract/novadax.js +0 -9
  188. package/dist/cjs/js/src/abstract/oceanex.js +0 -9
  189. package/dist/cjs/js/src/abstract/okcoin.js +0 -9
  190. package/dist/cjs/js/src/abstract/okx.js +0 -9
  191. package/dist/cjs/js/src/abstract/p2b.js +0 -9
  192. package/dist/cjs/js/src/abstract/paymium.js +0 -9
  193. package/dist/cjs/js/src/abstract/phemex.js +0 -9
  194. package/dist/cjs/js/src/abstract/poloniex.js +0 -9
  195. package/dist/cjs/js/src/abstract/poloniexfutures.js +0 -9
  196. package/dist/cjs/js/src/abstract/probit.js +0 -9
  197. package/dist/cjs/js/src/abstract/timex.js +0 -9
  198. package/dist/cjs/js/src/abstract/tokocrypto.js +0 -9
  199. package/dist/cjs/js/src/abstract/upbit.js +0 -9
  200. package/dist/cjs/js/src/abstract/wavesexchange.js +0 -9
  201. package/dist/cjs/js/src/abstract/wazirx.js +0 -9
  202. package/dist/cjs/js/src/abstract/whitebit.js +0 -9
  203. package/dist/cjs/js/src/abstract/woo.js +0 -9
  204. package/dist/cjs/js/src/abstract/yobit.js +0 -9
  205. package/dist/cjs/js/src/abstract/zaif.js +0 -9
  206. package/dist/cjs/js/src/abstract/zonda.js +0 -9
  207. package/dist/cjs/js/src/ace.js +0 -1058
  208. package/dist/cjs/js/src/alpaca.js +0 -1125
  209. package/dist/cjs/js/src/ascendex.js +0 -3365
  210. package/dist/cjs/js/src/base/Exchange.js +0 -5257
  211. package/dist/cjs/js/src/base/Precise.js +0 -263
  212. package/dist/cjs/js/src/base/errors.js +0 -299
  213. package/dist/cjs/js/src/base/functions/crypto.js +0 -78
  214. package/dist/cjs/js/src/base/functions/encode.js +0 -44
  215. package/dist/cjs/js/src/base/functions/generic.js +0 -193
  216. package/dist/cjs/js/src/base/functions/misc.js +0 -96
  217. package/dist/cjs/js/src/base/functions/number.js +0 -297
  218. package/dist/cjs/js/src/base/functions/platform.js +0 -28
  219. package/dist/cjs/js/src/base/functions/rsa.js +0 -34
  220. package/dist/cjs/js/src/base/functions/string.js +0 -48
  221. package/dist/cjs/js/src/base/functions/throttle.js +0 -66
  222. package/dist/cjs/js/src/base/functions/time.js +0 -187
  223. package/dist/cjs/js/src/base/functions/totp.js +0 -24
  224. package/dist/cjs/js/src/base/functions/type.js +0 -162
  225. package/dist/cjs/js/src/base/functions.js +0 -157
  226. package/dist/cjs/js/src/base/ws/Cache.js +0 -254
  227. package/dist/cjs/js/src/base/ws/Client.js +0 -299
  228. package/dist/cjs/js/src/base/ws/Future.js +0 -34
  229. package/dist/cjs/js/src/base/ws/OrderBook.js +0 -107
  230. package/dist/cjs/js/src/base/ws/OrderBookSide.js +0 -281
  231. package/dist/cjs/js/src/base/ws/WsClient.js +0 -69
  232. package/dist/cjs/js/src/bequant.js +0 -33
  233. package/dist/cjs/js/src/bigone.js +0 -2213
  234. package/dist/cjs/js/src/binance.js +0 -9845
  235. package/dist/cjs/js/src/binancecoinm.js +0 -45
  236. package/dist/cjs/js/src/binanceus.js +0 -92
  237. package/dist/cjs/js/src/binanceusdm.js +0 -58
  238. package/dist/cjs/js/src/bingx.js +0 -3846
  239. package/dist/cjs/js/src/bit2c.js +0 -916
  240. package/dist/cjs/js/src/bitbank.js +0 -1000
  241. package/dist/cjs/js/src/bitbay.js +0 -17
  242. package/dist/cjs/js/src/bitbns.js +0 -1220
  243. package/dist/cjs/js/src/bitcoincom.js +0 -17
  244. package/dist/cjs/js/src/bitfinex.js +0 -1670
  245. package/dist/cjs/js/src/bitfinex2.js +0 -2990
  246. package/dist/cjs/js/src/bitflyer.js +0 -1045
  247. package/dist/cjs/js/src/bitforex.js +0 -852
  248. package/dist/cjs/js/src/bitget.js +0 -8295
  249. package/dist/cjs/js/src/bithumb.js +0 -1090
  250. package/dist/cjs/js/src/bitmart.js +0 -4454
  251. package/dist/cjs/js/src/bitmex.js +0 -2881
  252. package/dist/cjs/js/src/bitopro.js +0 -1724
  253. package/dist/cjs/js/src/bitrue.js +0 -3253
  254. package/dist/cjs/js/src/bitso.js +0 -1753
  255. package/dist/cjs/js/src/bitstamp.js +0 -2188
  256. package/dist/cjs/js/src/bitteam.js +0 -2309
  257. package/dist/cjs/js/src/bitvavo.js +0 -1968
  258. package/dist/cjs/js/src/bl3p.js +0 -447
  259. package/dist/cjs/js/src/blockchaincom.js +0 -1160
  260. package/dist/cjs/js/src/btcalpha.js +0 -929
  261. package/dist/cjs/js/src/btcbox.js +0 -565
  262. package/dist/cjs/js/src/btcmarkets.js +0 -1237
  263. package/dist/cjs/js/src/btcturk.js +0 -929
  264. package/dist/cjs/js/src/bybit.js +0 -7650
  265. package/dist/cjs/js/src/cex.js +0 -1693
  266. package/dist/cjs/js/src/coinbase.js +0 -3424
  267. package/dist/cjs/js/src/coinbasepro.js +0 -1866
  268. package/dist/cjs/js/src/coincheck.js +0 -843
  269. package/dist/cjs/js/src/coinex.js +0 -5417
  270. package/dist/cjs/js/src/coinlist.js +0 -2337
  271. package/dist/cjs/js/src/coinmate.js +0 -989
  272. package/dist/cjs/js/src/coinone.js +0 -1185
  273. package/dist/cjs/js/src/coinsph.js +0 -1933
  274. package/dist/cjs/js/src/coinspot.js +0 -548
  275. package/dist/cjs/js/src/cryptocom.js +0 -3007
  276. package/dist/cjs/js/src/currencycom.js +0 -2015
  277. package/dist/cjs/js/src/delta.js +0 -3262
  278. package/dist/cjs/js/src/deribit.js +0 -3306
  279. package/dist/cjs/js/src/digifinex.js +0 -4307
  280. package/dist/cjs/js/src/exmo.js +0 -2645
  281. package/dist/cjs/js/src/fmfwio.js +0 -34
  282. package/dist/cjs/js/src/gate.js +0 -7077
  283. package/dist/cjs/js/src/gateio.js +0 -16
  284. package/dist/cjs/js/src/gemini.js +0 -1801
  285. package/dist/cjs/js/src/hitbtc.js +0 -3660
  286. package/dist/cjs/js/src/hitbtc3.js +0 -19
  287. package/dist/cjs/js/src/hollaex.js +0 -1882
  288. package/dist/cjs/js/src/htx.js +0 -9174
  289. package/dist/cjs/js/src/huobi.js +0 -16
  290. package/dist/cjs/js/src/huobijp.js +0 -1918
  291. package/dist/cjs/js/src/idex.js +0 -1770
  292. package/dist/cjs/js/src/independentreserve.js +0 -761
  293. package/dist/cjs/js/src/indodax.js +0 -1069
  294. package/dist/cjs/js/src/kraken.js +0 -2891
  295. package/dist/cjs/js/src/krakenfutures.js +0 -2407
  296. package/dist/cjs/js/src/kucoin.js +0 -4494
  297. package/dist/cjs/js/src/kucoinfutures.js +0 -2529
  298. package/dist/cjs/js/src/kuna.js +0 -1949
  299. package/dist/cjs/js/src/latoken.js +0 -1729
  300. package/dist/cjs/js/src/lbank.js +0 -2851
  301. package/dist/cjs/js/src/luno.js +0 -1044
  302. package/dist/cjs/js/src/lykke.js +0 -1303
  303. package/dist/cjs/js/src/mercado.js +0 -897
  304. package/dist/cjs/js/src/mexc.js +0 -5407
  305. package/dist/cjs/js/src/ndax.js +0 -2450
  306. package/dist/cjs/js/src/novadax.js +0 -1556
  307. package/dist/cjs/js/src/oceanex.js +0 -964
  308. package/dist/cjs/js/src/okcoin.js +0 -3115
  309. package/dist/cjs/js/src/okx.js +0 -7331
  310. package/dist/cjs/js/src/p2b.js +0 -1243
  311. package/dist/cjs/js/src/paymium.js +0 -597
  312. package/dist/cjs/js/src/phemex.js +0 -4725
  313. package/dist/cjs/js/src/poloniex.js +0 -2356
  314. package/dist/cjs/js/src/poloniexfutures.js +0 -1794
  315. package/dist/cjs/js/src/pro/alpaca.js +0 -714
  316. package/dist/cjs/js/src/pro/ascendex.js +0 -957
  317. package/dist/cjs/js/src/pro/bequant.js +0 -33
  318. package/dist/cjs/js/src/pro/binance.js +0 -2796
  319. package/dist/cjs/js/src/pro/binancecoinm.js +0 -23
  320. package/dist/cjs/js/src/pro/binanceus.js +0 -51
  321. package/dist/cjs/js/src/pro/binanceusdm.js +0 -32
  322. package/dist/cjs/js/src/pro/bingx.js +0 -944
  323. package/dist/cjs/js/src/pro/bitcoincom.js +0 -29
  324. package/dist/cjs/js/src/pro/bitfinex.js +0 -672
  325. package/dist/cjs/js/src/pro/bitfinex2.js +0 -1159
  326. package/dist/cjs/js/src/pro/bitget.js +0 -1733
  327. package/dist/cjs/js/src/pro/bitmart.js +0 -1486
  328. package/dist/cjs/js/src/pro/bitmex.js +0 -1576
  329. package/dist/cjs/js/src/pro/bitopro.js +0 -327
  330. package/dist/cjs/js/src/pro/bitrue.js +0 -462
  331. package/dist/cjs/js/src/pro/bitstamp.js +0 -547
  332. package/dist/cjs/js/src/pro/bitvavo.js +0 -704
  333. package/dist/cjs/js/src/pro/blockchaincom.js +0 -794
  334. package/dist/cjs/js/src/pro/bybit.js +0 -1843
  335. package/dist/cjs/js/src/pro/cex.js +0 -1510
  336. package/dist/cjs/js/src/pro/coinbase.js +0 -561
  337. package/dist/cjs/js/src/pro/coinbasepro.js +0 -968
  338. package/dist/cjs/js/src/pro/coinex.js +0 -1095
  339. package/dist/cjs/js/src/pro/cryptocom.js +0 -1020
  340. package/dist/cjs/js/src/pro/currencycom.js +0 -563
  341. package/dist/cjs/js/src/pro/deribit.js +0 -825
  342. package/dist/cjs/js/src/pro/exmo.js +0 -658
  343. package/dist/cjs/js/src/pro/gate.js +0 -1316
  344. package/dist/cjs/js/src/pro/gateio.js +0 -16
  345. package/dist/cjs/js/src/pro/gemini.js +0 -649
  346. package/dist/cjs/js/src/pro/hitbtc.js +0 -1294
  347. package/dist/cjs/js/src/pro/hollaex.js +0 -597
  348. package/dist/cjs/js/src/pro/htx.js +0 -2388
  349. package/dist/cjs/js/src/pro/huobi.js +0 -16
  350. package/dist/cjs/js/src/pro/huobijp.js +0 -606
  351. package/dist/cjs/js/src/pro/idex.js +0 -714
  352. package/dist/cjs/js/src/pro/independentreserve.js +0 -280
  353. package/dist/cjs/js/src/pro/kraken.js +0 -1364
  354. package/dist/cjs/js/src/pro/krakenfutures.js +0 -1506
  355. package/dist/cjs/js/src/pro/kucoin.js +0 -1054
  356. package/dist/cjs/js/src/pro/kucoinfutures.js +0 -981
  357. package/dist/cjs/js/src/pro/luno.js +0 -322
  358. package/dist/cjs/js/src/pro/mexc.js +0 -1170
  359. package/dist/cjs/js/src/pro/ndax.js +0 -545
  360. package/dist/cjs/js/src/pro/okcoin.js +0 -760
  361. package/dist/cjs/js/src/pro/okx.js +0 -1608
  362. package/dist/cjs/js/src/pro/phemex.js +0 -1511
  363. package/dist/cjs/js/src/pro/poloniex.js +0 -1253
  364. package/dist/cjs/js/src/pro/poloniexfutures.js +0 -1014
  365. package/dist/cjs/js/src/pro/probit.js +0 -586
  366. package/dist/cjs/js/src/pro/upbit.js +0 -234
  367. package/dist/cjs/js/src/pro/wazirx.js +0 -776
  368. package/dist/cjs/js/src/pro/whitebit.js +0 -927
  369. package/dist/cjs/js/src/pro/woo.js +0 -895
  370. package/dist/cjs/js/src/probit.js +0 -1867
  371. package/dist/cjs/js/src/static_dependencies/fflake/browser.js +0 -401
  372. package/dist/cjs/js/src/static_dependencies/jsencrypt/JSEncrypt.js +0 -195
  373. package/dist/cjs/js/src/static_dependencies/jsencrypt/JSEncryptRSAKey.js +0 -308
  374. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/asn1js/asn1.js +0 -554
  375. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/asn1js/base64.js +0 -94
  376. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/asn1js/hex.js +0 -70
  377. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/asn1js/int10.js +0 -91
  378. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/jsbn/base64.js +0 -16
  379. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.js +0 -1760
  380. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/jsbn/prng4.js +0 -52
  381. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/jsbn/rng.js +0 -81
  382. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/jsbn/rsa.js +0 -376
  383. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/jsbn/util.js +0 -70
  384. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/jsrsasign/asn1-1.0.js +0 -1580
  385. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/jsrsasign/yahoo.js +0 -74
  386. package/dist/cjs/js/src/static_dependencies/noble-curves/_shortw_utils.js +0 -24
  387. package/dist/cjs/js/src/static_dependencies/noble-curves/abstract/curve.js +0 -158
  388. package/dist/cjs/js/src/static_dependencies/noble-curves/abstract/edwards.js +0 -429
  389. package/dist/cjs/js/src/static_dependencies/noble-curves/abstract/hash-to-curve.js +0 -176
  390. package/dist/cjs/js/src/static_dependencies/noble-curves/abstract/modular.js +0 -324
  391. package/dist/cjs/js/src/static_dependencies/noble-curves/abstract/montgomery.js +0 -163
  392. package/dist/cjs/js/src/static_dependencies/noble-curves/abstract/utils.js +0 -245
  393. package/dist/cjs/js/src/static_dependencies/noble-curves/abstract/weierstrass.js +0 -1018
  394. package/dist/cjs/js/src/static_dependencies/noble-curves/ed25519.js +0 -383
  395. package/dist/cjs/js/src/static_dependencies/noble-curves/secp256k1.js +0 -258
  396. package/dist/cjs/js/src/static_dependencies/noble-hashes/_assert.js +0 -53
  397. package/dist/cjs/js/src/static_dependencies/noble-hashes/_sha2.js +0 -120
  398. package/dist/cjs/js/src/static_dependencies/noble-hashes/_u64.js +0 -69
  399. package/dist/cjs/js/src/static_dependencies/noble-hashes/crypto.js +0 -7
  400. package/dist/cjs/js/src/static_dependencies/noble-hashes/hmac.js +0 -83
  401. package/dist/cjs/js/src/static_dependencies/noble-hashes/md5.js +0 -240
  402. package/dist/cjs/js/src/static_dependencies/noble-hashes/sha1.js +0 -91
  403. package/dist/cjs/js/src/static_dependencies/noble-hashes/sha256.js +0 -130
  404. package/dist/cjs/js/src/static_dependencies/noble-hashes/sha3.js +0 -214
  405. package/dist/cjs/js/src/static_dependencies/noble-hashes/sha512.js +0 -239
  406. package/dist/cjs/js/src/static_dependencies/noble-hashes/utils.js +0 -93
  407. package/dist/cjs/js/src/static_dependencies/node-fetch/body.js +0 -354
  408. package/dist/cjs/js/src/static_dependencies/node-fetch/errors/abort-error.js +0 -16
  409. package/dist/cjs/js/src/static_dependencies/node-fetch/errors/base.js +0 -20
  410. package/dist/cjs/js/src/static_dependencies/node-fetch/errors/fetch-error.js +0 -30
  411. package/dist/cjs/js/src/static_dependencies/node-fetch/headers.js +0 -239
  412. package/dist/cjs/js/src/static_dependencies/node-fetch/index.js +0 -372
  413. package/dist/cjs/js/src/static_dependencies/node-fetch/request.js +0 -273
  414. package/dist/cjs/js/src/static_dependencies/node-fetch/response.js +0 -139
  415. package/dist/cjs/js/src/static_dependencies/node-fetch/utils/get-search.js +0 -14
  416. package/dist/cjs/js/src/static_dependencies/node-fetch/utils/is-redirect.js +0 -16
  417. package/dist/cjs/js/src/static_dependencies/node-fetch/utils/is.js +0 -81
  418. package/dist/cjs/js/src/static_dependencies/node-fetch/utils/referrer.js +0 -292
  419. package/dist/cjs/js/src/static_dependencies/proxies/agent-base/index.js +0 -103
  420. package/dist/cjs/js/src/static_dependencies/proxies/http-proxy-agent/index.js +0 -140
  421. package/dist/cjs/js/src/static_dependencies/proxies/https-proxy-agent/index.js +0 -175
  422. package/dist/cjs/js/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.js +0 -95
  423. package/dist/cjs/js/src/static_dependencies/qs/index.cjs.js +0 -7
  424. package/dist/cjs/js/src/static_dependencies/scure-base/index.js +0 -383
  425. package/dist/cjs/js/src/timex.js +0 -1562
  426. package/dist/cjs/js/src/tokocrypto.js +0 -2542
  427. package/dist/cjs/js/src/upbit.js +0 -1844
  428. package/dist/cjs/js/src/wavesexchange.js +0 -2607
  429. package/dist/cjs/js/src/wazirx.js +0 -953
  430. package/dist/cjs/js/src/whitebit.js +0 -2309
  431. package/dist/cjs/js/src/woo.js +0 -2769
  432. package/dist/cjs/js/src/yobit.js +0 -1314
  433. package/dist/cjs/js/src/zaif.js +0 -736
  434. package/dist/cjs/js/src/zonda.js +0 -1883
  435. package/dist/cjs/src/abstract/bitpanda.js +0 -9
  436. package/test.ts +0 -0
  437. /package/dist/cjs/{js/src/abstract/ace.js → src/abstract/onetrading.js} +0 -0
  438. /package/dist/cjs/{js/src → src}/pro/coinone.js +0 -0
  439. /package/js/src/abstract/{bitpanda.js → onetrading.js} +0 -0
@@ -1,176 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var modular = require('./modular.js');
6
- var utils = require('./utils.js');
7
-
8
- function validateDST(dst) {
9
- if (dst instanceof Uint8Array)
10
- return dst;
11
- if (typeof dst === 'string')
12
- return utils.utf8ToBytes(dst);
13
- throw new Error('DST must be Uint8Array or string');
14
- }
15
- // Octet Stream to Integer. "spec" implementation of os2ip is 2.5x slower vs bytesToNumberBE.
16
- const os2ip = utils.bytesToNumberBE;
17
- // Integer to Octet Stream (numberToBytesBE)
18
- function i2osp(value, length) {
19
- if (value < 0 || value >= 1 << (8 * length)) {
20
- throw new Error(`bad I2OSP call: value=${value} length=${length}`);
21
- }
22
- const res = Array.from({ length }).fill(0);
23
- for (let i = length - 1; i >= 0; i--) {
24
- res[i] = value & 0xff;
25
- value >>>= 8;
26
- }
27
- return new Uint8Array(res);
28
- }
29
- function strxor(a, b) {
30
- const arr = new Uint8Array(a.length);
31
- for (let i = 0; i < a.length; i++) {
32
- arr[i] = a[i] ^ b[i];
33
- }
34
- return arr;
35
- }
36
- function isBytes(item) {
37
- if (!(item instanceof Uint8Array))
38
- throw new Error('Uint8Array expected');
39
- }
40
- function isNum(item) {
41
- if (!Number.isSafeInteger(item))
42
- throw new Error('number expected');
43
- }
44
- // Produces a uniformly random byte string using a cryptographic hash function H that outputs b bits
45
- // https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-hash-to-curve-11#section-5.4.1
46
- function expand_message_xmd(msg, DST, lenInBytes, H) {
47
- isBytes(msg);
48
- isBytes(DST);
49
- isNum(lenInBytes);
50
- // https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-hash-to-curve-16#section-5.3.3
51
- if (DST.length > 255)
52
- DST = H(utils.concatBytes(utils.utf8ToBytes('H2C-OVERSIZE-DST-'), DST));
53
- const { outputLen: b_in_bytes, blockLen: r_in_bytes } = H;
54
- const ell = Math.ceil(lenInBytes / b_in_bytes);
55
- if (ell > 255)
56
- throw new Error('Invalid xmd length');
57
- const DST_prime = utils.concatBytes(DST, i2osp(DST.length, 1));
58
- const Z_pad = i2osp(0, r_in_bytes);
59
- const l_i_b_str = i2osp(lenInBytes, 2); // len_in_bytes_str
60
- const b = new Array(ell);
61
- const b_0 = H(utils.concatBytes(Z_pad, msg, l_i_b_str, i2osp(0, 1), DST_prime));
62
- b[0] = H(utils.concatBytes(b_0, i2osp(1, 1), DST_prime));
63
- for (let i = 1; i <= ell; i++) {
64
- const args = [strxor(b_0, b[i - 1]), i2osp(i + 1, 1), DST_prime];
65
- b[i] = H(utils.concatBytes(...args));
66
- }
67
- const pseudo_random_bytes = utils.concatBytes(...b);
68
- return pseudo_random_bytes.slice(0, lenInBytes);
69
- }
70
- function expand_message_xof(msg, DST, lenInBytes, k, H) {
71
- isBytes(msg);
72
- isBytes(DST);
73
- isNum(lenInBytes);
74
- // https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-hash-to-curve-16#section-5.3.3
75
- // DST = H('H2C-OVERSIZE-DST-' || a_very_long_DST, Math.ceil((lenInBytes * k) / 8));
76
- if (DST.length > 255) {
77
- const dkLen = Math.ceil((2 * k) / 8);
78
- DST = H.create({ dkLen }).update(utils.utf8ToBytes('H2C-OVERSIZE-DST-')).update(DST).digest();
79
- }
80
- if (lenInBytes > 65535 || DST.length > 255)
81
- throw new Error('expand_message_xof: invalid lenInBytes');
82
- return (H.create({ dkLen: lenInBytes })
83
- .update(msg)
84
- .update(i2osp(lenInBytes, 2))
85
- // 2. DST_prime = DST || I2OSP(len(DST), 1)
86
- .update(DST)
87
- .update(i2osp(DST.length, 1))
88
- .digest());
89
- }
90
- /**
91
- * Hashes arbitrary-length byte strings to a list of one or more elements of a finite field F
92
- * https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-hash-to-curve-11#section-5.3
93
- * @param msg a byte string containing the message to hash
94
- * @param count the number of elements of F to output
95
- * @param options `{DST: string, p: bigint, m: number, k: number, expand: 'xmd' | 'xof', hash: H}`, see above
96
- * @returns [u_0, ..., u_(count - 1)], a list of field elements.
97
- */
98
- function hash_to_field(msg, count, options) {
99
- utils.validateObject(options, {
100
- DST: 'string',
101
- p: 'bigint',
102
- m: 'isSafeInteger',
103
- k: 'isSafeInteger',
104
- hash: 'hash',
105
- });
106
- const { p, k, m, hash, expand, DST: _DST } = options;
107
- isBytes(msg);
108
- isNum(count);
109
- const DST = validateDST(_DST);
110
- const log2p = p.toString(2).length;
111
- const L = Math.ceil((log2p + k) / 8); // section 5.1 of ietf draft link above
112
- const len_in_bytes = count * m * L;
113
- let prb; // pseudo_random_bytes
114
- if (expand === 'xmd') {
115
- prb = expand_message_xmd(msg, DST, len_in_bytes, hash);
116
- }
117
- else if (expand === 'xof') {
118
- prb = expand_message_xof(msg, DST, len_in_bytes, k, hash);
119
- }
120
- else if (expand === undefined) {
121
- prb = msg;
122
- }
123
- else {
124
- throw new Error('expand must be "xmd", "xof" or undefined');
125
- }
126
- const u = new Array(count);
127
- for (let i = 0; i < count; i++) {
128
- const e = new Array(m);
129
- for (let j = 0; j < m; j++) {
130
- const elm_offset = L * (j + i * m);
131
- const tv = prb.subarray(elm_offset, elm_offset + L);
132
- e[j] = modular.mod(os2ip(tv), p);
133
- }
134
- u[i] = e;
135
- }
136
- return u;
137
- }
138
- function isogenyMap(field, map) {
139
- // Make same order as in spec
140
- const COEFF = map.map((i) => Array.from(i).reverse());
141
- return (x, y) => {
142
- const [xNum, xDen, yNum, yDen] = COEFF.map((val) => val.reduce((acc, i) => field.add(field.mul(acc, x), i)));
143
- x = field.div(xNum, xDen); // xNum / xDen
144
- y = field.mul(y, field.div(yNum, yDen)); // y * (yNum / yDev)
145
- return { x, y };
146
- };
147
- }
148
- function createHasher(Point, mapToCurve, def) {
149
- if (typeof mapToCurve !== 'function')
150
- throw new Error('mapToCurve() must be defined');
151
- return {
152
- // Encodes byte string to elliptic curve
153
- // https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-hash-to-curve-16#section-3
154
- hashToCurve(msg, options) {
155
- const u = hash_to_field(msg, 2, { ...def, DST: def.DST, ...options });
156
- const u0 = Point.fromAffine(mapToCurve(u[0]));
157
- const u1 = Point.fromAffine(mapToCurve(u[1]));
158
- const P = u0.add(u1).clearCofactor();
159
- P.assertValidity();
160
- return P;
161
- },
162
- // https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-hash-to-curve-16#section-3
163
- encodeToCurve(msg, options) {
164
- const u = hash_to_field(msg, 1, { ...def, DST: def.encodeDST, ...options });
165
- const P = Point.fromAffine(mapToCurve(u[0])).clearCofactor();
166
- P.assertValidity();
167
- return P;
168
- },
169
- };
170
- }
171
-
172
- exports.createHasher = createHasher;
173
- exports.expand_message_xmd = expand_message_xmd;
174
- exports.expand_message_xof = expand_message_xof;
175
- exports.hash_to_field = hash_to_field;
176
- exports.isogenyMap = isogenyMap;
@@ -1,324 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var utils = require('./utils.js');
6
-
7
- /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */
8
- // prettier-ignore
9
- const _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _3n = BigInt(3);
10
- // prettier-ignore
11
- const _4n = BigInt(4), _5n = BigInt(5), _8n = BigInt(8);
12
- // prettier-ignore
13
- BigInt(9); BigInt(16);
14
- // Calculates a modulo b
15
- function mod(a, b) {
16
- const result = a % b;
17
- return result >= _0n ? result : b + result;
18
- }
19
- /**
20
- * Efficiently exponentiate num to power and do modular division.
21
- * Unsafe in some contexts: uses ladder, so can expose bigint bits.
22
- * @example
23
- * powMod(2n, 6n, 11n) // 64n % 11n == 9n
24
- */
25
- // TODO: use field version && remove
26
- function pow(num, power, modulo) {
27
- if (modulo <= _0n || power < _0n)
28
- throw new Error('Expected power/modulo > 0');
29
- if (modulo === _1n)
30
- return _0n;
31
- let res = _1n;
32
- while (power > _0n) {
33
- if (power & _1n)
34
- res = (res * num) % modulo;
35
- num = (num * num) % modulo;
36
- power >>= _1n;
37
- }
38
- return res;
39
- }
40
- // Does x ^ (2 ^ power) mod p. pow2(30, 4) == 30 ^ (2 ^ 4)
41
- function pow2(x, power, modulo) {
42
- let res = x;
43
- while (power-- > _0n) {
44
- res *= res;
45
- res %= modulo;
46
- }
47
- return res;
48
- }
49
- // Inverses number over modulo
50
- function invert(number, modulo) {
51
- if (number === _0n || modulo <= _0n) {
52
- throw new Error(`invert: expected positive integers, got n=${number} mod=${modulo}`);
53
- }
54
- // Eucledian GCD https://brilliant.org/wiki/extended-euclidean-algorithm/
55
- // Fermat's little theorem "CT-like" version inv(n) = n^(m-2) mod m is 30x slower.
56
- let a = mod(number, modulo);
57
- let b = modulo;
58
- // prettier-ignore
59
- let x = _0n, u = _1n;
60
- while (a !== _0n) {
61
- // JIT applies optimization if those two lines follow each other
62
- const q = b / a;
63
- const r = b % a;
64
- const m = x - u * q;
65
- // prettier-ignore
66
- b = a, a = r, x = u, u = m;
67
- }
68
- const gcd = b;
69
- if (gcd !== _1n)
70
- throw new Error('invert: does not exist');
71
- return mod(x, modulo);
72
- }
73
- // Tonelli-Shanks algorithm
74
- // Paper 1: https://eprint.iacr.org/2012/685.pdf (page 12)
75
- // Paper 2: Square Roots from 1; 24, 51, 10 to Dan Shanks
76
- function tonelliShanks(P) {
77
- // Legendre constant: used to calculate Legendre symbol (a | p),
78
- // which denotes the value of a^((p-1)/2) (mod p).
79
- // (a | p) ≡ 1 if a is a square (mod p)
80
- // (a | p) ≡ -1 if a is not a square (mod p)
81
- // (a | p) ≡ 0 if a ≡ 0 (mod p)
82
- const legendreC = (P - _1n) / _2n;
83
- let Q, S, Z;
84
- // Step 1: By factoring out powers of 2 from p - 1,
85
- // find q and s such that p - 1 = q*(2^s) with q odd
86
- for (Q = P - _1n, S = 0; Q % _2n === _0n; Q /= _2n, S++)
87
- ;
88
- // Step 2: Select a non-square z such that (z | p) ≡ -1 and set c ≡ zq
89
- for (Z = _2n; Z < P && pow(Z, legendreC, P) !== P - _1n; Z++)
90
- ;
91
- // Fast-path
92
- if (S === 1) {
93
- const p1div4 = (P + _1n) / _4n;
94
- return function tonelliFast(Fp, n) {
95
- const root = Fp.pow(n, p1div4);
96
- if (!Fp.eql(Fp.sqr(root), n))
97
- throw new Error('Cannot find square root');
98
- return root;
99
- };
100
- }
101
- // Slow-path
102
- const Q1div2 = (Q + _1n) / _2n;
103
- return function tonelliSlow(Fp, n) {
104
- // Step 0: Check that n is indeed a square: (n | p) should not be ≡ -1
105
- if (Fp.pow(n, legendreC) === Fp.neg(Fp.ONE))
106
- throw new Error('Cannot find square root');
107
- let r = S;
108
- // TODO: will fail at Fp2/etc
109
- let g = Fp.pow(Fp.mul(Fp.ONE, Z), Q); // will update both x and b
110
- let x = Fp.pow(n, Q1div2); // first guess at the square root
111
- let b = Fp.pow(n, Q); // first guess at the fudge factor
112
- while (!Fp.eql(b, Fp.ONE)) {
113
- if (Fp.eql(b, Fp.ZERO))
114
- return Fp.ZERO; // https://en.wikipedia.org/wiki/Tonelli%E2%80%93Shanks_algorithm (4. If t = 0, return r = 0)
115
- // Find m such b^(2^m)==1
116
- let m = 1;
117
- for (let t2 = Fp.sqr(b); m < r; m++) {
118
- if (Fp.eql(t2, Fp.ONE))
119
- break;
120
- t2 = Fp.sqr(t2); // t2 *= t2
121
- }
122
- // NOTE: r-m-1 can be bigger than 32, need to convert to bigint before shift, otherwise there will be overflow
123
- const ge = Fp.pow(g, _1n << BigInt(r - m - 1)); // ge = 2^(r-m-1)
124
- g = Fp.sqr(ge); // g = ge * ge
125
- x = Fp.mul(x, ge); // x *= ge
126
- b = Fp.mul(b, g); // b *= g
127
- r = m;
128
- }
129
- return x;
130
- };
131
- }
132
- function FpSqrt(P) {
133
- // NOTE: different algorithms can give different roots, it is up to user to decide which one they want.
134
- // For example there is FpSqrtOdd/FpSqrtEven to choice root based on oddness (used for hash-to-curve).
135
- // P ≡ 3 (mod 4)
136
- // √n = n^((P+1)/4)
137
- if (P % _4n === _3n) {
138
- // Not all roots possible!
139
- // const ORDER =
140
- // 0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaabn;
141
- // const NUM = 72057594037927816n;
142
- const p1div4 = (P + _1n) / _4n;
143
- return function sqrt3mod4(Fp, n) {
144
- const root = Fp.pow(n, p1div4);
145
- // Throw if root**2 != n
146
- if (!Fp.eql(Fp.sqr(root), n))
147
- throw new Error('Cannot find square root');
148
- return root;
149
- };
150
- }
151
- // Atkin algorithm for q ≡ 5 (mod 8), https://eprint.iacr.org/2012/685.pdf (page 10)
152
- if (P % _8n === _5n) {
153
- const c1 = (P - _5n) / _8n;
154
- return function sqrt5mod8(Fp, n) {
155
- const n2 = Fp.mul(n, _2n);
156
- const v = Fp.pow(n2, c1);
157
- const nv = Fp.mul(n, v);
158
- const i = Fp.mul(Fp.mul(nv, _2n), v);
159
- const root = Fp.mul(nv, Fp.sub(i, Fp.ONE));
160
- if (!Fp.eql(Fp.sqr(root), n))
161
- throw new Error('Cannot find square root');
162
- return root;
163
- };
164
- }
165
- // Other cases: Tonelli-Shanks algorithm
166
- return tonelliShanks(P);
167
- }
168
- // Little-endian check for first LE bit (last BE bit);
169
- const isNegativeLE = (num, modulo) => (mod(num, modulo) & _1n) === _1n;
170
- // prettier-ignore
171
- const FIELD_FIELDS = [
172
- 'create', 'isValid', 'is0', 'neg', 'inv', 'sqrt', 'sqr',
173
- 'eql', 'add', 'sub', 'mul', 'pow', 'div',
174
- 'addN', 'subN', 'mulN', 'sqrN'
175
- ];
176
- function validateField(field) {
177
- const initial = {
178
- ORDER: 'bigint',
179
- MASK: 'bigint',
180
- BYTES: 'isSafeInteger',
181
- BITS: 'isSafeInteger',
182
- };
183
- const opts = FIELD_FIELDS.reduce((map, val) => {
184
- map[val] = 'function';
185
- return map;
186
- }, initial);
187
- return utils.validateObject(field, opts);
188
- }
189
- // Generic field functions
190
- function FpPow(f, num, power) {
191
- // Should have same speed as pow for bigints
192
- // TODO: benchmark!
193
- if (power < _0n)
194
- throw new Error('Expected power > 0');
195
- if (power === _0n)
196
- return f.ONE;
197
- if (power === _1n)
198
- return num;
199
- let p = f.ONE;
200
- let d = num;
201
- while (power > _0n) {
202
- if (power & _1n)
203
- p = f.mul(p, d);
204
- d = f.sqr(d);
205
- power >>= 1n;
206
- }
207
- return p;
208
- }
209
- function FpInvertBatch(f, nums) {
210
- const tmp = new Array(nums.length);
211
- // Walk from first to last, multiply them by each other MOD p
212
- const lastMultiplied = nums.reduce((acc, num, i) => {
213
- if (f.is0(num))
214
- return acc;
215
- tmp[i] = acc;
216
- return f.mul(acc, num);
217
- }, f.ONE);
218
- // Invert last element
219
- const inverted = f.inv(lastMultiplied);
220
- // Walk from last to first, multiply them by inverted each other MOD p
221
- nums.reduceRight((acc, num, i) => {
222
- if (f.is0(num))
223
- return acc;
224
- tmp[i] = f.mul(acc, tmp[i]);
225
- return f.mul(acc, num);
226
- }, inverted);
227
- return tmp;
228
- }
229
- // CURVE.n lengths
230
- function nLength(n, nBitLength) {
231
- // Bit size, byte size of CURVE.n
232
- const _nBitLength = nBitLength !== undefined ? nBitLength : n.toString(2).length;
233
- const nByteLength = Math.ceil(_nBitLength / 8);
234
- return { nBitLength: _nBitLength, nByteLength };
235
- }
236
- function Fp(ORDER, bitLen, isLE = false, redef = {}) {
237
- if (ORDER <= _0n)
238
- throw new Error(`Expected Fp ORDER > 0, got ${ORDER}`);
239
- const { nBitLength: BITS, nByteLength: BYTES } = nLength(ORDER, bitLen);
240
- if (BYTES > 2048)
241
- throw new Error('Field lengths over 2048 bytes are not supported');
242
- const sqrtP = FpSqrt(ORDER);
243
- const f = Object.freeze({
244
- ORDER,
245
- BITS,
246
- BYTES,
247
- MASK: utils.bitMask(BITS),
248
- ZERO: _0n,
249
- ONE: _1n,
250
- create: (num) => mod(num, ORDER),
251
- isValid: (num) => {
252
- if (typeof num !== 'bigint')
253
- throw new Error(`Invalid field element: expected bigint, got ${typeof num}`);
254
- return _0n <= num && num < ORDER; // 0 is valid element, but it's not invertible
255
- },
256
- is0: (num) => num === _0n,
257
- isOdd: (num) => (num & _1n) === _1n,
258
- neg: (num) => mod(-num, ORDER),
259
- eql: (lhs, rhs) => lhs === rhs,
260
- sqr: (num) => mod(num * num, ORDER),
261
- add: (lhs, rhs) => mod(lhs + rhs, ORDER),
262
- sub: (lhs, rhs) => mod(lhs - rhs, ORDER),
263
- mul: (lhs, rhs) => mod(lhs * rhs, ORDER),
264
- pow: (num, power) => FpPow(f, num, power),
265
- div: (lhs, rhs) => mod(lhs * invert(rhs, ORDER), ORDER),
266
- // Same as above, but doesn't normalize
267
- sqrN: (num) => num * num,
268
- addN: (lhs, rhs) => lhs + rhs,
269
- subN: (lhs, rhs) => lhs - rhs,
270
- mulN: (lhs, rhs) => lhs * rhs,
271
- inv: (num) => invert(num, ORDER),
272
- sqrt: redef.sqrt || ((n) => sqrtP(f, n)),
273
- invertBatch: (lst) => FpInvertBatch(f, lst),
274
- // TODO: do we really need constant cmov?
275
- // We don't have const-time bigints anyway, so probably will be not very useful
276
- cmov: (a, b, c) => (c ? b : a),
277
- toBytes: (num) => (isLE ? utils.numberToBytesLE(num, BYTES) : utils.numberToBytesBE(num, BYTES)),
278
- fromBytes: (bytes) => {
279
- if (bytes.length !== BYTES)
280
- throw new Error(`Fp.fromBytes: expected ${BYTES}, got ${bytes.length}`);
281
- return isLE ? utils.bytesToNumberLE(bytes) : utils.bytesToNumberBE(bytes);
282
- },
283
- });
284
- return Object.freeze(f);
285
- }
286
- function FpSqrtEven(Fp, elm) {
287
- if (!Fp.isOdd)
288
- throw new Error(`Field doesn't have isOdd`);
289
- const root = Fp.sqrt(elm);
290
- return Fp.isOdd(root) ? Fp.neg(root) : root;
291
- }
292
- /**
293
- * FIPS 186 B.4.1-compliant "constant-time" private key generation utility.
294
- * Can take (n+8) or more bytes of uniform input e.g. from CSPRNG or KDF
295
- * and convert them into private scalar, with the modulo bias being neglible.
296
- * Needs at least 40 bytes of input for 32-byte private key.
297
- * https://research.kudelskisecurity.com/2020/07/28/the-definitive-guide-to-modulo-bias-and-how-to-avoid-it/
298
- * @param hash hash output from SHA3 or a similar function
299
- * @returns valid private scalar
300
- */
301
- function hashToPrivateScalar(hash, groupOrder, isLE = false) {
302
- hash = utils.ensureBytes('privateHash', hash);
303
- const hashLen = hash.length;
304
- const minLen = nLength(groupOrder).nByteLength + 8;
305
- if (minLen < 24 || hashLen < minLen || hashLen > 1024)
306
- throw new Error(`hashToPrivateScalar: expected ${minLen}-1024 bytes of input, got ${hashLen}`);
307
- const num = isLE ? utils.bytesToNumberLE(hash) : utils.bytesToNumberBE(hash);
308
- return mod(num, groupOrder - _1n) + _1n;
309
- }
310
-
311
- exports.Fp = Fp;
312
- exports.FpInvertBatch = FpInvertBatch;
313
- exports.FpPow = FpPow;
314
- exports.FpSqrt = FpSqrt;
315
- exports.FpSqrtEven = FpSqrtEven;
316
- exports.hashToPrivateScalar = hashToPrivateScalar;
317
- exports.invert = invert;
318
- exports.isNegativeLE = isNegativeLE;
319
- exports.mod = mod;
320
- exports.nLength = nLength;
321
- exports.pow = pow;
322
- exports.pow2 = pow2;
323
- exports.tonelliShanks = tonelliShanks;
324
- exports.validateField = validateField;
@@ -1,163 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var modular = require('./modular.js');
6
- var utils = require('./utils.js');
7
-
8
- /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */
9
- const _0n = BigInt(0);
10
- const _1n = BigInt(1);
11
- function validateOpts(curve) {
12
- utils.validateObject(curve, {
13
- a: 'bigint',
14
- }, {
15
- montgomeryBits: 'isSafeInteger',
16
- nByteLength: 'isSafeInteger',
17
- adjustScalarBytes: 'function',
18
- domain: 'function',
19
- powPminus2: 'function',
20
- Gu: 'bigint',
21
- });
22
- // Set defaults
23
- return Object.freeze({ ...curve });
24
- }
25
- // NOTE: not really montgomery curve, just bunch of very specific methods for X25519/X448 (RFC 7748, https://www.rfc-editor.org/rfc/rfc7748)
26
- // Uses only one coordinate instead of two
27
- function montgomery(curveDef) {
28
- const CURVE = validateOpts(curveDef);
29
- const { P } = CURVE;
30
- const modP = (n) => modular.mod(n, P);
31
- const montgomeryBits = CURVE.montgomeryBits;
32
- const montgomeryBytes = Math.ceil(montgomeryBits / 8);
33
- const fieldLen = CURVE.nByteLength;
34
- const adjustScalarBytes = CURVE.adjustScalarBytes || ((bytes) => bytes);
35
- const powPminus2 = CURVE.powPminus2 || ((x) => modular.pow(x, P - BigInt(2), P));
36
- // cswap from RFC7748. But it is not from RFC7748!
37
- /*
38
- cswap(swap, x_2, x_3):
39
- dummy = mask(swap) AND (x_2 XOR x_3)
40
- x_2 = x_2 XOR dummy
41
- x_3 = x_3 XOR dummy
42
- Return (x_2, x_3)
43
- Where mask(swap) is the all-1 or all-0 word of the same length as x_2
44
- and x_3, computed, e.g., as mask(swap) = 0 - swap.
45
- */
46
- function cswap(swap, x_2, x_3) {
47
- const dummy = modP(swap * (x_2 - x_3));
48
- x_2 = modP(x_2 - dummy);
49
- x_3 = modP(x_3 + dummy);
50
- return [x_2, x_3];
51
- }
52
- // Accepts 0 as well
53
- function assertFieldElement(n) {
54
- if (typeof n === 'bigint' && _0n <= n && n < P)
55
- return n;
56
- throw new Error('Expected valid scalar 0 < scalar < CURVE.P');
57
- }
58
- // x25519 from 4
59
- // The constant a24 is (486662 - 2) / 4 = 121665 for curve25519/X25519
60
- const a24 = (CURVE.a - BigInt(2)) / BigInt(4);
61
- /**
62
- *
63
- * @param pointU u coordinate (x) on Montgomery Curve 25519
64
- * @param scalar by which the point would be multiplied
65
- * @returns new Point on Montgomery curve
66
- */
67
- function montgomeryLadder(pointU, scalar) {
68
- const u = assertFieldElement(pointU);
69
- // Section 5: Implementations MUST accept non-canonical values and process them as
70
- // if they had been reduced modulo the field prime.
71
- const k = assertFieldElement(scalar);
72
- const x_1 = u;
73
- let x_2 = _1n;
74
- let z_2 = _0n;
75
- let x_3 = u;
76
- let z_3 = _1n;
77
- let swap = _0n;
78
- let sw;
79
- for (let t = BigInt(montgomeryBits - 1); t >= _0n; t--) {
80
- const k_t = (k >> t) & _1n;
81
- swap ^= k_t;
82
- sw = cswap(swap, x_2, x_3);
83
- x_2 = sw[0];
84
- x_3 = sw[1];
85
- sw = cswap(swap, z_2, z_3);
86
- z_2 = sw[0];
87
- z_3 = sw[1];
88
- swap = k_t;
89
- const A = x_2 + z_2;
90
- const AA = modP(A * A);
91
- const B = x_2 - z_2;
92
- const BB = modP(B * B);
93
- const E = AA - BB;
94
- const C = x_3 + z_3;
95
- const D = x_3 - z_3;
96
- const DA = modP(D * A);
97
- const CB = modP(C * B);
98
- const dacb = DA + CB;
99
- const da_cb = DA - CB;
100
- x_3 = modP(dacb * dacb);
101
- z_3 = modP(x_1 * modP(da_cb * da_cb));
102
- x_2 = modP(AA * BB);
103
- z_2 = modP(E * (AA + modP(a24 * E)));
104
- }
105
- // (x_2, x_3) = cswap(swap, x_2, x_3)
106
- sw = cswap(swap, x_2, x_3);
107
- x_2 = sw[0];
108
- x_3 = sw[1];
109
- // (z_2, z_3) = cswap(swap, z_2, z_3)
110
- sw = cswap(swap, z_2, z_3);
111
- z_2 = sw[0];
112
- z_3 = sw[1];
113
- // z_2^(p - 2)
114
- const z2 = powPminus2(z_2);
115
- // Return x_2 * (z_2^(p - 2))
116
- return modP(x_2 * z2);
117
- }
118
- function encodeUCoordinate(u) {
119
- return utils.numberToBytesLE(modP(u), montgomeryBytes);
120
- }
121
- function decodeUCoordinate(uEnc) {
122
- // Section 5: When receiving such an array, implementations of X25519
123
- // MUST mask the most significant bit in the final byte.
124
- // This is very ugly way, but it works because fieldLen-1 is outside of bounds for X448, so this becomes NOOP
125
- // fieldLen - scalaryBytes = 1 for X448 and = 0 for X25519
126
- const u = utils.ensureBytes('u coordinate', uEnc, montgomeryBytes);
127
- // u[fieldLen-1] crashes QuickJS (TypeError: out-of-bound numeric index)
128
- if (fieldLen === montgomeryBytes)
129
- u[fieldLen - 1] &= 127; // 0b0111_1111
130
- return utils.bytesToNumberLE(u);
131
- }
132
- function decodeScalar(n) {
133
- const bytes = utils.ensureBytes('scalar', n);
134
- if (bytes.length !== montgomeryBytes && bytes.length !== fieldLen)
135
- throw new Error(`Expected ${montgomeryBytes} or ${fieldLen} bytes, got ${bytes.length}`);
136
- return utils.bytesToNumberLE(adjustScalarBytes(bytes));
137
- }
138
- function scalarMult(scalar, u) {
139
- const pointU = decodeUCoordinate(u);
140
- const _scalar = decodeScalar(scalar);
141
- const pu = montgomeryLadder(pointU, _scalar);
142
- // The result was not contributory
143
- // https://cr.yp.to/ecdh.html#validate
144
- if (pu === _0n)
145
- throw new Error('Invalid private or public key received');
146
- return encodeUCoordinate(pu);
147
- }
148
- // Computes public key from private. By doing scalar multiplication of base point.
149
- const GuBytes = encodeUCoordinate(CURVE.Gu);
150
- function scalarMultBase(scalar) {
151
- return scalarMult(scalar, GuBytes);
152
- }
153
- return {
154
- scalarMult,
155
- scalarMultBase,
156
- getSharedSecret: (privateKey, publicKey) => scalarMult(privateKey, publicKey),
157
- getPublicKey: (privateKey) => scalarMultBase(privateKey),
158
- utils: { randomPrivateKey: () => CURVE.randomBytes(CURVE.nByteLength) },
159
- GuBytes: GuBytes,
160
- };
161
- }
162
-
163
- exports.montgomery = montgomery;