|
|
|
@ -47,25 +47,22 @@ class VerifiedBootVersion1HashtreeInfoGeneratorTest(ReleaseToolsTestCase):
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
self.hash_algorithm = "sha256"
|
|
|
|
|
self.fixed_salt = \
|
|
|
|
|
"aee087a5be3b982978c923f566a94613496b417f2af592639bc80d141e34dfe7"
|
|
|
|
|
self.expected_root_hash = \
|
|
|
|
|
"0b7c4565e87b1026e11fbab91c0bc29e185c847a5b44d40e6e86e461e8adf80d"
|
|
|
|
|
self.fixed_salt = (
|
|
|
|
|
"aee087a5be3b982978c923f566a94613496b417f2af592639bc80d141e34dfe7")
|
|
|
|
|
self.expected_root_hash = (
|
|
|
|
|
"0b7c4565e87b1026e11fbab91c0bc29e185c847a5b44d40e6e86e461e8adf80d")
|
|
|
|
|
|
|
|
|
|
def _create_simg(self, raw_data):
|
|
|
|
|
def _CreateSimg(self, raw_data): # pylint: disable=no-self-use
|
|
|
|
|
output_file = common.MakeTempFile()
|
|
|
|
|
raw_image = common.MakeTempFile()
|
|
|
|
|
with open(raw_image, 'wb') as f:
|
|
|
|
|
f.write(raw_data)
|
|
|
|
|
|
|
|
|
|
cmd = ["img2simg", raw_image, output_file, '4096']
|
|
|
|
|
p = common.Run(cmd)
|
|
|
|
|
p.communicate()
|
|
|
|
|
self.assertEqual(0, p.returncode)
|
|
|
|
|
|
|
|
|
|
common.RunAndCheckOutput(cmd)
|
|
|
|
|
return output_file
|
|
|
|
|
|
|
|
|
|
def _generate_image(self):
|
|
|
|
|
def _GenerateImage(self):
|
|
|
|
|
partition_size = 1024 * 1024
|
|
|
|
|
prop_dict = {
|
|
|
|
|
'partition_size': str(partition_size),
|
|
|
|
@ -79,11 +76,11 @@ class VerifiedBootVersion1HashtreeInfoGeneratorTest(ReleaseToolsTestCase):
|
|
|
|
|
self.assertIsNotNone(verity_image_builder)
|
|
|
|
|
adjusted_size = verity_image_builder.CalculateMaxImageSize()
|
|
|
|
|
|
|
|
|
|
raw_image = ""
|
|
|
|
|
raw_image = bytearray(adjusted_size)
|
|
|
|
|
for i in range(adjusted_size):
|
|
|
|
|
raw_image += str(i % 10)
|
|
|
|
|
raw_image[i] = ord('0') + i % 10
|
|
|
|
|
|
|
|
|
|
output_file = self._create_simg(raw_image)
|
|
|
|
|
output_file = self._CreateSimg(raw_image)
|
|
|
|
|
|
|
|
|
|
# Append the verity metadata.
|
|
|
|
|
verity_image_builder.Build(output_file)
|
|
|
|
@ -92,7 +89,7 @@ class VerifiedBootVersion1HashtreeInfoGeneratorTest(ReleaseToolsTestCase):
|
|
|
|
|
|
|
|
|
|
@SkipIfExternalToolsUnavailable()
|
|
|
|
|
def test_CreateHashtreeInfoGenerator(self):
|
|
|
|
|
image_file = sparse_img.SparseImage(self._generate_image())
|
|
|
|
|
image_file = sparse_img.SparseImage(self._GenerateImage())
|
|
|
|
|
|
|
|
|
|
generator = CreateHashtreeInfoGenerator(
|
|
|
|
|
'system', image_file, self.prop_dict)
|
|
|
|
@ -103,7 +100,7 @@ class VerifiedBootVersion1HashtreeInfoGeneratorTest(ReleaseToolsTestCase):
|
|
|
|
|
|
|
|
|
|
@SkipIfExternalToolsUnavailable()
|
|
|
|
|
def test_DecomposeSparseImage(self):
|
|
|
|
|
image_file = sparse_img.SparseImage(self._generate_image())
|
|
|
|
|
image_file = sparse_img.SparseImage(self._GenerateImage())
|
|
|
|
|
|
|
|
|
|
generator = VerifiedBootVersion1HashtreeInfoGenerator(
|
|
|
|
|
self.partition_size, 4096, True)
|
|
|
|
@ -114,7 +111,7 @@ class VerifiedBootVersion1HashtreeInfoGeneratorTest(ReleaseToolsTestCase):
|
|
|
|
|
|
|
|
|
|
@SkipIfExternalToolsUnavailable()
|
|
|
|
|
def test_ParseHashtreeMetadata(self):
|
|
|
|
|
image_file = sparse_img.SparseImage(self._generate_image())
|
|
|
|
|
image_file = sparse_img.SparseImage(self._GenerateImage())
|
|
|
|
|
generator = VerifiedBootVersion1HashtreeInfoGenerator(
|
|
|
|
|
self.partition_size, 4096, True)
|
|
|
|
|
generator.DecomposeSparseImage(image_file)
|
|
|
|
@ -131,12 +128,12 @@ class VerifiedBootVersion1HashtreeInfoGeneratorTest(ReleaseToolsTestCase):
|
|
|
|
|
def test_ValidateHashtree_smoke(self):
|
|
|
|
|
generator = VerifiedBootVersion1HashtreeInfoGenerator(
|
|
|
|
|
self.partition_size, 4096, True)
|
|
|
|
|
generator.image = sparse_img.SparseImage(self._generate_image())
|
|
|
|
|
generator.image = sparse_img.SparseImage(self._GenerateImage())
|
|
|
|
|
|
|
|
|
|
generator.hashtree_info = info = HashtreeInfo()
|
|
|
|
|
info.filesystem_range = RangeSet(data=[0, 991232 / 4096])
|
|
|
|
|
info.filesystem_range = RangeSet(data=[0, 991232 // 4096])
|
|
|
|
|
info.hashtree_range = RangeSet(
|
|
|
|
|
data=[991232 / 4096, (991232 + 12288) / 4096])
|
|
|
|
|
data=[991232 // 4096, (991232 + 12288) // 4096])
|
|
|
|
|
info.hash_algorithm = self.hash_algorithm
|
|
|
|
|
info.salt = self.fixed_salt
|
|
|
|
|
info.root_hash = self.expected_root_hash
|
|
|
|
@ -147,12 +144,12 @@ class VerifiedBootVersion1HashtreeInfoGeneratorTest(ReleaseToolsTestCase):
|
|
|
|
|
def test_ValidateHashtree_failure(self):
|
|
|
|
|
generator = VerifiedBootVersion1HashtreeInfoGenerator(
|
|
|
|
|
self.partition_size, 4096, True)
|
|
|
|
|
generator.image = sparse_img.SparseImage(self._generate_image())
|
|
|
|
|
generator.image = sparse_img.SparseImage(self._GenerateImage())
|
|
|
|
|
|
|
|
|
|
generator.hashtree_info = info = HashtreeInfo()
|
|
|
|
|
info.filesystem_range = RangeSet(data=[0, 991232 / 4096])
|
|
|
|
|
info.filesystem_range = RangeSet(data=[0, 991232 // 4096])
|
|
|
|
|
info.hashtree_range = RangeSet(
|
|
|
|
|
data=[991232 / 4096, (991232 + 12288) / 4096])
|
|
|
|
|
data=[991232 // 4096, (991232 + 12288) // 4096])
|
|
|
|
|
info.hash_algorithm = self.hash_algorithm
|
|
|
|
|
info.salt = self.fixed_salt
|
|
|
|
|
info.root_hash = "a" + self.expected_root_hash[1:]
|
|
|
|
@ -161,12 +158,12 @@ class VerifiedBootVersion1HashtreeInfoGeneratorTest(ReleaseToolsTestCase):
|
|
|
|
|
|
|
|
|
|
@SkipIfExternalToolsUnavailable()
|
|
|
|
|
def test_Generate(self):
|
|
|
|
|
image_file = sparse_img.SparseImage(self._generate_image())
|
|
|
|
|
image_file = sparse_img.SparseImage(self._GenerateImage())
|
|
|
|
|
generator = CreateHashtreeInfoGenerator('system', 4096, self.prop_dict)
|
|
|
|
|
info = generator.Generate(image_file)
|
|
|
|
|
|
|
|
|
|
self.assertEqual(RangeSet(data=[0, 991232 / 4096]), info.filesystem_range)
|
|
|
|
|
self.assertEqual(RangeSet(data=[991232 / 4096, (991232 + 12288) / 4096]),
|
|
|
|
|
self.assertEqual(RangeSet(data=[0, 991232 // 4096]), info.filesystem_range)
|
|
|
|
|
self.assertEqual(RangeSet(data=[991232 // 4096, (991232 + 12288) // 4096]),
|
|
|
|
|
info.hashtree_range)
|
|
|
|
|
self.assertEqual(self.hash_algorithm, info.hash_algorithm)
|
|
|
|
|
self.assertEqual(self.fixed_salt, info.salt)
|
|
|
|
|