Skip to content

Commit f0c801b

Browse files
committed
Rename AES class methods and add ctr256_encrypt
1 parent c531e6d commit f0c801b

File tree

3 files changed

+14
-13
lines changed

3 files changed

+14
-13
lines changed

pyrogram/crypto/aes.py

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -38,31 +38,32 @@
3838
# TODO: Ugly IFs
3939
class AES:
4040
@classmethod
41-
def ige_encrypt(cls, data: bytes, key: bytes, iv: bytes) -> bytes:
41+
def ige256_encrypt(cls, data: bytes, key: bytes, iv: bytes) -> bytes:
4242
if is_fast:
43-
return tgcrypto.ige_encrypt(data, key, iv)
43+
return tgcrypto.ige256_encrypt(data, key, iv)
4444
else:
4545
return cls.ige(data, key, iv, True)
4646

4747
@classmethod
48-
def ige_decrypt(cls, data: bytes, key: bytes, iv: bytes) -> bytes:
48+
def ige256_decrypt(cls, data: bytes, key: bytes, iv: bytes) -> bytes:
4949
if is_fast:
50-
return tgcrypto.ige_decrypt(data, key, iv)
50+
return tgcrypto.ige256_decrypt(data, key, iv)
5151
else:
5252
return cls.ige(data, key, iv, False)
5353

5454
@staticmethod
55-
def ctr_decrypt(data: bytes, key: bytes, iv: bytes, offset: int) -> bytes:
56-
replace = int.to_bytes(offset // 16, 4, "big")
57-
iv = iv[:-4] + replace
58-
55+
def ctr256_encrypt(data: bytes, key: bytes, iv: bytes, state: bytes) -> bytes:
5956
if is_fast:
60-
return tgcrypto.ctr_decrypt(data, key, iv)
57+
return tgcrypto.ctr256_decrypt(data, key, iv, state)
6158
else:
6259
ctr = pyaes.AESModeOfOperationCTR(key)
6360
ctr._counter._counter = list(iv)
6461
return ctr.decrypt(data)
6562

63+
@staticmethod
64+
def ctr256_decrypt(data: bytes, key: bytes, iv: bytes, state: bytes) -> bytes:
65+
return AES.ctr256_encrypt(data, key, iv, state)
66+
6667
@staticmethod
6768
def xor(a: bytes, b: bytes) -> bytes:
6869
return int.to_bytes(

pyrogram/session/auth.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ def create(self):
163163

164164
server_nonce = int.from_bytes(server_nonce, "little", signed=True)
165165

166-
answer_with_hash = AES.ige_decrypt(encrypted_answer, tmp_aes_key, tmp_aes_iv)
166+
answer_with_hash = AES.ige256_decrypt(encrypted_answer, tmp_aes_key, tmp_aes_iv)
167167
answer = answer_with_hash[20:]
168168

169169
server_dh_inner_data = Object.read(BytesIO(answer))
@@ -192,7 +192,7 @@ def create(self):
192192
sha = sha1(data).digest()
193193
padding = urandom(- (len(data) + len(sha)) % 16)
194194
data_with_hash = sha + data + padding
195-
encrypted_data = AES.ige_encrypt(data_with_hash, tmp_aes_key, tmp_aes_iv)
195+
encrypted_data = AES.ige256_encrypt(data_with_hash, tmp_aes_key, tmp_aes_iv)
196196

197197
log.debug("Send set_client_DH_params")
198198
set_client_dh_params_answer = self.send(

pyrogram/session/session.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -222,14 +222,14 @@ def pack(self, message: Message):
222222
msg_key = msg_key_large[8:24]
223223
aes_key, aes_iv = KDF(self.auth_key, msg_key, True)
224224

225-
return self.auth_key_id + msg_key + AES.ige_encrypt(data + padding, aes_key, aes_iv)
225+
return self.auth_key_id + msg_key + AES.ige256_encrypt(data + padding, aes_key, aes_iv)
226226

227227
def unpack(self, b: BytesIO) -> Message:
228228
assert b.read(8) == self.auth_key_id, b.getvalue()
229229

230230
msg_key = b.read(16)
231231
aes_key, aes_iv = KDF(self.auth_key, msg_key, False)
232-
data = BytesIO(AES.ige_decrypt(b.read(), aes_key, aes_iv))
232+
data = BytesIO(AES.ige256_decrypt(b.read(), aes_key, aes_iv))
233233
data.read(8)
234234

235235
# https://core.telegram.org/mtproto/security_guidelines#checking-session-id

0 commit comments

Comments
 (0)