def parse(p): global data_offset magic = p.read(4) assert magic == b'CrAU' file_format_version = u64(p.read(8)) assert file_format_version == 2 manifest_size = u64(p.read(8)) metadata_signature_size = 0 if file_format_version > 1: metadata_signature_size = u32(p.read(4)) manifest = p.read(manifest_size) metadata_signature = p.read(metadata_signature_size) data_offset = p.tell() dam = um.DeltaArchiveManifest() dam.ParseFromString(manifest) for part in dam.partitions: # for op in part.operations: # assert op.type in (op.REPLACE, op.REPLACE_BZ, op.REPLACE_XZ), \ # 'unsupported op' # extents = flatten([op.dst_extents for op in part.operations]) # assert verify_contiguous(extents), 'operations do not span full image' dump_part(part)
def Init(self): """Initializes the payload object. This is a prerequisite for any other public API call. Raises: PayloadError if object already initialized or fails to initialize correctly. """ if self.is_init: raise PayloadError('payload object already initialized') # Initialize hash context. # pylint: disable=E1101 self.manifest_hasher = hashlib.sha256() # Read the file header. self.header = self._ReadHeader() # Read the manifest. manifest_raw = self._ReadManifest() self.manifest = update_metadata_pb2.DeltaArchiveManifest() self.manifest.ParseFromString(manifest_raw) # Read the metadata signature (if any). metadata_signature_raw = self._ReadMetadataSignature() if metadata_signature_raw: self.metadata_signature = update_metadata_pb2.Signatures() self.metadata_signature.ParseFromString(metadata_signature_raw) self.metadata_size = self.header.size + self.header.manifest_len self.data_offset = self.metadata_size + self.header.metadata_signature_len self.is_init = True
def Init(self): self.header = self._PayloadHeader() self.header.ReadFromPayload(self.payload_file) manifest_raw = self._ReadManifest() self.manifest = update_metadata_pb2.DeltaArchiveManifest() self.manifest.ParseFromString(manifest_raw) metadata_signature_raw = self._ReadMetadataSignature() if metadata_signature_raw: self.metadata_signature = update_metadata_pb2.Signatures() self.metadata_signature.ParseFromString(metadata_signature_raw) self.metadata_size = self.header.size + self.header.manifest_len self.data_offset = self.metadata_size + self.header.metadata_signature_len
magic = args.payloadfile.read(4) assert magic == b'CrAU' file_format_version = u64(args.payloadfile.read(8)) assert file_format_version == 2 manifest_size = u64(args.payloadfile.read(8)) metadata_signature_size = 0 if file_format_version > 1: metadata_signature_size = u32(args.payloadfile.read(4)) manifest = args.payloadfile.read(manifest_size) metadata_signature = args.payloadfile.read(metadata_signature_size) data_offset = args.payloadfile.tell() dam = um.DeltaArchiveManifest() dam.ParseFromString(manifest) block_size = dam.block_size for part in dam.partitions: # for op in part.operations: # assert op.type in (op.REPLACE, op.REPLACE_BZ, op.REPLACE_XZ), \ # 'unsupported op' # extents = flatten([op.dst_extents for op in part.operations]) # assert verify_contiguous(extents), 'operations do not span full image' dump_part(part)
def __init__(self, version=1): self.manifest = update_metadata_pb2.DeltaArchiveManifest() self.version = version self.block_size = 0