Exemplo n.º 1
0
    def parse_header():
        header = buffer[:header_size()]
        (magic_header, header_checksum, filetable_checksum, version, nb_files,
         data_size) = struct.unpack(header_structure(), header)

        magic_header = magic_header.decode('utf-8')
        archive = {"version": version}

        if magic_header != 'WRPGPIAF':
            raise ParserMagicHeaderError('Bad Magic Header')

        calculated_header_checksum = zlib.crc32(
            buffer[header_check_size():header_check_size() +
                   header_data_size()]) & 0xffffffff

        if calculated_header_checksum != header_checksum:
            raise ParserChecksumError('Bad Header Checksum : {} != {}'.format(
                calculated_header_checksum, header_checksum))

        calculated_file_table_checksum = zlib.crc32(
            buffer[header_size():header_size() +
                   nb_files * file_entry_size()]) & 0xffffffff

        if calculated_file_table_checksum != filetable_checksum:
            raise ParserChecksumError(
                'Bad Filetable Checksum : {} != {}'.format(
                    calculated_file_table_checksum, filetable_checksum))

        if len(buffer) != data_size + get_data_offset(nb_files):
            raise ParserDatasizeError('Bad Data Size')

        return archive, nb_files
Exemplo n.º 2
0
def pack_header(archive, packed_filetable):
    structure = header_structure()
    data_size = sum([len(f["data"]) for f in archive["file_entries"]])
    header_data = struct.pack(header_data_structure(), archive["version"],
                              len(archive["file_entries"]), data_size)

    return struct.pack(structure, b"WRPGPIAF", zlib.crc32(header_data),
                       zlib.crc32(packed_filetable), archive["version"],
                       len(archive["file_entries"]), data_size)
Exemplo n.º 3
0
def pack_header(archive, packed_filetable):
    structure = header_structure()
    data_size = sum([len(f["data"]) for f in archive["file_entries"]])
    header_data = struct.pack(header_data_structure(), archive["version"], len(archive["file_entries"]), data_size)

    return struct.pack(structure,
        b"WRPGPIAF",
        zlib.crc32(header_data),
        zlib.crc32(packed_filetable),
        archive["version"],
        len(archive["file_entries"]),
        data_size
    )
Exemplo n.º 4
0
    def parse_header():
        header = buffer[:header_size()]
        (   magic_header,
            header_checksum,
            filetable_checksum,
            version,
            nb_files,
            data_size ) = struct.unpack(header_structure(), header)

        magic_header = magic_header.decode('utf-8')
        archive = {
            "version": version }

        if magic_header != 'WRPGPIAF':
            raise ParserMagicHeaderError('Bad Magic Header')

        calculated_header_checksum = zlib.crc32(buffer[
            header_check_size()
            :header_check_size()+header_data_size() ]) & 0xffffffff

        if calculated_header_checksum != header_checksum:
            raise ParserChecksumError('Bad Header Checksum : {} != {}'
                .format(calculated_header_checksum, header_checksum))

        calculated_file_table_checksum = zlib.crc32(buffer[
            header_size()
            :header_size()+nb_files*file_entry_size()]
        ) & 0xffffffff

        if calculated_file_table_checksum != filetable_checksum:
            raise ParserChecksumError('Bad Filetable Checksum : {} != {}'
                .format(calculated_file_table_checksum, filetable_checksum))

        if len(buffer) != data_size + get_data_offset(nb_files):
            raise ParserDatasizeError('Bad Data Size')

        return archive, nb_files