示例#1
0
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)
示例#2
0
    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
示例#4
0
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