@mtcute/core 0.1.0

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 (502) hide show
  1. package/LICENSE +8 -0
  2. package/README.md +26 -0
  3. package/cjs/base-client.d.ts +297 -0
  4. package/cjs/base-client.js +324 -0
  5. package/cjs/base-client.js.map +1 -0
  6. package/cjs/index.d.ts +10 -0
  7. package/cjs/index.js +30 -0
  8. package/cjs/index.js.map +1 -0
  9. package/cjs/network/auth-key.d.ts +21 -0
  10. package/cjs/network/auth-key.js +101 -0
  11. package/cjs/network/auth-key.js.map +1 -0
  12. package/cjs/network/authorization.d.ts +9 -0
  13. package/cjs/network/authorization.js +332 -0
  14. package/cjs/network/authorization.js.map +1 -0
  15. package/cjs/network/config-manager.d.ts +33 -0
  16. package/cjs/network/config-manager.js +93 -0
  17. package/cjs/network/config-manager.js.map +1 -0
  18. package/cjs/network/index.d.ts +4 -0
  19. package/cjs/network/index.js +20 -0
  20. package/cjs/network/index.js.map +1 -0
  21. package/cjs/network/mtproto-session.d.ts +116 -0
  22. package/cjs/network/mtproto-session.js +209 -0
  23. package/cjs/network/mtproto-session.js.map +1 -0
  24. package/cjs/network/multi-session-connection.d.ts +33 -0
  25. package/cjs/network/multi-session-connection.js +243 -0
  26. package/cjs/network/multi-session-connection.js.map +1 -0
  27. package/cjs/network/network-manager.d.ts +190 -0
  28. package/cjs/network/network-manager.js +547 -0
  29. package/cjs/network/network-manager.js.map +1 -0
  30. package/cjs/network/persistent-connection.d.ts +51 -0
  31. package/cjs/network/persistent-connection.js +173 -0
  32. package/cjs/network/persistent-connection.js.map +1 -0
  33. package/cjs/network/reconnection.d.ts +11 -0
  34. package/cjs/network/reconnection.js +18 -0
  35. package/cjs/network/reconnection.js.map +1 -0
  36. package/cjs/network/session-connection.d.ts +72 -0
  37. package/cjs/network/session-connection.js +1363 -0
  38. package/cjs/network/session-connection.js.map +1 -0
  39. package/cjs/network/transports/abstract.d.ts +99 -0
  40. package/cjs/network/transports/abstract.js +38 -0
  41. package/cjs/network/transports/abstract.js.map +1 -0
  42. package/cjs/network/transports/index.d.ts +8 -0
  43. package/cjs/network/transports/index.js +26 -0
  44. package/cjs/network/transports/index.js.map +1 -0
  45. package/cjs/network/transports/intermediate.d.ts +20 -0
  46. package/cjs/network/transports/intermediate.js +67 -0
  47. package/cjs/network/transports/intermediate.js.map +1 -0
  48. package/cjs/network/transports/obfuscated.d.ts +18 -0
  49. package/cjs/network/transports/obfuscated.js +83 -0
  50. package/cjs/network/transports/obfuscated.js.map +1 -0
  51. package/cjs/network/transports/streamed.d.ts +24 -0
  52. package/cjs/network/transports/streamed.js +32 -0
  53. package/cjs/network/transports/streamed.js.map +1 -0
  54. package/cjs/network/transports/tcp.d.ts +33 -0
  55. package/cjs/network/transports/tcp.js +130 -0
  56. package/cjs/network/transports/tcp.js.map +1 -0
  57. package/cjs/network/transports/websocket.d.ts +47 -0
  58. package/cjs/network/transports/websocket.js +124 -0
  59. package/cjs/network/transports/websocket.js.map +1 -0
  60. package/cjs/network/transports/wrapped.d.ts +11 -0
  61. package/cjs/network/transports/wrapped.js +26 -0
  62. package/cjs/network/transports/wrapped.js.map +1 -0
  63. package/cjs/package.json +3 -0
  64. package/cjs/storage/abstract.d.ts +174 -0
  65. package/cjs/storage/abstract.js +3 -0
  66. package/cjs/storage/abstract.js.map +1 -0
  67. package/cjs/storage/index.d.ts +5 -0
  68. package/cjs/storage/index.js +22 -0
  69. package/cjs/storage/index.js.map +1 -0
  70. package/cjs/storage/json-file.d.ts +31 -0
  71. package/cjs/storage/json-file.js +90 -0
  72. package/cjs/storage/json-file.js.map +1 -0
  73. package/cjs/storage/json.d.ts +9 -0
  74. package/cjs/storage/json.js +65 -0
  75. package/cjs/storage/json.js.map +1 -0
  76. package/cjs/storage/localstorage.d.ts +7 -0
  77. package/cjs/storage/localstorage.js +25 -0
  78. package/cjs/storage/localstorage.js.map +1 -0
  79. package/cjs/storage/memory.d.ts +98 -0
  80. package/cjs/storage/memory.js +299 -0
  81. package/cjs/storage/memory.js.map +1 -0
  82. package/cjs/types/errors.d.ts +53 -0
  83. package/cjs/types/errors.js +58 -0
  84. package/cjs/types/errors.js.map +1 -0
  85. package/cjs/types/index.d.ts +3 -0
  86. package/cjs/types/index.js +20 -0
  87. package/cjs/types/index.js.map +1 -0
  88. package/cjs/types/peers.d.ts +4 -0
  89. package/cjs/types/peers.js +3 -0
  90. package/cjs/types/peers.js.map +1 -0
  91. package/cjs/types/utils.d.ts +6 -0
  92. package/cjs/types/utils.js +9 -0
  93. package/cjs/types/utils.js.map +1 -0
  94. package/cjs/utils/async-lock.d.ts +10 -0
  95. package/cjs/utils/async-lock.js +43 -0
  96. package/cjs/utils/async-lock.js.map +1 -0
  97. package/cjs/utils/bigint-utils.d.ts +40 -0
  98. package/cjs/utils/bigint-utils.js +104 -0
  99. package/cjs/utils/bigint-utils.js.map +1 -0
  100. package/cjs/utils/binary/asn1-parser.d.ts +17 -0
  101. package/cjs/utils/binary/asn1-parser.js +121 -0
  102. package/cjs/utils/binary/asn1-parser.js.map +1 -0
  103. package/cjs/utils/buffer-utils.d.ts +21 -0
  104. package/cjs/utils/buffer-utils.js +63 -0
  105. package/cjs/utils/buffer-utils.js.map +1 -0
  106. package/cjs/utils/condition-variable.d.ts +9 -0
  107. package/cjs/utils/condition-variable.js +28 -0
  108. package/cjs/utils/condition-variable.js.map +1 -0
  109. package/cjs/utils/controllable-promise.d.ts +16 -0
  110. package/cjs/utils/controllable-promise.js +25 -0
  111. package/cjs/utils/controllable-promise.js.map +1 -0
  112. package/cjs/utils/crypto/abstract.d.ts +23 -0
  113. package/cjs/utils/crypto/abstract.js +19 -0
  114. package/cjs/utils/crypto/abstract.js.map +1 -0
  115. package/cjs/utils/crypto/common.d.ts +12 -0
  116. package/cjs/utils/crypto/common.js +54 -0
  117. package/cjs/utils/crypto/common.js.map +1 -0
  118. package/cjs/utils/crypto/factorization.d.ts +5 -0
  119. package/cjs/utils/crypto/factorization.js +69 -0
  120. package/cjs/utils/crypto/factorization.js.map +1 -0
  121. package/cjs/utils/crypto/index.d.ts +5 -0
  122. package/cjs/utils/crypto/index.js +23 -0
  123. package/cjs/utils/crypto/index.js.map +1 -0
  124. package/cjs/utils/crypto/keys.d.ts +27 -0
  125. package/cjs/utils/crypto/keys.js +70 -0
  126. package/cjs/utils/crypto/keys.js.map +1 -0
  127. package/cjs/utils/crypto/miller-rabin.d.ts +2 -0
  128. package/cjs/utils/crypto/miller-rabin.js +44 -0
  129. package/cjs/utils/crypto/miller-rabin.js.map +1 -0
  130. package/cjs/utils/crypto/mtproto.d.ts +31 -0
  131. package/cjs/utils/crypto/mtproto.js +66 -0
  132. package/cjs/utils/crypto/mtproto.js.map +1 -0
  133. package/cjs/utils/crypto/node-crypto.d.ts +10 -0
  134. package/cjs/utils/crypto/node-crypto.js +46 -0
  135. package/cjs/utils/crypto/node-crypto.js.map +1 -0
  136. package/cjs/utils/crypto/password.d.ts +29 -0
  137. package/cjs/utils/crypto/password.js +106 -0
  138. package/cjs/utils/crypto/password.js.map +1 -0
  139. package/cjs/utils/crypto/subtle.d.ts +12 -0
  140. package/cjs/utils/crypto/subtle.js +86 -0
  141. package/cjs/utils/crypto/subtle.js.map +1 -0
  142. package/cjs/utils/crypto/utils.d.ts +14 -0
  143. package/cjs/utils/crypto/utils.js +30 -0
  144. package/cjs/utils/crypto/utils.js.map +1 -0
  145. package/cjs/utils/default-dcs.d.ts +7 -0
  146. package/cjs/utils/default-dcs.js +76 -0
  147. package/cjs/utils/default-dcs.js.map +1 -0
  148. package/cjs/utils/deque.d.ts +29 -0
  149. package/cjs/utils/deque.js +210 -0
  150. package/cjs/utils/deque.js.map +1 -0
  151. package/cjs/utils/early-timer.d.ts +42 -0
  152. package/cjs/utils/early-timer.js +79 -0
  153. package/cjs/utils/early-timer.js.map +1 -0
  154. package/cjs/utils/flood-control.d.ts +14 -0
  155. package/cjs/utils/flood-control.js +65 -0
  156. package/cjs/utils/flood-control.js.map +1 -0
  157. package/cjs/utils/function-utils.d.ts +13 -0
  158. package/cjs/utils/function-utils.js +30 -0
  159. package/cjs/utils/function-utils.js.map +1 -0
  160. package/cjs/utils/index.d.ts +24 -0
  161. package/cjs/utils/index.js +41 -0
  162. package/cjs/utils/index.js.map +1 -0
  163. package/cjs/utils/linked-list.d.ts +21 -0
  164. package/cjs/utils/linked-list.js +73 -0
  165. package/cjs/utils/linked-list.js.map +1 -0
  166. package/cjs/utils/links/bots.d.ts +71 -0
  167. package/cjs/utils/links/bots.js +259 -0
  168. package/cjs/utils/links/bots.js.map +1 -0
  169. package/cjs/utils/links/bundle.d.ts +7 -0
  170. package/cjs/utils/links/bundle.js +24 -0
  171. package/cjs/utils/links/bundle.js.map +1 -0
  172. package/cjs/utils/links/calls.d.ts +16 -0
  173. package/cjs/utils/links/calls.js +59 -0
  174. package/cjs/utils/links/calls.js.map +1 -0
  175. package/cjs/utils/links/chat.d.ts +46 -0
  176. package/cjs/utils/links/chat.js +160 -0
  177. package/cjs/utils/links/chat.js.map +1 -0
  178. package/cjs/utils/links/common.d.ts +31 -0
  179. package/cjs/utils/links/common.js +60 -0
  180. package/cjs/utils/links/common.js.map +1 -0
  181. package/cjs/utils/links/index.d.ts +2 -0
  182. package/cjs/utils/links/index.js +29 -0
  183. package/cjs/utils/links/index.js.map +1 -0
  184. package/cjs/utils/links/misc.d.ts +19 -0
  185. package/cjs/utils/links/misc.js +77 -0
  186. package/cjs/utils/links/misc.js.map +1 -0
  187. package/cjs/utils/links/proxy.d.ts +17 -0
  188. package/cjs/utils/links/proxy.js +61 -0
  189. package/cjs/utils/links/proxy.js.map +1 -0
  190. package/cjs/utils/links/stickers.d.ts +9 -0
  191. package/cjs/utils/links/stickers.js +28 -0
  192. package/cjs/utils/links/stickers.js.map +1 -0
  193. package/cjs/utils/links/user.d.ts +27 -0
  194. package/cjs/utils/links/user.js +81 -0
  195. package/cjs/utils/links/user.js.map +1 -0
  196. package/cjs/utils/logger.d.ts +54 -0
  197. package/cjs/utils/logger.js +158 -0
  198. package/cjs/utils/logger.js.map +1 -0
  199. package/cjs/utils/long-utils.d.ts +75 -0
  200. package/cjs/utils/long-utils.js +161 -0
  201. package/cjs/utils/long-utils.js.map +1 -0
  202. package/cjs/utils/lru-map.d.ts +21 -0
  203. package/cjs/utils/lru-map.js +107 -0
  204. package/cjs/utils/lru-map.js.map +1 -0
  205. package/cjs/utils/lru-set.d.ts +22 -0
  206. package/cjs/utils/lru-set.js +48 -0
  207. package/cjs/utils/lru-set.js.map +1 -0
  208. package/cjs/utils/misc-utils.d.ts +7 -0
  209. package/cjs/utils/misc-utils.js +15 -0
  210. package/cjs/utils/misc-utils.js.map +1 -0
  211. package/cjs/utils/peer-utils.d.ts +35 -0
  212. package/cjs/utils/peer-utils.js +188 -0
  213. package/cjs/utils/peer-utils.js.map +1 -0
  214. package/cjs/utils/platform/crypto.d.ts +1 -0
  215. package/cjs/utils/platform/crypto.js +8 -0
  216. package/cjs/utils/platform/crypto.js.map +1 -0
  217. package/cjs/utils/platform/crypto.web.d.ts +1 -0
  218. package/cjs/utils/platform/crypto.web.js +14 -0
  219. package/cjs/utils/platform/crypto.web.js.map +1 -0
  220. package/cjs/utils/platform/error-reporting.d.ts +3 -0
  221. package/cjs/utils/platform/error-reporting.js +22 -0
  222. package/cjs/utils/platform/error-reporting.js.map +1 -0
  223. package/cjs/utils/platform/logging.d.ts +1 -0
  224. package/cjs/utils/platform/logging.js +35 -0
  225. package/cjs/utils/platform/logging.js.map +1 -0
  226. package/cjs/utils/platform/logging.web.d.ts +1 -0
  227. package/cjs/utils/platform/logging.web.js +35 -0
  228. package/cjs/utils/platform/logging.web.js.map +1 -0
  229. package/cjs/utils/platform/random.d.ts +1 -0
  230. package/cjs/utils/platform/random.js +7 -0
  231. package/cjs/utils/platform/random.js.map +1 -0
  232. package/cjs/utils/platform/random.web.d.ts +1 -0
  233. package/cjs/utils/platform/random.web.js +10 -0
  234. package/cjs/utils/platform/random.web.js.map +1 -0
  235. package/cjs/utils/platform/transport.d.ts +1 -0
  236. package/cjs/utils/platform/transport.js +8 -0
  237. package/cjs/utils/platform/transport.js.map +1 -0
  238. package/cjs/utils/platform/transport.web.d.ts +1 -0
  239. package/cjs/utils/platform/transport.web.js +15 -0
  240. package/cjs/utils/platform/transport.web.js.map +1 -0
  241. package/cjs/utils/sorted-array.d.ts +17 -0
  242. package/cjs/utils/sorted-array.js +83 -0
  243. package/cjs/utils/sorted-array.js.map +1 -0
  244. package/cjs/utils/string-session.d.ts +11 -0
  245. package/cjs/utils/string-session.js +73 -0
  246. package/cjs/utils/string-session.js.map +1 -0
  247. package/cjs/utils/tl-json.d.ts +13 -0
  248. package/cjs/utils/tl-json.js +62 -0
  249. package/cjs/utils/tl-json.js.map +1 -0
  250. package/cjs/utils/type-assertions.d.ts +37 -0
  251. package/cjs/utils/type-assertions.js +70 -0
  252. package/cjs/utils/type-assertions.js.map +1 -0
  253. package/esm/base-client.d.ts +297 -0
  254. package/esm/base-client.js +317 -0
  255. package/esm/base-client.js.map +1 -0
  256. package/esm/index.d.ts +10 -0
  257. package/esm/index.js +11 -0
  258. package/esm/index.js.map +1 -0
  259. package/esm/network/auth-key.d.ts +21 -0
  260. package/esm/network/auth-key.js +97 -0
  261. package/esm/network/auth-key.js.map +1 -0
  262. package/esm/network/authorization.d.ts +9 -0
  263. package/esm/network/authorization.js +325 -0
  264. package/esm/network/authorization.js.map +1 -0
  265. package/esm/network/config-manager.d.ts +33 -0
  266. package/esm/network/config-manager.js +89 -0
  267. package/esm/network/config-manager.js.map +1 -0
  268. package/esm/network/index.d.ts +4 -0
  269. package/esm/network/index.js +4 -0
  270. package/esm/network/index.js.map +1 -0
  271. package/esm/network/mtproto-session.d.ts +116 -0
  272. package/esm/network/mtproto-session.js +202 -0
  273. package/esm/network/mtproto-session.js.map +1 -0
  274. package/esm/network/multi-session-connection.d.ts +33 -0
  275. package/esm/network/multi-session-connection.js +236 -0
  276. package/esm/network/multi-session-connection.js.map +1 -0
  277. package/esm/network/network-manager.d.ts +190 -0
  278. package/esm/network/network-manager.js +542 -0
  279. package/esm/network/network-manager.js.map +1 -0
  280. package/esm/network/persistent-connection.d.ts +51 -0
  281. package/esm/network/persistent-connection.js +166 -0
  282. package/esm/network/persistent-connection.js.map +1 -0
  283. package/esm/network/reconnection.d.ts +11 -0
  284. package/esm/network/reconnection.js +14 -0
  285. package/esm/network/reconnection.js.map +1 -0
  286. package/esm/network/session-connection.d.ts +72 -0
  287. package/esm/network/session-connection.js +1356 -0
  288. package/esm/network/session-connection.js.map +1 -0
  289. package/esm/network/transports/abstract.d.ts +99 -0
  290. package/esm/network/transports/abstract.js +34 -0
  291. package/esm/network/transports/abstract.js.map +1 -0
  292. package/esm/network/transports/index.d.ts +8 -0
  293. package/esm/network/transports/index.js +9 -0
  294. package/esm/network/transports/index.js.map +1 -0
  295. package/esm/network/transports/intermediate.d.ts +20 -0
  296. package/esm/network/transports/intermediate.js +62 -0
  297. package/esm/network/transports/intermediate.js.map +1 -0
  298. package/esm/network/transports/obfuscated.d.ts +18 -0
  299. package/esm/network/transports/obfuscated.js +79 -0
  300. package/esm/network/transports/obfuscated.js.map +1 -0
  301. package/esm/network/transports/streamed.d.ts +24 -0
  302. package/esm/network/transports/streamed.js +25 -0
  303. package/esm/network/transports/streamed.js.map +1 -0
  304. package/esm/network/transports/tcp.d.ts +33 -0
  305. package/esm/network/transports/tcp.js +122 -0
  306. package/esm/network/transports/tcp.js.map +1 -0
  307. package/esm/network/transports/websocket.d.ts +47 -0
  308. package/esm/network/transports/websocket.js +116 -0
  309. package/esm/network/transports/websocket.js.map +1 -0
  310. package/esm/network/transports/wrapped.d.ts +11 -0
  311. package/esm/network/transports/wrapped.js +19 -0
  312. package/esm/network/transports/wrapped.js.map +1 -0
  313. package/esm/storage/abstract.d.ts +174 -0
  314. package/esm/storage/abstract.js +2 -0
  315. package/esm/storage/abstract.js.map +1 -0
  316. package/esm/storage/index.d.ts +5 -0
  317. package/esm/storage/index.js +6 -0
  318. package/esm/storage/index.js.map +1 -0
  319. package/esm/storage/json-file.d.ts +31 -0
  320. package/esm/storage/json-file.js +63 -0
  321. package/esm/storage/json-file.js.map +1 -0
  322. package/esm/storage/json.d.ts +9 -0
  323. package/esm/storage/json.js +61 -0
  324. package/esm/storage/json.js.map +1 -0
  325. package/esm/storage/localstorage.d.ts +7 -0
  326. package/esm/storage/localstorage.js +21 -0
  327. package/esm/storage/localstorage.js.map +1 -0
  328. package/esm/storage/memory.d.ts +98 -0
  329. package/esm/storage/memory.js +295 -0
  330. package/esm/storage/memory.js.map +1 -0
  331. package/esm/types/errors.d.ts +53 -0
  332. package/esm/types/errors.js +49 -0
  333. package/esm/types/errors.js.map +1 -0
  334. package/esm/types/index.d.ts +3 -0
  335. package/esm/types/index.js +4 -0
  336. package/esm/types/index.js.map +1 -0
  337. package/esm/types/peers.d.ts +4 -0
  338. package/esm/types/peers.js +2 -0
  339. package/esm/types/peers.js.map +1 -0
  340. package/esm/types/utils.d.ts +6 -0
  341. package/esm/types/utils.js +5 -0
  342. package/esm/types/utils.js.map +1 -0
  343. package/esm/utils/async-lock.d.ts +10 -0
  344. package/esm/utils/async-lock.js +39 -0
  345. package/esm/utils/async-lock.js.map +1 -0
  346. package/esm/utils/bigint-utils.d.ts +40 -0
  347. package/esm/utils/bigint-utils.js +92 -0
  348. package/esm/utils/bigint-utils.js.map +1 -0
  349. package/esm/utils/binary/asn1-parser.d.ts +17 -0
  350. package/esm/utils/binary/asn1-parser.js +116 -0
  351. package/esm/utils/binary/asn1-parser.js.map +1 -0
  352. package/esm/utils/buffer-utils.d.ts +21 -0
  353. package/esm/utils/buffer-utils.js +55 -0
  354. package/esm/utils/buffer-utils.js.map +1 -0
  355. package/esm/utils/condition-variable.d.ts +9 -0
  356. package/esm/utils/condition-variable.js +24 -0
  357. package/esm/utils/condition-variable.js.map +1 -0
  358. package/esm/utils/controllable-promise.d.ts +16 -0
  359. package/esm/utils/controllable-promise.js +20 -0
  360. package/esm/utils/controllable-promise.js.map +1 -0
  361. package/esm/utils/crypto/abstract.d.ts +23 -0
  362. package/esm/utils/crypto/abstract.js +15 -0
  363. package/esm/utils/crypto/abstract.js.map +1 -0
  364. package/esm/utils/crypto/common.d.ts +12 -0
  365. package/esm/utils/crypto/common.js +50 -0
  366. package/esm/utils/crypto/common.js.map +1 -0
  367. package/esm/utils/crypto/factorization.d.ts +5 -0
  368. package/esm/utils/crypto/factorization.js +62 -0
  369. package/esm/utils/crypto/factorization.js.map +1 -0
  370. package/esm/utils/crypto/index.d.ts +5 -0
  371. package/esm/utils/crypto/index.js +6 -0
  372. package/esm/utils/crypto/index.js.map +1 -0
  373. package/esm/utils/crypto/keys.d.ts +27 -0
  374. package/esm/utils/crypto/keys.js +64 -0
  375. package/esm/utils/crypto/keys.js.map +1 -0
  376. package/esm/utils/crypto/miller-rabin.d.ts +2 -0
  377. package/esm/utils/crypto/miller-rabin.js +37 -0
  378. package/esm/utils/crypto/miller-rabin.js.map +1 -0
  379. package/esm/utils/crypto/mtproto.d.ts +31 -0
  380. package/esm/utils/crypto/mtproto.js +60 -0
  381. package/esm/utils/crypto/mtproto.js.map +1 -0
  382. package/esm/utils/crypto/node-crypto.d.ts +10 -0
  383. package/esm/utils/crypto/node-crypto.js +42 -0
  384. package/esm/utils/crypto/node-crypto.js.map +1 -0
  385. package/esm/utils/crypto/password.d.ts +29 -0
  386. package/esm/utils/crypto/password.js +97 -0
  387. package/esm/utils/crypto/password.js.map +1 -0
  388. package/esm/utils/crypto/subtle.d.ts +12 -0
  389. package/esm/utils/crypto/subtle.js +59 -0
  390. package/esm/utils/crypto/subtle.js.map +1 -0
  391. package/esm/utils/crypto/utils.d.ts +14 -0
  392. package/esm/utils/crypto/utils.js +25 -0
  393. package/esm/utils/crypto/utils.js.map +1 -0
  394. package/esm/utils/default-dcs.d.ts +7 -0
  395. package/esm/utils/default-dcs.js +73 -0
  396. package/esm/utils/default-dcs.js.map +1 -0
  397. package/esm/utils/deque.d.ts +29 -0
  398. package/esm/utils/deque.js +206 -0
  399. package/esm/utils/deque.js.map +1 -0
  400. package/esm/utils/early-timer.d.ts +42 -0
  401. package/esm/utils/early-timer.js +75 -0
  402. package/esm/utils/early-timer.js.map +1 -0
  403. package/esm/utils/flood-control.d.ts +14 -0
  404. package/esm/utils/flood-control.js +61 -0
  405. package/esm/utils/flood-control.js.map +1 -0
  406. package/esm/utils/function-utils.d.ts +13 -0
  407. package/esm/utils/function-utils.js +26 -0
  408. package/esm/utils/function-utils.js.map +1 -0
  409. package/esm/utils/index.d.ts +24 -0
  410. package/esm/utils/index.js +25 -0
  411. package/esm/utils/index.js.map +1 -0
  412. package/esm/utils/linked-list.d.ts +21 -0
  413. package/esm/utils/linked-list.js +69 -0
  414. package/esm/utils/linked-list.js.map +1 -0
  415. package/esm/utils/links/bots.d.ts +71 -0
  416. package/esm/utils/links/bots.js +256 -0
  417. package/esm/utils/links/bots.js.map +1 -0
  418. package/esm/utils/links/bundle.d.ts +7 -0
  419. package/esm/utils/links/bundle.js +8 -0
  420. package/esm/utils/links/bundle.js.map +1 -0
  421. package/esm/utils/links/calls.d.ts +16 -0
  422. package/esm/utils/links/calls.js +56 -0
  423. package/esm/utils/links/calls.js.map +1 -0
  424. package/esm/utils/links/chat.d.ts +46 -0
  425. package/esm/utils/links/chat.js +157 -0
  426. package/esm/utils/links/chat.js.map +1 -0
  427. package/esm/utils/links/common.d.ts +31 -0
  428. package/esm/utils/links/common.js +56 -0
  429. package/esm/utils/links/common.js.map +1 -0
  430. package/esm/utils/links/index.d.ts +2 -0
  431. package/esm/utils/links/index.js +3 -0
  432. package/esm/utils/links/index.js.map +1 -0
  433. package/esm/utils/links/misc.d.ts +19 -0
  434. package/esm/utils/links/misc.js +74 -0
  435. package/esm/utils/links/misc.js.map +1 -0
  436. package/esm/utils/links/proxy.d.ts +17 -0
  437. package/esm/utils/links/proxy.js +58 -0
  438. package/esm/utils/links/proxy.js.map +1 -0
  439. package/esm/utils/links/stickers.d.ts +9 -0
  440. package/esm/utils/links/stickers.js +25 -0
  441. package/esm/utils/links/stickers.js.map +1 -0
  442. package/esm/utils/links/user.d.ts +27 -0
  443. package/esm/utils/links/user.js +78 -0
  444. package/esm/utils/links/user.js.map +1 -0
  445. package/esm/utils/logger.d.ts +54 -0
  446. package/esm/utils/logger.js +154 -0
  447. package/esm/utils/logger.js.map +1 -0
  448. package/esm/utils/long-utils.d.ts +75 -0
  449. package/esm/utils/long-utils.js +148 -0
  450. package/esm/utils/long-utils.js.map +1 -0
  451. package/esm/utils/lru-map.d.ts +21 -0
  452. package/esm/utils/lru-map.js +103 -0
  453. package/esm/utils/lru-map.js.map +1 -0
  454. package/esm/utils/lru-set.d.ts +22 -0
  455. package/esm/utils/lru-set.js +44 -0
  456. package/esm/utils/lru-set.js.map +1 -0
  457. package/esm/utils/misc-utils.d.ts +7 -0
  458. package/esm/utils/misc-utils.js +10 -0
  459. package/esm/utils/misc-utils.js.map +1 -0
  460. package/esm/utils/peer-utils.d.ts +35 -0
  461. package/esm/utils/peer-utils.js +179 -0
  462. package/esm/utils/peer-utils.js.map +1 -0
  463. package/esm/utils/platform/crypto.d.ts +1 -0
  464. package/esm/utils/platform/crypto.js +4 -0
  465. package/esm/utils/platform/crypto.js.map +1 -0
  466. package/esm/utils/platform/crypto.web.d.ts +1 -0
  467. package/esm/utils/platform/crypto.web.js +10 -0
  468. package/esm/utils/platform/crypto.web.js.map +1 -0
  469. package/esm/utils/platform/error-reporting.d.ts +3 -0
  470. package/esm/utils/platform/error-reporting.js +18 -0
  471. package/esm/utils/platform/error-reporting.js.map +1 -0
  472. package/esm/utils/platform/logging.d.ts +1 -0
  473. package/esm/utils/platform/logging.js +32 -0
  474. package/esm/utils/platform/logging.js.map +1 -0
  475. package/esm/utils/platform/logging.web.d.ts +1 -0
  476. package/esm/utils/platform/logging.web.js +31 -0
  477. package/esm/utils/platform/logging.web.js.map +1 -0
  478. package/esm/utils/platform/random.d.ts +1 -0
  479. package/esm/utils/platform/random.js +4 -0
  480. package/esm/utils/platform/random.js.map +1 -0
  481. package/esm/utils/platform/random.web.d.ts +1 -0
  482. package/esm/utils/platform/random.web.js +6 -0
  483. package/esm/utils/platform/random.web.js.map +1 -0
  484. package/esm/utils/platform/transport.d.ts +1 -0
  485. package/esm/utils/platform/transport.js +4 -0
  486. package/esm/utils/platform/transport.js.map +1 -0
  487. package/esm/utils/platform/transport.web.d.ts +1 -0
  488. package/esm/utils/platform/transport.web.js +12 -0
  489. package/esm/utils/platform/transport.web.js.map +1 -0
  490. package/esm/utils/sorted-array.d.ts +17 -0
  491. package/esm/utils/sorted-array.js +79 -0
  492. package/esm/utils/sorted-array.js.map +1 -0
  493. package/esm/utils/string-session.d.ts +11 -0
  494. package/esm/utils/string-session.js +68 -0
  495. package/esm/utils/string-session.js.map +1 -0
  496. package/esm/utils/tl-json.d.ts +13 -0
  497. package/esm/utils/tl-json.js +57 -0
  498. package/esm/utils/tl-json.js.map +1 -0
  499. package/esm/utils/type-assertions.d.ts +37 -0
  500. package/esm/utils/type-assertions.js +61 -0
  501. package/esm/utils/type-assertions.js.map +1 -0
  502. package/package.json +50 -0
@@ -0,0 +1,92 @@
1
+ import bigInt from 'big-integer';
2
+ import { randomBytes } from './buffer-utils.js';
3
+ /**
4
+ * Convert a big integer to a buffer
5
+ *
6
+ * @param value Value to convert
7
+ * @param length Length of the resulting buffer (by default it's computed automatically)
8
+ * @param le Whether to use little-endian encoding
9
+ */
10
+ export function bigIntToBuffer(value, length = 0, le = false) {
11
+ const array = value.toArray(256).value;
12
+ if (length !== 0 && array.length > length) {
13
+ throw new Error('Value out of bounds');
14
+ }
15
+ if (length !== 0) {
16
+ // padding
17
+ while (array.length !== length)
18
+ array.unshift(0);
19
+ }
20
+ if (le)
21
+ array.reverse();
22
+ const buffer = new Uint8Array(length || array.length);
23
+ buffer.set(array, 0);
24
+ return buffer;
25
+ }
26
+ /**
27
+ * Convert a buffer to a big integer
28
+ *
29
+ * @param buffer Buffer to convert
30
+ * @param offset Offset to start reading from
31
+ * @param length Length to read
32
+ * @param le Whether to use little-endian encoding
33
+ */
34
+ export function bufferToBigInt(buffer, offset = 0, length = buffer.length, le = false) {
35
+ const arr = [...buffer.subarray(offset, offset + length)];
36
+ if (le)
37
+ arr.reverse();
38
+ return bigInt.fromArray(arr, 256);
39
+ }
40
+ /**
41
+ * Generate a random big integer of the given size (in bytes)
42
+ * @param size Size in bytes
43
+ */
44
+ export function randomBigInt(size) {
45
+ return bufferToBigInt(randomBytes(size));
46
+ }
47
+ /**
48
+ * Generate a random big integer of the given size (in bits)
49
+ * @param bits
50
+ */
51
+ export function randomBigIntBits(bits) {
52
+ let num = randomBigInt(Math.ceil(bits / 8));
53
+ const bitLength = num.bitLength();
54
+ if (bitLength.gt(bits)) {
55
+ const toTrim = bigInt.randBetween(bitLength.minus(bits), 8);
56
+ num = num.shiftRight(toTrim);
57
+ }
58
+ return num;
59
+ }
60
+ /**
61
+ * Generate a random big integer in the range [min, max)
62
+ *
63
+ * @param max Maximum value (exclusive)
64
+ * @param min Minimum value (inclusive)
65
+ */
66
+ export function randomBigIntInRange(max, min = bigInt.one) {
67
+ const interval = max.minus(min);
68
+ if (interval.isNegative())
69
+ throw new Error('expected min < max');
70
+ const byteSize = interval.bitLength().divide(8).toJSNumber();
71
+ let result = randomBigInt(byteSize);
72
+ while (result.gt(interval))
73
+ result = result.minus(interval);
74
+ return min.plus(result);
75
+ }
76
+ /**
77
+ * Compute the multiplicity of 2 in the prime factorization of n
78
+ * @param n
79
+ */
80
+ export function twoMultiplicity(n) {
81
+ if (n === bigInt.zero)
82
+ return bigInt.zero;
83
+ let m = bigInt.zero;
84
+ let pow = bigInt.one;
85
+ while (true) {
86
+ if (!n.and(pow).isZero())
87
+ return m;
88
+ m = m.plus(bigInt.one);
89
+ pow = pow.shiftLeft(1);
90
+ }
91
+ }
92
+ //# sourceMappingURL=bigint-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bigint-utils.js","sourceRoot":"","sources":["../../../src/utils/bigint-utils.ts"],"names":[],"mappings":"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","sourcesContent":["import bigInt, { BigInteger } from 'big-integer'\n\nimport { randomBytes } from './buffer-utils.js'\n\n/**\n * Convert a big integer to a buffer\n *\n * @param value Value to convert\n * @param length Length of the resulting buffer (by default it's computed automatically)\n * @param le Whether to use little-endian encoding\n */\nexport function bigIntToBuffer(value: BigInteger, length = 0, le = false): Uint8Array {\n const array = value.toArray(256).value\n\n if (length !== 0 && array.length > length) {\n throw new Error('Value out of bounds')\n }\n\n if (length !== 0) {\n // padding\n while (array.length !== length) array.unshift(0)\n }\n\n if (le) array.reverse()\n\n const buffer = new Uint8Array(length || array.length)\n buffer.set(array, 0)\n\n return buffer\n}\n\n/**\n * Convert a buffer to a big integer\n *\n * @param buffer Buffer to convert\n * @param offset Offset to start reading from\n * @param length Length to read\n * @param le Whether to use little-endian encoding\n */\nexport function bufferToBigInt(buffer: Uint8Array, offset = 0, length = buffer.length, le = false): BigInteger {\n const arr = [...buffer.subarray(offset, offset + length)]\n\n if (le) arr.reverse()\n\n return bigInt.fromArray(arr as unknown as number[], 256)\n}\n\n/**\n * Generate a random big integer of the given size (in bytes)\n * @param size Size in bytes\n */\nexport function randomBigInt(size: number): BigInteger {\n return bufferToBigInt(randomBytes(size))\n}\n\n/**\n * Generate a random big integer of the given size (in bits)\n * @param bits\n */\nexport function randomBigIntBits(bits: number): BigInteger {\n let num = randomBigInt(Math.ceil(bits / 8))\n\n const bitLength = num.bitLength()\n\n if (bitLength.gt(bits)) {\n const toTrim = bigInt.randBetween(bitLength.minus(bits), 8)\n num = num.shiftRight(toTrim)\n }\n\n return num\n}\n\n/**\n * Generate a random big integer in the range [min, max)\n *\n * @param max Maximum value (exclusive)\n * @param min Minimum value (inclusive)\n */\nexport function randomBigIntInRange(max: BigInteger, min = bigInt.one): BigInteger {\n const interval = max.minus(min)\n if (interval.isNegative()) throw new Error('expected min < max')\n\n const byteSize = interval.bitLength().divide(8).toJSNumber()\n\n let result = randomBigInt(byteSize)\n while (result.gt(interval)) result = result.minus(interval)\n\n return min.plus(result)\n}\n\n/**\n * Compute the multiplicity of 2 in the prime factorization of n\n * @param n\n */\nexport function twoMultiplicity(n: BigInteger): BigInteger {\n if (n === bigInt.zero) return bigInt.zero\n\n let m = bigInt.zero\n let pow = bigInt.one\n\n while (true) {\n if (!n.and(pow).isZero()) return m\n m = m.plus(bigInt.one)\n pow = pow.shiftLeft(1)\n }\n}\n"]}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Parses a single PEM block to buffer.
3
+ * In fact just strips begin/end tags and parses the rest as Base64
4
+ */
5
+ export declare function parsePemContents(pem: string): Uint8Array;
6
+ interface Asn1Object {
7
+ type: number;
8
+ lengthSize: number;
9
+ length: number;
10
+ children?: Asn1Object[];
11
+ value?: Uint8Array;
12
+ }
13
+ /**
14
+ * Parses ASN.1 data to an object
15
+ */
16
+ export declare function parseAsn1(data: Uint8Array): Asn1Object;
17
+ export {};
@@ -0,0 +1,116 @@
1
+ // all available libraries either suck or are extremely large for the use case, so i made my own~
2
+ import { base64DecodeToBuffer, hexEncode } from '@mtcute/tl-runtime';
3
+ /**
4
+ * Parses a single PEM block to buffer.
5
+ * In fact just strips begin/end tags and parses the rest as Base64
6
+ */
7
+ export function parsePemContents(pem) {
8
+ return base64DecodeToBuffer(pem.replace(/^-----(BEGIN|END)( RSA)? PUBLIC KEY-----$|\n/gm, ''));
9
+ }
10
+ const ELOOPN = 102;
11
+ const ELOOP = `iterated over ${ELOOPN} elements (probably a malformed file)`;
12
+ const EDEEPN = 60;
13
+ const EDEEP = `element nested over ${EDEEPN} layers deep (probably a malformed file)`;
14
+ // Container Types are Sequence 0x30, Container Array? (0xA0, 0xA1)
15
+ // Value Types are Boolean 0x01, Integer 0x02, Null 0x05, Object ID 0x06, String 0x0C, 0x16, 0x13, 0x1e
16
+ // Value Array? (0x82)
17
+ // Bit String (0x03) and Octet String (0x04) may be values or containers
18
+ // Sometimes Bit String is used as a container (RSA Pub Spki)
19
+ const CTYPES = {
20
+ '48': true,
21
+ '49': true,
22
+ '160': true,
23
+ '161': true,
24
+ };
25
+ const VTYPES = {
26
+ '1': true,
27
+ '2': true,
28
+ '5': true,
29
+ '6': true,
30
+ '12': true,
31
+ '130': true,
32
+ };
33
+ /**
34
+ * Parses ASN.1 data to an object
35
+ */
36
+ export function parseAsn1(data) {
37
+ function parseAsn1Inner(buf, depth, eager = false) {
38
+ if (depth.length >= EDEEPN) {
39
+ throw new Error(EDEEP);
40
+ }
41
+ let index = 2; // we know, at minimum, data starts after type (0) and lengthSize (1)
42
+ const asn1 = { type: buf[0], lengthSize: 0, length: buf[1] };
43
+ let child;
44
+ let iters = 0;
45
+ let adjust = 0;
46
+ let adjustedLen = 0;
47
+ // Determine how many bytes the length uses, and what it is
48
+ if (0x80 & asn1.length) {
49
+ asn1.lengthSize = 0x7f & asn1.length;
50
+ // I think that buf->hex->int solves the problem of Endianness... not sure
51
+ asn1.length = parseInt(hexEncode(buf.subarray(index, index + asn1.lengthSize)), 16);
52
+ index += asn1.lengthSize;
53
+ }
54
+ // High-order bit Integers have a leading 0x00 to signify that they are positive.
55
+ // Bit Streams use the first byte to signify padding, which x.509 doesn't use.
56
+ if (buf[index] === 0x00 && (asn1.type === 0x02 || asn1.type === 0x03)) {
57
+ // However, 0x00 on its own is a valid number
58
+ if (asn1.length > 1) {
59
+ index += 1;
60
+ adjust = -1;
61
+ }
62
+ }
63
+ adjustedLen = asn1.length + adjust;
64
+ function parseChildren(eager = false) {
65
+ asn1.children = [];
66
+ while (iters < ELOOPN && index < 2 + asn1.length + asn1.lengthSize) {
67
+ iters += 1;
68
+ depth.length += 1;
69
+ child = parseAsn1Inner(buf.subarray(index, index + adjustedLen), depth, eager);
70
+ depth.length -= 1;
71
+ // The numbers don't match up exactly and I don't remember why...
72
+ // probably something with adjustedLen or some such, but the tests pass
73
+ index += 2 + child.lengthSize + child.length;
74
+ if (index > 2 + asn1.lengthSize + asn1.length) {
75
+ throw new Error(`Parse error: child value length (${child.length}) is ` +
76
+ `greater than remaining parent length (${asn1.length - index} = ${asn1.length} - ${index})`);
77
+ }
78
+ asn1.children.push(child);
79
+ }
80
+ if (index !== 2 + asn1.lengthSize + asn1.length) {
81
+ throw new Error('Unexpected EOF');
82
+ }
83
+ if (iters >= ELOOPN) {
84
+ throw new Error(ELOOP);
85
+ }
86
+ delete asn1.value;
87
+ return asn1;
88
+ }
89
+ // Recurse into types that are _always_ containers
90
+ if (CTYPES[asn1.type]) {
91
+ return parseChildren(eager);
92
+ }
93
+ // Return types that are _always_ values
94
+ asn1.value = buf.subarray(index, index + adjustedLen);
95
+ if (VTYPES[asn1.type]) {
96
+ return asn1;
97
+ }
98
+ // For ambiguous / unknown types, recurse and return on failure
99
+ // (and return child array size to zero)
100
+ try {
101
+ return parseChildren(true);
102
+ }
103
+ catch (e) {
104
+ if (asn1.children)
105
+ asn1.children.length = 0;
106
+ return asn1;
107
+ }
108
+ }
109
+ const asn1 = parseAsn1Inner(data, []);
110
+ const len = data.length;
111
+ if (len !== 2 + asn1.lengthSize + asn1.length) {
112
+ throw new Error('Length of buffer does not match length of ASN.1 sequence.');
113
+ }
114
+ return asn1;
115
+ }
116
+ //# sourceMappingURL=asn1-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asn1-parser.js","sourceRoot":"","sources":["../../../../src/utils/binary/asn1-parser.ts"],"names":[],"mappings":"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","sourcesContent":["// all available libraries either suck or are extremely large for the use case, so i made my own~\n\nimport { base64DecodeToBuffer, hexEncode } from '@mtcute/tl-runtime'\n\n/**\n * Parses a single PEM block to buffer.\n * In fact just strips begin/end tags and parses the rest as Base64\n */\nexport function parsePemContents(pem: string): Uint8Array {\n return base64DecodeToBuffer(pem.replace(/^-----(BEGIN|END)( RSA)? PUBLIC KEY-----$|\\n/gm, ''))\n}\n\n// based on https://git.coolaj86.com/coolaj86/asn1-parser.js/src/branch/master/asn1-parser.js\n// but modified for typescript and node buffers\n\ninterface Asn1Object {\n type: number\n lengthSize: number\n length: number\n children?: Asn1Object[]\n value?: Uint8Array\n}\n\nconst ELOOPN = 102\nconst ELOOP = `iterated over ${ELOOPN} elements (probably a malformed file)`\nconst EDEEPN = 60\nconst EDEEP = `element nested over ${EDEEPN} layers deep (probably a malformed file)`\n\n// Container Types are Sequence 0x30, Container Array? (0xA0, 0xA1)\n// Value Types are Boolean 0x01, Integer 0x02, Null 0x05, Object ID 0x06, String 0x0C, 0x16, 0x13, 0x1e\n// Value Array? (0x82)\n// Bit String (0x03) and Octet String (0x04) may be values or containers\n// Sometimes Bit String is used as a container (RSA Pub Spki)\nconst CTYPES: Record<number, true> = {\n '48': true,\n '49': true,\n '160': true,\n '161': true,\n}\nconst VTYPES: Record<number, true> = {\n '1': true,\n '2': true,\n '5': true,\n '6': true,\n '12': true,\n '130': true,\n}\n\n/**\n * Parses ASN.1 data to an object\n */\nexport function parseAsn1(data: Uint8Array): Asn1Object {\n function parseAsn1Inner(buf: Uint8Array, depth: number[], eager = false) {\n if (depth.length >= EDEEPN) {\n throw new Error(EDEEP)\n }\n\n let index = 2 // we know, at minimum, data starts after type (0) and lengthSize (1)\n const asn1: Asn1Object = { type: buf[0], lengthSize: 0, length: buf[1] }\n let child\n let iters = 0\n let adjust = 0\n let adjustedLen = 0\n\n // Determine how many bytes the length uses, and what it is\n if (0x80 & asn1.length) {\n asn1.lengthSize = 0x7f & asn1.length\n // I think that buf->hex->int solves the problem of Endianness... not sure\n asn1.length = parseInt(hexEncode(buf.subarray(index, index + asn1.lengthSize)), 16)\n index += asn1.lengthSize\n }\n\n // High-order bit Integers have a leading 0x00 to signify that they are positive.\n // Bit Streams use the first byte to signify padding, which x.509 doesn't use.\n if (buf[index] === 0x00 && (asn1.type === 0x02 || asn1.type === 0x03)) {\n // However, 0x00 on its own is a valid number\n if (asn1.length > 1) {\n index += 1\n adjust = -1\n }\n }\n adjustedLen = asn1.length + adjust\n\n function parseChildren(eager = false) {\n asn1.children = []\n\n while (iters < ELOOPN && index < 2 + asn1.length + asn1.lengthSize) {\n iters += 1\n depth.length += 1\n child = parseAsn1Inner(buf.subarray(index, index + adjustedLen), depth, eager)\n depth.length -= 1\n // The numbers don't match up exactly and I don't remember why...\n // probably something with adjustedLen or some such, but the tests pass\n index += 2 + child.lengthSize + child.length\n\n if (index > 2 + asn1.lengthSize + asn1.length) {\n throw new Error(\n `Parse error: child value length (${child.length}) is ` +\n `greater than remaining parent length (${asn1.length - index} = ${asn1.length} - ${index})`,\n )\n }\n asn1.children.push(child)\n }\n if (index !== 2 + asn1.lengthSize + asn1.length) {\n throw new Error('Unexpected EOF')\n }\n if (iters >= ELOOPN) {\n throw new Error(ELOOP)\n }\n\n delete asn1.value\n\n return asn1\n }\n\n // Recurse into types that are _always_ containers\n if (CTYPES[asn1.type]) {\n return parseChildren(eager)\n }\n\n // Return types that are _always_ values\n asn1.value = buf.subarray(index, index + adjustedLen)\n\n if (VTYPES[asn1.type]) {\n return asn1\n }\n\n // For ambiguous / unknown types, recurse and return on failure\n // (and return child array size to zero)\n try {\n return parseChildren(true)\n } catch (e) {\n if (asn1.children) asn1.children.length = 0\n\n return asn1\n }\n }\n\n const asn1 = parseAsn1Inner(data, [])\n const len = data.length\n\n if (len !== 2 + asn1.lengthSize + asn1.length) {\n throw new Error('Length of buffer does not match length of ASN.1 sequence.')\n }\n\n return asn1\n}\n"]}
@@ -0,0 +1,21 @@
1
+ export { _randomBytes as randomBytes } from './platform/random.js';
2
+ /**
3
+ * Check if two buffers are equal
4
+ *
5
+ * @param a First buffer
6
+ * @param b Second buffer
7
+ */
8
+ export declare function buffersEqual(a: Uint8Array, b: Uint8Array): boolean;
9
+ /**
10
+ * Copy a buffer
11
+ *
12
+ * @param buf Buffer to copy
13
+ * @param start Start offset
14
+ * @param end End offset
15
+ */
16
+ export declare function cloneBuffer(buf: Uint8Array, start?: number, end?: number): Uint8Array;
17
+ /**
18
+ * Concatenate multiple buffers into one
19
+ */
20
+ export declare function concatBuffers(buffers: Uint8Array[]): Uint8Array;
21
+ export declare function dataViewFromBuffer(buf: Uint8Array): DataView;
@@ -0,0 +1,55 @@
1
+ export { _randomBytes as randomBytes } from './platform/random.js';
2
+ /**
3
+ * Check if two buffers are equal
4
+ *
5
+ * @param a First buffer
6
+ * @param b Second buffer
7
+ */
8
+ export function buffersEqual(a, b) {
9
+ if (a.length !== b.length)
10
+ return false;
11
+ for (let i = 0; i < a.length; i++) {
12
+ if (a[i] !== b[i])
13
+ return false;
14
+ }
15
+ return true;
16
+ }
17
+ /**
18
+ * Copy a buffer
19
+ *
20
+ * @param buf Buffer to copy
21
+ * @param start Start offset
22
+ * @param end End offset
23
+ */
24
+ export function cloneBuffer(buf, start = 0, end = buf.length) {
25
+ const ret = new Uint8Array(end - start);
26
+ ret.set(buf.subarray(start, end));
27
+ return ret;
28
+ }
29
+ /**
30
+ * Concatenate multiple buffers into one
31
+ */
32
+ export function concatBuffers(buffers) {
33
+ if (buffers.length === 1)
34
+ return buffers[0];
35
+ /* eslint-disable no-restricted-globals */
36
+ if (typeof Buffer !== 'undefined') {
37
+ return Buffer.concat(buffers);
38
+ }
39
+ /* eslint-enable no-restricted-globals */
40
+ let length = 0;
41
+ for (const buf of buffers) {
42
+ length += buf.length;
43
+ }
44
+ const ret = new Uint8Array(length);
45
+ let offset = 0;
46
+ for (const buf of buffers) {
47
+ ret.set(buf, offset);
48
+ offset += buf.length;
49
+ }
50
+ return ret;
51
+ }
52
+ export function dataViewFromBuffer(buf) {
53
+ return new DataView(buf.buffer, buf.byteOffset, buf.byteLength);
54
+ }
55
+ //# sourceMappingURL=buffer-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buffer-utils.js","sourceRoot":"","sources":["../../../src/utils/buffer-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,IAAI,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAElE;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,CAAa,EAAE,CAAa;IACrD,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;QAAE,OAAO,KAAK,CAAA;IAEvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC/B,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAAE,OAAO,KAAK,CAAA;KAClC;IAED,OAAO,IAAI,CAAA;AACf,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,GAAe,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC,MAAM;IACpE,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,GAAG,GAAG,KAAK,CAAC,CAAA;IACvC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAA;IAEjC,OAAO,GAAG,CAAA;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,OAAqB;IAC/C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC,CAAC,CAAC,CAAA;IAE3C,0CAA0C;IAC1C,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;QAC/B,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;KAChC;IACD,yCAAyC;IAEzC,IAAI,MAAM,GAAG,CAAC,CAAA;IAEd,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE;QACvB,MAAM,IAAI,GAAG,CAAC,MAAM,CAAA;KACvB;IAED,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAA;IAClC,IAAI,MAAM,GAAG,CAAC,CAAA;IAEd,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE;QACvB,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;QACpB,MAAM,IAAI,GAAG,CAAC,MAAM,CAAA;KACvB;IAED,OAAO,GAAG,CAAA;AACd,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,GAAe;IAC9C,OAAO,IAAI,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC,CAAA;AACnE,CAAC","sourcesContent":["export { _randomBytes as randomBytes } from './platform/random.js'\n\n/**\n * Check if two buffers are equal\n *\n * @param a First buffer\n * @param b Second buffer\n */\nexport function buffersEqual(a: Uint8Array, b: Uint8Array): boolean {\n if (a.length !== b.length) return false\n\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false\n }\n\n return true\n}\n\n/**\n * Copy a buffer\n *\n * @param buf Buffer to copy\n * @param start Start offset\n * @param end End offset\n */\nexport function cloneBuffer(buf: Uint8Array, start = 0, end = buf.length): Uint8Array {\n const ret = new Uint8Array(end - start)\n ret.set(buf.subarray(start, end))\n\n return ret\n}\n\n/**\n * Concatenate multiple buffers into one\n */\nexport function concatBuffers(buffers: Uint8Array[]): Uint8Array {\n if (buffers.length === 1) return buffers[0]\n\n /* eslint-disable no-restricted-globals */\n if (typeof Buffer !== 'undefined') {\n return Buffer.concat(buffers)\n }\n /* eslint-enable no-restricted-globals */\n\n let length = 0\n\n for (const buf of buffers) {\n length += buf.length\n }\n\n const ret = new Uint8Array(length)\n let offset = 0\n\n for (const buf of buffers) {\n ret.set(buf, offset)\n offset += buf.length\n }\n\n return ret\n}\n\nexport function dataViewFromBuffer(buf: Uint8Array): DataView {\n return new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n}\n"]}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Class implementing a condition variable like behaviour.
3
+ */
4
+ export declare class ConditionVariable {
5
+ private _notify?;
6
+ private _timeout?;
7
+ wait(timeout?: number): Promise<void>;
8
+ notify(): void;
9
+ }
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Class implementing a condition variable like behaviour.
3
+ */
4
+ export class ConditionVariable {
5
+ wait(timeout) {
6
+ const prom = new Promise((resolve) => {
7
+ this._notify = resolve;
8
+ });
9
+ if (timeout) {
10
+ this._timeout = setTimeout(() => {
11
+ this._notify?.();
12
+ this._timeout = undefined;
13
+ }, timeout);
14
+ }
15
+ return prom;
16
+ }
17
+ notify() {
18
+ this._notify?.();
19
+ if (this._timeout)
20
+ clearTimeout(this._timeout);
21
+ this._notify = undefined;
22
+ }
23
+ }
24
+ //# sourceMappingURL=condition-variable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"condition-variable.js","sourceRoot":"","sources":["../../../src/utils/condition-variable.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,OAAO,iBAAiB;IAI1B,IAAI,CAAC,OAAgB;QACjB,MAAM,IAAI,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YACvC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QAC1B,CAAC,CAAC,CAAA;QAEF,IAAI,OAAO,EAAE;YACT,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC5B,IAAI,CAAC,OAAO,EAAE,EAAE,CAAA;gBAChB,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAA;YAC7B,CAAC,EAAE,OAAO,CAAC,CAAA;SACd;QAED,OAAO,IAAI,CAAA;IACf,CAAC;IAED,MAAM;QACF,IAAI,CAAC,OAAO,EAAE,EAAE,CAAA;QAChB,IAAI,IAAI,CAAC,QAAQ;YAAE,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAC9C,IAAI,CAAC,OAAO,GAAG,SAAS,CAAA;IAC5B,CAAC;CACJ","sourcesContent":["/**\n * Class implementing a condition variable like behaviour.\n */\nexport class ConditionVariable {\n private _notify?: () => void\n private _timeout?: NodeJS.Timeout\n\n wait(timeout?: number): Promise<void> {\n const prom = new Promise<void>((resolve) => {\n this._notify = resolve\n })\n\n if (timeout) {\n this._timeout = setTimeout(() => {\n this._notify?.()\n this._timeout = undefined\n }, timeout)\n }\n\n return prom\n }\n\n notify(): void {\n this._notify?.()\n if (this._timeout) clearTimeout(this._timeout)\n this._notify = undefined\n }\n}\n"]}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * A promise that can be resolved or rejected from outside.
3
+ */
4
+ export type ControllablePromise<T = unknown> = Promise<T> & {
5
+ resolve(val: T): void;
6
+ reject(err?: unknown): void;
7
+ };
8
+ /**
9
+ * The promise was cancelled
10
+ */
11
+ export declare class PromiseCancelledError extends Error {
12
+ }
13
+ /**
14
+ * Creates a promise that can be resolved or rejected from outside.
15
+ */
16
+ export declare function createControllablePromise<T = unknown>(): ControllablePromise<T>;
@@ -0,0 +1,20 @@
1
+ /**
2
+ * The promise was cancelled
3
+ */
4
+ export class PromiseCancelledError extends Error {
5
+ }
6
+ /**
7
+ * Creates a promise that can be resolved or rejected from outside.
8
+ */
9
+ export function createControllablePromise() {
10
+ let _resolve;
11
+ let _reject;
12
+ const promise = new Promise((resolve, reject) => {
13
+ _resolve = resolve;
14
+ _reject = reject;
15
+ });
16
+ promise.resolve = _resolve;
17
+ promise.reject = _reject;
18
+ return promise;
19
+ }
20
+ //# sourceMappingURL=controllable-promise.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controllable-promise.js","sourceRoot":"","sources":["../../../src/utils/controllable-promise.ts"],"names":[],"mappings":"AAQA;;GAEG;AACH,MAAM,OAAO,qBAAsB,SAAQ,KAAK;CAAG;AAEnD;;GAEG;AACH,MAAM,UAAU,yBAAyB;IACrC,IAAI,QAA2C,CAAA;IAC/C,IAAI,OAAyC,CAAA;IAC7C,MAAM,OAAO,GAAG,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC/C,QAAQ,GAAG,OAAO,CAAA;QAClB,OAAO,GAAG,MAAM,CAAA;IACpB,CAAC,CAAC,CAGD;IAAC,OAAkC,CAAC,OAAO,GAAG,QAAS,CACvD;IAAC,OAAkC,CAAC,MAAM,GAAG,OAAQ,CAAA;IAEtD,OAAO,OAAiC,CAAA;AAC5C,CAAC","sourcesContent":["/**\n * A promise that can be resolved or rejected from outside.\n */\nexport type ControllablePromise<T = unknown> = Promise<T> & {\n resolve(val: T): void\n reject(err?: unknown): void\n}\n\n/**\n * The promise was cancelled\n */\nexport class PromiseCancelledError extends Error {}\n\n/**\n * Creates a promise that can be resolved or rejected from outside.\n */\nexport function createControllablePromise<T = unknown>(): ControllablePromise<T> {\n let _resolve: ControllablePromise<T>['resolve']\n let _reject: ControllablePromise<T>['reject']\n const promise = new Promise<T>((resolve, reject) => {\n _resolve = resolve\n _reject = reject\n })\n // ts doesn't like this, but it's fine\n\n ;(promise as ControllablePromise<T>).resolve = _resolve!\n ;(promise as ControllablePromise<T>).reject = _reject!\n\n return promise as ControllablePromise<T>\n}\n"]}
@@ -0,0 +1,23 @@
1
+ import { MaybeAsync } from '../../types/index.js';
2
+ export interface IEncryptionScheme {
3
+ encrypt(data: Uint8Array): MaybeAsync<Uint8Array>;
4
+ decrypt(data: Uint8Array): MaybeAsync<Uint8Array>;
5
+ }
6
+ export interface ICryptoProvider {
7
+ initialize?(): MaybeAsync<void>;
8
+ sha1(data: Uint8Array): MaybeAsync<Uint8Array>;
9
+ sha256(data: Uint8Array): MaybeAsync<Uint8Array>;
10
+ pbkdf2(password: Uint8Array, salt: Uint8Array, iterations: number, keylen?: number, // = 64
11
+ algo?: string): MaybeAsync<Uint8Array>;
12
+ hmacSha256(data: Uint8Array, key: Uint8Array): MaybeAsync<Uint8Array>;
13
+ createAesCtr(key: Uint8Array, iv: Uint8Array, encrypt: boolean): MaybeAsync<IEncryptionScheme>;
14
+ createAesIge(key: Uint8Array, iv: Uint8Array): MaybeAsync<IEncryptionScheme>;
15
+ createAesEcb(key: Uint8Array): MaybeAsync<IEncryptionScheme>;
16
+ factorizePQ(pq: Uint8Array): MaybeAsync<[Uint8Array, Uint8Array]>;
17
+ }
18
+ export declare abstract class BaseCryptoProvider {
19
+ createAesIge(key: Uint8Array, iv: Uint8Array): MaybeAsync<IEncryptionScheme>;
20
+ factorizePQ(pq: Uint8Array): [Uint8Array, Uint8Array];
21
+ abstract createAesEcb(key: Uint8Array): MaybeAsync<IEncryptionScheme>;
22
+ }
23
+ export type CryptoProviderFactory = () => ICryptoProvider;
@@ -0,0 +1,15 @@
1
+ import { AesModeOfOperationIge } from './common.js';
2
+ import { factorizePQSync } from './factorization.js';
3
+ export class BaseCryptoProvider {
4
+ createAesIge(key, iv) {
5
+ const ecb = this.createAesEcb(key);
6
+ if ('then' in ecb) {
7
+ return ecb.then((ecb) => new AesModeOfOperationIge(key, iv, ecb));
8
+ }
9
+ return new AesModeOfOperationIge(key, iv, ecb);
10
+ }
11
+ factorizePQ(pq) {
12
+ return factorizePQSync(pq);
13
+ }
14
+ }
15
+ //# sourceMappingURL=abstract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abstract.js","sourceRoot":"","sources":["../../../../src/utils/crypto/abstract.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAmCpD,MAAM,OAAgB,kBAAkB;IACpC,YAAY,CAAC,GAAe,EAAE,EAAc;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;QAElC,IAAI,MAAM,IAAI,GAAG,EAAE;YACf,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,qBAAqB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,CAAA;SACpE;QAED,OAAO,IAAI,qBAAqB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,CAAA;IAClD,CAAC;IAED,WAAW,CAAC,EAAc;QACtB,OAAO,eAAe,CAAC,EAAE,CAAC,CAAA;IAC9B,CAAC;CAGJ","sourcesContent":["import { MaybeAsync } from '../../types/index.js'\nimport { AesModeOfOperationIge } from './common.js'\nimport { factorizePQSync } from './factorization.js'\n\nexport interface IEncryptionScheme {\n encrypt(data: Uint8Array): MaybeAsync<Uint8Array>\n\n decrypt(data: Uint8Array): MaybeAsync<Uint8Array>\n}\n\nexport interface ICryptoProvider {\n initialize?(): MaybeAsync<void>\n\n sha1(data: Uint8Array): MaybeAsync<Uint8Array>\n\n sha256(data: Uint8Array): MaybeAsync<Uint8Array>\n\n pbkdf2(\n password: Uint8Array,\n salt: Uint8Array,\n iterations: number,\n keylen?: number, // = 64\n algo?: string, // sha1 or sha512 (default sha512)\n ): MaybeAsync<Uint8Array>\n\n hmacSha256(data: Uint8Array, key: Uint8Array): MaybeAsync<Uint8Array>\n\n // in telegram, iv is always either used only once, or is the same for all calls for the key\n createAesCtr(key: Uint8Array, iv: Uint8Array, encrypt: boolean): MaybeAsync<IEncryptionScheme>\n\n createAesIge(key: Uint8Array, iv: Uint8Array): MaybeAsync<IEncryptionScheme>\n\n createAesEcb(key: Uint8Array): MaybeAsync<IEncryptionScheme>\n\n factorizePQ(pq: Uint8Array): MaybeAsync<[Uint8Array, Uint8Array]>\n}\n\nexport abstract class BaseCryptoProvider {\n createAesIge(key: Uint8Array, iv: Uint8Array): MaybeAsync<IEncryptionScheme> {\n const ecb = this.createAesEcb(key)\n\n if ('then' in ecb) {\n return ecb.then((ecb) => new AesModeOfOperationIge(key, iv, ecb))\n }\n\n return new AesModeOfOperationIge(key, iv, ecb)\n }\n\n factorizePQ(pq: Uint8Array) {\n return factorizePQSync(pq)\n }\n\n abstract createAesEcb(key: Uint8Array): MaybeAsync<IEncryptionScheme>\n}\n\nexport type CryptoProviderFactory = () => ICryptoProvider\n"]}
@@ -0,0 +1,12 @@
1
+ import type { IEncryptionScheme } from './abstract.js';
2
+ /**
3
+ * AES mode of operation IGE implementation in JS
4
+ */
5
+ export declare class AesModeOfOperationIge implements IEncryptionScheme {
6
+ private _key;
7
+ private _iv;
8
+ private _aes;
9
+ constructor(key: Uint8Array, iv: Uint8Array, ecb: IEncryptionScheme);
10
+ encrypt(data: Uint8Array): Promise<Uint8Array>;
11
+ decrypt(data: Uint8Array): Promise<Uint8Array>;
12
+ }
@@ -0,0 +1,50 @@
1
+ import { xorBufferInPlace } from './utils.js';
2
+ /**
3
+ * AES mode of operation IGE implementation in JS
4
+ */
5
+ export class AesModeOfOperationIge {
6
+ constructor(key, iv, ecb) {
7
+ this._key = key;
8
+ this._iv = iv;
9
+ this._aes = ecb;
10
+ }
11
+ async encrypt(data) {
12
+ if (data.length % 16 !== 0) {
13
+ throw new Error('invalid plaintext size (must be multiple of 16 bytes)');
14
+ }
15
+ const ciphertext = new Uint8Array(data.length);
16
+ let block = new Uint8Array(16);
17
+ let iv1 = this._iv.subarray(0, 16);
18
+ let iv2 = this._iv.subarray(16, 32);
19
+ for (let i = 0; i < data.length; i += 16) {
20
+ block.set(data.subarray(i, i + 16));
21
+ xorBufferInPlace(block, iv1);
22
+ block = await this._aes.encrypt(block);
23
+ xorBufferInPlace(block, iv2);
24
+ ciphertext.set(block, i);
25
+ iv1 = ciphertext.subarray(i, i + 16);
26
+ iv2 = data.subarray(i, i + 16);
27
+ }
28
+ return ciphertext;
29
+ }
30
+ async decrypt(data) {
31
+ if (data.length % 16 !== 0) {
32
+ throw new Error('invalid ciphertext size (must be multiple of 16 bytes)');
33
+ }
34
+ const plaintext = new Uint8Array(data.length);
35
+ let block = new Uint8Array(16);
36
+ let iv1 = this._iv.subarray(16, 32);
37
+ let iv2 = this._iv.subarray(0, 16);
38
+ for (let i = 0; i < data.length; i += 16) {
39
+ block.set(data.subarray(i, i + 16));
40
+ xorBufferInPlace(block, iv1);
41
+ block = await this._aes.decrypt(block);
42
+ xorBufferInPlace(block, iv2);
43
+ plaintext.set(block, i);
44
+ iv1 = plaintext.subarray(i, i + 16);
45
+ iv2 = data.subarray(i, i + 16);
46
+ }
47
+ return plaintext;
48
+ }
49
+ }
50
+ //# sourceMappingURL=common.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../../../../src/utils/crypto/common.ts"],"names":[],"mappings":"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","sourcesContent":["import type { IEncryptionScheme } from './abstract.js'\nimport { xorBufferInPlace } from './utils.js'\n\n/**\n * AES mode of operation IGE implementation in JS\n */\nexport class AesModeOfOperationIge implements IEncryptionScheme {\n private _key: Uint8Array\n private _iv: Uint8Array\n private _aes: IEncryptionScheme\n\n constructor(key: Uint8Array, iv: Uint8Array, ecb: IEncryptionScheme) {\n this._key = key\n this._iv = iv\n this._aes = ecb\n }\n\n async encrypt(data: Uint8Array): Promise<Uint8Array> {\n if (data.length % 16 !== 0) {\n throw new Error('invalid plaintext size (must be multiple of 16 bytes)')\n }\n\n const ciphertext = new Uint8Array(data.length)\n let block = new Uint8Array(16)\n\n let iv1 = this._iv.subarray(0, 16)\n let iv2 = this._iv.subarray(16, 32)\n\n for (let i = 0; i < data.length; i += 16) {\n block.set(data.subarray(i, i + 16))\n xorBufferInPlace(block, iv1)\n block = await this._aes.encrypt(block)\n xorBufferInPlace(block, iv2)\n ciphertext.set(block, i)\n\n iv1 = ciphertext.subarray(i, i + 16)\n iv2 = data.subarray(i, i + 16)\n }\n\n return ciphertext\n }\n\n async decrypt(data: Uint8Array): Promise<Uint8Array> {\n if (data.length % 16 !== 0) {\n throw new Error('invalid ciphertext size (must be multiple of 16 bytes)')\n }\n\n const plaintext = new Uint8Array(data.length)\n let block = new Uint8Array(16)\n\n let iv1 = this._iv.subarray(16, 32)\n let iv2 = this._iv.subarray(0, 16)\n\n for (let i = 0; i < data.length; i += 16) {\n block.set(data.subarray(i, i + 16))\n xorBufferInPlace(block, iv1)\n block = await this._aes.decrypt(block)\n xorBufferInPlace(block, iv2)\n plaintext.set(block, i)\n\n iv1 = plaintext.subarray(i, i + 16)\n iv2 = data.subarray(i, i + 16)\n }\n\n return plaintext\n }\n}\n"]}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Factorize `p*q` to `p` and `q` synchronously using Brent-Pollard rho algorithm
3
+ * @param pq
4
+ */
5
+ export declare function factorizePQSync(pq: Uint8Array): [Uint8Array, Uint8Array];
@@ -0,0 +1,62 @@
1
+ import bigInt from 'big-integer';
2
+ import { bigIntToBuffer, bufferToBigInt, randomBigIntInRange } from '../bigint-utils.js';
3
+ /**
4
+ * Factorize `p*q` to `p` and `q` synchronously using Brent-Pollard rho algorithm
5
+ * @param pq
6
+ */
7
+ export function factorizePQSync(pq) {
8
+ const pq_ = bufferToBigInt(pq);
9
+ const n = PollardRhoBrent(pq_);
10
+ const m = pq_.divide(n);
11
+ let p;
12
+ let q;
13
+ if (n.lt(m)) {
14
+ p = n;
15
+ q = m;
16
+ }
17
+ else {
18
+ p = m;
19
+ q = n;
20
+ }
21
+ return [bigIntToBuffer(p), bigIntToBuffer(q)];
22
+ }
23
+ function PollardRhoBrent(n) {
24
+ if (n.isEven())
25
+ return bigInt[2];
26
+ let y = randomBigIntInRange(n.minus(1));
27
+ const c = randomBigIntInRange(n.minus(1));
28
+ const m = randomBigIntInRange(n.minus(1));
29
+ let g = bigInt.one;
30
+ let r = bigInt.one;
31
+ let q = bigInt.one;
32
+ let ys;
33
+ let x;
34
+ while (g.eq(bigInt.one)) {
35
+ x = y;
36
+ for (let i = 0; r.geq(i); i++)
37
+ y = y.multiply(y).mod(n).plus(c).mod(n);
38
+ // y = ((y * y) % n + c) % n
39
+ let k = bigInt.zero;
40
+ while (k.lt(r) && g.eq(1)) {
41
+ ys = y;
42
+ for (let i = bigInt.zero; i.lt(bigInt.min(m, r.minus(k))); i = i.plus(bigInt.one)) {
43
+ y = y.multiply(y).mod(n).plus(c).mod(n);
44
+ q = q.multiply(x.minus(y).abs()).mod(n);
45
+ // y = (y * y % n + c) % n
46
+ // q = q * abs(x - y) % n
47
+ }
48
+ g = bigInt.gcd(q, n);
49
+ k = k.plus(m);
50
+ }
51
+ r = r.multiply(bigInt[2]);
52
+ }
53
+ if (g.eq(n)) {
54
+ do {
55
+ ys = ys.multiply(ys).mod(n).plus(c).mod(n);
56
+ // ys = ((ys * ys) % n + c) % n
57
+ g = bigInt.gcd(x.minus(ys), n);
58
+ } while (g.leq(bigInt.one));
59
+ }
60
+ return g;
61
+ }
62
+ //# sourceMappingURL=factorization.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factorization.js","sourceRoot":"","sources":["../../../../src/utils/crypto/factorization.ts"],"names":[],"mappings":"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","sourcesContent":["import bigInt, { BigInteger } from 'big-integer'\n\nimport { bigIntToBuffer, bufferToBigInt, randomBigIntInRange } from '../bigint-utils.js'\n\n/**\n * Factorize `p*q` to `p` and `q` synchronously using Brent-Pollard rho algorithm\n * @param pq\n */\nexport function factorizePQSync(pq: Uint8Array): [Uint8Array, Uint8Array] {\n const pq_ = bufferToBigInt(pq)\n\n const n = PollardRhoBrent(pq_)\n const m = pq_.divide(n)\n\n let p\n let q\n\n if (n.lt(m)) {\n p = n\n q = m\n } else {\n p = m\n q = n\n }\n\n return [bigIntToBuffer(p), bigIntToBuffer(q)]\n}\n\nfunction PollardRhoBrent(n: BigInteger): BigInteger {\n if (n.isEven()) return bigInt[2]\n\n let y = randomBigIntInRange(n.minus(1))\n const c = randomBigIntInRange(n.minus(1))\n const m = randomBigIntInRange(n.minus(1))\n let g = bigInt.one\n let r = bigInt.one\n let q = bigInt.one\n\n let ys: BigInteger\n let x: BigInteger\n\n while (g.eq(bigInt.one)) {\n x = y\n for (let i = 0; r.geq(i); i++) y = y.multiply(y).mod(n).plus(c).mod(n)\n // y = ((y * y) % n + c) % n\n\n let k = bigInt.zero\n\n while (k.lt(r) && g.eq(1)) {\n ys = y\n\n for (let i = bigInt.zero; i.lt(bigInt.min(m, r.minus(k))); i = i.plus(bigInt.one)) {\n y = y.multiply(y).mod(n).plus(c).mod(n)\n q = q.multiply(x.minus(y).abs()).mod(n)\n // y = (y * y % n + c) % n\n // q = q * abs(x - y) % n\n }\n\n g = bigInt.gcd(q, n)\n k = k.plus(m)\n }\n\n r = r.multiply(bigInt[2])\n }\n\n if (g.eq(n)) {\n do {\n ys = ys!.multiply(ys!).mod(n).plus(c).mod(n)\n // ys = ((ys * ys) % n + c) % n\n\n g = bigInt.gcd(x!.minus(ys), n)\n } while (g.leq(bigInt.one))\n }\n\n return g\n}\n"]}
@@ -0,0 +1,5 @@
1
+ export * from './abstract.js';
2
+ export * from './keys.js';
3
+ export * from './password.js';
4
+ import { CryptoProviderFactory } from './abstract.js';
5
+ export declare const defaultCryptoProviderFactory: CryptoProviderFactory;