@mtcute/core 0.1.0 → 0.1.1

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 (219) hide show
  1. package/cjs/base-client.js +4 -1
  2. package/cjs/base-client.js.map +1 -1
  3. package/cjs/network/auth-key.d.ts +3 -3
  4. package/cjs/network/auth-key.js +12 -12
  5. package/cjs/network/auth-key.js.map +1 -1
  6. package/cjs/network/authorization.js +62 -57
  7. package/cjs/network/authorization.js.map +1 -1
  8. package/cjs/network/mtproto-session.d.ts +2 -2
  9. package/cjs/network/mtproto-session.js +2 -2
  10. package/cjs/network/mtproto-session.js.map +1 -1
  11. package/cjs/network/multi-session-connection.d.ts +1 -1
  12. package/cjs/network/multi-session-connection.js +2 -2
  13. package/cjs/network/multi-session-connection.js.map +1 -1
  14. package/cjs/network/network-manager.d.ts +1 -0
  15. package/cjs/network/network-manager.js +21 -27
  16. package/cjs/network/network-manager.js.map +1 -1
  17. package/cjs/network/session-connection.d.ts +2 -1
  18. package/cjs/network/session-connection.js +48 -35
  19. package/cjs/network/session-connection.js.map +1 -1
  20. package/cjs/network/transports/intermediate.d.ts +3 -0
  21. package/cjs/network/transports/intermediate.js +5 -3
  22. package/cjs/network/transports/intermediate.js.map +1 -1
  23. package/cjs/network/transports/obfuscated.js +14 -18
  24. package/cjs/network/transports/obfuscated.js.map +1 -1
  25. package/cjs/storage/abstract.d.ts +23 -2
  26. package/cjs/storage/abstract.js.map +1 -1
  27. package/cjs/storage/json.js +8 -9
  28. package/cjs/storage/json.js.map +1 -1
  29. package/cjs/storage/localstorage.js +5 -2
  30. package/cjs/storage/localstorage.js.map +1 -1
  31. package/cjs/storage/memory.d.ts +7 -8
  32. package/cjs/storage/memory.js +7 -7
  33. package/cjs/storage/memory.js.map +1 -1
  34. package/cjs/utils/bigint-utils.d.ts +18 -11
  35. package/cjs/utils/bigint-utils.js +148 -47
  36. package/cjs/utils/bigint-utils.js.map +1 -1
  37. package/cjs/utils/buffer-utils.d.ts +7 -1
  38. package/cjs/utils/buffer-utils.js +16 -3
  39. package/cjs/utils/buffer-utils.js.map +1 -1
  40. package/cjs/utils/crypto/abstract.d.ts +16 -9
  41. package/cjs/utils/crypto/abstract.js +6 -9
  42. package/cjs/utils/crypto/abstract.js.map +1 -1
  43. package/cjs/utils/crypto/factorization.d.ts +2 -1
  44. package/cjs/utils/crypto/factorization.js +28 -36
  45. package/cjs/utils/crypto/factorization.js.map +1 -1
  46. package/cjs/utils/crypto/index.d.ts +4 -0
  47. package/cjs/utils/crypto/index.js +4 -0
  48. package/cjs/utils/crypto/index.js.map +1 -1
  49. package/cjs/utils/crypto/keys.d.ts +2 -2
  50. package/cjs/utils/crypto/keys.js +4 -4
  51. package/cjs/utils/crypto/keys.js.map +1 -1
  52. package/cjs/utils/crypto/miller-rabin.d.ts +2 -2
  53. package/cjs/utils/crypto/miller-rabin.js +20 -22
  54. package/cjs/utils/crypto/miller-rabin.js.map +1 -1
  55. package/cjs/utils/crypto/mtproto.d.ts +3 -3
  56. package/cjs/utils/crypto/mtproto.js +12 -12
  57. package/cjs/utils/crypto/mtproto.js.map +1 -1
  58. package/cjs/utils/crypto/node.d.ts +21 -0
  59. package/cjs/utils/crypto/node.js +74 -0
  60. package/cjs/utils/crypto/node.js.map +1 -0
  61. package/cjs/utils/crypto/password.js +22 -33
  62. package/cjs/utils/crypto/password.js.map +1 -1
  63. package/cjs/utils/crypto/wasm.d.ts +22 -0
  64. package/cjs/utils/crypto/wasm.js +41 -0
  65. package/cjs/utils/crypto/wasm.js.map +1 -0
  66. package/cjs/utils/crypto/web.d.ts +11 -0
  67. package/cjs/utils/crypto/web.js +40 -0
  68. package/cjs/utils/crypto/web.js.map +1 -0
  69. package/cjs/utils/deque.d.ts +1 -1
  70. package/cjs/utils/deque.js +9 -3
  71. package/cjs/utils/deque.js.map +1 -1
  72. package/cjs/utils/function-utils.d.ts +4 -1
  73. package/cjs/utils/function-utils.js +8 -1
  74. package/cjs/utils/function-utils.js.map +1 -1
  75. package/cjs/utils/index.d.ts +0 -1
  76. package/cjs/utils/index.js +0 -1
  77. package/cjs/utils/index.js.map +1 -1
  78. package/cjs/utils/logger.d.ts +0 -1
  79. package/cjs/utils/logger.js +3 -4
  80. package/cjs/utils/logger.js.map +1 -1
  81. package/cjs/utils/lru-map.d.ts +1 -0
  82. package/cjs/utils/lru-map.js +6 -0
  83. package/cjs/utils/lru-map.js.map +1 -1
  84. package/cjs/utils/peer-utils.js +5 -1
  85. package/cjs/utils/peer-utils.js.map +1 -1
  86. package/cjs/utils/platform/crypto.js +2 -2
  87. package/cjs/utils/platform/crypto.js.map +1 -1
  88. package/cjs/utils/platform/crypto.web.js +2 -2
  89. package/cjs/utils/platform/crypto.web.js.map +1 -1
  90. package/cjs/utils/string-session.js +4 -2
  91. package/cjs/utils/string-session.js.map +1 -1
  92. package/esm/base-client.js +4 -1
  93. package/esm/base-client.js.map +1 -1
  94. package/esm/network/auth-key.d.ts +3 -3
  95. package/esm/network/auth-key.js +13 -13
  96. package/esm/network/auth-key.js.map +1 -1
  97. package/esm/network/authorization.js +64 -59
  98. package/esm/network/authorization.js.map +1 -1
  99. package/esm/network/mtproto-session.d.ts +2 -2
  100. package/esm/network/mtproto-session.js +2 -2
  101. package/esm/network/mtproto-session.js.map +1 -1
  102. package/esm/network/multi-session-connection.d.ts +1 -1
  103. package/esm/network/multi-session-connection.js +2 -2
  104. package/esm/network/multi-session-connection.js.map +1 -1
  105. package/esm/network/network-manager.d.ts +1 -0
  106. package/esm/network/network-manager.js +21 -27
  107. package/esm/network/network-manager.js.map +1 -1
  108. package/esm/network/session-connection.d.ts +2 -1
  109. package/esm/network/session-connection.js +50 -37
  110. package/esm/network/session-connection.js.map +1 -1
  111. package/esm/network/transports/intermediate.d.ts +3 -0
  112. package/esm/network/transports/intermediate.js +6 -4
  113. package/esm/network/transports/intermediate.js.map +1 -1
  114. package/esm/network/transports/obfuscated.js +15 -19
  115. package/esm/network/transports/obfuscated.js.map +1 -1
  116. package/esm/storage/abstract.d.ts +23 -2
  117. package/esm/storage/abstract.js.map +1 -1
  118. package/esm/storage/json.js +8 -9
  119. package/esm/storage/json.js.map +1 -1
  120. package/esm/storage/localstorage.js +5 -2
  121. package/esm/storage/localstorage.js.map +1 -1
  122. package/esm/storage/memory.d.ts +7 -8
  123. package/esm/storage/memory.js +7 -7
  124. package/esm/storage/memory.js.map +1 -1
  125. package/esm/utils/bigint-utils.d.ts +18 -11
  126. package/esm/utils/bigint-utils.js +142 -44
  127. package/esm/utils/bigint-utils.js.map +1 -1
  128. package/esm/utils/buffer-utils.d.ts +7 -1
  129. package/esm/utils/buffer-utils.js +14 -1
  130. package/esm/utils/buffer-utils.js.map +1 -1
  131. package/esm/utils/crypto/abstract.d.ts +16 -9
  132. package/esm/utils/crypto/abstract.js +6 -9
  133. package/esm/utils/crypto/abstract.js.map +1 -1
  134. package/esm/utils/crypto/factorization.d.ts +2 -1
  135. package/esm/utils/crypto/factorization.js +29 -34
  136. package/esm/utils/crypto/factorization.js.map +1 -1
  137. package/esm/utils/crypto/index.d.ts +4 -0
  138. package/esm/utils/crypto/index.js +4 -0
  139. package/esm/utils/crypto/index.js.map +1 -1
  140. package/esm/utils/crypto/keys.d.ts +2 -2
  141. package/esm/utils/crypto/keys.js +4 -4
  142. package/esm/utils/crypto/keys.js.map +1 -1
  143. package/esm/utils/crypto/miller-rabin.d.ts +2 -2
  144. package/esm/utils/crypto/miller-rabin.js +21 -20
  145. package/esm/utils/crypto/miller-rabin.js.map +1 -1
  146. package/esm/utils/crypto/mtproto.d.ts +3 -3
  147. package/esm/utils/crypto/mtproto.js +12 -12
  148. package/esm/utils/crypto/mtproto.js.map +1 -1
  149. package/esm/utils/crypto/node.d.ts +21 -0
  150. package/esm/utils/crypto/node.js +69 -0
  151. package/esm/utils/crypto/node.js.map +1 -0
  152. package/esm/utils/crypto/password.js +24 -32
  153. package/esm/utils/crypto/password.js.map +1 -1
  154. package/esm/utils/crypto/wasm.d.ts +22 -0
  155. package/esm/utils/crypto/wasm.js +37 -0
  156. package/esm/utils/crypto/wasm.js.map +1 -0
  157. package/esm/utils/crypto/web.d.ts +11 -0
  158. package/esm/utils/crypto/web.js +36 -0
  159. package/esm/utils/crypto/web.js.map +1 -0
  160. package/esm/utils/deque.d.ts +1 -1
  161. package/esm/utils/deque.js +9 -3
  162. package/esm/utils/deque.js.map +1 -1
  163. package/esm/utils/function-utils.d.ts +4 -1
  164. package/esm/utils/function-utils.js +8 -1
  165. package/esm/utils/function-utils.js.map +1 -1
  166. package/esm/utils/index.d.ts +0 -1
  167. package/esm/utils/index.js +0 -1
  168. package/esm/utils/index.js.map +1 -1
  169. package/esm/utils/logger.d.ts +0 -1
  170. package/esm/utils/logger.js +3 -4
  171. package/esm/utils/logger.js.map +1 -1
  172. package/esm/utils/lru-map.d.ts +1 -0
  173. package/esm/utils/lru-map.js +6 -0
  174. package/esm/utils/lru-map.js.map +1 -1
  175. package/esm/utils/peer-utils.js +5 -1
  176. package/esm/utils/peer-utils.js.map +1 -1
  177. package/esm/utils/platform/crypto.js +1 -1
  178. package/esm/utils/platform/crypto.js.map +1 -1
  179. package/esm/utils/platform/crypto.web.js +2 -2
  180. package/esm/utils/platform/crypto.web.js.map +1 -1
  181. package/esm/utils/string-session.js +4 -2
  182. package/esm/utils/string-session.js.map +1 -1
  183. package/package.json +4 -5
  184. package/cjs/utils/crypto/common.d.ts +0 -12
  185. package/cjs/utils/crypto/common.js +0 -54
  186. package/cjs/utils/crypto/common.js.map +0 -1
  187. package/cjs/utils/crypto/node-crypto.d.ts +0 -10
  188. package/cjs/utils/crypto/node-crypto.js +0 -46
  189. package/cjs/utils/crypto/node-crypto.js.map +0 -1
  190. package/cjs/utils/crypto/subtle.d.ts +0 -12
  191. package/cjs/utils/crypto/subtle.js +0 -86
  192. package/cjs/utils/crypto/subtle.js.map +0 -1
  193. package/cjs/utils/flood-control.d.ts +0 -14
  194. package/cjs/utils/flood-control.js +0 -65
  195. package/cjs/utils/flood-control.js.map +0 -1
  196. package/cjs/utils/platform/random.d.ts +0 -1
  197. package/cjs/utils/platform/random.js +0 -7
  198. package/cjs/utils/platform/random.js.map +0 -1
  199. package/cjs/utils/platform/random.web.d.ts +0 -1
  200. package/cjs/utils/platform/random.web.js +0 -10
  201. package/cjs/utils/platform/random.web.js.map +0 -1
  202. package/esm/utils/crypto/common.d.ts +0 -12
  203. package/esm/utils/crypto/common.js +0 -50
  204. package/esm/utils/crypto/common.js.map +0 -1
  205. package/esm/utils/crypto/node-crypto.d.ts +0 -10
  206. package/esm/utils/crypto/node-crypto.js +0 -42
  207. package/esm/utils/crypto/node-crypto.js.map +0 -1
  208. package/esm/utils/crypto/subtle.d.ts +0 -12
  209. package/esm/utils/crypto/subtle.js +0 -59
  210. package/esm/utils/crypto/subtle.js.map +0 -1
  211. package/esm/utils/flood-control.d.ts +0 -14
  212. package/esm/utils/flood-control.js +0 -61
  213. package/esm/utils/flood-control.js.map +0 -1
  214. package/esm/utils/platform/random.d.ts +0 -1
  215. package/esm/utils/platform/random.js +0 -4
  216. package/esm/utils/platform/random.js.map +0 -1
  217. package/esm/utils/platform/random.web.d.ts +0 -1
  218. package/esm/utils/platform/random.web.js +0 -6
  219. package/esm/utils/platform/random.web.js.map +0 -1
@@ -1,10 +0,0 @@
1
- import { MaybeAsync } from '../../types/index.js';
2
- import { BaseCryptoProvider, ICryptoProvider, IEncryptionScheme } from './abstract.js';
3
- export declare class NodeCryptoProvider extends BaseCryptoProvider implements ICryptoProvider {
4
- createAesCtr(key: Uint8Array, iv: Uint8Array, encrypt: boolean): IEncryptionScheme;
5
- createAesEcb(key: Uint8Array): IEncryptionScheme;
6
- pbkdf2(password: Uint8Array, salt: Uint8Array, iterations: number, keylen?: number, algo?: string): MaybeAsync<Uint8Array>;
7
- sha1(data: Uint8Array): Uint8Array;
8
- sha256(data: Uint8Array): Uint8Array;
9
- hmacSha256(data: Uint8Array, key: Uint8Array): MaybeAsync<Uint8Array>;
10
- }
@@ -1,46 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.NodeCryptoProvider = void 0;
4
- // eslint-disable-next-line no-restricted-imports
5
- const crypto_1 = require("crypto");
6
- const buffer_utils_js_1 = require("../buffer-utils.js");
7
- const abstract_js_1 = require("./abstract.js");
8
- class NodeCryptoProvider extends abstract_js_1.BaseCryptoProvider {
9
- createAesCtr(key, iv, encrypt) {
10
- const cipher = (encrypt ? crypto_1.createCipheriv : crypto_1.createDecipheriv)(`aes-${key.length * 8}-ctr`, key, iv);
11
- const update = (data) => cipher.update(data);
12
- return {
13
- encrypt: update,
14
- decrypt: update,
15
- };
16
- }
17
- createAesEcb(key) {
18
- const methodName = `aes-${key.length * 8}-ecb`;
19
- return {
20
- encrypt(data) {
21
- const cipher = (0, crypto_1.createCipheriv)(methodName, key, null);
22
- cipher.setAutoPadding(false);
23
- return (0, buffer_utils_js_1.concatBuffers)([cipher.update(data), cipher.final()]);
24
- },
25
- decrypt(data) {
26
- const cipher = (0, crypto_1.createDecipheriv)(methodName, key, null);
27
- cipher.setAutoPadding(false);
28
- return (0, buffer_utils_js_1.concatBuffers)([cipher.update(data), cipher.final()]);
29
- },
30
- };
31
- }
32
- pbkdf2(password, salt, iterations, keylen = 64, algo = 'sha512') {
33
- return new Promise((resolve, reject) => (0, crypto_1.pbkdf2)(password, salt, iterations, keylen, algo, (err, buf) => err !== null ? reject(err) : resolve(buf)));
34
- }
35
- sha1(data) {
36
- return (0, crypto_1.createHash)('sha1').update(data).digest();
37
- }
38
- sha256(data) {
39
- return (0, crypto_1.createHash)('sha256').update(data).digest();
40
- }
41
- hmacSha256(data, key) {
42
- return (0, crypto_1.createHmac)('sha256', key).update(data).digest();
43
- }
44
- }
45
- exports.NodeCryptoProvider = NodeCryptoProvider;
46
- //# sourceMappingURL=node-crypto.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"node-crypto.js","sourceRoot":"","sources":["../../../../src/utils/crypto/node-crypto.ts"],"names":[],"mappings":";;;AAAA,iDAAiD;AACjD,mCAAyF;AAGzF,wDAAkD;AAClD,+CAAsF;AAEtF,MAAa,kBAAmB,SAAQ,gCAAkB;IACtD,YAAY,CAAC,GAAe,EAAE,EAAc,EAAE,OAAgB;QAC1D,MAAM,MAAM,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,uBAAc,CAAC,CAAC,CAAC,yBAAgB,CAAC,CAAC,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,CAAA;QAElG,MAAM,MAAM,GAAG,CAAC,IAAgB,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QAExD,OAAO;YACH,OAAO,EAAE,MAAM;YACf,OAAO,EAAE,MAAM;SAClB,CAAA;IACL,CAAC;IAED,YAAY,CAAC,GAAe;QACxB,MAAM,UAAU,GAAG,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,MAAM,CAAA;QAE9C,OAAO;YACH,OAAO,CAAC,IAAgB;gBACpB,MAAM,MAAM,GAAG,IAAA,uBAAc,EAAC,UAAU,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;gBACpD,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAA;gBAE5B,OAAO,IAAA,+BAAa,EAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;YAC/D,CAAC;YACD,OAAO,CAAC,IAAgB;gBACpB,MAAM,MAAM,GAAG,IAAA,yBAAgB,EAAC,UAAU,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;gBACtD,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAA;gBAE5B,OAAO,IAAA,+BAAa,EAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;YAC/D,CAAC;SACJ,CAAA;IACL,CAAC;IAED,MAAM,CACF,QAAoB,EACpB,IAAgB,EAChB,UAAkB,EAClB,MAAM,GAAG,EAAE,EACX,IAAI,GAAG,QAAQ;QAEf,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CACnC,IAAA,eAAM,EAAC,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAiB,EAAE,GAAe,EAAE,EAAE,CACpF,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAC5C,CACJ,CAAA;IACL,CAAC;IAED,IAAI,CAAC,IAAgB;QACjB,OAAO,IAAA,mBAAU,EAAC,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAA;IACnD,CAAC;IAED,MAAM,CAAC,IAAgB;QACnB,OAAO,IAAA,mBAAU,EAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAA;IACrD,CAAC;IAED,UAAU,CAAC,IAAgB,EAAE,GAAe;QACxC,OAAO,IAAA,mBAAU,EAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAA;IAC1D,CAAC;CACJ;AAxDD,gDAwDC","sourcesContent":["// eslint-disable-next-line no-restricted-imports\nimport { createCipheriv, createDecipheriv, createHash, createHmac, pbkdf2 } from 'crypto'\n\nimport { MaybeAsync } from '../../types/index.js'\nimport { concatBuffers } from '../buffer-utils.js'\nimport { BaseCryptoProvider, ICryptoProvider, IEncryptionScheme } from './abstract.js'\n\nexport class NodeCryptoProvider extends BaseCryptoProvider implements ICryptoProvider {\n createAesCtr(key: Uint8Array, iv: Uint8Array, encrypt: boolean): IEncryptionScheme {\n const cipher = (encrypt ? createCipheriv : createDecipheriv)(`aes-${key.length * 8}-ctr`, key, iv)\n\n const update = (data: Uint8Array) => cipher.update(data)\n\n return {\n encrypt: update,\n decrypt: update,\n }\n }\n\n createAesEcb(key: Uint8Array): IEncryptionScheme {\n const methodName = `aes-${key.length * 8}-ecb`\n\n return {\n encrypt(data: Uint8Array) {\n const cipher = createCipheriv(methodName, key, null)\n cipher.setAutoPadding(false)\n\n return concatBuffers([cipher.update(data), cipher.final()])\n },\n decrypt(data: Uint8Array) {\n const cipher = createDecipheriv(methodName, key, null)\n cipher.setAutoPadding(false)\n\n return concatBuffers([cipher.update(data), cipher.final()])\n },\n }\n }\n\n pbkdf2(\n password: Uint8Array,\n salt: Uint8Array,\n iterations: number,\n keylen = 64,\n algo = 'sha512',\n ): MaybeAsync<Uint8Array> {\n return new Promise((resolve, reject) =>\n pbkdf2(password, salt, iterations, keylen, algo, (err: Error | null, buf: Uint8Array) =>\n err !== null ? reject(err) : resolve(buf),\n ),\n )\n }\n\n sha1(data: Uint8Array): Uint8Array {\n return createHash('sha1').update(data).digest()\n }\n\n sha256(data: Uint8Array): Uint8Array {\n return createHash('sha256').update(data).digest()\n }\n\n hmacSha256(data: Uint8Array, key: Uint8Array): MaybeAsync<Uint8Array> {\n return createHmac('sha256', key).update(data).digest()\n }\n}\n"]}
@@ -1,12 +0,0 @@
1
- import { MaybeAsync } from '../../index.js';
2
- import { BaseCryptoProvider, ICryptoProvider, IEncryptionScheme } from './abstract.js';
3
- export declare class SubtleCryptoProvider extends BaseCryptoProvider implements ICryptoProvider {
4
- readonly subtle: SubtleCrypto;
5
- constructor(subtle: SubtleCrypto);
6
- sha1(data: Uint8Array): MaybeAsync<Uint8Array>;
7
- sha256(data: Uint8Array): MaybeAsync<Uint8Array>;
8
- pbkdf2(password: Uint8Array, salt: Uint8Array, iterations: number, keylen?: number | undefined, algo?: string | undefined): Promise<Uint8Array>;
9
- hmacSha256(data: Uint8Array, key: Uint8Array): Promise<Uint8Array>;
10
- createAesCtr(key: Uint8Array, iv: Uint8Array): IEncryptionScheme;
11
- createAesEcb(key: Uint8Array): IEncryptionScheme;
12
- }
@@ -1,86 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.SubtleCryptoProvider = void 0;
27
- const abstract_js_1 = require("./abstract.js");
28
- const aes_1 = __importStar(require("@cryptography/aes"));
29
- const AES = 'default' in aes_1.default ? aes_1.default.default : aes_1.default;
30
- const ALGO_TO_SUBTLE = {
31
- sha256: 'SHA-256',
32
- sha1: 'SHA-1',
33
- sha512: 'SHA-512',
34
- };
35
- function wordsToBytes(words) {
36
- const o = new Uint8Array(words.byteLength);
37
- const len = words.length * 4;
38
- for (let i = 0; i < len; ++i) {
39
- o[i] = ((words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff);
40
- }
41
- return o;
42
- }
43
- class SubtleCryptoProvider extends abstract_js_1.BaseCryptoProvider {
44
- constructor(subtle) {
45
- super();
46
- this.subtle = subtle;
47
- }
48
- sha1(data) {
49
- return this.subtle.digest('SHA-1', data).then((result) => new Uint8Array(result));
50
- }
51
- sha256(data) {
52
- return this.subtle.digest('SHA-256', data).then((result) => new Uint8Array(result));
53
- }
54
- async pbkdf2(password, salt, iterations, keylen, algo) {
55
- const keyMaterial = await this.subtle.importKey('raw', password, 'PBKDF2', false, ['deriveBits']);
56
- return this.subtle
57
- .deriveBits({
58
- name: 'PBKDF2',
59
- salt,
60
- iterations,
61
- hash: algo ? ALGO_TO_SUBTLE[algo] : 'SHA-512',
62
- }, keyMaterial, (keylen || 64) * 8)
63
- .then((result) => new Uint8Array(result));
64
- }
65
- async hmacSha256(data, key) {
66
- const keyMaterial = await this.subtle.importKey('raw', key, { name: 'HMAC', hash: { name: 'SHA-256' } }, false, ['sign']);
67
- const res = await this.subtle.sign({ name: 'HMAC' }, keyMaterial, data);
68
- return new Uint8Array(res);
69
- }
70
- createAesCtr(key, iv) {
71
- const aes = new aes_1.CTR(key, iv);
72
- return {
73
- encrypt: (data) => wordsToBytes(aes.encrypt(data)),
74
- decrypt: (data) => wordsToBytes(aes.decrypt(data)),
75
- };
76
- }
77
- createAesEcb(key) {
78
- const aes = new AES(key);
79
- return {
80
- encrypt: (data) => wordsToBytes(aes.encrypt(data)),
81
- decrypt: (data) => wordsToBytes(aes.decrypt(data)),
82
- };
83
- }
84
- }
85
- exports.SubtleCryptoProvider = SubtleCryptoProvider;
86
- //# sourceMappingURL=subtle.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"subtle.js","sourceRoot":"","sources":["../../../../src/utils/crypto/subtle.ts"],"names":[],"mappings":"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","sourcesContent":["import { MaybeAsync } from '../../index.js'\nimport { BaseCryptoProvider, ICryptoProvider, IEncryptionScheme } from './abstract.js'\n\nimport AES_, { CTR } from '@cryptography/aes'\n\n// fucking weird flex with es modules.\n// i hate default imports please for the love of god never use them\ntype AES_ = typeof AES_.default\nconst AES = 'default' in AES_ ? AES_.default : AES_ as AES_\n\nconst ALGO_TO_SUBTLE: Record<string, string> = {\n sha256: 'SHA-256',\n sha1: 'SHA-1',\n sha512: 'SHA-512',\n}\n\nfunction wordsToBytes(words: Uint32Array): Uint8Array {\n const o = new Uint8Array(words.byteLength)\n\n const len = words.length * 4\n\n for (let i = 0; i < len; ++i) {\n o[i] = ((words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff)\n }\n\n return o\n}\n\nexport class SubtleCryptoProvider extends BaseCryptoProvider implements ICryptoProvider {\n constructor(\n readonly subtle: SubtleCrypto,\n ) {\n super()\n }\n\n sha1(data: Uint8Array): MaybeAsync<Uint8Array> {\n return this.subtle.digest('SHA-1', data).then((result) => new Uint8Array(result))\n }\n\n sha256(data: Uint8Array): MaybeAsync<Uint8Array> {\n return this.subtle.digest('SHA-256', data).then((result) => new Uint8Array(result))\n }\n\n async pbkdf2(\n password: Uint8Array,\n salt: Uint8Array,\n iterations: number,\n keylen?: number | undefined,\n algo?: string | undefined,\n ): Promise<Uint8Array> {\n const keyMaterial = await this.subtle.importKey('raw', password, 'PBKDF2', false, ['deriveBits'])\n\n return this.subtle\n .deriveBits(\n {\n name: 'PBKDF2',\n salt,\n iterations,\n hash: algo ? ALGO_TO_SUBTLE[algo] : 'SHA-512',\n },\n keyMaterial,\n (keylen || 64) * 8,\n )\n .then((result) => new Uint8Array(result))\n }\n\n async hmacSha256(data: Uint8Array, key: Uint8Array): Promise<Uint8Array> {\n const keyMaterial = await this.subtle.importKey(\n 'raw',\n key,\n { name: 'HMAC', hash: { name: 'SHA-256' } },\n false,\n ['sign'],\n )\n\n const res = await this.subtle.sign({ name: 'HMAC' }, keyMaterial, data)\n\n return new Uint8Array(res)\n }\n\n createAesCtr(key: Uint8Array, iv: Uint8Array): IEncryptionScheme {\n const aes = new CTR(key, iv)\n\n return {\n encrypt: (data) => wordsToBytes(aes.encrypt(data)),\n decrypt: (data) => wordsToBytes(aes.decrypt(data)),\n }\n }\n\n createAesEcb(key: Uint8Array): IEncryptionScheme {\n const aes = new AES(key)\n\n return {\n encrypt: (data) => wordsToBytes(aes.encrypt(data)),\n decrypt: (data) => wordsToBytes(aes.decrypt(data)),\n }\n }\n}\n"]}
@@ -1,14 +0,0 @@
1
- /**
2
- * Flood limiter, based on TDlib
3
- */
4
- export declare class FloodControl {
5
- private _wakeupAt;
6
- private _withoutUpdate;
7
- private _events;
8
- private _limits;
9
- addLimit(duration: number, count: number): void;
10
- addEvent(now: number): void;
11
- clear(): void;
12
- get wakeupAt(): number;
13
- private _update;
14
- }
@@ -1,65 +0,0 @@
1
- "use strict";
2
- // based on https://github.dev/tdlib/td/blob/master/tdutils/td/utils/FloodControlStrict.h
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.FloodControl = void 0;
5
- /**
6
- * Flood limiter, based on TDlib
7
- */
8
- class FloodControl {
9
- constructor() {
10
- this._wakeupAt = 1;
11
- this._withoutUpdate = 0;
12
- this._events = [];
13
- // pair: duration, count
14
- this._limits = [];
15
- }
16
- // no more than count in each duration
17
- addLimit(duration, count) {
18
- this._limits.push({ duration, count, pos: 0 });
19
- this._withoutUpdate = 0;
20
- }
21
- addEvent(now) {
22
- this._events.push(now);
23
- if (this._withoutUpdate > 0) {
24
- this._withoutUpdate -= 1;
25
- }
26
- else {
27
- this._update(now);
28
- }
29
- }
30
- clear() {
31
- this._events.length = 0;
32
- this._withoutUpdate = 0;
33
- this._wakeupAt = 1;
34
- this._limits.forEach((limit) => (limit.pos = 0));
35
- }
36
- get wakeupAt() {
37
- return this._wakeupAt;
38
- }
39
- _update(now) {
40
- let minPos = this._events.length;
41
- this._withoutUpdate = Infinity;
42
- this._limits.forEach((limit) => {
43
- if (limit.count < this._events.length - limit.pos) {
44
- limit.pos = this._events.length - limit.count;
45
- }
46
- while (limit.pos < this._events.length && this._events[limit.pos] + limit.duration < now) {
47
- limit.pos += 1;
48
- }
49
- if (limit.count + limit.pos < this._events.length) {
50
- this._wakeupAt = Math.max(this._wakeupAt, this._events[limit.pos] + limit.duration);
51
- this._withoutUpdate = 0;
52
- }
53
- else {
54
- this._withoutUpdate = Math.min(this._withoutUpdate, limit.count + limit.pos - this._events.length - 1);
55
- }
56
- minPos = Math.min(minPos, limit.pos);
57
- });
58
- if (minPos * 2 > this._events.length) {
59
- this._limits.forEach((limit) => (limit.pos -= minPos));
60
- this._events.splice(0, minPos);
61
- }
62
- }
63
- }
64
- exports.FloodControl = FloodControl;
65
- //# sourceMappingURL=flood-control.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"flood-control.js","sourceRoot":"","sources":["../../../src/utils/flood-control.ts"],"names":[],"mappings":"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","sourcesContent":["// based on https://github.dev/tdlib/td/blob/master/tdutils/td/utils/FloodControlStrict.h\n\ninterface FloodControlLimit {\n duration: number\n count: number\n pos: number\n}\n\n/**\n * Flood limiter, based on TDlib\n */\nexport class FloodControl {\n private _wakeupAt = 1\n private _withoutUpdate = 0\n private _events: number[] = []\n // pair: duration, count\n private _limits: FloodControlLimit[] = []\n\n // no more than count in each duration\n addLimit(duration: number, count: number): void {\n this._limits.push({ duration, count, pos: 0 })\n this._withoutUpdate = 0\n }\n\n addEvent(now: number): void {\n this._events.push(now)\n\n if (this._withoutUpdate > 0) {\n this._withoutUpdate -= 1\n } else {\n this._update(now)\n }\n }\n\n clear(): void {\n this._events.length = 0\n this._withoutUpdate = 0\n this._wakeupAt = 1\n this._limits.forEach((limit) => (limit.pos = 0))\n }\n\n get wakeupAt(): number {\n return this._wakeupAt\n }\n\n private _update(now: number): void {\n let minPos = this._events.length\n this._withoutUpdate = Infinity\n\n this._limits.forEach((limit) => {\n if (limit.count < this._events.length - limit.pos) {\n limit.pos = this._events.length - limit.count\n }\n\n while (limit.pos < this._events.length && this._events[limit.pos] + limit.duration < now) {\n limit.pos += 1\n }\n\n if (limit.count + limit.pos < this._events.length) {\n this._wakeupAt = Math.max(this._wakeupAt, this._events[limit.pos] + limit.duration)\n this._withoutUpdate = 0\n } else {\n this._withoutUpdate = Math.min(this._withoutUpdate, limit.count + limit.pos - this._events.length - 1)\n }\n\n minPos = Math.min(minPos, limit.pos)\n })\n\n if (minPos * 2 > this._events.length) {\n this._limits.forEach((limit) => (limit.pos -= minPos))\n this._events.splice(0, minPos)\n }\n }\n}\n"]}
@@ -1 +0,0 @@
1
- export declare const _randomBytes: (size: number) => Uint8Array;
@@ -1,7 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports._randomBytes = void 0;
4
- // eslint-disable-next-line no-restricted-imports
5
- const crypto_1 = require("crypto");
6
- exports._randomBytes = crypto_1.randomBytes;
7
- //# sourceMappingURL=random.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"random.js","sourceRoot":"","sources":["../../../../src/utils/platform/random.ts"],"names":[],"mappings":";;;AAAA,iDAAiD;AACjD,mCAAoC;AAEvB,QAAA,YAAY,GAAG,oBAA2C,CAAA","sourcesContent":["// eslint-disable-next-line no-restricted-imports\nimport { randomBytes } from 'crypto'\n\nexport const _randomBytes = randomBytes as (size: number) => Uint8Array\n"]}
@@ -1 +0,0 @@
1
- export declare function _randomBytes(size: number): Uint8Array;
@@ -1,10 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports._randomBytes = void 0;
4
- function _randomBytes(size) {
5
- const ret = new Uint8Array(size);
6
- crypto.getRandomValues(ret);
7
- return ret;
8
- }
9
- exports._randomBytes = _randomBytes;
10
- //# sourceMappingURL=random.web.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"random.web.js","sourceRoot":"","sources":["../../../../src/utils/platform/random.web.ts"],"names":[],"mappings":";;;AAAA,SAAgB,YAAY,CAAC,IAAY;IACrC,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,CAAA;IAChC,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,CAAA;IAE3B,OAAO,GAAG,CAAA;AACd,CAAC;AALD,oCAKC","sourcesContent":["export function _randomBytes(size: number): Uint8Array {\n const ret = new Uint8Array(size)\n crypto.getRandomValues(ret)\n\n return ret\n}\n"]}
@@ -1,12 +0,0 @@
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
- }
@@ -1,50 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"common.js","sourceRoot":"","sources":["../../../../src/utils/crypto/common.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAE7C;;GAEG;AACH,MAAM,OAAO,qBAAqB;IAK9B,YAAY,GAAe,EAAE,EAAc,EAAE,GAAsB;QAC/D,IAAI,CAAC,IAAI,GAAG,GAAG,CAAA;QACf,IAAI,CAAC,GAAG,GAAG,EAAE,CAAA;QACb,IAAI,CAAC,IAAI,GAAG,GAAG,CAAA;IACnB,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,IAAgB;QAC1B,IAAI,IAAI,CAAC,MAAM,GAAG,EAAE,KAAK,CAAC,EAAE;YACxB,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAA;SAC3E;QAED,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAC9C,IAAI,KAAK,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAA;QAE9B,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;QAClC,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;QAEnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YACtC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;YACnC,gBAAgB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;YAC5B,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;YACtC,gBAAgB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;YAC5B,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;YAExB,GAAG,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAA;YACpC,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAA;SACjC;QAED,OAAO,UAAU,CAAA;IACrB,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,IAAgB;QAC1B,IAAI,IAAI,CAAC,MAAM,GAAG,EAAE,KAAK,CAAC,EAAE;YACxB,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAA;SAC5E;QAED,MAAM,SAAS,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAC7C,IAAI,KAAK,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAA;QAE9B,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;QACnC,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;QAElC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YACtC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;YACnC,gBAAgB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;YAC5B,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;YACtC,gBAAgB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;YAC5B,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;YAEvB,GAAG,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAA;YACnC,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAA;SACjC;QAED,OAAO,SAAS,CAAA;IACpB,CAAC;CACJ","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"]}
@@ -1,10 +0,0 @@
1
- import { MaybeAsync } from '../../types/index.js';
2
- import { BaseCryptoProvider, ICryptoProvider, IEncryptionScheme } from './abstract.js';
3
- export declare class NodeCryptoProvider extends BaseCryptoProvider implements ICryptoProvider {
4
- createAesCtr(key: Uint8Array, iv: Uint8Array, encrypt: boolean): IEncryptionScheme;
5
- createAesEcb(key: Uint8Array): IEncryptionScheme;
6
- pbkdf2(password: Uint8Array, salt: Uint8Array, iterations: number, keylen?: number, algo?: string): MaybeAsync<Uint8Array>;
7
- sha1(data: Uint8Array): Uint8Array;
8
- sha256(data: Uint8Array): Uint8Array;
9
- hmacSha256(data: Uint8Array, key: Uint8Array): MaybeAsync<Uint8Array>;
10
- }
@@ -1,42 +0,0 @@
1
- // eslint-disable-next-line no-restricted-imports
2
- import { createCipheriv, createDecipheriv, createHash, createHmac, pbkdf2 } from 'crypto';
3
- import { concatBuffers } from '../buffer-utils.js';
4
- import { BaseCryptoProvider } from './abstract.js';
5
- export class NodeCryptoProvider extends BaseCryptoProvider {
6
- createAesCtr(key, iv, encrypt) {
7
- const cipher = (encrypt ? createCipheriv : createDecipheriv)(`aes-${key.length * 8}-ctr`, key, iv);
8
- const update = (data) => cipher.update(data);
9
- return {
10
- encrypt: update,
11
- decrypt: update,
12
- };
13
- }
14
- createAesEcb(key) {
15
- const methodName = `aes-${key.length * 8}-ecb`;
16
- return {
17
- encrypt(data) {
18
- const cipher = createCipheriv(methodName, key, null);
19
- cipher.setAutoPadding(false);
20
- return concatBuffers([cipher.update(data), cipher.final()]);
21
- },
22
- decrypt(data) {
23
- const cipher = createDecipheriv(methodName, key, null);
24
- cipher.setAutoPadding(false);
25
- return concatBuffers([cipher.update(data), cipher.final()]);
26
- },
27
- };
28
- }
29
- pbkdf2(password, salt, iterations, keylen = 64, algo = 'sha512') {
30
- return new Promise((resolve, reject) => pbkdf2(password, salt, iterations, keylen, algo, (err, buf) => err !== null ? reject(err) : resolve(buf)));
31
- }
32
- sha1(data) {
33
- return createHash('sha1').update(data).digest();
34
- }
35
- sha256(data) {
36
- return createHash('sha256').update(data).digest();
37
- }
38
- hmacSha256(data, key) {
39
- return createHmac('sha256', key).update(data).digest();
40
- }
41
- }
42
- //# sourceMappingURL=node-crypto.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"node-crypto.js","sourceRoot":"","sources":["../../../../src/utils/crypto/node-crypto.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAGzF,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,EAAE,kBAAkB,EAAsC,MAAM,eAAe,CAAA;AAEtF,MAAM,OAAO,kBAAmB,SAAQ,kBAAkB;IACtD,YAAY,CAAC,GAAe,EAAE,EAAc,EAAE,OAAgB;QAC1D,MAAM,MAAM,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,CAAA;QAElG,MAAM,MAAM,GAAG,CAAC,IAAgB,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QAExD,OAAO;YACH,OAAO,EAAE,MAAM;YACf,OAAO,EAAE,MAAM;SAClB,CAAA;IACL,CAAC;IAED,YAAY,CAAC,GAAe;QACxB,MAAM,UAAU,GAAG,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,MAAM,CAAA;QAE9C,OAAO;YACH,OAAO,CAAC,IAAgB;gBACpB,MAAM,MAAM,GAAG,cAAc,CAAC,UAAU,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;gBACpD,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAA;gBAE5B,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;YAC/D,CAAC;YACD,OAAO,CAAC,IAAgB;gBACpB,MAAM,MAAM,GAAG,gBAAgB,CAAC,UAAU,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;gBACtD,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAA;gBAE5B,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;YAC/D,CAAC;SACJ,CAAA;IACL,CAAC;IAED,MAAM,CACF,QAAoB,EACpB,IAAgB,EAChB,UAAkB,EAClB,MAAM,GAAG,EAAE,EACX,IAAI,GAAG,QAAQ;QAEf,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CACnC,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAiB,EAAE,GAAe,EAAE,EAAE,CACpF,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAC5C,CACJ,CAAA;IACL,CAAC;IAED,IAAI,CAAC,IAAgB;QACjB,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAA;IACnD,CAAC;IAED,MAAM,CAAC,IAAgB;QACnB,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAA;IACrD,CAAC;IAED,UAAU,CAAC,IAAgB,EAAE,GAAe;QACxC,OAAO,UAAU,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAA;IAC1D,CAAC;CACJ","sourcesContent":["// eslint-disable-next-line no-restricted-imports\nimport { createCipheriv, createDecipheriv, createHash, createHmac, pbkdf2 } from 'crypto'\n\nimport { MaybeAsync } from '../../types/index.js'\nimport { concatBuffers } from '../buffer-utils.js'\nimport { BaseCryptoProvider, ICryptoProvider, IEncryptionScheme } from './abstract.js'\n\nexport class NodeCryptoProvider extends BaseCryptoProvider implements ICryptoProvider {\n createAesCtr(key: Uint8Array, iv: Uint8Array, encrypt: boolean): IEncryptionScheme {\n const cipher = (encrypt ? createCipheriv : createDecipheriv)(`aes-${key.length * 8}-ctr`, key, iv)\n\n const update = (data: Uint8Array) => cipher.update(data)\n\n return {\n encrypt: update,\n decrypt: update,\n }\n }\n\n createAesEcb(key: Uint8Array): IEncryptionScheme {\n const methodName = `aes-${key.length * 8}-ecb`\n\n return {\n encrypt(data: Uint8Array) {\n const cipher = createCipheriv(methodName, key, null)\n cipher.setAutoPadding(false)\n\n return concatBuffers([cipher.update(data), cipher.final()])\n },\n decrypt(data: Uint8Array) {\n const cipher = createDecipheriv(methodName, key, null)\n cipher.setAutoPadding(false)\n\n return concatBuffers([cipher.update(data), cipher.final()])\n },\n }\n }\n\n pbkdf2(\n password: Uint8Array,\n salt: Uint8Array,\n iterations: number,\n keylen = 64,\n algo = 'sha512',\n ): MaybeAsync<Uint8Array> {\n return new Promise((resolve, reject) =>\n pbkdf2(password, salt, iterations, keylen, algo, (err: Error | null, buf: Uint8Array) =>\n err !== null ? reject(err) : resolve(buf),\n ),\n )\n }\n\n sha1(data: Uint8Array): Uint8Array {\n return createHash('sha1').update(data).digest()\n }\n\n sha256(data: Uint8Array): Uint8Array {\n return createHash('sha256').update(data).digest()\n }\n\n hmacSha256(data: Uint8Array, key: Uint8Array): MaybeAsync<Uint8Array> {\n return createHmac('sha256', key).update(data).digest()\n }\n}\n"]}
@@ -1,12 +0,0 @@
1
- import { MaybeAsync } from '../../index.js';
2
- import { BaseCryptoProvider, ICryptoProvider, IEncryptionScheme } from './abstract.js';
3
- export declare class SubtleCryptoProvider extends BaseCryptoProvider implements ICryptoProvider {
4
- readonly subtle: SubtleCrypto;
5
- constructor(subtle: SubtleCrypto);
6
- sha1(data: Uint8Array): MaybeAsync<Uint8Array>;
7
- sha256(data: Uint8Array): MaybeAsync<Uint8Array>;
8
- pbkdf2(password: Uint8Array, salt: Uint8Array, iterations: number, keylen?: number | undefined, algo?: string | undefined): Promise<Uint8Array>;
9
- hmacSha256(data: Uint8Array, key: Uint8Array): Promise<Uint8Array>;
10
- createAesCtr(key: Uint8Array, iv: Uint8Array): IEncryptionScheme;
11
- createAesEcb(key: Uint8Array): IEncryptionScheme;
12
- }
@@ -1,59 +0,0 @@
1
- import { BaseCryptoProvider } from './abstract.js';
2
- import AES_, { CTR } from '@cryptography/aes';
3
- const AES = 'default' in AES_ ? AES_.default : AES_;
4
- const ALGO_TO_SUBTLE = {
5
- sha256: 'SHA-256',
6
- sha1: 'SHA-1',
7
- sha512: 'SHA-512',
8
- };
9
- function wordsToBytes(words) {
10
- const o = new Uint8Array(words.byteLength);
11
- const len = words.length * 4;
12
- for (let i = 0; i < len; ++i) {
13
- o[i] = ((words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff);
14
- }
15
- return o;
16
- }
17
- export class SubtleCryptoProvider extends BaseCryptoProvider {
18
- constructor(subtle) {
19
- super();
20
- this.subtle = subtle;
21
- }
22
- sha1(data) {
23
- return this.subtle.digest('SHA-1', data).then((result) => new Uint8Array(result));
24
- }
25
- sha256(data) {
26
- return this.subtle.digest('SHA-256', data).then((result) => new Uint8Array(result));
27
- }
28
- async pbkdf2(password, salt, iterations, keylen, algo) {
29
- const keyMaterial = await this.subtle.importKey('raw', password, 'PBKDF2', false, ['deriveBits']);
30
- return this.subtle
31
- .deriveBits({
32
- name: 'PBKDF2',
33
- salt,
34
- iterations,
35
- hash: algo ? ALGO_TO_SUBTLE[algo] : 'SHA-512',
36
- }, keyMaterial, (keylen || 64) * 8)
37
- .then((result) => new Uint8Array(result));
38
- }
39
- async hmacSha256(data, key) {
40
- const keyMaterial = await this.subtle.importKey('raw', key, { name: 'HMAC', hash: { name: 'SHA-256' } }, false, ['sign']);
41
- const res = await this.subtle.sign({ name: 'HMAC' }, keyMaterial, data);
42
- return new Uint8Array(res);
43
- }
44
- createAesCtr(key, iv) {
45
- const aes = new CTR(key, iv);
46
- return {
47
- encrypt: (data) => wordsToBytes(aes.encrypt(data)),
48
- decrypt: (data) => wordsToBytes(aes.decrypt(data)),
49
- };
50
- }
51
- createAesEcb(key) {
52
- const aes = new AES(key);
53
- return {
54
- encrypt: (data) => wordsToBytes(aes.encrypt(data)),
55
- decrypt: (data) => wordsToBytes(aes.decrypt(data)),
56
- };
57
- }
58
- }
59
- //# sourceMappingURL=subtle.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"subtle.js","sourceRoot":"","sources":["../../../../src/utils/crypto/subtle.ts"],"names":[],"mappings":"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","sourcesContent":["import { MaybeAsync } from '../../index.js'\nimport { BaseCryptoProvider, ICryptoProvider, IEncryptionScheme } from './abstract.js'\n\nimport AES_, { CTR } from '@cryptography/aes'\n\n// fucking weird flex with es modules.\n// i hate default imports please for the love of god never use them\ntype AES_ = typeof AES_.default\nconst AES = 'default' in AES_ ? AES_.default : AES_ as AES_\n\nconst ALGO_TO_SUBTLE: Record<string, string> = {\n sha256: 'SHA-256',\n sha1: 'SHA-1',\n sha512: 'SHA-512',\n}\n\nfunction wordsToBytes(words: Uint32Array): Uint8Array {\n const o = new Uint8Array(words.byteLength)\n\n const len = words.length * 4\n\n for (let i = 0; i < len; ++i) {\n o[i] = ((words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff)\n }\n\n return o\n}\n\nexport class SubtleCryptoProvider extends BaseCryptoProvider implements ICryptoProvider {\n constructor(\n readonly subtle: SubtleCrypto,\n ) {\n super()\n }\n\n sha1(data: Uint8Array): MaybeAsync<Uint8Array> {\n return this.subtle.digest('SHA-1', data).then((result) => new Uint8Array(result))\n }\n\n sha256(data: Uint8Array): MaybeAsync<Uint8Array> {\n return this.subtle.digest('SHA-256', data).then((result) => new Uint8Array(result))\n }\n\n async pbkdf2(\n password: Uint8Array,\n salt: Uint8Array,\n iterations: number,\n keylen?: number | undefined,\n algo?: string | undefined,\n ): Promise<Uint8Array> {\n const keyMaterial = await this.subtle.importKey('raw', password, 'PBKDF2', false, ['deriveBits'])\n\n return this.subtle\n .deriveBits(\n {\n name: 'PBKDF2',\n salt,\n iterations,\n hash: algo ? ALGO_TO_SUBTLE[algo] : 'SHA-512',\n },\n keyMaterial,\n (keylen || 64) * 8,\n )\n .then((result) => new Uint8Array(result))\n }\n\n async hmacSha256(data: Uint8Array, key: Uint8Array): Promise<Uint8Array> {\n const keyMaterial = await this.subtle.importKey(\n 'raw',\n key,\n { name: 'HMAC', hash: { name: 'SHA-256' } },\n false,\n ['sign'],\n )\n\n const res = await this.subtle.sign({ name: 'HMAC' }, keyMaterial, data)\n\n return new Uint8Array(res)\n }\n\n createAesCtr(key: Uint8Array, iv: Uint8Array): IEncryptionScheme {\n const aes = new CTR(key, iv)\n\n return {\n encrypt: (data) => wordsToBytes(aes.encrypt(data)),\n decrypt: (data) => wordsToBytes(aes.decrypt(data)),\n }\n }\n\n createAesEcb(key: Uint8Array): IEncryptionScheme {\n const aes = new AES(key)\n\n return {\n encrypt: (data) => wordsToBytes(aes.encrypt(data)),\n decrypt: (data) => wordsToBytes(aes.decrypt(data)),\n }\n }\n}\n"]}
@@ -1,14 +0,0 @@
1
- /**
2
- * Flood limiter, based on TDlib
3
- */
4
- export declare class FloodControl {
5
- private _wakeupAt;
6
- private _withoutUpdate;
7
- private _events;
8
- private _limits;
9
- addLimit(duration: number, count: number): void;
10
- addEvent(now: number): void;
11
- clear(): void;
12
- get wakeupAt(): number;
13
- private _update;
14
- }
@@ -1,61 +0,0 @@
1
- // based on https://github.dev/tdlib/td/blob/master/tdutils/td/utils/FloodControlStrict.h
2
- /**
3
- * Flood limiter, based on TDlib
4
- */
5
- export class FloodControl {
6
- constructor() {
7
- this._wakeupAt = 1;
8
- this._withoutUpdate = 0;
9
- this._events = [];
10
- // pair: duration, count
11
- this._limits = [];
12
- }
13
- // no more than count in each duration
14
- addLimit(duration, count) {
15
- this._limits.push({ duration, count, pos: 0 });
16
- this._withoutUpdate = 0;
17
- }
18
- addEvent(now) {
19
- this._events.push(now);
20
- if (this._withoutUpdate > 0) {
21
- this._withoutUpdate -= 1;
22
- }
23
- else {
24
- this._update(now);
25
- }
26
- }
27
- clear() {
28
- this._events.length = 0;
29
- this._withoutUpdate = 0;
30
- this._wakeupAt = 1;
31
- this._limits.forEach((limit) => (limit.pos = 0));
32
- }
33
- get wakeupAt() {
34
- return this._wakeupAt;
35
- }
36
- _update(now) {
37
- let minPos = this._events.length;
38
- this._withoutUpdate = Infinity;
39
- this._limits.forEach((limit) => {
40
- if (limit.count < this._events.length - limit.pos) {
41
- limit.pos = this._events.length - limit.count;
42
- }
43
- while (limit.pos < this._events.length && this._events[limit.pos] + limit.duration < now) {
44
- limit.pos += 1;
45
- }
46
- if (limit.count + limit.pos < this._events.length) {
47
- this._wakeupAt = Math.max(this._wakeupAt, this._events[limit.pos] + limit.duration);
48
- this._withoutUpdate = 0;
49
- }
50
- else {
51
- this._withoutUpdate = Math.min(this._withoutUpdate, limit.count + limit.pos - this._events.length - 1);
52
- }
53
- minPos = Math.min(minPos, limit.pos);
54
- });
55
- if (minPos * 2 > this._events.length) {
56
- this._limits.forEach((limit) => (limit.pos -= minPos));
57
- this._events.splice(0, minPos);
58
- }
59
- }
60
- }
61
- //# sourceMappingURL=flood-control.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"flood-control.js","sourceRoot":"","sources":["../../../src/utils/flood-control.ts"],"names":[],"mappings":"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","sourcesContent":["// based on https://github.dev/tdlib/td/blob/master/tdutils/td/utils/FloodControlStrict.h\n\ninterface FloodControlLimit {\n duration: number\n count: number\n pos: number\n}\n\n/**\n * Flood limiter, based on TDlib\n */\nexport class FloodControl {\n private _wakeupAt = 1\n private _withoutUpdate = 0\n private _events: number[] = []\n // pair: duration, count\n private _limits: FloodControlLimit[] = []\n\n // no more than count in each duration\n addLimit(duration: number, count: number): void {\n this._limits.push({ duration, count, pos: 0 })\n this._withoutUpdate = 0\n }\n\n addEvent(now: number): void {\n this._events.push(now)\n\n if (this._withoutUpdate > 0) {\n this._withoutUpdate -= 1\n } else {\n this._update(now)\n }\n }\n\n clear(): void {\n this._events.length = 0\n this._withoutUpdate = 0\n this._wakeupAt = 1\n this._limits.forEach((limit) => (limit.pos = 0))\n }\n\n get wakeupAt(): number {\n return this._wakeupAt\n }\n\n private _update(now: number): void {\n let minPos = this._events.length\n this._withoutUpdate = Infinity\n\n this._limits.forEach((limit) => {\n if (limit.count < this._events.length - limit.pos) {\n limit.pos = this._events.length - limit.count\n }\n\n while (limit.pos < this._events.length && this._events[limit.pos] + limit.duration < now) {\n limit.pos += 1\n }\n\n if (limit.count + limit.pos < this._events.length) {\n this._wakeupAt = Math.max(this._wakeupAt, this._events[limit.pos] + limit.duration)\n this._withoutUpdate = 0\n } else {\n this._withoutUpdate = Math.min(this._withoutUpdate, limit.count + limit.pos - this._events.length - 1)\n }\n\n minPos = Math.min(minPos, limit.pos)\n })\n\n if (minPos * 2 > this._events.length) {\n this._limits.forEach((limit) => (limit.pos -= minPos))\n this._events.splice(0, minPos)\n }\n }\n}\n"]}
@@ -1 +0,0 @@
1
- export declare const _randomBytes: (size: number) => Uint8Array;