package_spliter.py 998 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. import math
  2. import hashlib
  3. from package import package
  4. class package_spliter:
  5. def __init__(self, target: package, mtu: int = 256) -> None:
  6. self.__target = target
  7. self.__mtu = mtu
  8. @property
  9. def mtu(self) -> int:
  10. return self.__mtu
  11. def __get_number_size(self) -> int:
  12. return 4
  13. def __get_header_size(self) -> int:
  14. return self.__get_number_size() * 3 + self.__get_crc_size()
  15. def __get_crc_size(self) -> int:
  16. return 20
  17. def __convert_number(self, number: int) -> bytes:
  18. return number.to_bytes(self.__get_number_size(), "big")
  19. def __calc_crc(self, part: bytes) -> bytes:
  20. return hashlib.sha1(part, usedforsecurity = False).digest()
  21. def __count_parts(self) -> int:
  22. single_package = self.mtu - self.__count_header_size()
  23. if single_package <= 0:
  24. raise RuntimeError("Package size is lower than zero.")
  25. return math.ceil(len(self.__content) / single_package)