@mtkruto/browser 0.0.991 → 0.0.992
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/esm/1_utilities.d.ts +12 -0
- package/esm/1_utilities.js +12 -0
- package/esm/2_connection.d.ts +2 -0
- package/esm/2_connection.js +2 -0
- package/esm/2_tl.d.ts +10 -0
- package/esm/2_tl.js +10 -0
- package/esm/3_storage.d.ts +6 -0
- package/esm/3_storage.js +6 -0
- package/esm/3_transport.d.ts +4 -0
- package/esm/3_transport.js +4 -0
- package/esm/3_types.d.ts +35 -0
- package/esm/3_types.js +35 -0
- package/esm/{constants.d.ts → 4_constants.d.ts} +2 -2
- package/esm/{constants.js → 4_constants.js} +1 -1
- package/esm/5_client.d.ts +2 -0
- package/esm/5_client.js +2 -0
- package/esm/client/0_html.d.ts +1 -1
- package/esm/client/0_html.js +1 -1
- package/esm/client/0_message.d.ts +1 -2
- package/esm/client/0_message.js +7 -14
- package/esm/client/0_password.d.ts +2 -2
- package/esm/client/0_password.js +2 -4
- package/esm/client/0_utilities.d.ts +3 -5
- package/esm/client/0_utilities.js +3 -22
- package/esm/client/1_client_abstract.d.ts +2 -2
- package/esm/client/1_client_abstract.js +3 -3
- package/esm/client/2_client_plain.d.ts +3 -3
- package/esm/client/2_client_plain.js +13 -20
- package/esm/client/3_client.d.ts +33 -18
- package/esm/client/3_client.js +47 -35
- package/esm/connection/0_connection.d.ts +1 -1
- package/esm/connection/1_connection_web_socket.js +1 -1
- package/esm/mod.d.ts +7 -21
- package/esm/mod.js +7 -21
- package/esm/storage/0_storage.d.ts +4 -5
- package/esm/storage/0_storage.js +3 -8
- package/esm/storage/0_utilities.js +2 -2
- package/esm/storage/1_storage_local_storage.d.ts +1 -1
- package/esm/storage/1_storage_memory.d.ts +1 -1
- package/esm/storage/1_storage_session_storage.d.ts +1 -1
- package/esm/tl/0_tl_raw_reader.js +1 -1
- package/esm/tl/0_tl_raw_writer.js +1 -1
- package/esm/tl/1_tl_object.js +1 -1
- package/esm/tl/3_deserialize.js +1 -1
- package/esm/tl/3_utilities.d.ts +3 -0
- package/esm/tl/3_utilities.js +20 -0
- package/esm/tl/4_tl_writer.js +1 -1
- package/esm/transport/0_obfuscation.d.ts +2 -2
- package/esm/transport/0_obfuscation.js +1 -2
- package/esm/transport/0_transport.d.ts +1 -2
- package/esm/transport/1_transport_abridged.d.ts +1 -1
- package/esm/transport/1_transport_abridged.js +1 -1
- package/esm/transport/1_transport_intermediate.d.ts +1 -1
- package/esm/transport/1_transport_intermediate.js +1 -1
- package/esm/transport/2_transport_provider.d.ts +1 -1
- package/esm/transport/2_transport_provider.js +1 -1
- package/esm/types/!0_file_id.js +6 -9
- package/esm/types/!0_misc.d.ts +7 -0
- package/esm/types/!0_misc.js +1 -0
- package/esm/types/0_audio.d.ts +3 -3
- package/esm/types/0_audio.js +1 -1
- package/esm/types/0_chat_administrator_rights.d.ts +1 -1
- package/esm/types/0_chat_administrator_rights.js +1 -1
- package/esm/types/0_chat_photo.d.ts +3 -3
- package/esm/types/0_chat_photo.js +1 -1
- package/esm/types/0_color.d.ts +2 -0
- package/esm/types/0_color.js +16 -0
- package/esm/types/0_contact.d.ts +2 -2
- package/esm/types/0_dice.d.ts +1 -1
- package/esm/types/0_force_reply.d.ts +1 -1
- package/esm/types/0_force_reply.js +1 -1
- package/esm/types/0_location.d.ts +1 -1
- package/esm/types/0_location.js +1 -2
- package/esm/types/0_mask_position.d.ts +1 -1
- package/esm/types/0_message_entity.d.ts +5 -5
- package/esm/types/0_message_entity.js +1 -1
- package/esm/types/0_poll_option.d.ts +1 -1
- package/esm/types/0_reply_keyboard_remove.d.ts +1 -1
- package/esm/types/0_reply_keyboard_remove.js +2 -2
- package/esm/types/0_thumbnail.d.ts +2 -2
- package/esm/types/0_thumbnail.js +1 -1
- package/esm/types/0_venue.d.ts +1 -1
- package/esm/types/0_venue.js +1 -2
- package/esm/types/0_voice.d.ts +3 -3
- package/esm/types/0_web_app_info.d.ts +2 -2
- package/esm/types/1_animation.d.ts +3 -3
- package/esm/types/1_animation.js +1 -1
- package/esm/types/1_chat.d.ts +5 -4
- package/esm/types/1_chat.js +8 -9
- package/esm/types/1_document.d.ts +4 -4
- package/esm/types/1_document.js +1 -1
- package/esm/types/1_inline_keyboard_button.d.ts +4 -4
- package/esm/types/1_inline_keyboard_button.js +2 -2
- package/esm/types/1_keyboard_button.d.ts +8 -8
- package/esm/types/1_keyboard_button.js +2 -2
- package/esm/types/1_photo.d.ts +2 -2
- package/esm/types/1_photo.js +1 -1
- package/esm/types/1_poll.d.ts +8 -8
- package/esm/types/1_poll.js +1 -1
- package/esm/types/1_sticker.d.ts +3 -3
- package/esm/types/1_sticker.js +1 -2
- package/esm/types/1_user.d.ts +4 -3
- package/esm/types/1_user.js +4 -4
- package/esm/types/1_video.d.ts +3 -3
- package/esm/types/1_video.js +1 -1
- package/esm/types/1_video_note.d.ts +2 -2
- package/esm/types/1_video_note.js +1 -1
- package/esm/types/2_game.d.ts +3 -3
- package/esm/types/2_game.js +2 -3
- package/esm/types/2_inline_keyboard_markup.d.ts +2 -2
- package/esm/types/2_inline_keyboard_markup.js +1 -1
- package/esm/types/2_inline_query.d.ts +19 -0
- package/esm/types/2_inline_query.js +41 -0
- package/esm/types/2_reply_keyboard_markup.d.ts +2 -2
- package/esm/types/2_reply_keyboard_markup.js +1 -1
- package/esm/types/3_message.d.ts +21 -23
- package/esm/types/3_message.js +16 -18
- package/esm/types/4_callback_query.d.ts +14 -0
- package/esm/types/4_callback_query.js +24 -0
- package/esm/utilities/0_base64.js +1 -1
- package/esm/utilities/0_crypto.js +1 -1
- package/esm/utilities/0_queue.js +1 -1
- package/esm/utilities/1_auth.js +1 -1
- package/package.json +1 -1
- package/script/1_utilities.d.ts +12 -0
- package/script/1_utilities.js +28 -0
- package/script/2_connection.d.ts +2 -0
- package/script/2_connection.js +18 -0
- package/script/2_tl.d.ts +10 -0
- package/script/2_tl.js +40 -0
- package/script/3_storage.d.ts +6 -0
- package/script/3_storage.js +22 -0
- package/script/3_transport.d.ts +4 -0
- package/script/3_transport.js +20 -0
- package/script/3_types.d.ts +35 -0
- package/script/3_types.js +51 -0
- package/script/{constants.d.ts → 4_constants.d.ts} +2 -2
- package/script/{constants.js → 4_constants.js} +1 -1
- package/script/5_client.d.ts +2 -0
- package/script/5_client.js +18 -0
- package/script/client/0_html.d.ts +1 -1
- package/script/client/0_html.js +2 -2
- package/script/client/0_message.d.ts +1 -2
- package/script/client/0_message.js +32 -39
- package/script/client/0_password.d.ts +2 -2
- package/script/client/0_password.js +20 -45
- package/script/client/0_utilities.d.ts +3 -5
- package/script/client/0_utilities.js +24 -68
- package/script/client/1_client_abstract.d.ts +2 -2
- package/script/client/1_client_abstract.js +6 -6
- package/script/client/2_client_plain.d.ts +3 -3
- package/script/client/2_client_plain.js +45 -52
- package/script/client/3_client.d.ts +33 -18
- package/script/client/3_client.js +291 -303
- package/script/connection/0_connection.d.ts +1 -1
- package/script/connection/1_connection_web_socket.js +5 -5
- package/script/mod.d.ts +7 -21
- package/script/mod.js +17 -45
- package/script/storage/0_storage.d.ts +4 -5
- package/script/storage/0_storage.js +11 -39
- package/script/storage/0_utilities.js +6 -6
- package/script/storage/1_storage_local_storage.d.ts +1 -1
- package/script/storage/1_storage_memory.d.ts +1 -1
- package/script/storage/1_storage_session_storage.d.ts +1 -1
- package/script/tl/0_tl_raw_reader.js +6 -6
- package/script/tl/0_tl_raw_writer.js +7 -7
- package/script/tl/1_tl_object.js +3 -3
- package/script/tl/3_deserialize.js +2 -2
- package/script/tl/3_utilities.d.ts +3 -0
- package/script/tl/3_utilities.js +48 -0
- package/script/tl/4_tl_writer.js +2 -2
- package/script/transport/0_obfuscation.d.ts +2 -2
- package/script/transport/0_obfuscation.js +5 -6
- package/script/transport/0_transport.d.ts +1 -2
- package/script/transport/1_transport_abridged.d.ts +1 -1
- package/script/transport/1_transport_abridged.js +3 -3
- package/script/transport/1_transport_intermediate.d.ts +1 -1
- package/script/transport/1_transport_intermediate.js +3 -3
- package/script/transport/2_transport_provider.d.ts +1 -1
- package/script/transport/2_transport_provider.js +2 -2
- package/script/types/!0_file_id.js +24 -27
- package/script/types/!0_misc.d.ts +7 -0
- package/script/types/!0_misc.js +2 -0
- package/script/types/0_audio.d.ts +3 -3
- package/script/types/0_audio.js +2 -25
- package/script/types/0_chat_administrator_rights.d.ts +1 -1
- package/script/types/0_chat_administrator_rights.js +2 -25
- package/script/types/0_chat_photo.d.ts +3 -3
- package/script/types/0_chat_photo.js +2 -25
- package/script/types/0_color.d.ts +2 -0
- package/script/types/{!0_id_color.js → 0_color.js} +10 -10
- package/script/types/0_contact.d.ts +2 -2
- package/script/types/0_dice.d.ts +1 -1
- package/script/types/0_force_reply.d.ts +1 -1
- package/script/types/0_force_reply.js +2 -25
- package/script/types/0_location.d.ts +1 -1
- package/script/types/0_location.js +5 -29
- package/script/types/0_mask_position.d.ts +1 -1
- package/script/types/0_message_entity.d.ts +5 -5
- package/script/types/0_message_entity.js +39 -62
- package/script/types/0_poll_option.d.ts +1 -1
- package/script/types/0_reply_keyboard_remove.d.ts +1 -1
- package/script/types/0_reply_keyboard_remove.js +4 -27
- package/script/types/0_thumbnail.d.ts +2 -2
- package/script/types/0_thumbnail.js +2 -25
- package/script/types/0_venue.d.ts +1 -1
- package/script/types/0_venue.js +2 -26
- package/script/types/0_voice.d.ts +3 -3
- package/script/types/0_web_app_info.d.ts +2 -2
- package/script/types/1_animation.d.ts +3 -3
- package/script/types/1_animation.js +2 -25
- package/script/types/1_chat.d.ts +5 -4
- package/script/types/1_chat.js +20 -44
- package/script/types/1_document.d.ts +4 -4
- package/script/types/1_document.js +2 -25
- package/script/types/1_inline_keyboard_button.d.ts +4 -4
- package/script/types/1_inline_keyboard_button.js +19 -42
- package/script/types/1_keyboard_button.d.ts +8 -8
- package/script/types/1_keyboard_button.js +24 -47
- package/script/types/1_photo.d.ts +2 -2
- package/script/types/1_photo.js +4 -27
- package/script/types/1_poll.d.ts +8 -8
- package/script/types/1_poll.js +2 -2
- package/script/types/1_sticker.d.ts +3 -3
- package/script/types/1_sticker.js +6 -30
- package/script/types/1_user.d.ts +4 -3
- package/script/types/1_user.js +6 -29
- package/script/types/1_video.d.ts +3 -3
- package/script/types/1_video.js +2 -25
- package/script/types/1_video_note.d.ts +2 -2
- package/script/types/1_video_note.js +2 -25
- package/script/types/2_game.d.ts +3 -3
- package/script/types/2_game.js +6 -30
- package/script/types/2_inline_keyboard_markup.d.ts +2 -2
- package/script/types/2_inline_keyboard_markup.js +3 -26
- package/script/types/2_inline_query.d.ts +19 -0
- package/script/types/2_inline_query.js +45 -0
- package/script/types/2_reply_keyboard_markup.d.ts +2 -2
- package/script/types/2_reply_keyboard_markup.js +3 -26
- package/script/types/3_message.d.ts +21 -23
- package/script/types/3_message.js +94 -119
- package/script/types/4_callback_query.d.ts +14 -0
- package/script/types/4_callback_query.js +28 -0
- package/script/utilities/0_base64.js +3 -3
- package/script/utilities/0_crypto.js +3 -3
- package/script/utilities/0_queue.js +2 -2
- package/script/utilities/1_auth.js +5 -5
- package/esm/types/!0_id_color.d.ts +0 -1
- package/esm/types/!0_id_color.js +0 -16
- package/script/types/!0_id_color.d.ts +0 -1
- /package/esm/{deps.d.ts → 0_deps.d.ts} +0 -0
- /package/esm/{deps.js → 0_deps.js} +0 -0
- /package/script/{deps.d.ts → 0_deps.d.ts} +0 -0
- /package/script/{deps.js → 0_deps.js} +0 -0
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { Message } from "../
|
|
2
|
-
import { MessageContainer } from "../tl/7_message_container.js";
|
|
1
|
+
import { Message, MessageContainer } from "../2_tl.js";
|
|
3
2
|
export declare function getMessageId(lastMsgId: bigint): bigint;
|
|
4
3
|
export declare function packUnencryptedMessage(data: Uint8Array, messageId: bigint): Uint8Array;
|
|
5
4
|
export declare function unpackUnencryptedMessage(buffer: Uint8Array): {
|
|
@@ -1,16 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.decryptMessage = exports.encryptMessage = exports.unpackUnencryptedMessage = exports.packUnencryptedMessage = exports.getMessageId = void 0;
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
const _1_tl_object_js_1 = require("../tl/1_tl_object.js");
|
|
8
|
-
const _3_tl_reader_js_1 = require("../tl/3_tl_reader.js");
|
|
9
|
-
const _5_rpc_result_js_1 = require("../tl/5_rpc_result.js");
|
|
10
|
-
const _6_message_js_1 = require("../tl/6_message.js");
|
|
11
|
-
const _7_message_container_js_1 = require("../tl/7_message_container.js");
|
|
12
|
-
const _0_buffer_js_1 = require("../utilities/0_buffer.js");
|
|
13
|
-
const _0_hash_js_1 = require("../utilities/0_hash.js");
|
|
4
|
+
const _0_deps_js_1 = require("../0_deps.js");
|
|
5
|
+
const _1_utilities_js_1 = require("../1_utilities.js");
|
|
6
|
+
const _2_tl_js_1 = require("../2_tl.js");
|
|
14
7
|
function getMessageId(lastMsgId) {
|
|
15
8
|
const now = new Date().getTime() / 1000 + 0;
|
|
16
9
|
const nanoseconds = Math.floor((now - Math.floor(now)) * 1e9);
|
|
@@ -24,7 +17,7 @@ function getMessageId(lastMsgId) {
|
|
|
24
17
|
}
|
|
25
18
|
exports.getMessageId = getMessageId;
|
|
26
19
|
function packUnencryptedMessage(data, messageId) {
|
|
27
|
-
const writer = new
|
|
20
|
+
const writer = new _2_tl_js_1.TLWriter();
|
|
28
21
|
writer.writeInt64(0n); // auth key
|
|
29
22
|
writer.writeInt64(messageId);
|
|
30
23
|
writer.writeInt32(data.length);
|
|
@@ -33,7 +26,7 @@ function packUnencryptedMessage(data, messageId) {
|
|
|
33
26
|
}
|
|
34
27
|
exports.packUnencryptedMessage = packUnencryptedMessage;
|
|
35
28
|
function unpackUnencryptedMessage(buffer) {
|
|
36
|
-
const reader = new
|
|
29
|
+
const reader = new _2_tl_js_1.TLReader(buffer);
|
|
37
30
|
const _authKeyId = reader.readInt64();
|
|
38
31
|
const messageId = reader.readInt64();
|
|
39
32
|
const messageLength = reader.readInt32();
|
|
@@ -42,8 +35,8 @@ function unpackUnencryptedMessage(buffer) {
|
|
|
42
35
|
}
|
|
43
36
|
exports.unpackUnencryptedMessage = unpackUnencryptedMessage;
|
|
44
37
|
async function encryptMessage(message, authKey, authKeyId, salt, sessionId) {
|
|
45
|
-
const encoded = message.body[
|
|
46
|
-
const payloadWriter = new
|
|
38
|
+
const encoded = message.body[_2_tl_js_1.serialize]();
|
|
39
|
+
const payloadWriter = new _2_tl_js_1.TLWriter();
|
|
47
40
|
payloadWriter.writeInt64(salt);
|
|
48
41
|
payloadWriter.writeInt64(sessionId);
|
|
49
42
|
payloadWriter.writeInt64(message.id);
|
|
@@ -56,49 +49,49 @@ async function encryptMessage(message, authKey, authKeyId, salt, sessionId) {
|
|
|
56
49
|
if (payload.length % 16 == 0 && (payload.length) % 4 == 0) {
|
|
57
50
|
break;
|
|
58
51
|
}
|
|
59
|
-
payload = (0,
|
|
52
|
+
payload = (0, _1_utilities_js_1.concat)(payload, new Uint8Array(1));
|
|
60
53
|
}
|
|
61
|
-
const messageKey = (await (0,
|
|
62
|
-
const a = await (0,
|
|
63
|
-
const b = await (0,
|
|
64
|
-
const aesKey = (0,
|
|
65
|
-
const aesIV = (0,
|
|
66
|
-
const messageWriter = new
|
|
54
|
+
const messageKey = (await (0, _1_utilities_js_1.sha256)((0, _1_utilities_js_1.concat)(authKey.slice(88, 120), payload))).slice(8, 24);
|
|
55
|
+
const a = await (0, _1_utilities_js_1.sha256)((0, _1_utilities_js_1.concat)(messageKey, authKey.slice(0, 36)));
|
|
56
|
+
const b = await (0, _1_utilities_js_1.sha256)((0, _1_utilities_js_1.concat)(authKey.slice(40, 76), messageKey));
|
|
57
|
+
const aesKey = (0, _1_utilities_js_1.concat)(a.slice(0, 8), b.slice(8, 24), a.slice(24, 32));
|
|
58
|
+
const aesIV = (0, _1_utilities_js_1.concat)(b.slice(0, 8), a.slice(8, 24), b.slice(24, 32));
|
|
59
|
+
const messageWriter = new _2_tl_js_1.TLWriter();
|
|
67
60
|
messageWriter.writeInt64(authKeyId);
|
|
68
61
|
messageWriter.write(messageKey);
|
|
69
|
-
messageWriter.write((0,
|
|
62
|
+
messageWriter.write((0, _0_deps_js_1.ige256Encrypt)(payload, aesKey, aesIV));
|
|
70
63
|
return messageWriter.buffer;
|
|
71
64
|
}
|
|
72
65
|
exports.encryptMessage = encryptMessage;
|
|
73
66
|
async function decryptMessage(buffer, authKey, authKeyId, _sessionId) {
|
|
74
|
-
const reader = new
|
|
75
|
-
(0,
|
|
67
|
+
const reader = new _2_tl_js_1.TLReader(buffer);
|
|
68
|
+
(0, _0_deps_js_1.assertEquals)(reader.readInt64(false), authKeyId);
|
|
76
69
|
const messageKey_ = reader.readInt128();
|
|
77
|
-
const messageKey = (0,
|
|
78
|
-
const a = await (0,
|
|
79
|
-
const b = await (0,
|
|
80
|
-
const aesKey = (0,
|
|
81
|
-
const aesIv = (0,
|
|
82
|
-
const plaintext = (0,
|
|
83
|
-
(0,
|
|
84
|
-
let plainReader = new
|
|
70
|
+
const messageKey = (0, _1_utilities_js_1.bufferFromBigInt)(messageKey_, 16, true, true);
|
|
71
|
+
const a = await (0, _1_utilities_js_1.sha256)((0, _1_utilities_js_1.concat)(messageKey, authKey.slice(8, 44)));
|
|
72
|
+
const b = await (0, _1_utilities_js_1.sha256)((0, _1_utilities_js_1.concat)(authKey.slice(48, 84), messageKey));
|
|
73
|
+
const aesKey = (0, _1_utilities_js_1.concat)(a.slice(0, 8), b.slice(8, 24), a.slice(24, 32));
|
|
74
|
+
const aesIv = (0, _1_utilities_js_1.concat)(b.slice(0, 8), a.slice(8, 24), b.slice(24, 32));
|
|
75
|
+
const plaintext = (0, _0_deps_js_1.ige256Decrypt)(reader.buffer, aesKey, aesIv);
|
|
76
|
+
(0, _0_deps_js_1.assertEquals)(plaintext.buffer.byteLength % 4, 0);
|
|
77
|
+
let plainReader = new _2_tl_js_1.TLReader(plaintext);
|
|
85
78
|
const _salt = plainReader.readInt64();
|
|
86
79
|
const _sessionId_ = plainReader.readInt64(false);
|
|
87
80
|
const mid = plainReader.readInt64();
|
|
88
81
|
const seqno = plainReader.readInt32();
|
|
89
82
|
const length = plainReader.readInt32();
|
|
90
|
-
plainReader = new
|
|
83
|
+
plainReader = new _2_tl_js_1.TLReader(plainReader.read(length));
|
|
91
84
|
const cid = plainReader.readInt32(false);
|
|
92
|
-
if (cid ==
|
|
93
|
-
return
|
|
85
|
+
if (cid == _2_tl_js_1.MessageContainer[_2_tl_js_1.id]) {
|
|
86
|
+
return _2_tl_js_1.MessageContainer.deserialize(plainReader.buffer);
|
|
94
87
|
}
|
|
95
|
-
else if (cid ==
|
|
96
|
-
const body =
|
|
97
|
-
return new
|
|
88
|
+
else if (cid == _2_tl_js_1.RPCResult[_2_tl_js_1.id]) {
|
|
89
|
+
const body = _2_tl_js_1.RPCResult.deserialize(plainReader.buffer);
|
|
90
|
+
return new _2_tl_js_1.Message(mid, seqno, body);
|
|
98
91
|
}
|
|
99
92
|
else {
|
|
100
93
|
const body = plainReader.readObject(cid);
|
|
101
|
-
return new
|
|
94
|
+
return new _2_tl_js_1.Message(mid, seqno, body);
|
|
102
95
|
}
|
|
103
96
|
}
|
|
104
97
|
exports.decryptMessage = decryptMessage;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
1
|
+
import { sha256 } from "../1_utilities.js";
|
|
2
|
+
import { types } from "../2_tl.js";
|
|
3
3
|
export declare function isSafePrime(primeBytes: Uint8Array, g: number): boolean;
|
|
4
4
|
export declare const h: typeof sha256;
|
|
5
5
|
export declare const sh: (data: Uint8Array, salt: Uint8Array) => Promise<Uint8Array>;
|
|
@@ -1,33 +1,8 @@
|
|
|
1
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
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
3
|
exports.checkPassword = exports.pad = exports.isGoodModExpFirst = exports.ph2 = exports.pbkdf2 = exports.ph1 = exports.sh = exports.h = exports.isSafePrime = void 0;
|
|
27
|
-
const
|
|
28
|
-
const
|
|
29
|
-
const _0_hash_js_1 = require("../utilities/0_hash.js");
|
|
30
|
-
const _0_bigint_js_1 = require("../utilities/0_bigint.js");
|
|
4
|
+
const _1_utilities_js_1 = require("../1_utilities.js");
|
|
5
|
+
const _2_tl_js_1 = require("../2_tl.js");
|
|
31
6
|
function isSafePrime(primeBytes, g) {
|
|
32
7
|
// deno-fmt-ignore
|
|
33
8
|
const goodPrime = new Uint8Array([
|
|
@@ -63,9 +38,9 @@ function isSafePrime(primeBytes, g) {
|
|
|
63
38
|
}
|
|
64
39
|
exports.isSafePrime = isSafePrime;
|
|
65
40
|
// H(data) := sha256(data)
|
|
66
|
-
exports.h =
|
|
41
|
+
exports.h = _1_utilities_js_1.sha256;
|
|
67
42
|
// SH(data, salt) := H(salt | data | salt)
|
|
68
|
-
const sh = (data, salt) => (0, exports.h)((0,
|
|
43
|
+
const sh = (data, salt) => (0, exports.h)((0, _1_utilities_js_1.concat)(salt, data, salt));
|
|
69
44
|
exports.sh = sh;
|
|
70
45
|
// PH1(password, salt1, salt2) := SH(SH(password, salt1), salt2)
|
|
71
46
|
const ph1 = async (password, salt1, salt2) => await (0, exports.sh)(await (0, exports.sh)(password, salt1), salt2);
|
|
@@ -94,10 +69,10 @@ function pad(bigint) {
|
|
|
94
69
|
bigint = BigInt(bigint);
|
|
95
70
|
}
|
|
96
71
|
if (typeof bigint === "bigint") {
|
|
97
|
-
return (0,
|
|
72
|
+
return (0, _1_utilities_js_1.bufferFromBigInt)(bigint, 256, false);
|
|
98
73
|
}
|
|
99
74
|
else {
|
|
100
|
-
return (0,
|
|
75
|
+
return (0, _1_utilities_js_1.concat)(new Uint8Array(256 - bigint.length), bigint);
|
|
101
76
|
}
|
|
102
77
|
}
|
|
103
78
|
exports.pad = pad;
|
|
@@ -105,13 +80,13 @@ async function checkPassword(password_, ap) {
|
|
|
105
80
|
const password = new TextEncoder().encode(password_);
|
|
106
81
|
const algo = ap.currentAlgo;
|
|
107
82
|
if (!(algo instanceof
|
|
108
|
-
types.PasswordKdfAlgoSHA256SHA256PBKDF2HMACSHA512iter100000SHA256ModPow)) {
|
|
83
|
+
_2_tl_js_1.types.PasswordKdfAlgoSHA256SHA256PBKDF2HMACSHA512iter100000SHA256ModPow)) {
|
|
109
84
|
throw new Error("Unexpected algorithm");
|
|
110
85
|
}
|
|
111
86
|
// g := algo.g
|
|
112
87
|
const g = algo.g;
|
|
113
88
|
// p := algo.p
|
|
114
|
-
const p = (0,
|
|
89
|
+
const p = (0, _1_utilities_js_1.bigIntFromBuffer)(algo.p, false);
|
|
115
90
|
if (!isSafePrime(algo.p, g)) {
|
|
116
91
|
throw new Error("Got unsafe prime");
|
|
117
92
|
}
|
|
@@ -130,18 +105,18 @@ async function checkPassword(password_, ap) {
|
|
|
130
105
|
// salt2 := algo.salt2
|
|
131
106
|
const salt2 = algo.salt2;
|
|
132
107
|
// g_b := srp_B
|
|
133
|
-
const gB = (0,
|
|
108
|
+
const gB = (0, _1_utilities_js_1.bigIntFromBuffer)(srpB, false);
|
|
134
109
|
// k := H(p | g)
|
|
135
|
-
const k = (0,
|
|
110
|
+
const k = (0, _1_utilities_js_1.bigIntFromBuffer)(await (0, exports.h)((0, _1_utilities_js_1.concat)(pad(p), pad(g))), false);
|
|
136
111
|
let u = 0n;
|
|
137
112
|
let a = 0n;
|
|
138
113
|
let gA = 0n;
|
|
139
114
|
for (let i = 0; i < 1000; i++) {
|
|
140
|
-
a = (0,
|
|
115
|
+
a = (0, _1_utilities_js_1.getRandomBigInt)(256, false);
|
|
141
116
|
// g_a := pow(g, a) mod p
|
|
142
|
-
gA = (0,
|
|
117
|
+
gA = (0, _1_utilities_js_1.modExp)(BigInt(g), a, p);
|
|
143
118
|
if (isGoodModExpFirst(gA, p)) {
|
|
144
|
-
u = (0,
|
|
119
|
+
u = (0, _1_utilities_js_1.bigIntFromBuffer)(await (0, _1_utilities_js_1.sha256)((0, _1_utilities_js_1.concat)(pad(gA), pad(gB))), false);
|
|
145
120
|
if (u > 0n) {
|
|
146
121
|
break;
|
|
147
122
|
}
|
|
@@ -151,21 +126,21 @@ async function checkPassword(password_, ap) {
|
|
|
151
126
|
throw new Error();
|
|
152
127
|
}
|
|
153
128
|
// x := PH2(password, salt1, salt2)
|
|
154
|
-
const x = (0,
|
|
129
|
+
const x = (0, _1_utilities_js_1.bigIntFromBuffer)(await (0, exports.ph2)(password, salt1, salt2), false);
|
|
155
130
|
// v := pow(g, x) mod p
|
|
156
|
-
const v = (0,
|
|
131
|
+
const v = (0, _1_utilities_js_1.modExp)(BigInt(g), x, p);
|
|
157
132
|
// k_v := (k * v) mod p
|
|
158
|
-
const kV = (0,
|
|
133
|
+
const kV = (0, _1_utilities_js_1.mod)(k * v, p);
|
|
159
134
|
// t := (g_b - k_v) mod p
|
|
160
|
-
const t = (0,
|
|
135
|
+
const t = (0, _1_utilities_js_1.mod)(gB - kV, p);
|
|
161
136
|
// s_a := pow(t, a + u * x) mod p
|
|
162
|
-
const sA = (0,
|
|
137
|
+
const sA = (0, _1_utilities_js_1.modExp)(t, a + u * x, p);
|
|
163
138
|
// k_a := H(s_a)
|
|
164
139
|
const kA = await (0, exports.h)(pad(sA));
|
|
165
140
|
// M1 := H(H(p) xor H(g) | H(salt1) | H(salt2) | g_a | g_b | k_a)
|
|
166
141
|
const hG = await (0, exports.h)(pad(g));
|
|
167
|
-
const m1 = await (0, exports.h)((0,
|
|
168
|
-
return new types.InputCheckPasswordSRP({
|
|
142
|
+
const m1 = await (0, exports.h)((0, _1_utilities_js_1.concat)((await (0, exports.h)(pad(p))).map((v, i) => v ^ hG[i]), await (0, exports.h)(salt1), await (0, exports.h)(salt2), pad(gA), pad(gB), kA));
|
|
143
|
+
return new _2_tl_js_1.types.InputCheckPasswordSRP({
|
|
169
144
|
srpId: srpId,
|
|
170
145
|
A: pad(gA),
|
|
171
146
|
M1: m1,
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import
|
|
2
|
-
export declare function
|
|
3
|
-
export declare function
|
|
4
|
-
export declare function hasPts(v: types.TypeUpdate | types.TypeUpdates): v is types.UpdateShortMessage | types.UpdateShortChatMessage | types.UpdateShortSentMessage | types.UpdateNewMessage | types.UpdateDeleteMessages | types.UpdateReadHistoryInbox | types.UpdateReadHistoryOutbox | types.UpdatePinnedChannelMessages | types.UpdatePinnedMessages | types.UpdateFolderPeers | types.UpdateChannelWebPage | types.UpdateEditMessage | types.UpdateReadMessagesContents | types.UpdateWebPage;
|
|
5
|
-
export declare function hasChannelPts(v: types.TypeUpdate | types.TypeUpdates): v is types.UpdateNewChannelMessage | types.UpdateEditChannelMessage | types.UpdateDeleteChannelMessages | types.UpdateReadChannelInbox;
|
|
1
|
+
import { types } from "../2_tl.js";
|
|
2
|
+
export declare function isPtsUpdate(v: types.TypeUpdate | types.TypeUpdates): v is types.UpdateShortMessage | types.UpdateShortChatMessage | types.UpdateShortSentMessage | types.UpdateNewMessage | types.UpdateDeleteMessages | types.UpdateReadHistoryInbox | types.UpdateReadHistoryOutbox | types.UpdatePinnedChannelMessages | types.UpdatePinnedMessages | types.UpdateFolderPeers | types.UpdateChannelWebPage | types.UpdateEditMessage | types.UpdateReadMessagesContents | types.UpdateWebPage;
|
|
3
|
+
export declare function isChannelPtsUpdate(v: types.TypeUpdate | types.TypeUpdates): v is types.UpdateNewChannelMessage | types.UpdateEditChannelMessage | types.UpdateDeleteChannelMessages | types.UpdateReadChannelInbox;
|
|
@@ -1,72 +1,28 @@
|
|
|
1
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
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.
|
|
27
|
-
const
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
3
|
+
exports.isChannelPtsUpdate = exports.isPtsUpdate = void 0;
|
|
4
|
+
const _2_tl_js_1 = require("../2_tl.js");
|
|
5
|
+
function isPtsUpdate(v) {
|
|
6
|
+
return v instanceof _2_tl_js_1.types.UpdateShortMessage ||
|
|
7
|
+
v instanceof _2_tl_js_1.types.UpdateShortChatMessage ||
|
|
8
|
+
v instanceof _2_tl_js_1.types.UpdateShortSentMessage ||
|
|
9
|
+
v instanceof _2_tl_js_1.types.UpdateNewMessage ||
|
|
10
|
+
v instanceof _2_tl_js_1.types.UpdateDeleteMessages ||
|
|
11
|
+
v instanceof _2_tl_js_1.types.UpdateReadHistoryInbox ||
|
|
12
|
+
v instanceof _2_tl_js_1.types.UpdateReadHistoryOutbox ||
|
|
13
|
+
v instanceof _2_tl_js_1.types.UpdatePinnedChannelMessages ||
|
|
14
|
+
v instanceof _2_tl_js_1.types.UpdatePinnedMessages ||
|
|
15
|
+
v instanceof _2_tl_js_1.types.UpdateFolderPeers ||
|
|
16
|
+
v instanceof _2_tl_js_1.types.UpdateChannelWebPage ||
|
|
17
|
+
v instanceof _2_tl_js_1.types.UpdateEditMessage ||
|
|
18
|
+
v instanceof _2_tl_js_1.types.UpdateReadMessagesContents ||
|
|
19
|
+
v instanceof _2_tl_js_1.types.UpdateWebPage;
|
|
32
20
|
}
|
|
33
|
-
exports.
|
|
34
|
-
function
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
return -Number(peer.chatId);
|
|
40
|
-
}
|
|
41
|
-
else if (peer instanceof types.PeerChannel || peer instanceof types.InputPeerChannel) {
|
|
42
|
-
return getChannelChatId(peer.channelId);
|
|
43
|
-
}
|
|
44
|
-
else {
|
|
45
|
-
(0, _0_control_js_1.UNREACHABLE)();
|
|
46
|
-
}
|
|
21
|
+
exports.isPtsUpdate = isPtsUpdate;
|
|
22
|
+
function isChannelPtsUpdate(v) {
|
|
23
|
+
return v instanceof _2_tl_js_1.types.UpdateNewChannelMessage ||
|
|
24
|
+
v instanceof _2_tl_js_1.types.UpdateEditChannelMessage ||
|
|
25
|
+
v instanceof _2_tl_js_1.types.UpdateDeleteChannelMessages ||
|
|
26
|
+
v instanceof _2_tl_js_1.types.UpdateReadChannelInbox;
|
|
47
27
|
}
|
|
48
|
-
exports.
|
|
49
|
-
function hasPts(v) {
|
|
50
|
-
return v instanceof types.UpdateShortMessage ||
|
|
51
|
-
v instanceof types.UpdateShortChatMessage ||
|
|
52
|
-
v instanceof types.UpdateShortSentMessage ||
|
|
53
|
-
v instanceof types.UpdateNewMessage ||
|
|
54
|
-
v instanceof types.UpdateDeleteMessages ||
|
|
55
|
-
v instanceof types.UpdateReadHistoryInbox ||
|
|
56
|
-
v instanceof types.UpdateReadHistoryOutbox ||
|
|
57
|
-
v instanceof types.UpdatePinnedChannelMessages ||
|
|
58
|
-
v instanceof types.UpdatePinnedMessages ||
|
|
59
|
-
v instanceof types.UpdateFolderPeers ||
|
|
60
|
-
v instanceof types.UpdateChannelWebPage ||
|
|
61
|
-
v instanceof types.UpdateEditMessage ||
|
|
62
|
-
v instanceof types.UpdateReadMessagesContents ||
|
|
63
|
-
v instanceof types.UpdateWebPage;
|
|
64
|
-
}
|
|
65
|
-
exports.hasPts = hasPts;
|
|
66
|
-
function hasChannelPts(v) {
|
|
67
|
-
return v instanceof types.UpdateNewChannelMessage ||
|
|
68
|
-
v instanceof types.UpdateEditChannelMessage ||
|
|
69
|
-
v instanceof types.UpdateDeleteChannelMessages ||
|
|
70
|
-
v instanceof types.UpdateReadChannelInbox;
|
|
71
|
-
}
|
|
72
|
-
exports.hasChannelPts = hasChannelPts;
|
|
28
|
+
exports.isChannelPtsUpdate = isChannelPtsUpdate;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { MaybePromise } from "../
|
|
2
|
-
import { DC, TransportProvider } from "../
|
|
1
|
+
import { MaybePromise } from "../1_utilities.js";
|
|
2
|
+
import { DC, TransportProvider } from "../3_transport.js";
|
|
3
3
|
export interface ClientAbstractParams {
|
|
4
4
|
/**
|
|
5
5
|
* The first DC to connect to. This is commonly used to decide whether to connect to test or production servers. It is not necessarily the DC that the client will directly connect to or is currently connected to. Defaults to the default initial DC.
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ClientAbstract = void 0;
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const
|
|
4
|
+
const _0_deps_js_1 = require("../0_deps.js");
|
|
5
|
+
const _3_transport_js_1 = require("../3_transport.js");
|
|
6
|
+
const _4_constants_js_1 = require("../4_constants.js");
|
|
7
7
|
class ClientAbstract {
|
|
8
8
|
constructor(params) {
|
|
9
9
|
Object.defineProperty(this, "initialDc", {
|
|
@@ -42,8 +42,8 @@ class ClientAbstract {
|
|
|
42
42
|
writable: true,
|
|
43
43
|
value: void 0
|
|
44
44
|
});
|
|
45
|
-
this.initialDc = params?.initialDc ??
|
|
46
|
-
this.transportProvider = params?.transportProvider ?? (0,
|
|
45
|
+
this.initialDc = params?.initialDc ?? _4_constants_js_1.INITIAL_DC;
|
|
46
|
+
this.transportProvider = params?.transportProvider ?? (0, _3_transport_js_1.webSocketTransportProvider)();
|
|
47
47
|
this.cdn = params?.cdn ?? false;
|
|
48
48
|
}
|
|
49
49
|
get dcId() {
|
|
@@ -62,7 +62,7 @@ class ClientAbstract {
|
|
|
62
62
|
async connect() {
|
|
63
63
|
this.transport = this.transportProvider({ dc: this.dc ?? this.initialDc, cdn: this.cdn });
|
|
64
64
|
this.transport.connection.stateChangeHandler = this.stateChangeHandler;
|
|
65
|
-
await (0,
|
|
65
|
+
await (0, _0_deps_js_1.initTgCrypto)();
|
|
66
66
|
await this.transport.connection.open();
|
|
67
67
|
await this.transport.transport.initialize();
|
|
68
68
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { functions } from "../2_tl.js";
|
|
2
|
+
import { PublicKeys } from "../4_constants.js";
|
|
3
3
|
import { ClientAbstract, ClientAbstractParams } from "./1_client_abstract.js";
|
|
4
4
|
export interface ClientPlainParams extends ClientAbstractParams {
|
|
5
5
|
/**
|
|
@@ -11,7 +11,7 @@ export declare class ClientPlain extends ClientAbstract {
|
|
|
11
11
|
private readonly publicKeys;
|
|
12
12
|
private lastMsgId;
|
|
13
13
|
constructor(params?: ClientPlainParams);
|
|
14
|
-
invoke<T extends Function<unknown>>(function_: T): Promise<T["__R"]>;
|
|
14
|
+
invoke<T extends functions.Function<unknown>>(function_: T): Promise<T["__R"]>;
|
|
15
15
|
createAuthKey(): Promise<{
|
|
16
16
|
authKey: Uint8Array;
|
|
17
17
|
salt: bigint;
|
|
@@ -1,20 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ClientPlain = void 0;
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
const _0_control_js_1 = require("../utilities/0_control.js");
|
|
9
|
-
const _0_hash_js_1 = require("../utilities/0_hash.js");
|
|
10
|
-
const _1_auth_js_1 = require("../utilities/1_auth.js");
|
|
11
|
-
const _1_tl_object_js_1 = require("../tl/1_tl_object.js");
|
|
12
|
-
const _2_types_js_1 = require("../tl/2_types.js");
|
|
13
|
-
const _3_functions_js_1 = require("../tl/3_functions.js");
|
|
14
|
-
const _3_tl_reader_js_1 = require("../tl/3_tl_reader.js");
|
|
4
|
+
const _0_deps_js_1 = require("../0_deps.js");
|
|
5
|
+
const _1_utilities_js_1 = require("../1_utilities.js");
|
|
6
|
+
const _2_tl_js_1 = require("../2_tl.js");
|
|
7
|
+
const _4_constants_js_1 = require("../4_constants.js");
|
|
15
8
|
const _1_client_abstract_js_1 = require("./1_client_abstract.js");
|
|
16
9
|
const _0_message_js_1 = require("./0_message.js");
|
|
17
|
-
const d = (0,
|
|
10
|
+
const d = (0, _0_deps_js_1.debug)("ClientPlain/createAuthKey");
|
|
18
11
|
class ClientPlain extends _1_client_abstract_js_1.ClientAbstract {
|
|
19
12
|
constructor(params) {
|
|
20
13
|
super(params);
|
|
@@ -30,35 +23,35 @@ class ClientPlain extends _1_client_abstract_js_1.ClientAbstract {
|
|
|
30
23
|
writable: true,
|
|
31
24
|
value: 0n
|
|
32
25
|
});
|
|
33
|
-
this.publicKeys = params?.publicKeys ??
|
|
26
|
+
this.publicKeys = params?.publicKeys ?? _4_constants_js_1.PUBLIC_KEYS;
|
|
34
27
|
}
|
|
35
28
|
async invoke(function_) {
|
|
36
29
|
if (!this.transport) {
|
|
37
30
|
throw new Error("Not connected");
|
|
38
31
|
}
|
|
39
32
|
const msgId = this.lastMsgId = (0, _0_message_js_1.getMessageId)(this.lastMsgId);
|
|
40
|
-
await this.transport.transport.send((0, _0_message_js_1.packUnencryptedMessage)(function_[
|
|
33
|
+
await this.transport.transport.send((0, _0_message_js_1.packUnencryptedMessage)(function_[_2_tl_js_1.serialize](), msgId));
|
|
41
34
|
const buffer = await this.transport.transport.receive();
|
|
42
35
|
if (buffer.length == 4) {
|
|
43
|
-
const int = (0,
|
|
36
|
+
const int = (0, _1_utilities_js_1.bigIntFromBuffer)(buffer, true, true);
|
|
44
37
|
if (int == -404n) {
|
|
45
38
|
throw new Error("-404");
|
|
46
39
|
}
|
|
47
40
|
}
|
|
48
41
|
const { message } = (0, _0_message_js_1.unpackUnencryptedMessage)(buffer);
|
|
49
|
-
const reader = new
|
|
42
|
+
const reader = new _2_tl_js_1.TLReader(message);
|
|
50
43
|
return reader.readObject();
|
|
51
44
|
}
|
|
52
45
|
async createAuthKey() {
|
|
53
|
-
const nonce = (0,
|
|
46
|
+
const nonce = (0, _1_utilities_js_1.getRandomBigInt)(16, false, true);
|
|
54
47
|
d("auth key creation started");
|
|
55
48
|
let resPq = null;
|
|
56
49
|
for (let i = 0; i < 10; i++) {
|
|
57
50
|
try {
|
|
58
51
|
d("req_pq_multi [%d]", i + 1);
|
|
59
|
-
resPq = await this.invoke(new
|
|
60
|
-
(0,
|
|
61
|
-
(0,
|
|
52
|
+
resPq = await this.invoke(new _2_tl_js_1.functions.ReqPQMulti({ nonce }));
|
|
53
|
+
(0, _0_deps_js_1.assertInstanceOf)(resPq, _2_tl_js_1.types.ResPQ);
|
|
54
|
+
(0, _0_deps_js_1.assertEquals)(resPq.nonce, nonce);
|
|
62
55
|
d("got res_pq");
|
|
63
56
|
break;
|
|
64
57
|
}
|
|
@@ -67,13 +60,13 @@ class ClientPlain extends _1_client_abstract_js_1.ClientAbstract {
|
|
|
67
60
|
}
|
|
68
61
|
}
|
|
69
62
|
if (!resPq) {
|
|
70
|
-
(0,
|
|
63
|
+
(0, _1_utilities_js_1.UNREACHABLE)();
|
|
71
64
|
}
|
|
72
|
-
const pq_ = (0,
|
|
73
|
-
const [p_, q_] = (0,
|
|
65
|
+
const pq_ = (0, _1_utilities_js_1.bigIntFromBuffer)(resPq.pq, false, false);
|
|
66
|
+
const [p_, q_] = (0, _0_deps_js_1.factorize)(pq_);
|
|
74
67
|
d("factorized pq");
|
|
75
|
-
const p = (0,
|
|
76
|
-
const q = (0,
|
|
68
|
+
const p = (0, _1_utilities_js_1.bufferFromBigInt)(p_, 4, false, false);
|
|
69
|
+
const q = (0, _1_utilities_js_1.bufferFromBigInt)(q_, 4, false, false);
|
|
77
70
|
let publicKeyFingerprint;
|
|
78
71
|
let publicKey;
|
|
79
72
|
for (const fingerprint of resPq.serverPublicKeyFingerprints) {
|
|
@@ -90,8 +83,8 @@ class ClientPlain extends _1_client_abstract_js_1.ClientAbstract {
|
|
|
90
83
|
const dc = this.dcId;
|
|
91
84
|
const pq = resPq.pq;
|
|
92
85
|
const serverNonce = resPq.serverNonce;
|
|
93
|
-
const newNonce = (0,
|
|
94
|
-
let encryptedData = await (0,
|
|
86
|
+
const newNonce = (0, _1_utilities_js_1.getRandomBigInt)(32, false, true);
|
|
87
|
+
let encryptedData = await (0, _1_utilities_js_1.rsaPad)(new _2_tl_js_1.types.PQInnerDataDC({
|
|
95
88
|
pq,
|
|
96
89
|
p,
|
|
97
90
|
q,
|
|
@@ -99,8 +92,8 @@ class ClientPlain extends _1_client_abstract_js_1.ClientAbstract {
|
|
|
99
92
|
newNonce,
|
|
100
93
|
nonce,
|
|
101
94
|
serverNonce,
|
|
102
|
-
})[
|
|
103
|
-
const dhParams = await this.invoke(new
|
|
95
|
+
})[_2_tl_js_1.serialize](), publicKey);
|
|
96
|
+
const dhParams = await this.invoke(new _2_tl_js_1.functions.ReqDHParams({
|
|
104
97
|
nonce,
|
|
105
98
|
serverNonce,
|
|
106
99
|
p,
|
|
@@ -108,42 +101,42 @@ class ClientPlain extends _1_client_abstract_js_1.ClientAbstract {
|
|
|
108
101
|
publicKeyFingerprint,
|
|
109
102
|
encryptedData,
|
|
110
103
|
}));
|
|
111
|
-
(0,
|
|
104
|
+
(0, _0_deps_js_1.assertInstanceOf)(dhParams, _2_tl_js_1.types.ServerDHParamsOK);
|
|
112
105
|
d("got server_DH_params_ok");
|
|
113
|
-
const newNonce_ = (0,
|
|
114
|
-
const serverNonce_ = (0,
|
|
115
|
-
const tmpAesKey = (0,
|
|
116
|
-
const tmpAesIv = (0,
|
|
117
|
-
const answerWithHash = (0,
|
|
118
|
-
const dhInnerData = new
|
|
119
|
-
(0,
|
|
106
|
+
const newNonce_ = (0, _1_utilities_js_1.bufferFromBigInt)(newNonce, 32, true, true);
|
|
107
|
+
const serverNonce_ = (0, _1_utilities_js_1.bufferFromBigInt)(serverNonce, 16, true, true);
|
|
108
|
+
const tmpAesKey = (0, _1_utilities_js_1.concat)(await (0, _1_utilities_js_1.sha1)((0, _1_utilities_js_1.concat)(newNonce_, serverNonce_)), (await (0, _1_utilities_js_1.sha1)((0, _1_utilities_js_1.concat)(serverNonce_, newNonce_))).slice(0, 0 + 12));
|
|
109
|
+
const tmpAesIv = (0, _1_utilities_js_1.concat)((await (0, _1_utilities_js_1.sha1)((0, _1_utilities_js_1.concat)(serverNonce_, newNonce_))).slice(12, 12 + 8), await (0, _1_utilities_js_1.sha1)((0, _1_utilities_js_1.concat)(newNonce_, newNonce_)), newNonce_.slice(0, 0 + 4));
|
|
110
|
+
const answerWithHash = (0, _0_deps_js_1.ige256Decrypt)(dhParams.encryptedAnswer, tmpAesKey, tmpAesIv);
|
|
111
|
+
const dhInnerData = new _2_tl_js_1.TLReader(answerWithHash.slice(20)).readObject();
|
|
112
|
+
(0, _0_deps_js_1.assertInstanceOf)(dhInnerData, _2_tl_js_1.types.ServerDHInnerData);
|
|
120
113
|
const { g, gA: gA_, dhPrime: dhPrime_ } = dhInnerData;
|
|
121
|
-
const gA = (0,
|
|
122
|
-
const dhPrime = (0,
|
|
123
|
-
const b = (0,
|
|
124
|
-
const gB = (0,
|
|
125
|
-
const data = new
|
|
114
|
+
const gA = (0, _1_utilities_js_1.bigIntFromBuffer)(gA_, false, false);
|
|
115
|
+
const dhPrime = (0, _1_utilities_js_1.bigIntFromBuffer)(dhPrime_, false, false);
|
|
116
|
+
const b = (0, _1_utilities_js_1.getRandomBigInt)(256, false, false);
|
|
117
|
+
const gB = (0, _1_utilities_js_1.modExp)(BigInt(g), b, dhPrime);
|
|
118
|
+
const data = new _2_tl_js_1.types.ClientDHInnerData({
|
|
126
119
|
nonce,
|
|
127
120
|
serverNonce,
|
|
128
121
|
retryId: 0n,
|
|
129
|
-
gB: (0,
|
|
130
|
-
})[
|
|
131
|
-
let dataWithHash = (0,
|
|
122
|
+
gB: (0, _1_utilities_js_1.bufferFromBigInt)(gB, 256, false, false),
|
|
123
|
+
})[_2_tl_js_1.serialize]();
|
|
124
|
+
let dataWithHash = (0, _1_utilities_js_1.concat)(await (0, _1_utilities_js_1.sha1)(data), data);
|
|
132
125
|
while (dataWithHash.length % 16 != 0) {
|
|
133
|
-
dataWithHash = (0,
|
|
126
|
+
dataWithHash = (0, _1_utilities_js_1.concat)(dataWithHash, new Uint8Array(1));
|
|
134
127
|
}
|
|
135
|
-
encryptedData = (0,
|
|
136
|
-
const dhGenOk = await this.invoke(new
|
|
137
|
-
(0,
|
|
128
|
+
encryptedData = (0, _0_deps_js_1.ige256Encrypt)(dataWithHash, tmpAesKey, tmpAesIv);
|
|
129
|
+
const dhGenOk = await this.invoke(new _2_tl_js_1.functions.SetClientDHParams({ nonce, serverNonce, encryptedData }));
|
|
130
|
+
(0, _0_deps_js_1.assertInstanceOf)(dhGenOk, _2_tl_js_1.types.DHGenOK);
|
|
138
131
|
d("got dh_gen_ok");
|
|
139
132
|
const serverNonceSlice = serverNonce_.slice(0, 8);
|
|
140
133
|
const salt = newNonce_.slice(0, 0 + 8).map((v, i) => v ^ serverNonceSlice[i]);
|
|
141
|
-
const authKey_ = (0,
|
|
142
|
-
const authKey = (0,
|
|
134
|
+
const authKey_ = (0, _1_utilities_js_1.modExp)(gA, b, dhPrime);
|
|
135
|
+
const authKey = (0, _1_utilities_js_1.bufferFromBigInt)(authKey_, 256, false, false);
|
|
143
136
|
d("auth key created");
|
|
144
137
|
return {
|
|
145
138
|
authKey,
|
|
146
|
-
salt: (0,
|
|
139
|
+
salt: (0, _1_utilities_js_1.bigIntFromBuffer)(salt, true, false),
|
|
147
140
|
};
|
|
148
141
|
}
|
|
149
142
|
}
|