Skip to content

Commit 87b2c4b

Browse files
committed
Comment out MTProto 1.0 implementation
1 parent a3e5ba8 commit 87b2c4b

3 files changed

Lines changed: 47 additions & 47 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 KDF, KDF2
20+
from .kdf import KDF2
2121
from .prime import Prime
2222
from .rsa import RSA

pyrogram/crypto/kdf.py

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -16,23 +16,23 @@
1616
# You should have received a copy of the GNU Lesser General Public License
1717
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
1818

19-
from hashlib import sha1, sha256
19+
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
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
3636

3737

3838
class KDF2:

pyrogram/session/session.py

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

3838
log = logging.getLogger(__name__)
@@ -174,13 +174,13 @@ def restart(self):
174174
self.stop()
175175
self.start()
176176

177-
def pack(self, message: Message) -> bytes:
178-
data = Long(self.current_salt.salt) + self.session_id + message.write()
179-
msg_key = sha1(data).digest()[-16:]
180-
aes_key, aes_iv = KDF(self.auth_key, msg_key, True)
181-
padding = urandom(-len(data) % 16)
182-
183-
return self.auth_key_id + msg_key + IGE.encrypt(data + padding, aes_key, aes_iv)
177+
# def pack(self, message: Message) -> bytes:
178+
# data = Long(self.current_salt.salt) + self.session_id + message.write()
179+
# msg_key = sha1(data).digest()[-16:]
180+
# aes_key, aes_iv = KDF(self.auth_key, msg_key, True)
181+
# padding = urandom(-len(data) % 16)
182+
#
183+
# return self.auth_key_id + msg_key + IGE.encrypt(data + padding, aes_key, aes_iv)
184184

185185
def pack2(self, message: Message):
186186
data = Long(self.current_salt.salt) + self.session_id + message.write()
@@ -197,29 +197,29 @@ def pack2(self, message: Message):
197197

198198
return self.auth_key_id + msg_key + IGE.encrypt(data + padding, aes_key, aes_iv)
199199

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

224224
def unpack2(self, b: BytesIO) -> Message:
225225
assert b.read(8) == self.auth_key_id, b.getvalue()

0 commit comments

Comments
 (0)