Add utility method to check payload's data hash
Various OTA utilities, such as merge_ota tool will need this to check
integrity of OTA updates.
Bug: 227848550
Test: th
Change-Id: Id4efb8b9b3a28e30ef7f8ced6db9833bedce04a8
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()}")