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.
Files changed (117) hide show
  1. checksums.yaml +4 -4
  2. data/.env.example +4 -0
  3. data/ext/aes_ige/extconf.rb +3 -9
  4. data/ext/factorization/extconf.rb +2 -0
  5. data/lib/mtproto/auth_key_generator.rb +66 -103
  6. data/lib/mtproto/binary.rb +21 -0
  7. data/lib/mtproto/client/api/check_password.rb +41 -0
  8. data/lib/mtproto/client/api/export_login_token.rb +27 -0
  9. data/lib/mtproto/client/api/get_updates_difference.rb +21 -0
  10. data/lib/mtproto/client/api/get_updates_state.rb +14 -0
  11. data/lib/mtproto/client/api/get_users.rb +14 -0
  12. data/lib/mtproto/client/api/import_login_token.rb +23 -0
  13. data/lib/mtproto/client/api/send_code.rb +21 -0
  14. data/lib/mtproto/client/api/sign_in.rb +27 -0
  15. data/lib/mtproto/client/api.rb +28 -0
  16. data/lib/mtproto/client/rpc/response.rb +63 -0
  17. data/lib/mtproto/client/rpc.rb +67 -107
  18. data/lib/mtproto/client.rb +176 -31
  19. data/lib/mtproto/crypto/dh_key_exchange.rb +1 -2
  20. data/lib/mtproto/crypto/dh_validator.rb +17 -19
  21. data/lib/mtproto/crypto/factorization.rb +1 -1
  22. data/lib/mtproto/crypto/rsa_key.rb +2 -2
  23. data/lib/mtproto/crypto/srp.rb +117 -0
  24. data/lib/mtproto/delegate_methods.rb +11 -0
  25. data/lib/mtproto/message/message.rb +85 -0
  26. data/lib/mtproto/session.rb +1 -1
  27. data/lib/mtproto/tl/constructors.rb +2269 -0
  28. data/lib/mtproto/tl/object.rb +25 -0
  29. data/lib/mtproto/tl/objects/account_password.rb +72 -0
  30. data/lib/mtproto/tl/objects/authorization.rb +73 -0
  31. data/lib/mtproto/tl/objects/check_password.rb +46 -0
  32. data/lib/mtproto/tl/objects/client_dh_inner_data.rb +47 -0
  33. data/lib/mtproto/tl/objects/dh_gen_response.rb +50 -0
  34. data/lib/mtproto/tl/objects/export_login_token.rb +51 -0
  35. data/lib/mtproto/tl/objects/get_config.rb +15 -0
  36. data/lib/mtproto/tl/objects/get_difference.rb +36 -0
  37. data/lib/mtproto/tl/objects/get_password.rb +15 -0
  38. data/lib/mtproto/tl/objects/get_state.rb +15 -0
  39. data/lib/mtproto/tl/objects/get_users.rb +20 -0
  40. data/lib/mtproto/tl/objects/help_config.rb +77 -0
  41. data/lib/mtproto/tl/objects/import_login_token.rb +39 -0
  42. data/lib/mtproto/tl/objects/init_connection.rb +59 -0
  43. data/lib/mtproto/tl/objects/invoke_with_layer.rb +22 -0
  44. data/lib/mtproto/tl/objects/login_token.rb +82 -0
  45. data/lib/mtproto/tl/objects/pq_inner_data.rb +69 -0
  46. data/lib/mtproto/tl/objects/req_dh_params.rb +65 -0
  47. data/lib/mtproto/tl/objects/req_pq_multi.rb +23 -0
  48. data/lib/mtproto/tl/objects/res_pq.rb +75 -0
  49. data/lib/mtproto/tl/objects/send_code.rb +50 -0
  50. data/lib/mtproto/tl/objects/sent_code.rb +79 -0
  51. data/lib/mtproto/tl/objects/server_dh_inner_data.rb +74 -0
  52. data/lib/mtproto/tl/objects/server_dh_params.rb +53 -0
  53. data/lib/mtproto/tl/objects/set_client_dh_params.rb +48 -0
  54. data/lib/mtproto/tl/objects/sign_in.rb +47 -0
  55. data/lib/mtproto/tl/objects/update.rb +80 -0
  56. data/lib/mtproto/tl/objects/update_short.rb +22 -0
  57. data/lib/mtproto/tl/objects/update_short_message.rb +67 -0
  58. data/lib/mtproto/tl/objects/updates_difference.rb +157 -0
  59. data/lib/mtproto/tl/objects/updates_state.rb +37 -0
  60. data/lib/mtproto/tl/objects/users.rb +86 -0
  61. data/lib/mtproto/transport/abridged_packet_codec.rb +35 -12
  62. data/lib/mtproto/transport/connection.rb +23 -0
  63. data/lib/mtproto/transport/errors.rb +11 -0
  64. data/lib/mtproto/transport/packet.rb +19 -0
  65. data/lib/mtproto/transport/tcp_connection.rb +57 -46
  66. data/lib/mtproto/{tl → type}/bad_msg_notification.rb +11 -11
  67. data/lib/mtproto/{tl → type}/client_dh_inner_data.rb +1 -1
  68. data/lib/mtproto/{tl → type}/gzip_packed.rb +6 -4
  69. data/lib/mtproto/{tl → type}/message.rb +3 -3
  70. data/lib/mtproto/{tl → type}/msg_container.rb +1 -1
  71. data/lib/mtproto/{tl → type}/new_session_created.rb +1 -1
  72. data/lib/mtproto/{tl/p_q_inner_data.rb → type/pq_inner_data.rb} +1 -1
  73. data/lib/mtproto/{tl → type}/rpc_error.rb +1 -2
  74. data/lib/mtproto/{tl → type}/serializer.rb +1 -1
  75. data/lib/mtproto/{tl → type}/server_dh_inner_data.rb +1 -1
  76. data/lib/mtproto/updates_poller.rb +37 -33
  77. data/lib/mtproto/version.rb +1 -1
  78. data/lib/mtproto.rb +21 -22
  79. data/scripts/generate_constructors.rb +65 -0
  80. metadata +80 -49
  81. data/lib/mtproto/rpc/get_config.rb +0 -37
  82. data/lib/mtproto/rpc/get_contacts.rb +0 -22
  83. data/lib/mtproto/rpc/get_updates_difference.rb +0 -33
  84. data/lib/mtproto/rpc/get_updates_state.rb +0 -22
  85. data/lib/mtproto/rpc/get_users.rb +0 -22
  86. data/lib/mtproto/rpc/ping.rb +0 -26
  87. data/lib/mtproto/rpc/send_code.rb +0 -44
  88. data/lib/mtproto/rpc/send_message.rb +0 -31
  89. data/lib/mtproto/rpc/sign_in.rb +0 -52
  90. data/lib/mtproto/tl/auth_key/dh_gen_response.rb +0 -37
  91. data/lib/mtproto/tl/auth_key/req_dh_params.rb +0 -31
  92. data/lib/mtproto/tl/auth_key/req_pq_multi.rb +0 -18
  93. data/lib/mtproto/tl/auth_key/res_pq.rb +0 -62
  94. data/lib/mtproto/tl/auth_key/server_dh_params.rb +0 -43
  95. data/lib/mtproto/tl/auth_key/set_client_dh_params.rb +0 -25
  96. data/lib/mtproto/tl/code_settings.rb +0 -25
  97. data/lib/mtproto/tl/config.rb +0 -124
  98. data/lib/mtproto/tl/method_builder.rb +0 -29
  99. data/lib/mtproto/tl/rpc/auth/authorization.rb +0 -107
  100. data/lib/mtproto/tl/rpc/auth/send_code.rb +0 -28
  101. data/lib/mtproto/tl/rpc/auth/sent_code.rb +0 -36
  102. data/lib/mtproto/tl/rpc/auth/sign_in.rb +0 -32
  103. data/lib/mtproto/tl/rpc/contacts/contacts.rb +0 -155
  104. data/lib/mtproto/tl/rpc/contacts/get_contacts.rb +0 -18
  105. data/lib/mtproto/tl/rpc/help/config.rb +0 -35
  106. data/lib/mtproto/tl/rpc/help/get_config.rb +0 -17
  107. data/lib/mtproto/tl/rpc/messages/send_message.rb +0 -43
  108. data/lib/mtproto/tl/rpc/messages/updates.rb +0 -87
  109. data/lib/mtproto/tl/rpc/ping.rb +0 -18
  110. data/lib/mtproto/tl/rpc/pong.rb +0 -46
  111. data/lib/mtproto/tl/rpc/updates/difference.rb +0 -332
  112. data/lib/mtproto/tl/rpc/updates/get_difference.rb +0 -42
  113. data/lib/mtproto/tl/rpc/updates/get_state.rb +0 -17
  114. data/lib/mtproto/tl/rpc/updates/state.rb +0 -59
  115. data/lib/mtproto/tl/rpc/users/get_users.rb +0 -25
  116. data/lib/mtproto/tl/rpc/users/users.rb +0 -99
  117. 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
@@ -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