fix(AuthKey): key_id is a signed long, not unsigned

This commit is contained in:
habcawa 2025-05-20 16:19:09 +02:00
parent 59da66e105
commit c97e6023c4
2 changed files with 3 additions and 3 deletions

View File

@ -39,7 +39,7 @@ class AuthKey:
with BinaryReader(sha1(self._key).digest()) as reader:
self.aux_hash = reader.read_long(signed=False)
reader.read(4)
self.key_id = reader.read_long(signed=False)
self.key_id = reader.read_long(signed=True)
# TODO This doesn't really fit here, it's only used in authentication
def calc_new_nonce_hash(self, new_nonce, number):

View File

@ -144,7 +144,7 @@ class MTProtoState:
msg_key = msg_key_large[8:24]
aes_key, aes_iv = self._calc_key(self.auth_key.key, msg_key, True)
key_id = struct.pack('<Q', self.auth_key.key_id)
key_id = struct.pack('<q', self.auth_key.key_id)
return (key_id + msg_key +
AES.encrypt_ige(data + padding, aes_key, aes_iv))
@ -158,7 +158,7 @@ class MTProtoState:
raise InvalidBufferError(body)
# TODO Check salt, session_id and sequence_number
key_id = struct.unpack('<Q', body[:8])[0]
key_id = struct.unpack('<q', body[:8])[0]
if key_id != self.auth_key.key_id:
raise SecurityError('Server replied with an invalid auth key')