Get desktop application:
View/edit binary Protocol Buffers messages
Only present in major version = 1. List of install operations for the kernel and rootfs partitions. For major version = 2 see the |partitions| field.
(At time of writing) usually 4096
If signatures are present, the offset into the blobs, generally tacked onto the end of the file, and the length. We use an offset rather than a bool to allow for more flexibility in future file formats. If either is absent, it means signatures aren't supported in this file.
Only present in major version = 1. Partition metadata used to validate the update. For major version = 2 see the |partitions| field.
old_image_info will only be present for delta images.
The minor version, also referred as "delta version", of the payload. Minor version 0 is full payload, everything else is delta payload.
Only present in major version >= 2. List of partitions that will be updated, in the order they will be updated. This field replaces the |install_operations|, |kernel_install_operations| and the |{old,new}_{kernel,rootfs}_info| fields used in major version = 1. This array can have more than two partitions if needed, and they are identified by the partition name.
The maximum timestamp of the OS allowed to apply this payload. Can be used to prevent downgrading the OS.
Metadata related to all dynamic partitions.
Used in:
Name of the group.
Maximum size of the group. The sum of sizes of all partitions in the group must not exceed the maximum size of the group.
A list of partitions that belong to the group.
Metadata related to all dynamic partitions.
Used in:
All updatable groups present in |partitions| of this DeltaArchiveManifest. - If an updatable group is on the device but not in the manifest, it is not updated. Hence, the group will not be resized, and partitions cannot be added to or removed from the group. - If an updatable group is in the manifest but not on the device, the group is added to the device.
Whether dynamic partitions have snapshots during the update. If this is set to true, the update_engine daemon creates snapshots for all dynamic partitions if possible. If this is unset, the update_engine daemon MUST NOT create snapshots for dynamic partitions.
Data is packed into blocks on disk, always starting from the beginning of the block. If a file's data is too large for one block, it overflows into another block, which may or may not be the following block on the physical partition. An ordered list of extents is another representation of an ordered list of blocks. For example, a file stored in blocks 9, 10, 11, 2, 18, 12 (in that order) would be stored in extents { {9, 3}, {2, 1}, {18, 1}, {12, 1} } (in that order). In general, files are stored sequentially on disk, so it's more efficient to use extents to encode the block lists (this is effectively run-length encoding). A sentinel value (kuint64max) as the start block denotes a sparse-hole in a file whose block-length is specified by num_blocks.
Used in:
,Describe an image we are based on in a human friendly way. Examples: dev-channel, x86-alex, 1.2.3, mp-v3 nplusone-channel, x86-alex, 1.2.4, mp-v3, dev-channel, 1.2.3 All fields will be set, if this message is present.
Used in:
If these values aren't present, they should be assumed to match the equivalent value above. They are normally only different for special image types such as nplusone images.
Used in:
,Only minor version 6 or newer support 64 bits |data_offset| and |data_length|, older client will read them as uint32. The offset into the delta file (after the protobuf) where the data (if any) is stored
The length of the data in the delta file
Ordered list of extents that are read from (if any) and written to.
Byte length of src, equal to the number of blocks in src_extents * block_size. It is used for BSDIFF and SOURCE_BSDIFF, because we need to pass that external program the number of bytes to read from the blocks we pass it. This is not used in any other operation.
Byte length of dst, equal to the number of blocks in dst_extents * block_size. Used for BSDIFF and SOURCE_BSDIFF, but not in any other operation.
Optional SHA 256 hash of the blob associated with this operation. This is used as a primary validation for http-based downloads and as a defense-in-depth validation for https-based downloads. If the operation doesn't refer to any blob, this field will have zero bytes.
Indicates the SHA 256 hash of the source data referenced in src_extents at the time of applying the operation. If present, the update_engine daemon MUST read and verify the source data before applying the operation.
Used in:
Replace destination extents w/ attached data
Replace destination extents w/ attached bzipped data
Move source extents to destination extents
The data is a bsdiff binary diff
On minor version 2 or newer, these operations are supported:
Copy from source to target partition
Like BSDIFF, but read from source partition
On minor version 3 or newer and on major version 2 or newer, these operations are supported:
Replace destination extents w/ attached xz data.
On minor version 4 or newer, these operations are supported:
Write zeros in the destination.
Discard the destination blocks, reading as undefined.
Like SOURCE_BSDIFF, but compressed with brotli.
On minor version 5 or newer, these operations are supported:
The data is in puffdiff format.
Used in:
,Describes the update to apply to a single partition.
Used in:
A platform-specific name to identify the partition set being updated. For example, in Chrome OS this could be "ROOT" or "KERNEL".
Whether this partition carries a filesystem with post-install program that must be run to finalize the update process. See also |postinstall_path| and |filesystem_type|.
The path of the executable program to run during the post-install step, relative to the root of this filesystem. If not set, the default "postinst" will be used. This setting is only used when |run_postinstall| is set and true.
The filesystem type as passed to the mount(2) syscall when mounting the new filesystem to run the post-install program. If not set, a fixed list of filesystems will be attempted. This setting is only used if |run_postinstall| is set and true.
If present, a list of signatures of the new_partition_info.hash signed with different keys. If the update_engine daemon requires vendor-signed images and has its public key installed, one of the signatures should be valid for /postinstall to run.
The list of operations to be performed to apply this PartitionUpdate. The associated operation blobs (in operations[i].data_offset, data_length) should be stored contiguously and in the same order.
Whether a failure in the postinstall step for this partition should be ignored.
On minor version 6 or newer, these fields are supported: The extent for data covered by verity hash tree.
The extent to store verity hash tree.
The hash algorithm used in verity hash tree.
The salt used for verity hash tree.
The extent for data covered by FEC.
The extent to store FEC.
The number of FEC roots.
Signatures: Updates may be signed by the OS vendor. The client verifies an update's signature by hashing the entire download. The section of the download that contains the signature is at the end of the file, so when signing a file, only the part up to the signature part is signed. Then, the client looks inside the download's Signatures message for a Signature message that it knows how to handle. Generally, a client will only know how to handle one type of signature, but an update may contain many signatures to support many different types of client. Then client selects a Signature message and uses that, along with a known public key, to verify the download. The public key is expected to be part of the client.
Used in:
,The DER encoded signature size of EC keys is nondeterministic for different input of sha256 hash. However, we need the size of the serialized signatures protobuf string to be fixed before signing; because this size is part of the content to be signed. Therefore, we always pad the signature data to the maximum possible signature size of a given key. And the payload verifier will truncate the signature to its correct size based on the value of |unpadded_signature_size|.