Handles capex in signing script

Today, the signing script simply ignores capex files, because it
looks for hardcoded '.apex' suffix. Add support to handle capex
as well.

Bug: 190574334
Test: Sign a target file locally
Change-Id: I3085ca7b0396a4fbf1b220f7de44d4eafb60c3d8
(cherry picked from commit 4d48d50036e71ccb31cf05326417ee084fd7583a)
This commit is contained in:
Tianjie 2021-06-11 17:03:43 -07:00 committed by Tianjie Xu
parent 8c4997265a
commit 579c347923
1 changed files with 20 additions and 6 deletions

View File

@ -217,6 +217,18 @@ for partition in common.AVB_PARTITIONS:
raise RuntimeError("Missing {} in AVB_FOOTER_ARGS".format(partition))
def IsApexFile(filename):
return filename.endswith(".apex") or filename.endswith(".capex")
def GetApexFilename(filename):
name = os.path.basename(filename)
# Replace the suffix for compressed apex
if name.endswith(".capex"):
return name.replace(".capex", ".apex")
return name
def GetApkCerts(certmap):
# apply the key remapping to the contents of the file
for apk, cert in certmap.items():
@ -356,8 +368,8 @@ def CheckApkAndApexKeysAvailable(input_tf_zip, known_keys,
unknown_files = []
for info in input_tf_zip.infolist():
# Handle APEXes on all partitions
if info.filename.endswith('.apex'):
name = os.path.basename(info.filename)
if IsApexFile(info.filename):
name = GetApexFilename(info.filename)
if name not in known_keys:
unknown_files.append(name)
continue
@ -388,10 +400,11 @@ def CheckApkAndApexKeysAvailable(input_tf_zip, known_keys,
invalid_apexes = []
for info in input_tf_zip.infolist():
if not info.filename.endswith('.apex'):
if not IsApexFile(info.filename):
continue
name = os.path.basename(info.filename)
name = GetApexFilename(info.filename)
(payload_key, container_key) = apex_keys[name]
if ((payload_key in common.SPECIAL_CERT_STRINGS and
container_key not in common.SPECIAL_CERT_STRINGS) or
@ -541,8 +554,9 @@ def ProcessTargetFiles(input_tf_zip, output_tf_zip, misc_info,
common.ZipWriteStr(output_tf_zip, out_info, data)
# Sign bundled APEX files on all partitions
elif filename.endswith(".apex"):
name = os.path.basename(filename)
elif IsApexFile(filename):
name = GetApexFilename(filename)
payload_key, container_key = apex_keys[name]
# We've asserted not having a case with only one of them PRESIGNED.