Add utility method to check payload's data hash am: b8d776c9b7 am: 97c47d4db8 am: b86b272840 am: 0029078a6a
Original change: https://android-review.googlesource.com/c/platform/system/update_engine/+/2208897
Change-Id: I1bc3d2fc1cc42d0f562f2c2b0e76381845ad0d4b
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/scripts/update_payload/payload.py b/scripts/update_payload/payload.py
index cc15753..b513f72 100644
--- a/scripts/update_payload/payload.py
+++ b/scripts/update_payload/payload.py
@@ -18,6 +18,7 @@
from __future__ import absolute_import
from __future__ import print_function
+import binascii
import hashlib
import io
@@ -324,3 +325,17 @@
metadata_size=metadata_size,
part_sizes=part_sizes,
report_out_file=report_out_file)
+
+ def CheckDataHash(self):
+ for part in self.manifest.partitions:
+ for op in part.operations:
+ if op.data_length == 0:
+ continue
+ if not op.data_sha256_hash:
+ raise PayloadError(
+ f"Operation {op} in partition {part.partition_name} missing data_sha256_hash")
+ blob = self.ReadDataBlob(op.data_offset, op.data_length)
+ blob_hash = hashlib.sha256(blob)
+ if blob_hash.digest() != op.data_sha256_hash:
+ raise PayloadError(
+ f"Operation {op} in partition {part.partition_name} has unexpected hash, expected: {binascii.hexlify(op.data_sha256_hash)}, actual: {blob_hash.hexdigest()}")