| Index: update_metadata.proto
|
| diff --git a/update_metadata.proto b/update_metadata.proto
|
| index 2fa8392e9ce8112169f502c04c902a9e67383d73..d849a8a456e447134d708b6d9b13cf14788e6a46 100644
|
| --- a/update_metadata.proto
|
| +++ b/update_metadata.proto
|
| @@ -18,6 +18,10 @@
|
| // char data[];
|
| // } blobs[];
|
| //
|
| +// // These two are not signed:
|
| +// uint64 signatures_message_size;
|
| +// char signatures_message[];
|
| +//
|
| // };
|
|
|
| // The DeltaArchiveManifest protobuf is an ordered list of InstallOperation
|
| @@ -56,11 +60,31 @@ package chromeos_update_engine;
|
| // A sentinel value (kuint64max) as the start block denotes a sparse-hole
|
| // in a file whose block-length is specified by num_blocks.
|
|
|
| +// 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 the 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.
|
| +
|
| message Extent {
|
| optional uint64 start_block = 1;
|
| optional uint64 num_blocks = 2;
|
| }
|
|
|
| +message Signatures {
|
| + message Signature {
|
| + optional uint32 version = 1;
|
| + optional string data = 2;
|
| + }
|
| + repeated Signature signatures = 1;
|
| +}
|
| +
|
| message DeltaArchiveManifest {
|
| message InstallOperation {
|
| enum Type {
|
| @@ -94,4 +118,11 @@ message DeltaArchiveManifest {
|
|
|
| // (At time of writing) usually 4096
|
| optional uint32 block_size = 3 [default = 4096];
|
| +
|
| + // If signatures are present, the offset into the blobs, generally
|
| + // tacked onto the end of the file. We use an offset rather than
|
| + // a bool to allow for more flexibility in future file formats.
|
| + // If this is absent, it means signatures aren't supported in this
|
| + // file.
|
| + optional uint64 signatures_offset = 4;
|
| }
|
|
|