From badceb2d6023f90663a068ab37404962bc0dafd1 Mon Sep 17 00:00:00 2001 From: Tao Bao Date: Fri, 15 Mar 2019 09:33:43 -0700 Subject: [PATCH 1/2] releasetools: Initalize logger when signing. Other modules have switched to logging module. sign_target_files_apks.py needs to init the logger to get the logs. Test: Run `sign_target_files_apks.py -v`. Check outputs. Test: Run `check_target_files_signatures.py -v`. Change-Id: Ic68c019f6fb14840561885f1194ad6efdfdb7d82 --- .../releasetools/check_target_files_signatures.py | 5 +++++ tools/releasetools/sign_target_files_apks.py | 14 ++++++++------ 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/tools/releasetools/check_target_files_signatures.py b/tools/releasetools/check_target_files_signatures.py index b9f39a6f73..9b7695479b 100755 --- a/tools/releasetools/check_target_files_signatures.py +++ b/tools/releasetools/check_target_files_signatures.py @@ -39,6 +39,7 @@ Usage: check_target_file_signatures [flags] target_files """ +import logging import os import re import subprocess @@ -52,6 +53,8 @@ if sys.hexversion < 0x02070000: sys.exit(1) +logger = logging.getLogger(__name__) + # Work around a bug in Python's zipfile module that prevents opening of zipfiles # if any entry has an extra field of between 1 and 3 bytes (which is common with # zipaligned APKs). This overrides the ZipInfo._decodeExtra() method (which @@ -415,6 +418,8 @@ def main(argv): common.Usage(__doc__) sys.exit(1) + common.InitLogging() + ALL_CERTS.FindLocalCerts() Push("input target_files:") diff --git a/tools/releasetools/sign_target_files_apks.py b/tools/releasetools/sign_target_files_apks.py index a07f67fd4c..85897c28e2 100755 --- a/tools/releasetools/sign_target_files_apks.py +++ b/tools/releasetools/sign_target_files_apks.py @@ -102,6 +102,7 @@ import base64 import copy import errno import gzip +import logging import os import re import shutil @@ -121,6 +122,8 @@ if sys.hexversion < 0x02070000: sys.exit(1) +logger = logging.getLogger(__name__) + OPTIONS = common.OPTIONS OPTIONS.extra_apks = {} @@ -180,11 +183,8 @@ def GetApkFileInfo(filename, compressed_extension, skipped_prefixes): # skipped_prefixes should be one of set/list/tuple types. Other types such as # str shouldn't be accepted. - assert (isinstance(skipped_prefixes, tuple) or - isinstance(skipped_prefixes, set) or - isinstance(skipped_prefixes, list)), \ - "Invalid skipped_prefixes input type: {}".format( - type(skipped_prefixes)) + assert isinstance(skipped_prefixes, (set, list, tuple)), \ + "Invalid skipped_prefixes input type: {}".format(type(skipped_prefixes)) compressed_apk_extension = ( ".apk" + compressed_extension if compressed_extension else None) @@ -816,7 +816,7 @@ def GetCodenameToApiLevelMap(input_tf_zip): result = dict() for codename in codenames: codename = codename.strip() - if len(codename) > 0: + if codename: result[codename] = api_level return result @@ -926,6 +926,8 @@ def main(argv): common.Usage(__doc__) sys.exit(1) + common.InitLogging() + input_zip = zipfile.ZipFile(args[0], "r") output_zip = zipfile.ZipFile(args[1], "w", compression=zipfile.ZIP_DEFLATED, From 2cc0ca1770cc9785cd97dc118281053a7c26f389 Mon Sep 17 00:00:00 2001 From: Tao Bao Date: Fri, 15 Mar 2019 10:44:43 -0700 Subject: [PATCH 2/2] releasetools: Add common.ExtractAvbPublicKey(). Bug: 123716522 Test: python -m unittest test_common Change-Id: I1f645008a14cc882ef280f169c36e4b14a53ef88 --- tools/releasetools/common.py | 24 ++++++++++++++++++------ tools/releasetools/test_common.py | 9 ++++++++- 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/tools/releasetools/common.py b/tools/releasetools/common.py index 9cda0bd2ba..e71667ba24 100644 --- a/tools/releasetools/common.py +++ b/tools/releasetools/common.py @@ -50,7 +50,8 @@ class Options(object): if base_out_path is None: base_search_path = "out" else: - base_search_path = os.path.join(base_out_path, os.path.basename(os.getcwd())) + base_search_path = os.path.join(base_out_path, + os.path.basename(os.getcwd())) platform_search_path = { "linux2": os.path.join(base_search_path, "host/linux-x86"), @@ -552,11 +553,7 @@ def GetAvbChainedPartitionArg(partition, info_dict, key=None): """ if key is None: key = info_dict["avb_" + partition + "_key_path"] - avbtool = os.getenv('AVBTOOL') or info_dict["avb_avbtool"] - pubkey_path = MakeTempFile(prefix="avb-", suffix=".pubkey") - RunAndCheckOutput( - [avbtool, "extract_public_key", "--key", key, "--output", pubkey_path]) - + pubkey_path = ExtractAvbPublicKey(key) rollback_index_location = info_dict[ "avb_" + partition + "_rollback_index_location"] return "{}:{}:{}".format(partition, rollback_index_location, pubkey_path) @@ -2123,6 +2120,21 @@ def ExtractPublicKey(cert): return pubkey +def ExtractAvbPublicKey(key): + """Extracts the AVB public key from the given public or private key. + + Args: + key: The input key file, which should be PEM-encoded public or private key. + + Returns: + The path to the extracted AVB public key file. + """ + output = MakeTempFile(prefix='avb-', suffix='.avbpubkey') + RunAndCheckOutput( + ['avbtool', 'extract_public_key', "--key", key, "--output", output]) + return output + + def MakeRecoveryPatch(input_dir, output_sink, recovery_img, boot_img, info_dict=None): """Generates the recovery-from-boot patch and writes the script to output. diff --git a/tools/releasetools/test_common.py b/tools/releasetools/test_common.py index cfd070d81d..8709124193 100644 --- a/tools/releasetools/test_common.py +++ b/tools/releasetools/test_common.py @@ -491,6 +491,13 @@ class CommonApkUtilsTest(test_utils.ReleaseToolsTestCase): wrong_input = os.path.join(self.testdata_dir, 'testkey.pk8') self.assertRaises(AssertionError, common.ExtractPublicKey, wrong_input) + def test_ExtractAvbPublicKey(self): + privkey = os.path.join(self.testdata_dir, 'testkey.key') + pubkey = os.path.join(self.testdata_dir, 'testkey.pubkey.pem') + with open(common.ExtractAvbPublicKey(privkey)) as privkey_fp, \ + open(common.ExtractAvbPublicKey(pubkey)) as pubkey_fp: + self.assertEqual(privkey_fp.read(), pubkey_fp.read()) + def test_ParseCertificate(self): cert = os.path.join(self.testdata_dir, 'testkey.x509.pem') @@ -1218,7 +1225,7 @@ super_group_foo_group_size={group_foo_size} dp_diff.WriteScript(self.script, output_zip, write_verify_script=True) self.assertNotIn("block_image_update", str(self.script), - "Removed partition should not be patched.") + "Removed partition should not be patched.") lines = self.get_op_list(self.output_path) self.assertEqual(lines, ["remove foo"])