mtproto 0.0.7 → 0.0.9
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.
- checksums.yaml +4 -4
- data/.env.example +4 -0
- data/ext/aes_ige/extconf.rb +3 -9
- data/ext/factorization/extconf.rb +2 -0
- data/lib/mtproto/auth_key_generator.rb +66 -103
- data/lib/mtproto/binary.rb +21 -0
- data/lib/mtproto/client/api/check_password.rb +41 -0
- data/lib/mtproto/client/api/export_login_token.rb +27 -0
- data/lib/mtproto/client/api/get_updates_difference.rb +21 -0
- data/lib/mtproto/client/api/get_updates_state.rb +14 -0
- data/lib/mtproto/client/api/get_users.rb +14 -0
- data/lib/mtproto/client/api/import_login_token.rb +23 -0
- data/lib/mtproto/client/api/send_code.rb +21 -0
- data/lib/mtproto/client/api/sign_in.rb +27 -0
- data/lib/mtproto/client/api.rb +28 -0
- data/lib/mtproto/client/rpc/response.rb +63 -0
- data/lib/mtproto/client/rpc.rb +67 -107
- data/lib/mtproto/client.rb +176 -31
- data/lib/mtproto/crypto/dh_key_exchange.rb +1 -2
- data/lib/mtproto/crypto/dh_validator.rb +17 -19
- data/lib/mtproto/crypto/factorization.rb +1 -1
- data/lib/mtproto/crypto/rsa_key.rb +2 -2
- data/lib/mtproto/crypto/srp.rb +117 -0
- data/lib/mtproto/delegate_methods.rb +11 -0
- data/lib/mtproto/message/message.rb +85 -0
- data/lib/mtproto/session.rb +1 -1
- data/lib/mtproto/tl/constructors.rb +2269 -0
- data/lib/mtproto/tl/object.rb +25 -0
- data/lib/mtproto/tl/objects/account_password.rb +72 -0
- data/lib/mtproto/tl/objects/authorization.rb +73 -0
- data/lib/mtproto/tl/objects/check_password.rb +46 -0
- data/lib/mtproto/tl/objects/client_dh_inner_data.rb +47 -0
- data/lib/mtproto/tl/objects/dh_gen_response.rb +50 -0
- data/lib/mtproto/tl/objects/export_login_token.rb +51 -0
- data/lib/mtproto/tl/objects/get_config.rb +15 -0
- data/lib/mtproto/tl/objects/get_difference.rb +36 -0
- data/lib/mtproto/tl/objects/get_password.rb +15 -0
- data/lib/mtproto/tl/objects/get_state.rb +15 -0
- data/lib/mtproto/tl/objects/get_users.rb +20 -0
- data/lib/mtproto/tl/objects/help_config.rb +77 -0
- data/lib/mtproto/tl/objects/import_login_token.rb +39 -0
- data/lib/mtproto/tl/objects/init_connection.rb +59 -0
- data/lib/mtproto/tl/objects/invoke_with_layer.rb +22 -0
- data/lib/mtproto/tl/objects/login_token.rb +82 -0
- data/lib/mtproto/tl/objects/pq_inner_data.rb +69 -0
- data/lib/mtproto/tl/objects/req_dh_params.rb +65 -0
- data/lib/mtproto/tl/objects/req_pq_multi.rb +23 -0
- data/lib/mtproto/tl/objects/res_pq.rb +75 -0
- data/lib/mtproto/tl/objects/send_code.rb +50 -0
- data/lib/mtproto/tl/objects/sent_code.rb +79 -0
- data/lib/mtproto/tl/objects/server_dh_inner_data.rb +74 -0
- data/lib/mtproto/tl/objects/server_dh_params.rb +53 -0
- data/lib/mtproto/tl/objects/set_client_dh_params.rb +48 -0
- data/lib/mtproto/tl/objects/sign_in.rb +47 -0
- data/lib/mtproto/tl/objects/update.rb +80 -0
- data/lib/mtproto/tl/objects/update_short.rb +22 -0
- data/lib/mtproto/tl/objects/update_short_message.rb +67 -0
- data/lib/mtproto/tl/objects/updates_difference.rb +157 -0
- data/lib/mtproto/tl/objects/updates_state.rb +37 -0
- data/lib/mtproto/tl/objects/users.rb +86 -0
- data/lib/mtproto/transport/abridged_packet_codec.rb +35 -12
- data/lib/mtproto/transport/connection.rb +23 -0
- data/lib/mtproto/transport/errors.rb +11 -0
- data/lib/mtproto/transport/packet.rb +19 -0
- data/lib/mtproto/transport/tcp_connection.rb +57 -46
- data/lib/mtproto/{tl → type}/bad_msg_notification.rb +11 -11
- data/lib/mtproto/{tl → type}/client_dh_inner_data.rb +1 -1
- data/lib/mtproto/{tl → type}/gzip_packed.rb +6 -4
- data/lib/mtproto/{tl → type}/message.rb +3 -3
- data/lib/mtproto/{tl → type}/msg_container.rb +1 -1
- data/lib/mtproto/{tl → type}/new_session_created.rb +1 -1
- data/lib/mtproto/{tl/p_q_inner_data.rb → type/pq_inner_data.rb} +1 -1
- data/lib/mtproto/{tl → type}/rpc_error.rb +1 -2
- data/lib/mtproto/{tl → type}/serializer.rb +1 -1
- data/lib/mtproto/{tl → type}/server_dh_inner_data.rb +1 -1
- data/lib/mtproto/updates_poller.rb +37 -33
- data/lib/mtproto/version.rb +1 -1
- data/lib/mtproto.rb +21 -22
- data/scripts/generate_constructors.rb +65 -0
- metadata +80 -49
- data/lib/mtproto/rpc/get_config.rb +0 -37
- data/lib/mtproto/rpc/get_contacts.rb +0 -22
- data/lib/mtproto/rpc/get_updates_difference.rb +0 -33
- data/lib/mtproto/rpc/get_updates_state.rb +0 -22
- data/lib/mtproto/rpc/get_users.rb +0 -22
- data/lib/mtproto/rpc/ping.rb +0 -26
- data/lib/mtproto/rpc/send_code.rb +0 -44
- data/lib/mtproto/rpc/send_message.rb +0 -31
- data/lib/mtproto/rpc/sign_in.rb +0 -52
- data/lib/mtproto/tl/auth_key/dh_gen_response.rb +0 -37
- data/lib/mtproto/tl/auth_key/req_dh_params.rb +0 -31
- data/lib/mtproto/tl/auth_key/req_pq_multi.rb +0 -18
- data/lib/mtproto/tl/auth_key/res_pq.rb +0 -62
- data/lib/mtproto/tl/auth_key/server_dh_params.rb +0 -43
- data/lib/mtproto/tl/auth_key/set_client_dh_params.rb +0 -25
- data/lib/mtproto/tl/code_settings.rb +0 -25
- data/lib/mtproto/tl/config.rb +0 -124
- data/lib/mtproto/tl/method_builder.rb +0 -29
- data/lib/mtproto/tl/rpc/auth/authorization.rb +0 -107
- data/lib/mtproto/tl/rpc/auth/send_code.rb +0 -28
- data/lib/mtproto/tl/rpc/auth/sent_code.rb +0 -36
- data/lib/mtproto/tl/rpc/auth/sign_in.rb +0 -32
- data/lib/mtproto/tl/rpc/contacts/contacts.rb +0 -155
- data/lib/mtproto/tl/rpc/contacts/get_contacts.rb +0 -18
- data/lib/mtproto/tl/rpc/help/config.rb +0 -35
- data/lib/mtproto/tl/rpc/help/get_config.rb +0 -17
- data/lib/mtproto/tl/rpc/messages/send_message.rb +0 -43
- data/lib/mtproto/tl/rpc/messages/updates.rb +0 -87
- data/lib/mtproto/tl/rpc/ping.rb +0 -18
- data/lib/mtproto/tl/rpc/pong.rb +0 -46
- data/lib/mtproto/tl/rpc/updates/difference.rb +0 -332
- data/lib/mtproto/tl/rpc/updates/get_difference.rb +0 -42
- data/lib/mtproto/tl/rpc/updates/get_state.rb +0 -17
- data/lib/mtproto/tl/rpc/updates/state.rb +0 -59
- data/lib/mtproto/tl/rpc/users/get_users.rb +0 -25
- data/lib/mtproto/tl/rpc/users/users.rb +0 -99
- data/lib/mtproto/tl/sent_code.rb +0 -128
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require_relative '../../gzip_packed'
|
|
4
|
-
require_relative '../../rpc_error'
|
|
5
|
-
|
|
6
|
-
module MTProto
|
|
7
|
-
module TL
|
|
8
|
-
module RPC
|
|
9
|
-
module Users
|
|
10
|
-
class Users
|
|
11
|
-
VECTOR_CONSTRUCTOR = 0x1cb5c415
|
|
12
|
-
USER_CONSTRUCTOR = 0x020b1422
|
|
13
|
-
|
|
14
|
-
def self.parse(response)
|
|
15
|
-
offset = 0
|
|
16
|
-
|
|
17
|
-
constructor = response[offset, 4].unpack1('L<')
|
|
18
|
-
offset += 4
|
|
19
|
-
|
|
20
|
-
if constructor == TL::GzipPacked::CONSTRUCTOR
|
|
21
|
-
response = TL::GzipPacked.unpack(response)
|
|
22
|
-
constructor = response[0, 4].unpack1('L<')
|
|
23
|
-
offset = 4
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
if constructor == TL::RpcError::CONSTRUCTOR
|
|
27
|
-
error = TL::RpcError.deserialize(response)
|
|
28
|
-
raise MTProto::RpcError.new(error.error_code, error.error_message)
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
# Expect Vector<User>
|
|
32
|
-
raise "Expected Vector constructor, got 0x#{constructor.to_s(16)}" unless constructor == VECTOR_CONSTRUCTOR
|
|
33
|
-
|
|
34
|
-
count = response[offset, 4].unpack1('L<')
|
|
35
|
-
offset += 4
|
|
36
|
-
|
|
37
|
-
users = []
|
|
38
|
-
count.times do
|
|
39
|
-
user_constructor = response[offset, 4].unpack1('L<')
|
|
40
|
-
offset += 4
|
|
41
|
-
|
|
42
|
-
next unless user_constructor == USER_CONSTRUCTOR
|
|
43
|
-
|
|
44
|
-
# Parse User: flags:# flags2:# id:long access_hash:flags.0?long first_name:flags.1?string ...
|
|
45
|
-
flags = response[offset, 4].unpack1('L<')
|
|
46
|
-
offset += 4
|
|
47
|
-
|
|
48
|
-
flags2 = response[offset, 4].unpack1('L<')
|
|
49
|
-
offset += 4
|
|
50
|
-
|
|
51
|
-
id = response[offset, 8].unpack1('Q<')
|
|
52
|
-
offset += 8
|
|
53
|
-
|
|
54
|
-
access_hash = nil
|
|
55
|
-
if (flags & (1 << 0)) != 0
|
|
56
|
-
access_hash = response[offset, 8].unpack1('Q<')
|
|
57
|
-
offset += 8
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
first_name = nil
|
|
61
|
-
if (flags & (1 << 1)) != 0
|
|
62
|
-
len = response[offset].unpack1('C')
|
|
63
|
-
offset += 1
|
|
64
|
-
first_name = response[offset, len]
|
|
65
|
-
offset += len
|
|
66
|
-
padding = (4 - ((1 + len) % 4)) % 4
|
|
67
|
-
offset += padding
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
last_name = nil
|
|
71
|
-
if (flags & (1 << 2)) != 0
|
|
72
|
-
len = response[offset].unpack1('C')
|
|
73
|
-
offset += 1
|
|
74
|
-
last_name = response[offset, len]
|
|
75
|
-
offset += len
|
|
76
|
-
padding = (4 - ((1 + len) % 4)) % 4
|
|
77
|
-
offset += padding
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
users << {
|
|
81
|
-
id: id,
|
|
82
|
-
access_hash: access_hash,
|
|
83
|
-
first_name: first_name,
|
|
84
|
-
last_name: last_name,
|
|
85
|
-
flags: flags,
|
|
86
|
-
flags2: flags2
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
# Skip remaining fields - we don't need them for this test
|
|
90
|
-
break
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
users
|
|
94
|
-
end
|
|
95
|
-
end
|
|
96
|
-
end
|
|
97
|
-
end
|
|
98
|
-
end
|
|
99
|
-
end
|
data/lib/mtproto/tl/sent_code.rb
DELETED
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module MTProto
|
|
4
|
-
module TL
|
|
5
|
-
class SentCode
|
|
6
|
-
CONSTRUCTOR = 0x5e002502
|
|
7
|
-
|
|
8
|
-
attr_reader :flags, :type, :phone_code_hash, :next_type, :timeout
|
|
9
|
-
|
|
10
|
-
def self.deserialize(data)
|
|
11
|
-
offset = 4
|
|
12
|
-
|
|
13
|
-
flags = data[offset, 4].unpack1('L<')
|
|
14
|
-
offset += 4
|
|
15
|
-
|
|
16
|
-
type, type_bytes_read = SentCodeType.deserialize_from(data[offset..])
|
|
17
|
-
offset += type_bytes_read
|
|
18
|
-
|
|
19
|
-
phone_code_hash_length = data[offset].ord
|
|
20
|
-
offset += 1
|
|
21
|
-
|
|
22
|
-
phone_code_hash = data[offset, phone_code_hash_length]
|
|
23
|
-
offset += phone_code_hash_length
|
|
24
|
-
|
|
25
|
-
padding = (4 - ((phone_code_hash_length + 1) % 4)) % 4
|
|
26
|
-
offset += padding
|
|
27
|
-
|
|
28
|
-
next_type = nil
|
|
29
|
-
if (flags & (1 << 1)) != 0
|
|
30
|
-
next_type, next_type_bytes_read = CodeType.deserialize_from(data[offset..])
|
|
31
|
-
offset += next_type_bytes_read
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
timeout = nil
|
|
35
|
-
if (flags & (1 << 2)) != 0
|
|
36
|
-
timeout = data[offset, 4].unpack1('L<')
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
new(
|
|
40
|
-
flags: flags,
|
|
41
|
-
type: type,
|
|
42
|
-
phone_code_hash: phone_code_hash,
|
|
43
|
-
next_type: next_type,
|
|
44
|
-
timeout: timeout
|
|
45
|
-
)
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
def initialize(flags:, type:, phone_code_hash:, next_type: nil, timeout: nil)
|
|
49
|
-
@flags = flags
|
|
50
|
-
@type = type
|
|
51
|
-
@phone_code_hash = phone_code_hash
|
|
52
|
-
@next_type = next_type
|
|
53
|
-
@timeout = timeout
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
def to_h
|
|
57
|
-
{
|
|
58
|
-
phone_code_hash: @phone_code_hash,
|
|
59
|
-
type: @type,
|
|
60
|
-
next_type: @next_type,
|
|
61
|
-
timeout: @timeout
|
|
62
|
-
}.compact
|
|
63
|
-
end
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
module SentCodeType
|
|
67
|
-
def self.deserialize_from(data)
|
|
68
|
-
constructor = data[0, 4].unpack1('L<')
|
|
69
|
-
offset = 4
|
|
70
|
-
|
|
71
|
-
case constructor
|
|
72
|
-
when 0x3dbb5986 # auth.sentCodeTypeApp
|
|
73
|
-
length = data[offset, 4].unpack1('L<')
|
|
74
|
-
offset += 4
|
|
75
|
-
[{ _: :sent_code_type_app, length: length }, offset]
|
|
76
|
-
when 0xc000bba2 # auth.sentCodeTypeSms
|
|
77
|
-
length = data[offset, 4].unpack1('L<')
|
|
78
|
-
offset += 4
|
|
79
|
-
[{ _: :sent_code_type_sms, length: length }, offset]
|
|
80
|
-
when 0x5353e5a7 # auth.sentCodeTypeCall
|
|
81
|
-
length = data[offset, 4].unpack1('L<')
|
|
82
|
-
offset += 4
|
|
83
|
-
[{ _: :sent_code_type_call, length: length }, offset]
|
|
84
|
-
when 0xab03c6d9 # auth.sentCodeTypeFlashCall
|
|
85
|
-
pattern_length = data[offset].ord
|
|
86
|
-
offset += 1
|
|
87
|
-
pattern = data[offset, pattern_length]
|
|
88
|
-
offset += pattern_length
|
|
89
|
-
padding = (4 - ((pattern_length + 1) % 4)) % 4
|
|
90
|
-
offset += padding
|
|
91
|
-
[{ _: :sent_code_type_flash_call, pattern: pattern }, offset]
|
|
92
|
-
when 0x82006484 # auth.sentCodeTypeMissedCall
|
|
93
|
-
prefix_length = data[offset].ord
|
|
94
|
-
offset += 1
|
|
95
|
-
prefix = data[offset, prefix_length]
|
|
96
|
-
offset += prefix_length
|
|
97
|
-
padding = (4 - ((prefix_length + 1) % 4)) % 4
|
|
98
|
-
offset += padding
|
|
99
|
-
length = data[offset, 4].unpack1('L<')
|
|
100
|
-
offset += 4
|
|
101
|
-
[{ _: :sent_code_type_missed_call, prefix: prefix, length: length }, offset]
|
|
102
|
-
else
|
|
103
|
-
raise "Unknown SentCodeType constructor: 0x#{constructor.to_s(16)}"
|
|
104
|
-
end
|
|
105
|
-
end
|
|
106
|
-
end
|
|
107
|
-
|
|
108
|
-
module CodeType
|
|
109
|
-
def self.deserialize_from(data)
|
|
110
|
-
constructor = data[0, 4].unpack1('L<')
|
|
111
|
-
offset = 4
|
|
112
|
-
|
|
113
|
-
case constructor
|
|
114
|
-
when 0x72a3158c # codeTypeSms
|
|
115
|
-
[{ _: :code_type_sms }, offset]
|
|
116
|
-
when 0x741cd3e3 # codeTypeCall
|
|
117
|
-
[{ _: :code_type_call }, offset]
|
|
118
|
-
when 0x226ccefb # codeTypeFlashCall
|
|
119
|
-
[{ _: :code_type_flash_call }, offset]
|
|
120
|
-
when 0xd61ad6ee # codeTypeMissedCall
|
|
121
|
-
[{ _: :code_type_missed_call }, offset]
|
|
122
|
-
else
|
|
123
|
-
raise "Unknown CodeType constructor: 0x#{constructor.to_s(16)}"
|
|
124
|
-
end
|
|
125
|
-
end
|
|
126
|
-
end
|
|
127
|
-
end
|
|
128
|
-
end
|