"""Various helpers not related to the Telegram API itself""" import os import struct from hashlib import sha1, sha256 from telethon.crypto import AES from telethon.errors import SecurityError from telethon.extensions import BinaryReader # region Multiple utilities def generate_random_long(signed=True): """Generates a random long integer (8 bytes), which is optionally signed""" return int.from_bytes(os.urandom(8), signed=signed, byteorder='little') def ensure_parent_dir_exists(file_path): """Ensures that the parent directory exists""" parent = os.path.dirname(file_path) if parent: os.makedirs(parent, exist_ok=True) # endregion # 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('