@mtcute/core 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/base-client.js +4 -1
- package/cjs/base-client.js.map +1 -1
- package/cjs/network/auth-key.d.ts +3 -3
- package/cjs/network/auth-key.js +12 -12
- package/cjs/network/auth-key.js.map +1 -1
- package/cjs/network/auth-key.test.d.ts +1 -0
- package/cjs/network/auth-key.test.js +111 -0
- package/cjs/network/auth-key.test.js.map +1 -0
- package/cjs/network/authorization.js +62 -57
- package/cjs/network/authorization.js.map +1 -1
- package/cjs/network/config-manager.js +2 -1
- package/cjs/network/config-manager.js.map +1 -1
- package/cjs/network/config-manager.test.d.ts +1 -0
- package/cjs/network/config-manager.test.js +170 -0
- package/cjs/network/config-manager.test.js.map +1 -0
- package/cjs/network/mtproto-session.d.ts +2 -2
- package/cjs/network/mtproto-session.js +2 -2
- package/cjs/network/mtproto-session.js.map +1 -1
- package/cjs/network/multi-session-connection.d.ts +1 -1
- package/cjs/network/multi-session-connection.js +2 -2
- package/cjs/network/multi-session-connection.js.map +1 -1
- package/cjs/network/network-manager.d.ts +1 -0
- package/cjs/network/network-manager.js +21 -27
- package/cjs/network/network-manager.js.map +1 -1
- package/cjs/network/persistent-connection.test.d.ts +1 -0
- package/cjs/network/persistent-connection.test.js +157 -0
- package/cjs/network/persistent-connection.test.js.map +1 -0
- package/cjs/network/session-connection.d.ts +2 -1
- package/cjs/network/session-connection.js +51 -37
- package/cjs/network/session-connection.js.map +1 -1
- package/cjs/network/transports/intermediate.d.ts +3 -0
- package/cjs/network/transports/intermediate.js +5 -3
- package/cjs/network/transports/intermediate.js.map +1 -1
- package/cjs/network/transports/intermediate.test.d.ts +1 -0
- package/cjs/network/transports/intermediate.test.js +86 -0
- package/cjs/network/transports/intermediate.test.js.map +1 -0
- package/cjs/network/transports/obfuscated.js +15 -19
- package/cjs/network/transports/obfuscated.js.map +1 -1
- package/cjs/network/transports/obfuscated.test.d.ts +1 -0
- package/cjs/network/transports/obfuscated.test.js +131 -0
- package/cjs/network/transports/obfuscated.test.js.map +1 -0
- package/cjs/network/transports/tcp.js +1 -1
- package/cjs/network/transports/tcp.js.map +1 -1
- package/cjs/network/transports/tcp.test.d.ts +1 -0
- package/cjs/network/transports/tcp.test.js +97 -0
- package/cjs/network/transports/tcp.test.js.map +1 -0
- package/cjs/network/transports/websocket.test.d.ts +1 -0
- package/cjs/network/transports/websocket.test.js +91 -0
- package/cjs/network/transports/websocket.test.js.map +1 -0
- package/cjs/storage/abstract.d.ts +23 -2
- package/cjs/storage/abstract.js.map +1 -1
- package/cjs/storage/json.js +8 -9
- package/cjs/storage/json.js.map +1 -1
- package/cjs/storage/json.test.d.ts +1 -0
- package/cjs/storage/json.test.js +37 -0
- package/cjs/storage/json.test.js.map +1 -0
- package/cjs/storage/localstorage.js +5 -2
- package/cjs/storage/localstorage.js.map +1 -1
- package/cjs/storage/localstorage.test.d.ts +1 -0
- package/cjs/storage/localstorage.test.js +23 -0
- package/cjs/storage/localstorage.test.js.map +1 -0
- package/cjs/storage/memory.d.ts +7 -8
- package/cjs/storage/memory.js +7 -7
- package/cjs/storage/memory.js.map +1 -1
- package/cjs/storage/memory.test.d.ts +1 -0
- package/cjs/storage/memory.test.js +47 -0
- package/cjs/storage/memory.test.js.map +1 -0
- package/cjs/utils/async-lock.test.d.ts +1 -0
- package/cjs/utils/async-lock.test.js +25 -0
- package/cjs/utils/async-lock.test.js.map +1 -0
- package/cjs/utils/bigint-utils.d.ts +18 -11
- package/cjs/utils/bigint-utils.js +148 -47
- package/cjs/utils/bigint-utils.js.map +1 -1
- package/cjs/utils/bigint-utils.test.d.ts +1 -0
- package/cjs/utils/bigint-utils.test.js +150 -0
- package/cjs/utils/bigint-utils.test.js.map +1 -0
- package/cjs/utils/buffer-utils.d.ts +7 -1
- package/cjs/utils/buffer-utils.js +16 -3
- package/cjs/utils/buffer-utils.js.map +1 -1
- package/cjs/utils/buffer-utils.test.d.ts +1 -0
- package/cjs/utils/buffer-utils.test.js +69 -0
- package/cjs/utils/buffer-utils.test.js.map +1 -0
- package/cjs/utils/condition-variable.test.d.ts +1 -0
- package/cjs/utils/condition-variable.test.js +27 -0
- package/cjs/utils/condition-variable.test.js.map +1 -0
- package/cjs/utils/controllable-promise.test.d.ts +1 -0
- package/cjs/utils/controllable-promise.test.js +17 -0
- package/cjs/utils/controllable-promise.test.js.map +1 -0
- package/cjs/utils/crypto/abstract.d.ts +16 -9
- package/cjs/utils/crypto/abstract.js +6 -9
- package/cjs/utils/crypto/abstract.js.map +1 -1
- package/cjs/utils/crypto/factorization.d.ts +2 -1
- package/cjs/utils/crypto/factorization.js +28 -36
- package/cjs/utils/crypto/factorization.js.map +1 -1
- package/cjs/utils/crypto/index.d.ts +4 -0
- package/cjs/utils/crypto/index.js +4 -0
- package/cjs/utils/crypto/index.js.map +1 -1
- package/cjs/utils/crypto/keys.d.ts +2 -2
- package/cjs/utils/crypto/keys.js +4 -4
- package/cjs/utils/crypto/keys.js.map +1 -1
- package/cjs/utils/crypto/keys.test.d.ts +1 -0
- package/cjs/utils/crypto/keys.test.js +40 -0
- package/cjs/utils/crypto/keys.test.js.map +1 -0
- package/cjs/utils/crypto/miller-rabin.d.ts +2 -2
- package/cjs/utils/crypto/miller-rabin.js +20 -22
- package/cjs/utils/crypto/miller-rabin.js.map +1 -1
- package/cjs/utils/crypto/miller-rabin.test.d.ts +1 -0
- package/cjs/utils/crypto/miller-rabin.test.js +60 -0
- package/cjs/utils/crypto/miller-rabin.test.js.map +1 -0
- package/cjs/utils/crypto/mtproto.d.ts +3 -3
- package/cjs/utils/crypto/mtproto.js +12 -12
- package/cjs/utils/crypto/mtproto.js.map +1 -1
- package/cjs/utils/crypto/mtproto.test.d.ts +1 -0
- package/cjs/utils/crypto/mtproto.test.js +47 -0
- package/cjs/utils/crypto/mtproto.test.js.map +1 -0
- package/cjs/utils/crypto/node.d.ts +21 -0
- package/cjs/utils/crypto/node.js +74 -0
- package/cjs/utils/crypto/node.js.map +1 -0
- package/cjs/utils/crypto/node.test.d.ts +1 -0
- package/cjs/utils/crypto/node.test.js +13 -0
- package/cjs/utils/crypto/node.test.js.map +1 -0
- package/cjs/utils/crypto/password.js +22 -33
- package/cjs/utils/crypto/password.js.map +1 -1
- package/cjs/utils/crypto/password.test.d.ts +1 -0
- package/cjs/utils/crypto/password.test.js +95 -0
- package/cjs/utils/crypto/password.test.js.map +1 -0
- package/cjs/utils/crypto/utils.test.d.ts +1 -0
- package/cjs/utils/crypto/utils.test.js +49 -0
- package/cjs/utils/crypto/utils.test.js.map +1 -0
- package/cjs/utils/crypto/wasm.d.ts +22 -0
- package/cjs/utils/crypto/wasm.js +41 -0
- package/cjs/utils/crypto/wasm.js.map +1 -0
- package/cjs/utils/crypto/web.d.ts +11 -0
- package/cjs/utils/crypto/web.js +40 -0
- package/cjs/utils/crypto/web.js.map +1 -0
- package/cjs/utils/crypto/web.test.d.ts +1 -0
- package/cjs/utils/crypto/web.test.js +17 -0
- package/cjs/utils/crypto/web.test.js.map +1 -0
- package/cjs/utils/deque.d.ts +1 -1
- package/cjs/utils/deque.js +9 -3
- package/cjs/utils/deque.js.map +1 -1
- package/cjs/utils/deque.test.d.ts +1 -0
- package/cjs/utils/deque.test.js +128 -0
- package/cjs/utils/deque.test.js.map +1 -0
- package/cjs/utils/function-utils.d.ts +4 -1
- package/cjs/utils/function-utils.js +8 -1
- package/cjs/utils/function-utils.js.map +1 -1
- package/cjs/utils/function-utils.test.d.ts +1 -0
- package/cjs/utils/function-utils.test.js +23 -0
- package/cjs/utils/function-utils.test.js.map +1 -0
- package/cjs/utils/index.d.ts +0 -1
- package/cjs/utils/index.js +0 -1
- package/cjs/utils/index.js.map +1 -1
- package/cjs/utils/linked-list.test.d.ts +1 -0
- package/cjs/utils/linked-list.test.js +36 -0
- package/cjs/utils/linked-list.test.js.map +1 -0
- package/cjs/utils/links/bots.test.d.ts +1 -0
- package/cjs/utils/links/bots.test.js +152 -0
- package/cjs/utils/links/bots.test.js.map +1 -0
- package/cjs/utils/links/chat.test.d.ts +1 -0
- package/cjs/utils/links/chat.test.js +84 -0
- package/cjs/utils/links/chat.test.js.map +1 -0
- package/cjs/utils/links/misc.test.d.ts +1 -0
- package/cjs/utils/links/misc.test.js +153 -0
- package/cjs/utils/links/misc.test.js.map +1 -0
- package/cjs/utils/links/proxy.test.d.ts +1 -0
- package/cjs/utils/links/proxy.test.js +74 -0
- package/cjs/utils/links/proxy.test.js.map +1 -0
- package/cjs/utils/links/user.test.d.ts +1 -0
- package/cjs/utils/links/user.test.js +63 -0
- package/cjs/utils/links/user.test.js.map +1 -0
- package/cjs/utils/logger.d.ts +0 -1
- package/cjs/utils/logger.js +3 -4
- package/cjs/utils/logger.js.map +1 -1
- package/cjs/utils/logger.test.d.ts +1 -0
- package/cjs/utils/logger.test.js +125 -0
- package/cjs/utils/logger.test.js.map +1 -0
- package/cjs/utils/long-utils.test.d.ts +1 -0
- package/cjs/utils/long-utils.test.js +158 -0
- package/cjs/utils/long-utils.test.js.map +1 -0
- package/cjs/utils/lru-map.d.ts +1 -0
- package/cjs/utils/lru-map.js +6 -0
- package/cjs/utils/lru-map.js.map +1 -1
- package/cjs/utils/lru-map.test.d.ts +1 -0
- package/cjs/utils/lru-map.test.js +96 -0
- package/cjs/utils/lru-map.test.js.map +1 -0
- package/cjs/utils/lru-set.test.d.ts +1 -0
- package/cjs/utils/lru-set.test.js +77 -0
- package/cjs/utils/lru-set.test.js.map +1 -0
- package/cjs/utils/peer-utils.js +5 -1
- package/cjs/utils/peer-utils.js.map +1 -1
- package/cjs/utils/peer-utils.test.d.ts +1 -0
- package/cjs/utils/peer-utils.test.js +122 -0
- package/cjs/utils/peer-utils.test.js.map +1 -0
- package/cjs/utils/platform/crypto.js +2 -2
- package/cjs/utils/platform/crypto.js.map +1 -1
- package/cjs/utils/platform/crypto.web.js +2 -2
- package/cjs/utils/platform/crypto.web.js.map +1 -1
- package/cjs/utils/sorted-array.test.d.ts +1 -0
- package/cjs/utils/sorted-array.test.js +66 -0
- package/cjs/utils/sorted-array.test.js.map +1 -0
- package/cjs/utils/string-session.js +4 -2
- package/cjs/utils/string-session.js.map +1 -1
- package/cjs/utils/string-session.test.d.ts +1 -0
- package/cjs/utils/string-session.test.js +106 -0
- package/cjs/utils/string-session.test.js.map +1 -0
- package/cjs/utils/tl-json.test.d.ts +1 -0
- package/cjs/utils/tl-json.test.js +83 -0
- package/cjs/utils/tl-json.test.js.map +1 -0
- package/cjs/utils/type-assertions.test.d.ts +1 -0
- package/cjs/utils/type-assertions.test.js +67 -0
- package/cjs/utils/type-assertions.test.js.map +1 -0
- package/esm/base-client.js +4 -1
- package/esm/base-client.js.map +1 -1
- package/esm/network/auth-key.d.ts +3 -3
- package/esm/network/auth-key.js +13 -13
- package/esm/network/auth-key.js.map +1 -1
- package/esm/network/auth-key.test.d.ts +1 -0
- package/esm/network/auth-key.test.js +106 -0
- package/esm/network/auth-key.test.js.map +1 -0
- package/esm/network/authorization.js +64 -59
- package/esm/network/authorization.js.map +1 -1
- package/esm/network/config-manager.js +2 -1
- package/esm/network/config-manager.js.map +1 -1
- package/esm/network/config-manager.test.d.ts +1 -0
- package/esm/network/config-manager.test.js +168 -0
- package/esm/network/config-manager.test.js.map +1 -0
- package/esm/network/mtproto-session.d.ts +2 -2
- package/esm/network/mtproto-session.js +2 -2
- package/esm/network/mtproto-session.js.map +1 -1
- package/esm/network/multi-session-connection.d.ts +1 -1
- package/esm/network/multi-session-connection.js +2 -2
- package/esm/network/multi-session-connection.js.map +1 -1
- package/esm/network/network-manager.d.ts +1 -0
- package/esm/network/network-manager.js +21 -27
- package/esm/network/network-manager.js.map +1 -1
- package/esm/network/persistent-connection.test.d.ts +1 -0
- package/esm/network/persistent-connection.test.js +155 -0
- package/esm/network/persistent-connection.test.js.map +1 -0
- package/esm/network/session-connection.d.ts +2 -1
- package/esm/network/session-connection.js +53 -39
- package/esm/network/session-connection.js.map +1 -1
- package/esm/network/transports/intermediate.d.ts +3 -0
- package/esm/network/transports/intermediate.js +6 -4
- package/esm/network/transports/intermediate.js.map +1 -1
- package/esm/network/transports/intermediate.test.d.ts +1 -0
- package/esm/network/transports/intermediate.test.js +84 -0
- package/esm/network/transports/intermediate.test.js.map +1 -0
- package/esm/network/transports/obfuscated.js +16 -20
- package/esm/network/transports/obfuscated.js.map +1 -1
- package/esm/network/transports/obfuscated.test.d.ts +1 -0
- package/esm/network/transports/obfuscated.test.js +129 -0
- package/esm/network/transports/obfuscated.test.js.map +1 -0
- package/esm/network/transports/tcp.js +1 -1
- package/esm/network/transports/tcp.js.map +1 -1
- package/esm/network/transports/tcp.test.d.ts +1 -0
- package/esm/network/transports/tcp.test.js +95 -0
- package/esm/network/transports/tcp.test.js.map +1 -0
- package/esm/network/transports/websocket.test.d.ts +1 -0
- package/esm/network/transports/websocket.test.js +89 -0
- package/esm/network/transports/websocket.test.js.map +1 -0
- package/esm/storage/abstract.d.ts +23 -2
- package/esm/storage/abstract.js.map +1 -1
- package/esm/storage/json.js +8 -9
- package/esm/storage/json.js.map +1 -1
- package/esm/storage/json.test.d.ts +1 -0
- package/esm/storage/json.test.js +35 -0
- package/esm/storage/json.test.js.map +1 -0
- package/esm/storage/localstorage.js +5 -2
- package/esm/storage/localstorage.js.map +1 -1
- package/esm/storage/localstorage.test.d.ts +1 -0
- package/esm/storage/localstorage.test.js +21 -0
- package/esm/storage/localstorage.test.js.map +1 -0
- package/esm/storage/memory.d.ts +7 -8
- package/esm/storage/memory.js +7 -7
- package/esm/storage/memory.js.map +1 -1
- package/esm/storage/memory.test.d.ts +1 -0
- package/esm/storage/memory.test.js +45 -0
- package/esm/storage/memory.test.js.map +1 -0
- package/esm/utils/async-lock.test.d.ts +1 -0
- package/esm/utils/async-lock.test.js +23 -0
- package/esm/utils/async-lock.test.js.map +1 -0
- package/esm/utils/bigint-utils.d.ts +18 -11
- package/esm/utils/bigint-utils.js +142 -44
- package/esm/utils/bigint-utils.js.map +1 -1
- package/esm/utils/bigint-utils.test.d.ts +1 -0
- package/esm/utils/bigint-utils.test.js +148 -0
- package/esm/utils/bigint-utils.test.js.map +1 -0
- package/esm/utils/buffer-utils.d.ts +7 -1
- package/esm/utils/buffer-utils.js +14 -1
- package/esm/utils/buffer-utils.js.map +1 -1
- package/esm/utils/buffer-utils.test.d.ts +1 -0
- package/esm/utils/buffer-utils.test.js +67 -0
- package/esm/utils/buffer-utils.test.js.map +1 -0
- package/esm/utils/condition-variable.test.d.ts +1 -0
- package/esm/utils/condition-variable.test.js +25 -0
- package/esm/utils/condition-variable.test.js.map +1 -0
- package/esm/utils/controllable-promise.test.d.ts +1 -0
- package/esm/utils/controllable-promise.test.js +15 -0
- package/esm/utils/controllable-promise.test.js.map +1 -0
- package/esm/utils/crypto/abstract.d.ts +16 -9
- package/esm/utils/crypto/abstract.js +6 -9
- package/esm/utils/crypto/abstract.js.map +1 -1
- package/esm/utils/crypto/factorization.d.ts +2 -1
- package/esm/utils/crypto/factorization.js +29 -34
- package/esm/utils/crypto/factorization.js.map +1 -1
- package/esm/utils/crypto/index.d.ts +4 -0
- package/esm/utils/crypto/index.js +4 -0
- package/esm/utils/crypto/index.js.map +1 -1
- package/esm/utils/crypto/keys.d.ts +2 -2
- package/esm/utils/crypto/keys.js +4 -4
- package/esm/utils/crypto/keys.js.map +1 -1
- package/esm/utils/crypto/keys.test.d.ts +1 -0
- package/esm/utils/crypto/keys.test.js +38 -0
- package/esm/utils/crypto/keys.test.js.map +1 -0
- package/esm/utils/crypto/miller-rabin.d.ts +2 -2
- package/esm/utils/crypto/miller-rabin.js +21 -20
- package/esm/utils/crypto/miller-rabin.js.map +1 -1
- package/esm/utils/crypto/miller-rabin.test.d.ts +1 -0
- package/esm/utils/crypto/miller-rabin.test.js +58 -0
- package/esm/utils/crypto/miller-rabin.test.js.map +1 -0
- package/esm/utils/crypto/mtproto.d.ts +3 -3
- package/esm/utils/crypto/mtproto.js +12 -12
- package/esm/utils/crypto/mtproto.js.map +1 -1
- package/esm/utils/crypto/mtproto.test.d.ts +1 -0
- package/esm/utils/crypto/mtproto.test.js +45 -0
- package/esm/utils/crypto/mtproto.test.js.map +1 -0
- package/esm/utils/crypto/node.d.ts +21 -0
- package/esm/utils/crypto/node.js +69 -0
- package/esm/utils/crypto/node.js.map +1 -0
- package/esm/utils/crypto/node.test.d.ts +1 -0
- package/esm/utils/crypto/node.test.js +11 -0
- package/esm/utils/crypto/node.test.js.map +1 -0
- package/esm/utils/crypto/password.js +24 -32
- package/esm/utils/crypto/password.js.map +1 -1
- package/esm/utils/crypto/password.test.d.ts +1 -0
- package/esm/utils/crypto/password.test.js +90 -0
- package/esm/utils/crypto/password.test.js.map +1 -0
- package/esm/utils/crypto/utils.test.d.ts +1 -0
- package/esm/utils/crypto/utils.test.js +47 -0
- package/esm/utils/crypto/utils.test.js.map +1 -0
- package/esm/utils/crypto/wasm.d.ts +22 -0
- package/esm/utils/crypto/wasm.js +37 -0
- package/esm/utils/crypto/wasm.js.map +1 -0
- package/esm/utils/crypto/web.d.ts +11 -0
- package/esm/utils/crypto/web.js +36 -0
- package/esm/utils/crypto/web.js.map +1 -0
- package/esm/utils/crypto/web.test.d.ts +1 -0
- package/esm/utils/crypto/web.test.js +15 -0
- package/esm/utils/crypto/web.test.js.map +1 -0
- package/esm/utils/deque.d.ts +1 -1
- package/esm/utils/deque.js +9 -3
- package/esm/utils/deque.js.map +1 -1
- package/esm/utils/deque.test.d.ts +1 -0
- package/esm/utils/deque.test.js +126 -0
- package/esm/utils/deque.test.js.map +1 -0
- package/esm/utils/function-utils.d.ts +4 -1
- package/esm/utils/function-utils.js +8 -1
- package/esm/utils/function-utils.js.map +1 -1
- package/esm/utils/function-utils.test.d.ts +1 -0
- package/esm/utils/function-utils.test.js +21 -0
- package/esm/utils/function-utils.test.js.map +1 -0
- package/esm/utils/index.d.ts +0 -1
- package/esm/utils/index.js +0 -1
- package/esm/utils/index.js.map +1 -1
- package/esm/utils/linked-list.test.d.ts +1 -0
- package/esm/utils/linked-list.test.js +34 -0
- package/esm/utils/linked-list.test.js.map +1 -0
- package/esm/utils/links/bots.test.d.ts +1 -0
- package/esm/utils/links/bots.test.js +150 -0
- package/esm/utils/links/bots.test.js.map +1 -0
- package/esm/utils/links/chat.test.d.ts +1 -0
- package/esm/utils/links/chat.test.js +82 -0
- package/esm/utils/links/chat.test.js.map +1 -0
- package/esm/utils/links/misc.test.d.ts +1 -0
- package/esm/utils/links/misc.test.js +151 -0
- package/esm/utils/links/misc.test.js.map +1 -0
- package/esm/utils/links/proxy.test.d.ts +1 -0
- package/esm/utils/links/proxy.test.js +72 -0
- package/esm/utils/links/proxy.test.js.map +1 -0
- package/esm/utils/links/user.test.d.ts +1 -0
- package/esm/utils/links/user.test.js +61 -0
- package/esm/utils/links/user.test.js.map +1 -0
- package/esm/utils/logger.d.ts +0 -1
- package/esm/utils/logger.js +3 -4
- package/esm/utils/logger.js.map +1 -1
- package/esm/utils/logger.test.d.ts +1 -0
- package/esm/utils/logger.test.js +120 -0
- package/esm/utils/logger.test.js.map +1 -0
- package/esm/utils/long-utils.test.d.ts +1 -0
- package/esm/utils/long-utils.test.js +153 -0
- package/esm/utils/long-utils.test.js.map +1 -0
- package/esm/utils/lru-map.d.ts +1 -0
- package/esm/utils/lru-map.js +6 -0
- package/esm/utils/lru-map.js.map +1 -1
- package/esm/utils/lru-map.test.d.ts +1 -0
- package/esm/utils/lru-map.test.js +94 -0
- package/esm/utils/lru-map.test.js.map +1 -0
- package/esm/utils/lru-set.test.d.ts +1 -0
- package/esm/utils/lru-set.test.js +72 -0
- package/esm/utils/lru-set.test.js.map +1 -0
- package/esm/utils/peer-utils.js +5 -1
- package/esm/utils/peer-utils.js.map +1 -1
- package/esm/utils/peer-utils.test.d.ts +1 -0
- package/esm/utils/peer-utils.test.js +117 -0
- package/esm/utils/peer-utils.test.js.map +1 -0
- package/esm/utils/platform/crypto.js +1 -1
- package/esm/utils/platform/crypto.js.map +1 -1
- package/esm/utils/platform/crypto.web.js +2 -2
- package/esm/utils/platform/crypto.web.js.map +1 -1
- package/esm/utils/sorted-array.test.d.ts +1 -0
- package/esm/utils/sorted-array.test.js +64 -0
- package/esm/utils/sorted-array.test.js.map +1 -0
- package/esm/utils/string-session.js +4 -2
- package/esm/utils/string-session.js.map +1 -1
- package/esm/utils/string-session.test.d.ts +1 -0
- package/esm/utils/string-session.test.js +104 -0
- package/esm/utils/string-session.test.js.map +1 -0
- package/esm/utils/tl-json.test.d.ts +1 -0
- package/esm/utils/tl-json.test.js +81 -0
- package/esm/utils/tl-json.test.js.map +1 -0
- package/esm/utils/type-assertions.test.d.ts +1 -0
- package/esm/utils/type-assertions.test.js +65 -0
- package/esm/utils/type-assertions.test.js.map +1 -0
- package/package.json +4 -5
- package/cjs/utils/crypto/common.d.ts +0 -12
- package/cjs/utils/crypto/common.js +0 -54
- package/cjs/utils/crypto/common.js.map +0 -1
- package/cjs/utils/crypto/node-crypto.d.ts +0 -10
- package/cjs/utils/crypto/node-crypto.js +0 -46
- package/cjs/utils/crypto/node-crypto.js.map +0 -1
- package/cjs/utils/crypto/subtle.d.ts +0 -12
- package/cjs/utils/crypto/subtle.js +0 -86
- package/cjs/utils/crypto/subtle.js.map +0 -1
- package/cjs/utils/flood-control.d.ts +0 -14
- package/cjs/utils/flood-control.js +0 -65
- package/cjs/utils/flood-control.js.map +0 -1
- package/cjs/utils/platform/random.d.ts +0 -1
- package/cjs/utils/platform/random.js +0 -7
- package/cjs/utils/platform/random.js.map +0 -1
- package/cjs/utils/platform/random.web.d.ts +0 -1
- package/cjs/utils/platform/random.web.js +0 -10
- package/cjs/utils/platform/random.web.js.map +0 -1
- package/esm/utils/crypto/common.d.ts +0 -12
- package/esm/utils/crypto/common.js +0 -50
- package/esm/utils/crypto/common.js.map +0 -1
- package/esm/utils/crypto/node-crypto.d.ts +0 -10
- package/esm/utils/crypto/node-crypto.js +0 -42
- package/esm/utils/crypto/node-crypto.js.map +0 -1
- package/esm/utils/crypto/subtle.d.ts +0 -12
- package/esm/utils/crypto/subtle.js +0 -59
- package/esm/utils/crypto/subtle.js.map +0 -1
- package/esm/utils/flood-control.d.ts +0 -14
- package/esm/utils/flood-control.js +0 -61
- package/esm/utils/flood-control.js.map +0 -1
- package/esm/utils/platform/random.d.ts +0 -1
- package/esm/utils/platform/random.js +0 -4
- package/esm/utils/platform/random.js.map +0 -1
- package/esm/utils/platform/random.web.d.ts +0 -1
- package/esm/utils/platform/random.web.js +0 -6
- package/esm/utils/platform/random.web.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type-assertions.test.js","sourceRoot":"","sources":["../../../src/utils/type-assertions.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { describe, expect, it } from 'vitest'\n\nimport {\n assertTypeIs,\n assertTypeIsNot,\n hasPresentKey,\n hasValueAtKey,\n isPresent,\n mtpAssertTypeIs,\n} from './type-assertions.js'\n\ndescribe('isPresent', () => {\n it('should return true for non-null values', () => {\n expect(isPresent(1)).toBe(true)\n expect(isPresent('')).toBe(true)\n expect(isPresent({})).toBe(true)\n expect(isPresent([])).toBe(true)\n })\n\n it('should return false for null/undefined', () => {\n expect(isPresent(null)).toBe(false)\n expect(isPresent(undefined)).toBe(false)\n })\n})\n\ndescribe('hasPresentKey', () => {\n it('should return true for objects with present keys', () => {\n expect(hasPresentKey('a')({ a: 1 })).toBe(true)\n expect(hasPresentKey('a')({ a: 1, b: 2 })).toBe(true)\n })\n\n it('should return false for objects with undefined/null keys', () => {\n expect(hasPresentKey('a')({ a: undefined })).toBe(false)\n expect(hasPresentKey('a')({ a: null })).toBe(false)\n expect(hasPresentKey('a')({ a: undefined, b: 2 })).toBe(false)\n expect(hasPresentKey('a')({ a: null, b: 2 })).toBe(false)\n })\n\n it('should return false for objects without the key', () => {\n expect(hasPresentKey('a')({ b: 2 })).toBe(false)\n })\n})\n\ndescribe('hasValueAtKey', () => {\n it('should return true for objects with the correct value', () => {\n expect(hasValueAtKey('a', 1)({ a: 1 })).toBe(true)\n expect(hasValueAtKey('a', 1)({ a: 1, b: 2 })).toBe(true)\n })\n\n it('should return false for objects with the wrong value', () => {\n expect(hasValueAtKey('a', 1)({ a: 2 })).toBe(false)\n expect(hasValueAtKey('a', 1)({ a: 2, b: 2 })).toBe(false)\n })\n\n it('should return false for objects without the key', () => {\n // @ts-expect-error - we want to make sure the key is not present at runtime\n expect(hasValueAtKey('a', 1)({ b: 2 })).toBe(false)\n })\n})\n\ndescribe('assertTypeIs', () => {\n it('should not throw for correct types', () => {\n assertTypeIs('peerUser', { _: 'peerUser', userId: 1 }, 'peerUser')\n mtpAssertTypeIs('peerUser', { _: 'mt_rpc_answer_unknown' }, 'mt_rpc_answer_unknown')\n })\n\n it('should throw for incorrect types', () => {\n // eslint-disable-next-line\n expect(() => assertTypeIs('peerUser', { _: 'peerChannel', channelId: 1 } as any, 'peerUser')).toThrow()\n // eslint-disable-next-line\n expect(() => mtpAssertTypeIs('peerUser', { _: 'mt_rpc_answer_unknown' } as any, 'peerUser')).toThrow()\n })\n})\n\ndescribe('assertTypeIsNot', () => {\n it('should not throw for correct types', () => {\n // eslint-disable-next-line\n assertTypeIsNot('peerUser', { _: 'peerChannel', channelId: 1 } as any, 'peerUser')\n })\n\n it('should throw for incorrect types', () => {\n expect(() => assertTypeIsNot('peerUser', { _: 'peerUser', userId: 1 }, 'peerUser')).toThrow()\n })\n})\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mtcute/core",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "Core functions and base MTProto client",
|
|
5
5
|
"author": "Alina Sireneva <alina@tei.su>",
|
|
6
6
|
"license": "MIT",
|
|
@@ -20,11 +20,10 @@
|
|
|
20
20
|
"./esm/storage/json-file.js": false
|
|
21
21
|
},
|
|
22
22
|
"dependencies": {
|
|
23
|
-
"@mtcute/tl": "^
|
|
24
|
-
"@mtcute/tl-runtime": "^0.1.
|
|
23
|
+
"@mtcute/tl": "^166.1.0",
|
|
24
|
+
"@mtcute/tl-runtime": "^0.1.1",
|
|
25
|
+
"@mtcute/wasm": "^0.1.1",
|
|
25
26
|
"@types/events": "3.0.0",
|
|
26
|
-
"@types/node": "18.16.0",
|
|
27
|
-
"big-integer": "1.6.51",
|
|
28
27
|
"events": "3.2.0",
|
|
29
28
|
"long": "5.2.3"
|
|
30
29
|
},
|
|
@@ -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,54 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.AesModeOfOperationIge = void 0;
|
|
4
|
-
const utils_js_1 = require("./utils.js");
|
|
5
|
-
/**
|
|
6
|
-
* AES mode of operation IGE implementation in JS
|
|
7
|
-
*/
|
|
8
|
-
class AesModeOfOperationIge {
|
|
9
|
-
constructor(key, iv, ecb) {
|
|
10
|
-
this._key = key;
|
|
11
|
-
this._iv = iv;
|
|
12
|
-
this._aes = ecb;
|
|
13
|
-
}
|
|
14
|
-
async encrypt(data) {
|
|
15
|
-
if (data.length % 16 !== 0) {
|
|
16
|
-
throw new Error('invalid plaintext size (must be multiple of 16 bytes)');
|
|
17
|
-
}
|
|
18
|
-
const ciphertext = new Uint8Array(data.length);
|
|
19
|
-
let block = new Uint8Array(16);
|
|
20
|
-
let iv1 = this._iv.subarray(0, 16);
|
|
21
|
-
let iv2 = this._iv.subarray(16, 32);
|
|
22
|
-
for (let i = 0; i < data.length; i += 16) {
|
|
23
|
-
block.set(data.subarray(i, i + 16));
|
|
24
|
-
(0, utils_js_1.xorBufferInPlace)(block, iv1);
|
|
25
|
-
block = await this._aes.encrypt(block);
|
|
26
|
-
(0, utils_js_1.xorBufferInPlace)(block, iv2);
|
|
27
|
-
ciphertext.set(block, i);
|
|
28
|
-
iv1 = ciphertext.subarray(i, i + 16);
|
|
29
|
-
iv2 = data.subarray(i, i + 16);
|
|
30
|
-
}
|
|
31
|
-
return ciphertext;
|
|
32
|
-
}
|
|
33
|
-
async decrypt(data) {
|
|
34
|
-
if (data.length % 16 !== 0) {
|
|
35
|
-
throw new Error('invalid ciphertext size (must be multiple of 16 bytes)');
|
|
36
|
-
}
|
|
37
|
-
const plaintext = new Uint8Array(data.length);
|
|
38
|
-
let block = new Uint8Array(16);
|
|
39
|
-
let iv1 = this._iv.subarray(16, 32);
|
|
40
|
-
let iv2 = this._iv.subarray(0, 16);
|
|
41
|
-
for (let i = 0; i < data.length; i += 16) {
|
|
42
|
-
block.set(data.subarray(i, i + 16));
|
|
43
|
-
(0, utils_js_1.xorBufferInPlace)(block, iv1);
|
|
44
|
-
block = await this._aes.decrypt(block);
|
|
45
|
-
(0, utils_js_1.xorBufferInPlace)(block, iv2);
|
|
46
|
-
plaintext.set(block, i);
|
|
47
|
-
iv1 = plaintext.subarray(i, i + 16);
|
|
48
|
-
iv2 = data.subarray(i, i + 16);
|
|
49
|
-
}
|
|
50
|
-
return plaintext;
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
exports.AesModeOfOperationIge = AesModeOfOperationIge;
|
|
54
|
-
//# sourceMappingURL=common.js.map
|
|
@@ -1 +0,0 @@
|
|
|
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"]}
|
|
@@ -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":";;;;;;;;;;;;;;;;;;;;;;;;;;AACA,+CAAsF;AAEtF,yDAA6C;AAK7C,MAAM,GAAG,GAAG,SAAS,IAAI,aAAI,CAAC,CAAC,CAAC,aAAI,CAAC,OAAO,CAAC,CAAC,CAAC,aAAY,CAAA;AAE3D,MAAM,cAAc,GAA2B;IAC3C,MAAM,EAAE,SAAS;IACjB,IAAI,EAAE,OAAO;IACb,MAAM,EAAE,SAAS;CACpB,CAAA;AAED,SAAS,YAAY,CAAC,KAAkB;IACpC,MAAM,CAAC,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;IAE1C,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAA;IAE5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE;QAC1B,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;KAC1D;IAED,OAAO,CAAC,CAAA;AACZ,CAAC;AAED,MAAa,oBAAqB,SAAQ,gCAAkB;IACxD,YACa,MAAoB;QAE7B,KAAK,EAAE,CAAA;QAFE,WAAM,GAAN,MAAM,CAAc;IAGjC,CAAC;IAED,IAAI,CAAC,IAAgB;QACjB,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,CAAA;IACrF,CAAC;IAED,MAAM,CAAC,IAAgB;QACnB,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,CAAA;IACvF,CAAC;IAED,KAAK,CAAC,MAAM,CACR,QAAoB,EACpB,IAAgB,EAChB,UAAkB,EAClB,MAA2B,EAC3B,IAAyB;QAEzB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,YAAY,CAAC,CAAC,CAAA;QAEjG,OAAO,IAAI,CAAC,MAAM;aACb,UAAU,CACP;YACI,IAAI,EAAE,QAAQ;YACd,IAAI;YACJ,UAAU;YACV,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;SAChD,EACD,WAAW,EACX,CAAC,MAAM,IAAI,EAAE,CAAC,GAAG,CAAC,CACrB;aACA,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,CAAA;IACjD,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,IAAgB,EAAE,GAAe;QAC9C,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAC3C,KAAK,EACL,GAAG,EACH,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAC3C,KAAK,EACL,CAAC,MAAM,CAAC,CACX,CAAA;QAED,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,CAAA;QAEvE,OAAO,IAAI,UAAU,CAAC,GAAG,CAAC,CAAA;IAC9B,CAAC;IAED,YAAY,CAAC,GAAe,EAAE,EAAc;QACxC,MAAM,GAAG,GAAG,IAAI,SAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;QAE5B,OAAO;YACH,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAClD,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SACrD,CAAA;IACL,CAAC;IAED,YAAY,CAAC,GAAe;QACxB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAA;QAExB,OAAO;YACH,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAClD,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SACrD,CAAA;IACL,CAAC;CACJ;AArED,oDAqEC","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":"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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"]}
|
|
@@ -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
|
-
}
|