Add support for switching to verity release keys.
Bug: 15725238 Change-Id: I8f92210fd854b5a2567cf76aaecb5be02c3f9293
This commit is contained in:
committed by
Rom Lemarchand
parent
9885ba95a4
commit
f19b365cc9
@@ -90,6 +90,8 @@ OPTIONS = common.OPTIONS
|
|||||||
OPTIONS.extra_apks = {}
|
OPTIONS.extra_apks = {}
|
||||||
OPTIONS.key_map = {}
|
OPTIONS.key_map = {}
|
||||||
OPTIONS.replace_ota_keys = False
|
OPTIONS.replace_ota_keys = False
|
||||||
|
OPTIONS.replace_verity_public_key = False
|
||||||
|
OPTIONS.replace_verity_private_key = False
|
||||||
OPTIONS.tag_changes = ("-test-keys", "-dev-keys", "+release-keys")
|
OPTIONS.tag_changes = ("-test-keys", "-dev-keys", "+release-keys")
|
||||||
|
|
||||||
def GetApkCerts(tf_zip):
|
def GetApkCerts(tf_zip):
|
||||||
@@ -172,7 +174,13 @@ def ProcessTargetFiles(input_tf_zip, output_tf_zip, misc_info,
|
|||||||
data = input_tf_zip.read(info.filename)
|
data = input_tf_zip.read(info.filename)
|
||||||
out_info = copy.copy(info)
|
out_info = copy.copy(info)
|
||||||
|
|
||||||
if (info.filename.startswith("BOOT/") or
|
if (info.filename == "META/misc_info.txt" and
|
||||||
|
OPTIONS.replace_verity_public_key):
|
||||||
|
ReplaceVerityPrivateKey(input_tf_zip, output_tf_zip, misc_info, OPTIONS.replace_verity_private_key[1])
|
||||||
|
elif (info.filename == "BOOT/RAMDISK/verity_key" and
|
||||||
|
OPTIONS.replace_verity_private_key):
|
||||||
|
ReplaceVerityPublicKey(output_tf_zip, OPTIONS.replace_verity_public_key[1])
|
||||||
|
elif (info.filename.startswith("BOOT/") or
|
||||||
info.filename.startswith("RECOVERY/") or
|
info.filename.startswith("RECOVERY/") or
|
||||||
info.filename.startswith("META/") or
|
info.filename.startswith("META/") or
|
||||||
info.filename == "SYSTEM/etc/recovery-resource.dat"):
|
info.filename == "SYSTEM/etc/recovery-resource.dat"):
|
||||||
@@ -208,6 +216,12 @@ def ProcessTargetFiles(input_tf_zip, output_tf_zip, misc_info,
|
|||||||
"SYSTEM/etc/security/otacerts.zip")):
|
"SYSTEM/etc/security/otacerts.zip")):
|
||||||
# don't copy these files if we're regenerating them below
|
# don't copy these files if we're regenerating them below
|
||||||
pass
|
pass
|
||||||
|
elif (OPTIONS.replace_verity_public_key and
|
||||||
|
info.filename == "META/misc_info.txt"):
|
||||||
|
pass
|
||||||
|
elif (OPTIONS.replace_verity_private_key and
|
||||||
|
info.filename == "BOOT/RAMDISK/verity_key"):
|
||||||
|
pass
|
||||||
else:
|
else:
|
||||||
# a non-APK file; copy it verbatim
|
# a non-APK file; copy it verbatim
|
||||||
output_tf_zip.writestr(out_info, data)
|
output_tf_zip.writestr(out_info, data)
|
||||||
@@ -374,6 +388,17 @@ def ReplaceOtaKeys(input_tf_zip, output_tf_zip, misc_info):
|
|||||||
|
|
||||||
return new_recovery_keys
|
return new_recovery_keys
|
||||||
|
|
||||||
|
def ReplaceVerityPublicKey(targetfile_zip, key_path):
|
||||||
|
print "Replacing verity public key with %s" % key_path
|
||||||
|
with open(key_path) as f:
|
||||||
|
common.ZipWriteStr(targetfile_zip, "BOOT/RAMDISK/verity_key", f.read())
|
||||||
|
|
||||||
|
def ReplaceVerityPrivateKey(targetfile_input_zip, targetfile_output_zip, misc_info, key_path):
|
||||||
|
print "Replacing verity private key with %s" % key_path
|
||||||
|
current_key = misc_info["verity_key"]
|
||||||
|
original_misc_info = targetfile_input_zip.read("META/misc_info.txt")
|
||||||
|
new_misc_info = original_misc_info.replace(current_key, key_path)
|
||||||
|
common.ZipWriteStr(targetfile_output_zip, "META/misc_info.txt", new_misc_info)
|
||||||
|
|
||||||
def BuildKeyMap(misc_info, key_mapping_options):
|
def BuildKeyMap(misc_info, key_mapping_options):
|
||||||
for s, d in key_mapping_options:
|
for s, d in key_mapping_options:
|
||||||
@@ -417,6 +442,10 @@ def main(argv):
|
|||||||
raise ValueError("Bad tag change '%s'" % (i,))
|
raise ValueError("Bad tag change '%s'" % (i,))
|
||||||
new.append(i[0] + i[1:].strip())
|
new.append(i[0] + i[1:].strip())
|
||||||
OPTIONS.tag_changes = tuple(new)
|
OPTIONS.tag_changes = tuple(new)
|
||||||
|
elif o == "--replace_verity_public_key":
|
||||||
|
OPTIONS.replace_verity_public_key = (True, a)
|
||||||
|
elif o == "--replace_verity_private_key":
|
||||||
|
OPTIONS.replace_verity_private_key = (True, a)
|
||||||
else:
|
else:
|
||||||
return False
|
return False
|
||||||
return True
|
return True
|
||||||
@@ -427,7 +456,9 @@ def main(argv):
|
|||||||
"default_key_mappings=",
|
"default_key_mappings=",
|
||||||
"key_mapping=",
|
"key_mapping=",
|
||||||
"replace_ota_keys",
|
"replace_ota_keys",
|
||||||
"tag_changes="],
|
"tag_changes=",
|
||||||
|
"replace_verity_public_key=",
|
||||||
|
"replace_verity_private_key="],
|
||||||
extra_option_handler=option_handler)
|
extra_option_handler=option_handler)
|
||||||
|
|
||||||
if len(args) != 2:
|
if len(args) != 2:
|
||||||
|
Reference in New Issue
Block a user