Skip to content

Commit 5e157c2

Browse files
committed
Remove old MTProto v1.0 code
1 parent 3f755ee commit 5e157c2

3 files changed

Lines changed: 9 additions & 57 deletions

File tree

pyrogram/crypto/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,6 @@
1717
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
1818

1919
from .ige import IGE
20-
from .kdf import KDF2
20+
from .kdf import KDF
2121
from .prime import Prime
2222
from .rsa import RSA

pyrogram/crypto/kdf.py

Lines changed: 1 addition & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -19,23 +19,7 @@
1919
from hashlib import sha256
2020

2121

22-
# class KDF:
23-
# def __new__(cls, auth_key: bytes, msg_key: bytes, outgoing: bool) -> tuple:
24-
# # https://core.telegram.org/mtproto/description#defining-aes-key-and-initialization-vector
25-
# x = 0 if outgoing else 8
26-
#
27-
# sha1_a = sha1(msg_key + auth_key[x:x + 32]).digest()
28-
# sha1_b = sha1(auth_key[x + 32:x + 48] + msg_key + auth_key[x + 48:x + 64]).digest()
29-
# sha1_c = sha1(auth_key[x + 64:x + 96] + msg_key).digest()
30-
# sha1_d = sha1(msg_key + auth_key[x + 96:x + 128]).digest()
31-
#
32-
# aes_key = sha1_a[:8] + sha1_b[8:20] + sha1_c[4:16]
33-
# aes_iv = sha1_a[8:20] + sha1_b[:8] + sha1_c[16:20] + sha1_d[:8]
34-
#
35-
# return aes_key, aes_iv
36-
37-
38-
class KDF2:
22+
class KDF:
3923
def __new__(cls, auth_key: bytes, msg_key: bytes, outgoing: bool) -> tuple:
4024
# https://core.telegram.org/mtproto/description#defining-aes-key-and-initialization-vector
4125
x = 0 if outgoing else 8

pyrogram/session/session.py

Lines changed: 7 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
from pyrogram.api.core import Message, Object, MsgContainer, Long, FutureSalt, Int
3333
from pyrogram.api.errors import Error
3434
from pyrogram.connection import Connection
35-
from pyrogram.crypto import IGE, KDF2
35+
from pyrogram.crypto import IGE, KDF
3636
from .internals import MsgId, MsgFactory, DataCenter
3737

3838
log = logging.getLogger(__name__)
@@ -178,15 +178,7 @@ def restart(self):
178178
self.stop()
179179
self.start()
180180

181-
# def pack(self, message: Message) -> bytes:
182-
# data = Long(self.current_salt.salt) + self.session_id + message.write()
183-
# msg_key = sha1(data).digest()[-16:]
184-
# aes_key, aes_iv = KDF(self.auth_key, msg_key, True)
185-
# padding = urandom(-len(data) % 16)
186-
#
187-
# return self.auth_key_id + msg_key + IGE.encrypt(data + padding, aes_key, aes_iv)
188-
189-
def pack2(self, message: Message):
181+
def pack(self, message: Message):
190182
data = Long(self.current_salt.salt) + self.session_id + message.write()
191183
# MTProto 2.0 requires a minimum of 12 padding bytes.
192184
# I don't get why it says up to 1024 when what it actually needs after the
@@ -197,39 +189,15 @@ def pack2(self, message: Message):
197189
# 88 = 88 + 0 (outgoing message)
198190
msg_key_large = sha256(self.auth_key[88: 88 + 32] + data + padding).digest()
199191
msg_key = msg_key_large[8:24]
200-
aes_key, aes_iv = KDF2(self.auth_key, msg_key, True)
192+
aes_key, aes_iv = KDF(self.auth_key, msg_key, True)
201193

202194
return self.auth_key_id + msg_key + IGE.encrypt(data + padding, aes_key, aes_iv)
203195

204-
# def unpack(self, b: BytesIO) -> Message:
205-
# assert b.read(8) == self.auth_key_id, b.getvalue()
206-
#
207-
# msg_key = b.read(16)
208-
# aes_key, aes_iv = KDF(self.auth_key, msg_key, False)
209-
# data = BytesIO(IGE.decrypt(b.read(), aes_key, aes_iv))
210-
# data.read(8) # Server salt
211-
#
212-
# # https://core.telegram.org/mtproto/security_guidelines#checking-session-id
213-
# assert data.read(8) == self.session_id
214-
#
215-
# message = Message.read(data)
216-
#
217-
# # https://core.telegram.org/mtproto/security_guidelines#checking-sha1-hash-value-of-msg-key
218-
# # https://core.telegram.org/mtproto/security_guidelines#checking-message-length
219-
# # 32 = salt (8) + session_id (8) + msg_id (8) + seq_no (4) + length (4)
220-
# assert msg_key == sha1(data.getvalue()[:32 + message.length]).digest()[-16:]
221-
#
222-
# # https://core.telegram.org/mtproto/security_guidelines#checking-msg-id
223-
# # TODO: check for lower msg_ids
224-
# assert message.msg_id % 2 != 0
225-
#
226-
# return message
227-
228-
def unpack2(self, b: BytesIO) -> Message:
196+
def unpack(self, b: BytesIO) -> Message:
229197
assert b.read(8) == self.auth_key_id, b.getvalue()
230198

231199
msg_key = b.read(16)
232-
aes_key, aes_iv = KDF2(self.auth_key, msg_key, False)
200+
aes_key, aes_iv = KDF(self.auth_key, msg_key, False)
233201
data = BytesIO(IGE.decrypt(b.read(), aes_key, aes_iv))
234202
data.read(8)
235203

@@ -268,7 +236,7 @@ def worker(self):
268236

269237
def unpack_dispatch_and_ack(self, packet: bytes):
270238
# TODO: A better dispatcher
271-
data = self.unpack2(BytesIO(packet))
239+
data = self.unpack(BytesIO(packet))
272240

273241
messages = (
274242
data.body.messages
@@ -398,7 +366,7 @@ def _send(self, data: Object, wait_response: bool = True):
398366
if wait_response:
399367
self.results[msg_id] = Result()
400368

401-
payload = self.pack2(message)
369+
payload = self.pack(message)
402370

403371
try:
404372
self.connection.send(payload)

0 commit comments

Comments
 (0)