Loading tools/releasetools/blockimgdiff.py +10 −5 Original line number Diff line number Diff line Loading @@ -74,7 +74,7 @@ class Image(object): def ReadRangeSet(self, ranges): raise NotImplementedError def TotalSha1(self): def TotalSha1(self, include_clobbered_blocks=False): raise NotImplementedError Loading @@ -87,7 +87,10 @@ class EmptyImage(Image): file_map = {} def ReadRangeSet(self, ranges): return () def TotalSha1(self): def TotalSha1(self, include_clobbered_blocks=False): # EmptyImage always carries empty clobbered_blocks, so # include_clobbered_blocks can be ignored. assert self.clobbered_blocks.size() == 0 return sha1().hexdigest() Loading Loading @@ -136,8 +139,9 @@ class DataImage(Image): def ReadRangeSet(self, ranges): return [self.data[s*self.blocksize:e*self.blocksize] for (s, e) in ranges] def TotalSha1(self): # DataImage always carries empty clobbered_blocks. def TotalSha1(self, include_clobbered_blocks=False): # DataImage always carries empty clobbered_blocks, so # include_clobbered_blocks can be ignored. assert self.clobbered_blocks.size() == 0 return sha1(self.data).hexdigest() Loading Loading @@ -201,7 +205,8 @@ class Transfer(object): # # TotalSha1(): a function that returns (as a hex string) the SHA-1 # hash of all the data in the image (ie, all the blocks in the # care_map minus clobbered_blocks). # care_map minus clobbered_blocks, or including the clobbered # blocks if include_clobbered_blocks is True). # # When creating a BlockImageDiff, the src image may be None, in which # case the list of transfers produced will never read from the Loading tools/releasetools/common.py +16 −0 Original line number Diff line number Diff line Loading @@ -1183,6 +1183,7 @@ class BlockDifference(object): if progress: script.ShowProgress(progress, 0) self._WriteUpdate(script, output_zip) self._WritePostInstallVerifyScript(script) def WriteVerifyScript(self, script): partition = self.partition Loading Loading @@ -1221,6 +1222,21 @@ class BlockDifference(object): script.AppendExtra(('abort("%s partition has unexpected contents");\n' 'endif;') % (partition,)) def _WritePostInstallVerifyScript(self, script): partition = self.partition script.Print('Verifying the updated %s image...' % (partition,)) # Unlike pre-install verification, clobbered_blocks should not be ignored. ranges = self.tgt.care_map ranges_str = ranges.to_string_raw() script.AppendExtra('if range_sha1("%s", "%s") == "%s" then' % ( self.device, ranges_str, self.tgt.TotalSha1(include_clobbered_blocks=True))) script.Print('Verified the updated %s image.' % (partition,)) script.AppendExtra( 'else\n' ' abort("%s partition has unexpected contents after OTA update");\n' 'endif;' % (partition,)) def _WriteUpdate(self, script, output_zip): ZipWrite(output_zip, '{}.transfer.list'.format(self.path), Loading tools/releasetools/sparse_img.py +9 −4 Original line number Diff line number Diff line Loading @@ -118,11 +118,16 @@ class SparseImage(object): def ReadRangeSet(self, ranges): return [d for d in self._GetRangeData(ranges)] def TotalSha1(self): """Return the SHA-1 hash of all data in the 'care' regions but not in clobbered_blocks of this image.""" def TotalSha1(self, include_clobbered_blocks=False): """Return the SHA-1 hash of all data in the 'care' regions. If include_clobbered_blocks is True, it returns the hash including the clobbered_blocks.""" ranges = self.care_map if not include_clobbered_blocks: ranges.subtract(self.clobbered_blocks) h = sha1() for d in self._GetRangeData(self.care_map.subtract(self.clobbered_blocks)): for d in self._GetRangeData(ranges): h.update(d) return h.hexdigest() Loading Loading
tools/releasetools/blockimgdiff.py +10 −5 Original line number Diff line number Diff line Loading @@ -74,7 +74,7 @@ class Image(object): def ReadRangeSet(self, ranges): raise NotImplementedError def TotalSha1(self): def TotalSha1(self, include_clobbered_blocks=False): raise NotImplementedError Loading @@ -87,7 +87,10 @@ class EmptyImage(Image): file_map = {} def ReadRangeSet(self, ranges): return () def TotalSha1(self): def TotalSha1(self, include_clobbered_blocks=False): # EmptyImage always carries empty clobbered_blocks, so # include_clobbered_blocks can be ignored. assert self.clobbered_blocks.size() == 0 return sha1().hexdigest() Loading Loading @@ -136,8 +139,9 @@ class DataImage(Image): def ReadRangeSet(self, ranges): return [self.data[s*self.blocksize:e*self.blocksize] for (s, e) in ranges] def TotalSha1(self): # DataImage always carries empty clobbered_blocks. def TotalSha1(self, include_clobbered_blocks=False): # DataImage always carries empty clobbered_blocks, so # include_clobbered_blocks can be ignored. assert self.clobbered_blocks.size() == 0 return sha1(self.data).hexdigest() Loading Loading @@ -201,7 +205,8 @@ class Transfer(object): # # TotalSha1(): a function that returns (as a hex string) the SHA-1 # hash of all the data in the image (ie, all the blocks in the # care_map minus clobbered_blocks). # care_map minus clobbered_blocks, or including the clobbered # blocks if include_clobbered_blocks is True). # # When creating a BlockImageDiff, the src image may be None, in which # case the list of transfers produced will never read from the Loading
tools/releasetools/common.py +16 −0 Original line number Diff line number Diff line Loading @@ -1183,6 +1183,7 @@ class BlockDifference(object): if progress: script.ShowProgress(progress, 0) self._WriteUpdate(script, output_zip) self._WritePostInstallVerifyScript(script) def WriteVerifyScript(self, script): partition = self.partition Loading Loading @@ -1221,6 +1222,21 @@ class BlockDifference(object): script.AppendExtra(('abort("%s partition has unexpected contents");\n' 'endif;') % (partition,)) def _WritePostInstallVerifyScript(self, script): partition = self.partition script.Print('Verifying the updated %s image...' % (partition,)) # Unlike pre-install verification, clobbered_blocks should not be ignored. ranges = self.tgt.care_map ranges_str = ranges.to_string_raw() script.AppendExtra('if range_sha1("%s", "%s") == "%s" then' % ( self.device, ranges_str, self.tgt.TotalSha1(include_clobbered_blocks=True))) script.Print('Verified the updated %s image.' % (partition,)) script.AppendExtra( 'else\n' ' abort("%s partition has unexpected contents after OTA update");\n' 'endif;' % (partition,)) def _WriteUpdate(self, script, output_zip): ZipWrite(output_zip, '{}.transfer.list'.format(self.path), Loading
tools/releasetools/sparse_img.py +9 −4 Original line number Diff line number Diff line Loading @@ -118,11 +118,16 @@ class SparseImage(object): def ReadRangeSet(self, ranges): return [d for d in self._GetRangeData(ranges)] def TotalSha1(self): """Return the SHA-1 hash of all data in the 'care' regions but not in clobbered_blocks of this image.""" def TotalSha1(self, include_clobbered_blocks=False): """Return the SHA-1 hash of all data in the 'care' regions. If include_clobbered_blocks is True, it returns the hash including the clobbered_blocks.""" ranges = self.care_map if not include_clobbered_blocks: ranges.subtract(self.clobbered_blocks) h = sha1() for d in self._GetRangeData(self.care_map.subtract(self.clobbered_blocks)): for d in self._GetRangeData(ranges): h.update(d) return h.hexdigest() Loading