import math import hashlib from package import package class package_spliter: def __init__(self, target: package, mtu: int = 256) -> None: self.__target = target self.__mtu = mtu @property def mtu(self) -> int: return self.__mtu def __get_number_size(self) -> int: return 4 def __get_header_size(self) -> int: return self.__get_number_size() * 3 + self.__get_crc_size() def __get_crc_size(self) -> int: return 20 def __convert_number(self, number: int) -> bytes: return number.to_bytes(self.__get_number_size(), "big") def __calc_crc(self, part: bytes) -> bytes: return hashlib.sha1(part, usedforsecurity = False).digest() def __count_parts(self) -> int: single_package = self.mtu - self.__count_header_size() if single_package <= 0: raise RuntimeError("Package size is lower than zero.") return math.ceil(len(self.__content) / single_package)