"""Various helpers not related to the Telegram API itself""" import os import struct from hashlib import sha1, sha256 from .crypto import AES from .errors import SecurityError, BrokenAuthKeyError from .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('