Beispiel #1
0
 def get_file_content(self, meta):
     if not isinstance(meta, Metadata):
         raise ArkError("Expected Metadata instance, not %s"
                        % meta.__class__.__name__)
     self._file.seek(meta.file_location, os.SEEK_SET)
     read_size = meta.size
     data = read_or_raise(self._file, read_size)
     if meta.encrypted_nbytes:
         data = xxtea.decrypt(data, self.passwd)
     if meta.compressed_size != meta.original_filesize:
         data = zlib.decompress(data)
     return data[:meta.original_filesize]
Beispiel #2
0
 def _get_metadata(self):
     self._file.seek(self.metadata_offset, os.SEEK_SET)
     size = self.file_count * ArkManager.METADATA_SIZE
     if size & 3:
         size &= ~3
         size += 4
     data = read_or_raise(self._file, size)
     data = xxtea.decrypt(data, self.passwd)
     try:
         self.metadatas = [Metadata(data[i:i + ArkManager.METADATA_SIZE])
                           for i in range(0, size, ArkManager.METADATA_SIZE)]
     except:
         raise ArkError("Unable to decrypt metadatas, bad password or corrupted file")