Exemple #1
0
 def set_blocksize(self, blocksize):
     """
     docstring
     """
     self.blocksize = int_to_iso711(int(math.log(blocksize, 2)))
Exemple #2
0
 def set_alg(self, algorithm):
     """
     docstring
     """
     self.alg_id = int_to_iso711(algorithm.value)
Exemple #3
0
class ZISOFS(commonZisofs):
    # HEADER
    hdr_magic = b'\x37\xE4\x53\x96\xC9\xDB\xD6\x07'  # Magick Header
    size = None  # Uncompressed size
    hdr_size = int_to_iso711(4)  # Header size

    # Array
    pointers_size = 4

    @staticmethod
    def from_header(header):
        """
        docstring
        """

        header = header[0:ZISOFS.get_header_size()]

        # Make sure is bytes
        if not isinstance(header, (bytes, bytearray)):
            raise ValueError
        # Header magic
        if header[0:8] != ZISOFS.hdr_magic:
            raise NotCompressedFile

        # Correct size
        if len(header) != 4 * iso711_to_int(ZISOFS.hdr_size):
            raise IllegalZisofsFormat

        # Header size
        if header[12:13] != ZISOFS.hdr_size:
            raise IllegalZisofsFormat

        zisofs_obj = ZISOFS()

        # File size
        zisofs_obj.size = header[8:12]

        # Blocksize
        if iso711_to_int(header[13:14]) not in default_block_sizes:
            raise IllegalZisofsFormat
        zisofs_obj.blocksize = header[13:14]

        return zisofs_obj

    def set_size(self, size):
        """
        docstring
        """
        self.size = int_to_iso731(size)

    def get_size(self):
        """
        docstring
        """
        return iso731_to_int(self.size)

    def set_blocksize(self, blocksize):
        """
        docstring
        """
        self.blocksize = int_to_iso711(int(math.log(blocksize, 2)))

    def get_algorithm(self):
        """
        docstring
        """
        return Algorithm(1)  # Force return ZLIB compressor

    def __bytes__(self):
        header = bytearray()
        header.extend(self.hdr_magic)  # 8
        header.extend(self.size)  # 4
        header.extend(self.hdr_size)  # 1
        header.extend(self.blocksize)  # 1
        header.extend(bytearray(2))  # 2

        return bytes(header)
Exemple #4
0
class ZISOFSv2(commonZisofs):

    # Header
    hdr_magic = b'\xEF\x22\x55\xA1\xBC\x1B\x95\xA0'  # Magick Header
    hdr_version = int_to_iso711(0)
    hdr_size = int_to_iso711(6)  # 24 bytes size
    alg_id = None
    size = None

    # Array
    pointers_size = 8

    @staticmethod
    def from_header(header):
        """
        docstring
        """

        header = header[0:ZISOFSv2.get_header_size()]
        # Make sure is bytes
        if not isinstance(header, (bytes, bytearray)):
            raise ValueError
        # Header magic
        if header[0:8] != ZISOFSv2.hdr_magic:
            raise NotCompressedFile

        # Correct size
        if len(header) != 4 * iso711_to_int(ZISOFSv2.hdr_size):
            raise IllegalZisofsFormat

        # Header size
        if header[9:10] != ZISOFSv2.hdr_size:
            raise IllegalZisofsFormat

        zisofs_obj = ZISOFSv2()

        # Algorithm
        if iso711_to_int(header[10:11]) == 0:
            raise IllegalZisofsFormat
        zisofs_obj.alg_id = header[10:11]

        # Blocksize
        if iso711_to_int(header[11:12]) not in default_block_sizes:
            raise IllegalZisofsFormat
        zisofs_obj.blocksize = header[11:12]

        # File size
        zisofs_obj.size = header[12:20]

        return zisofs_obj

    def set_size(self, size):
        """
        docstring
        """
        self.size = int_to_uint64(size)

    def get_size(self):
        """
        docstring
        """
        return uint64_to_int(self.size)

    def set_blocksize(self, blocksize):
        """
        docstring
        """
        self.blocksize = int_to_iso711(int(math.log(blocksize, 2)))

    def set_alg(self, algorithm):
        """
        docstring
        """
        self.alg_id = int_to_iso711(algorithm.value)

    def get_algorithm(self):
        """
        docstring
        """
        return Algorithm(iso711_to_int(self.alg_id))

    def __bytes__(self):
        header = bytearray()
        header.extend(self.hdr_magic)  # 8
        header.extend(self.hdr_version)  # 1
        header.extend(self.hdr_size)  # 1
        header.extend(self.alg_id)  # 1
        header.extend(self.blocksize)  # 1
        header.extend(self.size)  # 8
        header.extend(bytearray(4))  # 4

        return bytes(header)