@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
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
export { _randomBytes as randomBytes } from './platform/random.js';
|
|
2
1
|
/**
|
|
3
2
|
* Check if two buffers are equal
|
|
4
3
|
*
|
|
@@ -49,7 +48,21 @@ export function concatBuffers(buffers) {
|
|
|
49
48
|
}
|
|
50
49
|
return ret;
|
|
51
50
|
}
|
|
51
|
+
/**
|
|
52
|
+
* Shortcut for creating a DataView from a Uint8Array
|
|
53
|
+
*/
|
|
52
54
|
export function dataViewFromBuffer(buf) {
|
|
53
55
|
return new DataView(buf.buffer, buf.byteOffset, buf.byteLength);
|
|
54
56
|
}
|
|
57
|
+
/**
|
|
58
|
+
* Reverse a buffer (or a part of it) into a new buffer
|
|
59
|
+
*/
|
|
60
|
+
export function bufferToReversed(buf, start = 0, end = buf.length) {
|
|
61
|
+
const len = end - start;
|
|
62
|
+
const ret = new Uint8Array(len);
|
|
63
|
+
for (let i = 0; i < len; i++) {
|
|
64
|
+
ret[i] = buf[end - i - 1];
|
|
65
|
+
}
|
|
66
|
+
return ret;
|
|
67
|
+
}
|
|
55
68
|
//# sourceMappingURL=buffer-utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buffer-utils.js","sourceRoot":"","sources":["../../../src/utils/buffer-utils.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"buffer-utils.js","sourceRoot":"","sources":["../../../src/utils/buffer-utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,CAAa,EAAE,CAAa;IACrD,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;QAAE,OAAO,KAAK,CAAA;IAEvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC/B,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAAE,OAAO,KAAK,CAAA;KAClC;IAED,OAAO,IAAI,CAAA;AACf,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,GAAe,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC,MAAM;IACpE,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,GAAG,GAAG,KAAK,CAAC,CAAA;IACvC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAA;IAEjC,OAAO,GAAG,CAAA;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,OAAqB;IAC/C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC,CAAC,CAAC,CAAA;IAE3C,0CAA0C;IAC1C,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;QAC/B,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;KAChC;IACD,yCAAyC;IAEzC,IAAI,MAAM,GAAG,CAAC,CAAA;IAEd,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE;QACvB,MAAM,IAAI,GAAG,CAAC,MAAM,CAAA;KACvB;IAED,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAA;IAClC,IAAI,MAAM,GAAG,CAAC,CAAA;IAEd,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE;QACvB,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;QACpB,MAAM,IAAI,GAAG,CAAC,MAAM,CAAA;KACvB;IAED,OAAO,GAAG,CAAA;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAe;IAC9C,OAAO,IAAI,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC,CAAA;AACnE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAe,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC,MAAM;IACzE,MAAM,GAAG,GAAG,GAAG,GAAG,KAAK,CAAA;IACvB,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,CAAA;IAE/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;QAC1B,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;KAC5B;IAED,OAAO,GAAG,CAAA;AACd,CAAC","sourcesContent":["/**\n * Check if two buffers are equal\n *\n * @param a First buffer\n * @param b Second buffer\n */\nexport function buffersEqual(a: Uint8Array, b: Uint8Array): boolean {\n if (a.length !== b.length) return false\n\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false\n }\n\n return true\n}\n\n/**\n * Copy a buffer\n *\n * @param buf Buffer to copy\n * @param start Start offset\n * @param end End offset\n */\nexport function cloneBuffer(buf: Uint8Array, start = 0, end = buf.length): Uint8Array {\n const ret = new Uint8Array(end - start)\n ret.set(buf.subarray(start, end))\n\n return ret\n}\n\n/**\n * Concatenate multiple buffers into one\n */\nexport function concatBuffers(buffers: Uint8Array[]): Uint8Array {\n if (buffers.length === 1) return buffers[0]\n\n /* eslint-disable no-restricted-globals */\n if (typeof Buffer !== 'undefined') {\n return Buffer.concat(buffers)\n }\n /* eslint-enable no-restricted-globals */\n\n let length = 0\n\n for (const buf of buffers) {\n length += buf.length\n }\n\n const ret = new Uint8Array(length)\n let offset = 0\n\n for (const buf of buffers) {\n ret.set(buf, offset)\n offset += buf.length\n }\n\n return ret\n}\n\n/**\n * Shortcut for creating a DataView from a Uint8Array\n */\nexport function dataViewFromBuffer(buf: Uint8Array): DataView {\n return new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n}\n\n/**\n * Reverse a buffer (or a part of it) into a new buffer\n */\nexport function bufferToReversed(buf: Uint8Array, start = 0, end = buf.length): Uint8Array {\n const len = end - start\n const ret = new Uint8Array(len)\n\n for (let i = 0; i < len; i++) {\n ret[i] = buf[end - i - 1]\n }\n\n return ret\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { afterEach, describe, expect, it, vi } from 'vitest';
|
|
2
|
+
import { buffersEqual, bufferToReversed, cloneBuffer, concatBuffers } from './buffer-utils.js';
|
|
3
|
+
describe('buffersEqual', () => {
|
|
4
|
+
it('should return true for equal buffers', () => {
|
|
5
|
+
expect(buffersEqual(new Uint8Array([]), new Uint8Array([]))).is.true;
|
|
6
|
+
expect(buffersEqual(new Uint8Array([1, 2, 3]), new Uint8Array([1, 2, 3]))).is.true;
|
|
7
|
+
});
|
|
8
|
+
it('should return false for non-equal buffers', () => {
|
|
9
|
+
expect(buffersEqual(new Uint8Array([1]), new Uint8Array([]))).is.false;
|
|
10
|
+
expect(buffersEqual(new Uint8Array([1, 2, 3]), new Uint8Array([1, 2, 4]))).is.false;
|
|
11
|
+
});
|
|
12
|
+
});
|
|
13
|
+
describe('cloneBuffer', () => {
|
|
14
|
+
it('should clone buffer', () => {
|
|
15
|
+
const orig = new Uint8Array([1, 2, 3]);
|
|
16
|
+
const copy = cloneBuffer(orig);
|
|
17
|
+
expect([...copy]).eql([1, 2, 3]);
|
|
18
|
+
orig[0] = 0xff;
|
|
19
|
+
expect(copy[0]).not.eql(0xff);
|
|
20
|
+
});
|
|
21
|
+
it('should clone buffer partially', () => {
|
|
22
|
+
const orig = new Uint8Array([1, 2, 3, 4, 5]);
|
|
23
|
+
const copy = cloneBuffer(orig, 1, 4);
|
|
24
|
+
expect([...copy]).eql([2, 3, 4]);
|
|
25
|
+
orig[0] = 0xff;
|
|
26
|
+
expect(copy[0]).not.eql(0xff);
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
describe('concatBuffers', () => {
|
|
30
|
+
it('should concat buffers', () => {
|
|
31
|
+
const buf = concatBuffers([new Uint8Array([1, 2, 3]), new Uint8Array([4, 5, 6])]);
|
|
32
|
+
expect([...buf]).eql([1, 2, 3, 4, 5, 6]);
|
|
33
|
+
});
|
|
34
|
+
it('should create a new buffer', () => {
|
|
35
|
+
const buf1 = new Uint8Array([1, 2, 3]);
|
|
36
|
+
const buf2 = new Uint8Array([4, 5, 6]);
|
|
37
|
+
const buf = concatBuffers([buf1, buf2]);
|
|
38
|
+
buf[0] = 0xff;
|
|
39
|
+
expect(buf1[0]).not.eql(0xff);
|
|
40
|
+
});
|
|
41
|
+
it('should work without native Buffer', () => {
|
|
42
|
+
vi.stubGlobal('Buffer', undefined);
|
|
43
|
+
const buf1 = new Uint8Array([1, 2, 3]);
|
|
44
|
+
const buf2 = new Uint8Array([4, 5, 6]);
|
|
45
|
+
const buf = concatBuffers([buf1, buf2]);
|
|
46
|
+
buf1[0] = 0xff;
|
|
47
|
+
expect([...buf]).eql([1, 2, 3, 4, 5, 6]);
|
|
48
|
+
});
|
|
49
|
+
afterEach(() => void vi.unstubAllGlobals());
|
|
50
|
+
});
|
|
51
|
+
describe('bufferToReversed', () => {
|
|
52
|
+
it('should reverse the buffer', () => {
|
|
53
|
+
const buf = bufferToReversed(new Uint8Array([1, 2, 3, 4, 5, 6]));
|
|
54
|
+
expect([...buf]).eql([6, 5, 4, 3, 2, 1]);
|
|
55
|
+
});
|
|
56
|
+
it('should reverse a part of the buffer', () => {
|
|
57
|
+
const buf = bufferToReversed(new Uint8Array([1, 2, 3, 4, 5, 6]), 1, 5);
|
|
58
|
+
expect([...buf]).eql([5, 4, 3, 2]);
|
|
59
|
+
});
|
|
60
|
+
it('should create a new buffer', () => {
|
|
61
|
+
const buf1 = new Uint8Array([1, 2, 3]);
|
|
62
|
+
const buf2 = bufferToReversed(buf1);
|
|
63
|
+
buf2[0] = 0xff;
|
|
64
|
+
expect([...buf1]).eql([1, 2, 3]);
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
//# sourceMappingURL=buffer-utils.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buffer-utils.test.js","sourceRoot":"","sources":["../../../src/utils/buffer-utils.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { afterEach, describe, expect, it, vi } from 'vitest'\n\nimport { buffersEqual, bufferToReversed, cloneBuffer, concatBuffers } from './buffer-utils.js'\n\ndescribe('buffersEqual', () => {\n it('should return true for equal buffers', () => {\n expect(buffersEqual(new Uint8Array([]), new Uint8Array([]))).is.true\n expect(buffersEqual(new Uint8Array([1, 2, 3]), new Uint8Array([1, 2, 3]))).is.true\n })\n\n it('should return false for non-equal buffers', () => {\n expect(buffersEqual(new Uint8Array([1]), new Uint8Array([]))).is.false\n expect(buffersEqual(new Uint8Array([1, 2, 3]), new Uint8Array([1, 2, 4]))).is.false\n })\n})\n\ndescribe('cloneBuffer', () => {\n it('should clone buffer', () => {\n const orig = new Uint8Array([1, 2, 3])\n const copy = cloneBuffer(orig)\n\n expect([...copy]).eql([1, 2, 3])\n orig[0] = 0xff\n expect(copy[0]).not.eql(0xff)\n })\n\n it('should clone buffer partially', () => {\n const orig = new Uint8Array([1, 2, 3, 4, 5])\n const copy = cloneBuffer(orig, 1, 4)\n\n expect([...copy]).eql([2, 3, 4])\n orig[0] = 0xff\n expect(copy[0]).not.eql(0xff)\n })\n})\n\ndescribe('concatBuffers', () => {\n it('should concat buffers', () => {\n const buf = concatBuffers([new Uint8Array([1, 2, 3]), new Uint8Array([4, 5, 6])])\n\n expect([...buf]).eql([1, 2, 3, 4, 5, 6])\n })\n\n it('should create a new buffer', () => {\n const buf1 = new Uint8Array([1, 2, 3])\n const buf2 = new Uint8Array([4, 5, 6])\n const buf = concatBuffers([buf1, buf2])\n\n buf[0] = 0xff\n expect(buf1[0]).not.eql(0xff)\n })\n\n it('should work without native Buffer', () => {\n vi.stubGlobal('Buffer', undefined)\n const buf1 = new Uint8Array([1, 2, 3])\n const buf2 = new Uint8Array([4, 5, 6])\n const buf = concatBuffers([buf1, buf2])\n\n buf1[0] = 0xff\n\n expect([...buf]).eql([1, 2, 3, 4, 5, 6])\n })\n\n afterEach(() => void vi.unstubAllGlobals())\n})\n\ndescribe('bufferToReversed', () => {\n it('should reverse the buffer', () => {\n const buf = bufferToReversed(new Uint8Array([1, 2, 3, 4, 5, 6]))\n\n expect([...buf]).eql([6, 5, 4, 3, 2, 1])\n })\n\n it('should reverse a part of the buffer', () => {\n const buf = bufferToReversed(new Uint8Array([1, 2, 3, 4, 5, 6]), 1, 5)\n\n expect([...buf]).eql([5, 4, 3, 2])\n })\n\n it('should create a new buffer', () => {\n const buf1 = new Uint8Array([1, 2, 3])\n const buf2 = bufferToReversed(buf1)\n\n buf2[0] = 0xff\n expect([...buf1]).eql([1, 2, 3])\n })\n})\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { ConditionVariable } from './condition-variable.js';
|
|
3
|
+
describe('ConditionVariable', () => {
|
|
4
|
+
it('should correctly unlock execution', async () => {
|
|
5
|
+
const cv = new ConditionVariable();
|
|
6
|
+
setTimeout(() => cv.notify(), 10);
|
|
7
|
+
await cv.wait();
|
|
8
|
+
expect(true).toBeTruthy();
|
|
9
|
+
});
|
|
10
|
+
it('should correctly time out', async () => {
|
|
11
|
+
const cv = new ConditionVariable();
|
|
12
|
+
await cv.wait(10);
|
|
13
|
+
expect(true).toBeTruthy();
|
|
14
|
+
});
|
|
15
|
+
it('should only unlock once', async () => {
|
|
16
|
+
const cv = new ConditionVariable();
|
|
17
|
+
setTimeout(() => {
|
|
18
|
+
cv.notify();
|
|
19
|
+
cv.notify();
|
|
20
|
+
}, 10);
|
|
21
|
+
await cv.wait();
|
|
22
|
+
expect(true).toBeTruthy();
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
//# sourceMappingURL=condition-variable.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"condition-variable.test.js","sourceRoot":"","sources":["../../../src/utils/condition-variable.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAE7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAE3D,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;QAC/C,MAAM,EAAE,GAAG,IAAI,iBAAiB,EAAE,CAAA;QAElC,UAAU,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC,CAAA;QAEjC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAA;QAEf,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,CAAA;IAC7B,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,2BAA2B,EAAE,KAAK,IAAI,EAAE;QACvC,MAAM,EAAE,GAAG,IAAI,iBAAiB,EAAE,CAAA;QAElC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAEjB,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,CAAA;IAC7B,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,yBAAyB,EAAE,KAAK,IAAI,EAAE;QACrC,MAAM,EAAE,GAAG,IAAI,iBAAiB,EAAE,CAAA;QAElC,UAAU,CAAC,GAAG,EAAE;YACZ,EAAE,CAAC,MAAM,EAAE,CAAA;YACX,EAAE,CAAC,MAAM,EAAE,CAAA;QACf,CAAC,EAAE,EAAE,CAAC,CAAA;QAEN,MAAM,EAAE,CAAC,IAAI,EAAE,CAAA;QAEf,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,CAAA;IAC7B,CAAC,CAAC,CAAA;AACN,CAAC,CAAC,CAAA","sourcesContent":["import { describe, expect, it } from 'vitest'\n\nimport { ConditionVariable } from './condition-variable.js'\n\ndescribe('ConditionVariable', () => {\n it('should correctly unlock execution', async () => {\n const cv = new ConditionVariable()\n\n setTimeout(() => cv.notify(), 10)\n\n await cv.wait()\n\n expect(true).toBeTruthy()\n })\n\n it('should correctly time out', async () => {\n const cv = new ConditionVariable()\n\n await cv.wait(10)\n\n expect(true).toBeTruthy()\n })\n\n it('should only unlock once', async () => {\n const cv = new ConditionVariable()\n\n setTimeout(() => {\n cv.notify()\n cv.notify()\n }, 10)\n\n await cv.wait()\n\n expect(true).toBeTruthy()\n })\n})\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { createControllablePromise } from './controllable-promise.js';
|
|
3
|
+
describe('createControllablePromise', () => {
|
|
4
|
+
it('should resolve', async () => {
|
|
5
|
+
const p = createControllablePromise();
|
|
6
|
+
p.resolve(1);
|
|
7
|
+
await expect(p).resolves.toBe(1);
|
|
8
|
+
});
|
|
9
|
+
it('should reject', async () => {
|
|
10
|
+
const p = createControllablePromise();
|
|
11
|
+
p.reject(1);
|
|
12
|
+
await expect(p).rejects.toBe(1);
|
|
13
|
+
});
|
|
14
|
+
});
|
|
15
|
+
//# sourceMappingURL=controllable-promise.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controllable-promise.test.js","sourceRoot":"","sources":["../../../src/utils/controllable-promise.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAE7C,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAA;AAErE,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACvC,EAAE,CAAC,gBAAgB,EAAE,KAAK,IAAI,EAAE;QAC5B,MAAM,CAAC,GAAG,yBAAyB,EAAE,CAAA;QACrC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;QACZ,MAAM,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACpC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,eAAe,EAAE,KAAK,IAAI,EAAE;QAC3B,MAAM,CAAC,GAAG,yBAAyB,EAAE,CAAA;QACrC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QACX,MAAM,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACnC,CAAC,CAAC,CAAA;AACN,CAAC,CAAC,CAAA","sourcesContent":["import { describe, expect, it } from 'vitest'\n\nimport { createControllablePromise } from './controllable-promise.js'\n\ndescribe('createControllablePromise', () => {\n it('should resolve', async () => {\n const p = createControllablePromise()\n p.resolve(1)\n await expect(p).resolves.toBe(1)\n })\n\n it('should reject', async () => {\n const p = createControllablePromise()\n p.reject(1)\n await expect(p).rejects.toBe(1)\n })\n})\n"]}
|
|
@@ -1,23 +1,30 @@
|
|
|
1
1
|
import { MaybeAsync } from '../../types/index.js';
|
|
2
2
|
export interface IEncryptionScheme {
|
|
3
|
-
encrypt(data: Uint8Array):
|
|
4
|
-
decrypt(data: Uint8Array):
|
|
3
|
+
encrypt(data: Uint8Array): Uint8Array;
|
|
4
|
+
decrypt(data: Uint8Array): Uint8Array;
|
|
5
|
+
}
|
|
6
|
+
export interface IAesCtr {
|
|
7
|
+
process(data: Uint8Array): Uint8Array;
|
|
8
|
+
close?(): void;
|
|
5
9
|
}
|
|
6
10
|
export interface ICryptoProvider {
|
|
7
11
|
initialize?(): MaybeAsync<void>;
|
|
8
|
-
sha1(data: Uint8Array):
|
|
9
|
-
sha256(data: Uint8Array):
|
|
12
|
+
sha1(data: Uint8Array): Uint8Array;
|
|
13
|
+
sha256(data: Uint8Array): Uint8Array;
|
|
10
14
|
pbkdf2(password: Uint8Array, salt: Uint8Array, iterations: number, keylen?: number, // = 64
|
|
11
15
|
algo?: string): MaybeAsync<Uint8Array>;
|
|
12
16
|
hmacSha256(data: Uint8Array, key: Uint8Array): MaybeAsync<Uint8Array>;
|
|
13
|
-
createAesCtr(key: Uint8Array, iv: Uint8Array, encrypt: boolean):
|
|
14
|
-
createAesIge(key: Uint8Array, iv: Uint8Array):
|
|
15
|
-
createAesEcb(key: Uint8Array): MaybeAsync<IEncryptionScheme>;
|
|
17
|
+
createAesCtr(key: Uint8Array, iv: Uint8Array, encrypt: boolean): IAesCtr;
|
|
18
|
+
createAesIge(key: Uint8Array, iv: Uint8Array): IEncryptionScheme;
|
|
16
19
|
factorizePQ(pq: Uint8Array): MaybeAsync<[Uint8Array, Uint8Array]>;
|
|
20
|
+
gzip(data: Uint8Array, maxSize: number): Uint8Array | null;
|
|
21
|
+
gunzip(data: Uint8Array): Uint8Array;
|
|
22
|
+
randomFill(buf: Uint8Array): void;
|
|
23
|
+
randomBytes(size: number): Uint8Array;
|
|
17
24
|
}
|
|
18
25
|
export declare abstract class BaseCryptoProvider {
|
|
19
|
-
|
|
26
|
+
abstract randomFill(buf: Uint8Array): void;
|
|
20
27
|
factorizePQ(pq: Uint8Array): [Uint8Array, Uint8Array];
|
|
21
|
-
|
|
28
|
+
randomBytes(size: number): Uint8Array;
|
|
22
29
|
}
|
|
23
30
|
export type CryptoProviderFactory = () => ICryptoProvider;
|
|
@@ -1,15 +1,12 @@
|
|
|
1
|
-
import { AesModeOfOperationIge } from './common.js';
|
|
2
1
|
import { factorizePQSync } from './factorization.js';
|
|
3
2
|
export class BaseCryptoProvider {
|
|
4
|
-
createAesIge(key, iv) {
|
|
5
|
-
const ecb = this.createAesEcb(key);
|
|
6
|
-
if ('then' in ecb) {
|
|
7
|
-
return ecb.then((ecb) => new AesModeOfOperationIge(key, iv, ecb));
|
|
8
|
-
}
|
|
9
|
-
return new AesModeOfOperationIge(key, iv, ecb);
|
|
10
|
-
}
|
|
11
3
|
factorizePQ(pq) {
|
|
12
|
-
return factorizePQSync(pq);
|
|
4
|
+
return factorizePQSync(this, pq);
|
|
5
|
+
}
|
|
6
|
+
randomBytes(size) {
|
|
7
|
+
const buf = new Uint8Array(size);
|
|
8
|
+
this.randomFill(buf);
|
|
9
|
+
return buf;
|
|
13
10
|
}
|
|
14
11
|
}
|
|
15
12
|
//# sourceMappingURL=abstract.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"abstract.js","sourceRoot":"","sources":["../../../../src/utils/crypto/abstract.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"abstract.js","sourceRoot":"","sources":["../../../../src/utils/crypto/abstract.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AA0CpD,MAAM,OAAgB,kBAAkB;IAGpC,WAAW,CAAC,EAAc;QACtB,OAAO,eAAe,CAAC,IAAkC,EAAE,EAAE,CAAC,CAAA;IAClE,CAAC;IAED,WAAW,CAAC,IAAY;QACpB,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,CAAA;QAChC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;QAEpB,OAAO,GAAG,CAAA;IACd,CAAC;CACJ","sourcesContent":["import { MaybeAsync } from '../../types/index.js'\nimport { factorizePQSync } from './factorization.js'\n\nexport interface IEncryptionScheme {\n encrypt(data: Uint8Array): Uint8Array\n decrypt(data: Uint8Array): Uint8Array\n}\n\nexport interface IAesCtr {\n process(data: Uint8Array): Uint8Array\n close?(): void\n}\n\nexport interface ICryptoProvider {\n initialize?(): MaybeAsync<void>\n\n sha1(data: Uint8Array): Uint8Array\n\n sha256(data: Uint8Array): Uint8Array\n\n pbkdf2(\n password: Uint8Array,\n salt: Uint8Array,\n iterations: number,\n keylen?: number, // = 64\n algo?: string, // sha1 or sha512 (default sha512)\n ): MaybeAsync<Uint8Array>\n\n hmacSha256(data: Uint8Array, key: Uint8Array): MaybeAsync<Uint8Array>\n\n createAesCtr(key: Uint8Array, iv: Uint8Array, encrypt: boolean): IAesCtr\n\n createAesIge(key: Uint8Array, iv: Uint8Array): IEncryptionScheme\n\n factorizePQ(pq: Uint8Array): MaybeAsync<[Uint8Array, Uint8Array]>\n\n gzip(data: Uint8Array, maxSize: number): Uint8Array | null\n gunzip(data: Uint8Array): Uint8Array\n\n randomFill(buf: Uint8Array): void\n randomBytes(size: number): Uint8Array\n}\n\nexport abstract class BaseCryptoProvider {\n abstract randomFill(buf: Uint8Array): void\n\n factorizePQ(pq: Uint8Array) {\n return factorizePQSync(this as unknown as ICryptoProvider, pq)\n }\n\n randomBytes(size: number) {\n const buf = new Uint8Array(size)\n this.randomFill(buf)\n\n return buf\n }\n}\n\nexport type CryptoProviderFactory = () => ICryptoProvider\n"]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import { ICryptoProvider } from './abstract.js';
|
|
1
2
|
/**
|
|
2
3
|
* Factorize `p*q` to `p` and `q` synchronously using Brent-Pollard rho algorithm
|
|
3
4
|
* @param pq
|
|
4
5
|
*/
|
|
5
|
-
export declare function factorizePQSync(pq: Uint8Array): [Uint8Array, Uint8Array];
|
|
6
|
+
export declare function factorizePQSync(crypto: ICryptoProvider, pq: Uint8Array): [Uint8Array, Uint8Array];
|
|
@@ -1,16 +1,15 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { bigIntToBuffer, bufferToBigInt, randomBigIntInRange } from '../bigint-utils.js';
|
|
1
|
+
import { bigIntAbs, bigIntGcd, bigIntMin, bigIntToBuffer, bufferToBigInt, randomBigIntInRange, } from '../bigint-utils.js';
|
|
3
2
|
/**
|
|
4
3
|
* Factorize `p*q` to `p` and `q` synchronously using Brent-Pollard rho algorithm
|
|
5
4
|
* @param pq
|
|
6
5
|
*/
|
|
7
|
-
export function factorizePQSync(pq) {
|
|
6
|
+
export function factorizePQSync(crypto, pq) {
|
|
8
7
|
const pq_ = bufferToBigInt(pq);
|
|
9
|
-
const n = PollardRhoBrent(pq_);
|
|
10
|
-
const m = pq_
|
|
8
|
+
const n = PollardRhoBrent(crypto, pq_);
|
|
9
|
+
const m = pq_ / n;
|
|
11
10
|
let p;
|
|
12
11
|
let q;
|
|
13
|
-
if (n
|
|
12
|
+
if (n < m) {
|
|
14
13
|
p = n;
|
|
15
14
|
q = m;
|
|
16
15
|
}
|
|
@@ -20,42 +19,38 @@ export function factorizePQSync(pq) {
|
|
|
20
19
|
}
|
|
21
20
|
return [bigIntToBuffer(p), bigIntToBuffer(q)];
|
|
22
21
|
}
|
|
23
|
-
function PollardRhoBrent(n) {
|
|
24
|
-
if (n
|
|
25
|
-
return
|
|
26
|
-
let y = randomBigIntInRange(n
|
|
27
|
-
const c = randomBigIntInRange(n
|
|
28
|
-
const m = randomBigIntInRange(n
|
|
29
|
-
let g =
|
|
30
|
-
let r =
|
|
31
|
-
let q =
|
|
22
|
+
function PollardRhoBrent(crypto, n) {
|
|
23
|
+
if (n % 2n === 0n)
|
|
24
|
+
return 2n;
|
|
25
|
+
let y = randomBigIntInRange(crypto, n - 1n);
|
|
26
|
+
const c = randomBigIntInRange(crypto, n - 1n);
|
|
27
|
+
const m = randomBigIntInRange(crypto, n - 1n);
|
|
28
|
+
let g = 1n;
|
|
29
|
+
let r = 1n;
|
|
30
|
+
let q = 1n;
|
|
32
31
|
let ys;
|
|
33
32
|
let x;
|
|
34
|
-
while (g
|
|
33
|
+
while (g === 1n) {
|
|
35
34
|
x = y;
|
|
36
|
-
for (let i = 0; r
|
|
37
|
-
y =
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
while (k.lt(r) && g.eq(1)) {
|
|
35
|
+
for (let i = 0; r >= i; i++)
|
|
36
|
+
y = (((y * y) % n) + c) % n;
|
|
37
|
+
let k = 0n;
|
|
38
|
+
while (k < r && g === 1n) {
|
|
41
39
|
ys = y;
|
|
42
|
-
for (let i =
|
|
43
|
-
y =
|
|
44
|
-
q = q
|
|
45
|
-
// y = (y * y % n + c) % n
|
|
46
|
-
// q = q * abs(x - y) % n
|
|
40
|
+
for (let i = 0n; i < bigIntMin(m, r - k); i++) {
|
|
41
|
+
y = (((y * y) % n) + c) % n;
|
|
42
|
+
q = (q * bigIntAbs(x - y)) % n;
|
|
47
43
|
}
|
|
48
|
-
g =
|
|
49
|
-
k = k
|
|
44
|
+
g = bigIntGcd(q, n);
|
|
45
|
+
k = k + m;
|
|
50
46
|
}
|
|
51
|
-
r
|
|
47
|
+
r <<= 1n;
|
|
52
48
|
}
|
|
53
|
-
if (g
|
|
49
|
+
if (g === n) {
|
|
54
50
|
do {
|
|
55
|
-
ys =
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
} while (g.leq(bigInt.one));
|
|
51
|
+
ys = (((ys * ys) % n) + c) % n;
|
|
52
|
+
g = bigIntGcd(x - ys, n);
|
|
53
|
+
} while (g <= 1n);
|
|
59
54
|
}
|
|
60
55
|
return g;
|
|
61
56
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factorization.js","sourceRoot":"","sources":["../../../../src/utils/crypto/factorization.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"factorization.js","sourceRoot":"","sources":["../../../../src/utils/crypto/factorization.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,SAAS,EACT,SAAS,EACT,SAAS,EACT,cAAc,EACd,cAAc,EACd,mBAAmB,GACtB,MAAM,oBAAoB,CAAA;AAG3B;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,MAAuB,EAAE,EAAc;IACnE,MAAM,GAAG,GAAG,cAAc,CAAC,EAAE,CAAC,CAAA;IAE9B,MAAM,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACtC,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC,CAAA;IAEjB,IAAI,CAAC,CAAA;IACL,IAAI,CAAC,CAAA;IAEL,IAAI,CAAC,GAAG,CAAC,EAAE;QACP,CAAC,GAAG,CAAC,CAAA;QACL,CAAC,GAAG,CAAC,CAAA;KACR;SAAM;QACH,CAAC,GAAG,CAAC,CAAA;QACL,CAAC,GAAG,CAAC,CAAA;KACR;IAED,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,CAAA;AACjD,CAAC;AAED,SAAS,eAAe,CAAC,MAAuB,EAAE,CAAS;IACvD,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE;QAAE,OAAO,EAAE,CAAA;IAE5B,IAAI,CAAC,GAAG,mBAAmB,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,CAAA;IAC3C,MAAM,CAAC,GAAG,mBAAmB,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,CAAA;IAC7C,MAAM,CAAC,GAAG,mBAAmB,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,CAAA;IAC7C,IAAI,CAAC,GAAG,EAAE,CAAA;IACV,IAAI,CAAC,GAAG,EAAE,CAAA;IACV,IAAI,CAAC,GAAG,EAAE,CAAA;IAEV,IAAI,EAAU,CAAA;IACd,IAAI,CAAS,CAAA;IAEb,OAAO,CAAC,KAAK,EAAE,EAAE;QACb,CAAC,GAAG,CAAC,CAAA;QACL,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;YAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA;QAExD,IAAI,CAAC,GAAG,EAAE,CAAA;QAEV,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE;YACtB,EAAE,GAAG,CAAC,CAAA;YAEN,KAAK,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBAC3C,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA;gBAC3B,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;aACjC;YAED,CAAC,GAAG,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;YACnB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;SACZ;QAED,CAAC,KAAK,EAAE,CAAA;KACX;IAED,IAAI,CAAC,KAAK,CAAC,EAAE;QACT,GAAG;YACC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAG,GAAG,EAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA;YAEhC,CAAC,GAAG,SAAS,CAAC,CAAE,GAAG,EAAG,EAAE,CAAC,CAAC,CAAA;SAC7B,QAAQ,CAAC,IAAI,EAAE,EAAC;KACpB;IAED,OAAO,CAAC,CAAA;AACZ,CAAC","sourcesContent":["import {\n bigIntAbs,\n bigIntGcd,\n bigIntMin,\n bigIntToBuffer,\n bufferToBigInt,\n randomBigIntInRange,\n} from '../bigint-utils.js'\nimport { ICryptoProvider } from './abstract.js'\n\n/**\n * Factorize `p*q` to `p` and `q` synchronously using Brent-Pollard rho algorithm\n * @param pq\n */\nexport function factorizePQSync(crypto: ICryptoProvider, pq: Uint8Array): [Uint8Array, Uint8Array] {\n const pq_ = bufferToBigInt(pq)\n\n const n = PollardRhoBrent(crypto, pq_)\n const m = pq_ / n\n\n let p\n let q\n\n if (n < m) {\n p = n\n q = m\n } else {\n p = m\n q = n\n }\n\n return [bigIntToBuffer(p), bigIntToBuffer(q)]\n}\n\nfunction PollardRhoBrent(crypto: ICryptoProvider, n: bigint): bigint {\n if (n % 2n === 0n) return 2n\n\n let y = randomBigIntInRange(crypto, n - 1n)\n const c = randomBigIntInRange(crypto, n - 1n)\n const m = randomBigIntInRange(crypto, n - 1n)\n let g = 1n\n let r = 1n\n let q = 1n\n\n let ys: bigint\n let x: bigint\n\n while (g === 1n) {\n x = y\n for (let i = 0; r >= i; i++) y = (((y * y) % n) + c) % n\n\n let k = 0n\n\n while (k < r && g === 1n) {\n ys = y\n\n for (let i = 0n; i < bigIntMin(m, r - k); i++) {\n y = (((y * y) % n) + c) % n\n q = (q * bigIntAbs(x - y)) % n\n }\n\n g = bigIntGcd(q, n)\n k = k + m\n }\n\n r <<= 1n\n }\n\n if (g === n) {\n do {\n ys = (((ys! * ys!) % n) + c) % n\n\n g = bigIntGcd(x! - ys!, n)\n } while (g <= 1n)\n }\n\n return g\n}\n"]}
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
export * from './abstract.js';
|
|
2
|
+
export * from './factorization.js';
|
|
2
3
|
export * from './keys.js';
|
|
4
|
+
export * from './miller-rabin.js';
|
|
5
|
+
export * from './mtproto.js';
|
|
3
6
|
export * from './password.js';
|
|
7
|
+
export * from './utils.js';
|
|
4
8
|
import { CryptoProviderFactory } from './abstract.js';
|
|
5
9
|
export declare const defaultCryptoProviderFactory: CryptoProviderFactory;
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
export * from './abstract.js';
|
|
2
|
+
export * from './factorization.js';
|
|
2
3
|
export * from './keys.js';
|
|
4
|
+
export * from './miller-rabin.js';
|
|
5
|
+
export * from './mtproto.js';
|
|
3
6
|
export * from './password.js';
|
|
7
|
+
export * from './utils.js';
|
|
4
8
|
import { _defaultCryptoProviderFactory } from '../platform/crypto.js';
|
|
5
9
|
export const defaultCryptoProviderFactory = _defaultCryptoProviderFactory;
|
|
6
10
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/utils/crypto/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA;AAC7B,cAAc,WAAW,CAAA;AACzB,cAAc,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/utils/crypto/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA;AAC7B,cAAc,oBAAoB,CAAA;AAClC,cAAc,WAAW,CAAA;AACzB,cAAc,mBAAmB,CAAA;AACjC,cAAc,cAAc,CAAA;AAC5B,cAAc,eAAe,CAAA;AAC7B,cAAc,YAAY,CAAA;AAE1B,OAAO,EAAE,6BAA6B,EAAE,MAAM,uBAAuB,CAAA;AAGrE,MAAM,CAAC,MAAM,4BAA4B,GAA0B,6BAA6B,CAAA","sourcesContent":["export * from './abstract.js'\nexport * from './factorization.js'\nexport * from './keys.js'\nexport * from './miller-rabin.js'\nexport * from './mtproto.js'\nexport * from './password.js'\nexport * from './utils.js'\n\nimport { _defaultCryptoProviderFactory } from '../platform/crypto.js'\nimport { CryptoProviderFactory } from './abstract.js'\n\nexport const defaultCryptoProviderFactory: CryptoProviderFactory = _defaultCryptoProviderFactory\n"]}
|
|
@@ -9,7 +9,7 @@ import { ICryptoProvider } from './abstract.js';
|
|
|
9
9
|
* @param key PEM-encoded RSA public key
|
|
10
10
|
* @param old Whether this is an "old" key
|
|
11
11
|
*/
|
|
12
|
-
export declare function parsePublicKey(crypto: ICryptoProvider, key: string, old?: boolean):
|
|
12
|
+
export declare function parsePublicKey(crypto: ICryptoProvider, key: string, old?: boolean): TlPublicKey;
|
|
13
13
|
/**
|
|
14
14
|
* Add public key to the global index.
|
|
15
15
|
*
|
|
@@ -17,7 +17,7 @@ export declare function parsePublicKey(crypto: ICryptoProvider, key: string, old
|
|
|
17
17
|
* @param key PEM-encoded RSA public key
|
|
18
18
|
* @param old Whether this is an "old" key
|
|
19
19
|
*/
|
|
20
|
-
export declare function addPublicKey(crypto: ICryptoProvider, key: string, old?: boolean):
|
|
20
|
+
export declare function addPublicKey(crypto: ICryptoProvider, key: string, old?: boolean): void;
|
|
21
21
|
/**
|
|
22
22
|
* Get public key by its fingerprint.
|
|
23
23
|
*
|
package/esm/utils/crypto/keys.js
CHANGED
|
@@ -9,7 +9,7 @@ import { parseAsn1, parsePemContents } from '../binary/asn1-parser.js';
|
|
|
9
9
|
* @param key PEM-encoded RSA public key
|
|
10
10
|
* @param old Whether this is an "old" key
|
|
11
11
|
*/
|
|
12
|
-
export
|
|
12
|
+
export function parsePublicKey(crypto, key, old = false) {
|
|
13
13
|
const asn1 = parseAsn1(parsePemContents(key));
|
|
14
14
|
const modulus = asn1.children?.[0].value;
|
|
15
15
|
const exponent = asn1.children?.[1].value;
|
|
@@ -20,7 +20,7 @@ export async function parsePublicKey(crypto, key, old = false) {
|
|
|
20
20
|
writer.bytes(modulus);
|
|
21
21
|
writer.bytes(exponent);
|
|
22
22
|
const data = writer.result();
|
|
23
|
-
const sha =
|
|
23
|
+
const sha = crypto.sha1(data);
|
|
24
24
|
const fp = hexEncode(sha.slice(-8).reverse());
|
|
25
25
|
return {
|
|
26
26
|
modulus: hexEncode(modulus),
|
|
@@ -36,8 +36,8 @@ export async function parsePublicKey(crypto, key, old = false) {
|
|
|
36
36
|
* @param key PEM-encoded RSA public key
|
|
37
37
|
* @param old Whether this is an "old" key
|
|
38
38
|
*/
|
|
39
|
-
export
|
|
40
|
-
const parsed =
|
|
39
|
+
export function addPublicKey(crypto, key, old = false) {
|
|
40
|
+
const parsed = parsePublicKey(crypto, key, old);
|
|
41
41
|
keysIndex[parsed.fingerprint] = parsed;
|
|
42
42
|
}
|
|
43
43
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keys.js","sourceRoot":"","sources":["../../../../src/utils/crypto/keys.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,IAAI,SAAS,EAAe,MAAM,+BAA+B,CAAA;AAC1F,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAE9D,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAGtE;;;;;;;GAOG;AACH,MAAM,
|
|
1
|
+
{"version":3,"file":"keys.js","sourceRoot":"","sources":["../../../../src/utils/crypto/keys.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,IAAI,SAAS,EAAe,MAAM,+BAA+B,CAAA;AAC1F,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAE9D,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAGtE;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAAC,MAAuB,EAAE,GAAW,EAAE,GAAG,GAAG,KAAK;IAC5E,MAAM,IAAI,GAAG,SAAS,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAA;IAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;IACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;IACzC,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAA;IAEhE,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IACzC,yDAAyD;IACzD,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IACrB,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;IAEtB,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,CAAA;IAC5B,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC7B,MAAM,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;IAE7C,OAAO;QACH,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC;QAC3B,QAAQ,EAAE,SAAS,CAAC,QAAQ,CAAC;QAC7B,WAAW,EAAE,EAAE;QACf,GAAG;KACN,CAAA;AACL,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,MAAuB,EAAE,GAAW,EAAE,GAAG,GAAG,KAAK;IAC1E,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;IAC/C,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,MAAM,CAAA;AAC1C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,YAA+B,EAAE,QAAQ,GAAG,KAAK;IACnF,KAAK,IAAI,EAAE,IAAI,YAAY,EAAE;QACzB,IAAI,OAAO,EAAE,KAAK,QAAQ,EAAE;YACxB,EAAE,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;SACpC;QACD,IAAI,EAAE,IAAI,SAAS,EAAE;YACjB,IAAI,SAAS,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ;gBAAE,SAAQ;YAE5C,OAAO,SAAS,CAAC,EAAE,CAAC,CAAA;SACvB;KACJ;IACD,IAAI,CAAC,QAAQ;QAAE,OAAO,qBAAqB,CAAC,YAAY,EAAE,IAAI,CAAC,CAAA;IAE/D,OAAO,IAAI,CAAA;AACf,CAAC","sourcesContent":["import Long from 'long'\n\nimport { __publicKeyIndex as keysIndex, TlPublicKey } from '@mtcute/tl/binary/rsa-keys.js'\nimport { hexEncode, TlBinaryWriter } from '@mtcute/tl-runtime'\n\nimport { parseAsn1, parsePemContents } from '../binary/asn1-parser.js'\nimport { ICryptoProvider } from './abstract.js'\n\n/**\n * Parse PEM-encoded RSA public key information into modulus and exponent\n * and compute its fingerprint as defined by MTProto.\n *\n * @param crypto Crypto provider\n * @param key PEM-encoded RSA public key\n * @param old Whether this is an \"old\" key\n */\nexport function parsePublicKey(crypto: ICryptoProvider, key: string, old = false): TlPublicKey {\n const asn1 = parseAsn1(parsePemContents(key))\n const modulus = asn1.children?.[0].value\n const exponent = asn1.children?.[1].value\n if (!modulus || !exponent) throw new Error('Invalid public key')\n\n const writer = TlBinaryWriter.manual(512)\n // they are actually smaller, about 270 bytes, but idc :D\n writer.bytes(modulus)\n writer.bytes(exponent)\n\n const data = writer.result()\n const sha = crypto.sha1(data)\n const fp = hexEncode(sha.slice(-8).reverse())\n\n return {\n modulus: hexEncode(modulus),\n exponent: hexEncode(exponent),\n fingerprint: fp,\n old,\n }\n}\n\n/**\n * Add public key to the global index.\n *\n * @param crypto Crypto provider\n * @param key PEM-encoded RSA public key\n * @param old Whether this is an \"old\" key\n */\nexport function addPublicKey(crypto: ICryptoProvider, key: string, old = false): void {\n const parsed = parsePublicKey(crypto, key, old)\n keysIndex[parsed.fingerprint] = parsed\n}\n\n/**\n * Get public key by its fingerprint.\n *\n * @param fingerprints Fingerprints to match. The first one to match is returned.\n * @param allowOld Whether to allow \"old\" keys\n */\nexport function findKeyByFingerprints(fingerprints: (string | Long)[], allowOld = false): TlPublicKey | null {\n for (let fp of fingerprints) {\n if (typeof fp !== 'string') {\n fp = fp.toUnsigned().toString(16)\n }\n if (fp in keysIndex) {\n if (keysIndex[fp].old && !allowOld) continue\n\n return keysIndex[fp]\n }\n }\n if (!allowOld) return findKeyByFingerprints(fingerprints, true)\n\n return null\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { findKeyByFingerprints, parsePublicKey } from '../index.js';
|
|
3
|
+
import { NodeCryptoProvider } from './node.js';
|
|
4
|
+
const crypto = new NodeCryptoProvider();
|
|
5
|
+
describe('parsePublicKey', () => {
|
|
6
|
+
it('should parse telegram public keys', () => {
|
|
7
|
+
expect(parsePublicKey(crypto, `-----BEGIN RSA PUBLIC KEY-----
|
|
8
|
+
MIIBCgKCAQEAruw2yP/BCcsJliRoW5eBVBVle9dtjJw+OYED160Wybum9SXtBBLX
|
|
9
|
+
riwt4rROd9csv0t0OHCaTmRqBcQ0J8fxhN6/cpR1GWgOZRUAiQxoMnlt0R93LCX/
|
|
10
|
+
j1dnVa/gVbCjdSxpbrfY2g2L4frzjJvdl84Kd9ORYjDEAyFnEA7dD556OptgLQQ2
|
|
11
|
+
e2iVNq8NZLYTzLp5YpOdO1doK+ttrltggTCy5SrKeLoCPPbOgGsdxJxyz5KKcZnS
|
|
12
|
+
Lj16yE5HvJQn0CNpRdENvRUXe6tBP78O39oJ8BTHp9oIjd6XWXAsp2CvK45Ol8wF
|
|
13
|
+
XGF710w9lwCGNbmNxNYhtIkdqfsEcwR5JwIDAQAB
|
|
14
|
+
-----END RSA PUBLIC KEY-----`)).eql({
|
|
15
|
+
modulus: 'aeec36c8ffc109cb099624685b97815415657bd76d8c9c3e398103d7ad16c9bba6f525ed0412d7ae2c2de2b44e77d72cbf4b7438709a4e646a05c43427c7f184debf72947519680e651500890c6832796dd11f772c25ff8f576755afe055b0a3752c696eb7d8da0d8be1faf38c9bdd97ce0a77d3916230c4032167100edd0f9e7a3a9b602d04367b689536af0d64b613ccba7962939d3b57682beb6dae5b608130b2e52aca78ba023cf6ce806b1dc49c72cf928a7199d22e3d7ac84e47bc9427d0236945d10dbd15177bab413fbf0edfda09f014c7a7da088dde9759702ca760af2b8e4e97cc055c617bd74c3d97008635b98dc4d621b4891da9fb0473047927',
|
|
16
|
+
exponent: '010001',
|
|
17
|
+
fingerprint: '0bc35f3509f7b7a5',
|
|
18
|
+
old: false,
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
it('should be able to find a key by its fingerprint', () => {
|
|
22
|
+
expect(findKeyByFingerprints(['b25898df208d2603'])).toMatchInlineSnapshot(`
|
|
23
|
+
{
|
|
24
|
+
"exponent": "010001",
|
|
25
|
+
"fingerprint": "b25898df208d2603",
|
|
26
|
+
"modulus": "c8c11d635691fac091dd9489aedced2932aa8a0bcefef05fa800892d9b52ed03200865c9e97211cb2ee6c7ae96d3fb0e15aeffd66019b44a08a240cfdd2868a85e1f54d6fa5deaa041f6941ddf302690d61dc476385c2fa655142353cb4e4b59f6e5b6584db76fe8b1370263246c010c93d011014113ebdf987d093f9d37c2be48352d69a1683f8f6e6c2167983c761e3ab169fde5daaa12123fa1beab621e4da5935e9c198f82f35eae583a99386d8110ea6bd1abb0f568759f62694419ea5f69847c43462abef858b4cb5edc84e7b9226cd7bd7e183aa974a712c079dde85b9dc063b8a5c08e8f859c0ee5dcd824c7807f20153361a7f63cfd2a433a1be7f5",
|
|
27
|
+
"old": false,
|
|
28
|
+
}
|
|
29
|
+
`);
|
|
30
|
+
});
|
|
31
|
+
it('should prefer new keys over old', () => {
|
|
32
|
+
expect(findKeyByFingerprints(['71e025b6c76033e3', 'b25898df208d2603'])?.fingerprint).toEqual('b25898df208d2603');
|
|
33
|
+
});
|
|
34
|
+
it('should return null if not found', () => {
|
|
35
|
+
expect(findKeyByFingerprints(['deadbeefdeadbeef'])).toBeNull();
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
//# sourceMappingURL=keys.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keys.test.js","sourceRoot":"","sources":["../../../../src/utils/crypto/keys.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAE7C,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAA;AAE9C,MAAM,MAAM,GAAG,IAAI,kBAAkB,EAAE,CAAA;AAEvC,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC5B,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QACzC,MAAM,CACF,cAAc,CACV,MAAM,EACN;;;;;;;6BAOa,CAChB,CACJ,CAAC,GAAG,CAAC;YACF,OAAO,EACH,kgBAAkgB;YACtgB,QAAQ,EAAE,QAAQ;YAClB,WAAW,EAAE,kBAAkB;YAC/B,GAAG,EAAE,KAAK;SACb,CAAC,CAAA;IACN,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACvD,MAAM,CAAC,qBAAqB,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC;;;;;;;SAOzE,CAAC,CAAA;IACN,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACvC,MAAM,CAAC,qBAAqB,CAAC,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAA;IACpH,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACvC,MAAM,CAAC,qBAAqB,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;IAClE,CAAC,CAAC,CAAA;AACN,CAAC,CAAC,CAAA","sourcesContent":["import { describe, expect, it } from 'vitest'\n\nimport { findKeyByFingerprints, parsePublicKey } from '../index.js'\nimport { NodeCryptoProvider } from './node.js'\n\nconst crypto = new NodeCryptoProvider()\n\ndescribe('parsePublicKey', () => {\n it('should parse telegram public keys', () => {\n expect(\n parsePublicKey(\n crypto,\n `-----BEGIN RSA PUBLIC KEY-----\nMIIBCgKCAQEAruw2yP/BCcsJliRoW5eBVBVle9dtjJw+OYED160Wybum9SXtBBLX\nriwt4rROd9csv0t0OHCaTmRqBcQ0J8fxhN6/cpR1GWgOZRUAiQxoMnlt0R93LCX/\nj1dnVa/gVbCjdSxpbrfY2g2L4frzjJvdl84Kd9ORYjDEAyFnEA7dD556OptgLQQ2\ne2iVNq8NZLYTzLp5YpOdO1doK+ttrltggTCy5SrKeLoCPPbOgGsdxJxyz5KKcZnS\nLj16yE5HvJQn0CNpRdENvRUXe6tBP78O39oJ8BTHp9oIjd6XWXAsp2CvK45Ol8wF\nXGF710w9lwCGNbmNxNYhtIkdqfsEcwR5JwIDAQAB\n-----END RSA PUBLIC KEY-----`,\n ),\n ).eql({\n modulus:\n 'aeec36c8ffc109cb099624685b97815415657bd76d8c9c3e398103d7ad16c9bba6f525ed0412d7ae2c2de2b44e77d72cbf4b7438709a4e646a05c43427c7f184debf72947519680e651500890c6832796dd11f772c25ff8f576755afe055b0a3752c696eb7d8da0d8be1faf38c9bdd97ce0a77d3916230c4032167100edd0f9e7a3a9b602d04367b689536af0d64b613ccba7962939d3b57682beb6dae5b608130b2e52aca78ba023cf6ce806b1dc49c72cf928a7199d22e3d7ac84e47bc9427d0236945d10dbd15177bab413fbf0edfda09f014c7a7da088dde9759702ca760af2b8e4e97cc055c617bd74c3d97008635b98dc4d621b4891da9fb0473047927',\n exponent: '010001',\n fingerprint: '0bc35f3509f7b7a5',\n old: false,\n })\n })\n\n it('should be able to find a key by its fingerprint', () => {\n expect(findKeyByFingerprints(['b25898df208d2603'])).toMatchInlineSnapshot(`\n {\n \"exponent\": \"010001\",\n \"fingerprint\": \"b25898df208d2603\",\n \"modulus\": \"c8c11d635691fac091dd9489aedced2932aa8a0bcefef05fa800892d9b52ed03200865c9e97211cb2ee6c7ae96d3fb0e15aeffd66019b44a08a240cfdd2868a85e1f54d6fa5deaa041f6941ddf302690d61dc476385c2fa655142353cb4e4b59f6e5b6584db76fe8b1370263246c010c93d011014113ebdf987d093f9d37c2be48352d69a1683f8f6e6c2167983c761e3ab169fde5daaa12123fa1beab621e4da5935e9c198f82f35eae583a99386d8110ea6bd1abb0f568759f62694419ea5f69847c43462abef858b4cb5edc84e7b9226cd7bd7e183aa974a712c079dde85b9dc063b8a5c08e8f859c0ee5dcd824c7807f20153361a7f63cfd2a433a1be7f5\",\n \"old\": false,\n }\n `)\n })\n\n it('should prefer new keys over old', () => {\n expect(findKeyByFingerprints(['71e025b6c76033e3', 'b25898df208d2603'])?.fingerprint).toEqual('b25898df208d2603')\n })\n\n it('should return null if not found', () => {\n expect(findKeyByFingerprints(['deadbeefdeadbeef'])).toBeNull()\n })\n})\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export declare function millerRabin(n:
|
|
1
|
+
import { ICryptoProvider } from './abstract.js';
|
|
2
|
+
export declare function millerRabin(crypto: ICryptoProvider, n: bigint, rounds?: number): boolean;
|