Do not include signature dummy operation in major version 2.
It only exists for compatibility reason, for major version 2, there's no
point to add this any more.
Bug: None
TEST=Applied the new payload to a device.
Change-Id: I5803ab755415a1ba3d7460d82956bfe6e9fd4547
diff --git a/payload_generator/payload_file.cc b/payload_generator/payload_file.cc
index 17baf46..ae4896a 100644
--- a/payload_generator/payload_file.cc
+++ b/payload_generator/payload_file.cc
@@ -166,8 +166,9 @@
TEST_AND_RETURN_FALSE(
PayloadSigner::SignatureBlobLength(vector<string>(1, private_key_path),
&signature_blob_length));
- PayloadSigner::AddSignatureOp(next_blob_offset, signature_blob_length,
- &manifest_);
+ PayloadSigner::AddSignatureToManifest(
+ next_blob_offset, signature_blob_length,
+ major_version_ == kChromeOSMajorPayloadVersion, &manifest_);
}
// Serialize protobuf
diff --git a/payload_generator/payload_signer.cc b/payload_generator/payload_signer.cc
index fa8c4ba..f1242e1 100644
--- a/payload_generator/payload_signer.cc
+++ b/payload_generator/payload_signer.cc
@@ -128,10 +128,11 @@
LOG(INFO) << "Matching signature sizes already present.";
} else {
// Updates the manifest to include the signature operation.
- PayloadSigner::AddSignatureOp(payload.size() - metadata_size -
- metadata_signature_size,
- signature_blob.size(),
- &manifest);
+ PayloadSigner::AddSignatureToManifest(
+ payload.size() - metadata_size - metadata_signature_size,
+ signature_blob.size(),
+ major_version == kChromeOSMajorPayloadVersion,
+ &manifest);
// Updates the payload to include the new manifest.
string serialized_manifest;
@@ -198,24 +199,27 @@
} // namespace
-void PayloadSigner::AddSignatureOp(uint64_t signature_blob_offset,
- uint64_t signature_blob_length,
- DeltaArchiveManifest* manifest) {
+void PayloadSigner::AddSignatureToManifest(uint64_t signature_blob_offset,
+ uint64_t signature_blob_length,
+ bool add_dummy_op,
+ DeltaArchiveManifest* manifest) {
LOG(INFO) << "Making room for signature in file";
manifest->set_signatures_offset(signature_blob_offset);
LOG(INFO) << "set? " << manifest->has_signatures_offset();
- // Add a dummy op at the end to appease older clients
- InstallOperation* dummy_op = manifest->add_kernel_install_operations();
- dummy_op->set_type(InstallOperation::REPLACE);
- dummy_op->set_data_offset(signature_blob_offset);
manifest->set_signatures_offset(signature_blob_offset);
- dummy_op->set_data_length(signature_blob_length);
manifest->set_signatures_size(signature_blob_length);
- Extent* dummy_extent = dummy_op->add_dst_extents();
- // Tell the dummy op to write this data to a big sparse hole
- dummy_extent->set_start_block(kSparseHole);
- dummy_extent->set_num_blocks((signature_blob_length + kBlockSize - 1) /
- kBlockSize);
+ // Add a dummy op at the end to appease older clients
+ if (add_dummy_op) {
+ InstallOperation* dummy_op = manifest->add_kernel_install_operations();
+ dummy_op->set_type(InstallOperation::REPLACE);
+ dummy_op->set_data_offset(signature_blob_offset);
+ dummy_op->set_data_length(signature_blob_length);
+ Extent* dummy_extent = dummy_op->add_dst_extents();
+ // Tell the dummy op to write this data to a big sparse hole
+ dummy_extent->set_start_block(kSparseHole);
+ dummy_extent->set_num_blocks((signature_blob_length + kBlockSize - 1) /
+ kBlockSize);
+ }
}
bool PayloadSigner::LoadPayload(const std::string& payload_path,
diff --git a/payload_generator/payload_signer.h b/payload_generator/payload_signer.h
index 8691499..e7351dd 100644
--- a/payload_generator/payload_signer.h
+++ b/payload_generator/payload_signer.h
@@ -51,11 +51,13 @@
static bool VerifySignedPayload(const std::string& payload_path,
const std::string& public_key_path);
- // Adds a dummy operation that points to a signature blob located at the
- // specified offset/length.
- static void AddSignatureOp(uint64_t signature_blob_offset,
- uint64_t signature_blob_length,
- DeltaArchiveManifest* manifest);
+ // Adds specified signature offset/length to given |manifest|, also adds a
+ // dummy operation that points to a signature blob located at the specified
+ // offset/length if |add_dummy_op| is true.
+ static void AddSignatureToManifest(uint64_t signature_blob_offset,
+ uint64_t signature_blob_length,
+ bool add_dummy_op,
+ DeltaArchiveManifest* manifest);
// Given a raw |hash| and a private key in |private_key_path| calculates the
// raw signature in |out_signature|. Returns true on success, false otherwise.