diff --git a/telethon/extensions/binary_reader.py b/telethon/extensions/binary_reader.py index 460bed96..1402083f 100644 --- a/telethon/extensions/binary_reader.py +++ b/telethon/extensions/binary_reader.py @@ -56,8 +56,11 @@ class BinaryReader: return int.from_bytes( self.read(bits // 8), byteorder='little', signed=signed) - def read(self, length): + def read(self, length=None): """Read the given amount of bytes.""" + if length is None: + return self.reader.read() + result = self.reader.read(length) if len(result) != length: raise BufferError( diff --git a/telethon/helpers.py b/telethon/helpers.py index 3c9af2cb..d97b8a9f 100644 --- a/telethon/helpers.py +++ b/telethon/helpers.py @@ -1,6 +1,11 @@ """Various helpers not related to the Telegram API itself""" -from hashlib import sha1, sha256 import os +import struct +from hashlib import sha1, sha256 + +from telethon.crypto import AES +from telethon.extensions import BinaryReader + # region Multiple utilities @@ -21,9 +26,48 @@ def ensure_parent_dir_exists(file_path): # region Cryptographic related utils +def pack_message(session, message): + """Packs a message following MtProto 2.0 guidelines""" + # See https://core.telegram.org/mtproto/description + data = struct.pack('