diff options
author | Treehugger Robot <treehugger-gerrit@google.com> | 2021-03-17 23:37:04 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2021-03-17 23:37:04 +0000 |
commit | ab534a3b5cc4bd0623240866f898c8f274dd0092 (patch) | |
tree | b3dc50820df14e53a0255d8e41f7b83ddf458357 /filesystem | |
parent | 45a497180892a47cd69758b9d9126b7c608485ce (diff) | |
parent | ac4076de9d5c517e144090487dc165538d15b0d2 (diff) |
Merge "bootimg signs image using verity_utils"
Diffstat (limited to 'filesystem')
-rw-r--r-- | filesystem/bootimg.go | 41 | ||||
-rw-r--r-- | filesystem/filesystem.go | 6 |
2 files changed, 38 insertions, 9 deletions
diff --git a/filesystem/bootimg.go b/filesystem/bootimg.go index 372a610e0..cd0690bff 100644 --- a/filesystem/bootimg.go +++ b/filesystem/bootimg.go @@ -17,6 +17,7 @@ package filesystem import ( "fmt" "strconv" + "strings" "github.com/google/blueprint" "github.com/google/blueprint/proptools" @@ -217,22 +218,46 @@ func (b *bootimg) buildBootImage(ctx android.ModuleContext, vendor bool) android } func (b *bootimg) signImage(ctx android.ModuleContext, unsignedImage android.OutputPath) android.OutputPath { - output := android.PathForModuleOut(ctx, b.installFileName()).OutputPath - key := android.PathForModuleSrc(ctx, proptools.String(b.properties.Avb_private_key)) + propFile, toolDeps := b.buildPropFile(ctx) + output := android.PathForModuleOut(ctx, b.installFileName()).OutputPath builder := android.NewRuleBuilder(pctx, ctx) builder.Command().Text("cp").Input(unsignedImage).Output(output) - builder.Command(). - BuiltTool("avbtool"). - Flag("add_hash_footer"). - FlagWithArg("--partition_name ", b.partitionName()). - FlagWithInput("--key ", key). - FlagWithOutput("--image ", output) + builder.Command().BuiltTool("verity_utils"). + Input(propFile). + Implicits(toolDeps). + Output(output) builder.Build("sign_bootimg", fmt.Sprintf("Signing %s", b.BaseModuleName())) return output } +func (b *bootimg) buildPropFile(ctx android.ModuleContext) (propFile android.OutputPath, toolDeps android.Paths) { + var sb strings.Builder + var deps android.Paths + addStr := func(name string, value string) { + fmt.Fprintf(&sb, "%s=%s\n", name, value) + } + addPath := func(name string, path android.Path) { + addStr(name, path.String()) + deps = append(deps, path) + } + + addStr("avb_hash_enable", "true") + addPath("avb_avbtool", ctx.Config().HostToolPath(ctx, "avbtool")) + algorithm := proptools.StringDefault(b.properties.Avb_algorithm, "SHA256_RSA4096") + addStr("avb_algorithm", algorithm) + key := android.PathForModuleSrc(ctx, proptools.String(b.properties.Avb_private_key)) + addPath("avb_key_path", key) + addStr("avb_add_hash_footer_args", "") // TODO(jiyong): add --rollback_index + partitionName := proptools.StringDefault(b.properties.Partition_name, b.Name()) + addStr("partition_name", partitionName) + + propFile = android.PathForModuleOut(ctx, "prop").OutputPath + android.WriteFileRule(ctx, propFile, sb.String()) + return propFile, deps +} + var _ android.AndroidMkEntriesProvider = (*bootimg)(nil) // Implements android.AndroidMkEntriesProvider diff --git a/filesystem/filesystem.go b/filesystem/filesystem.go index 3b0a7ae5a..7f36308df 100644 --- a/filesystem/filesystem.go +++ b/filesystem/filesystem.go @@ -55,6 +55,9 @@ type filesystemProperties struct { // Hash and signing algorithm for avbtool. Default is SHA256_RSA4096. Avb_algorithm *string + // Name of the partition stored in vbmeta desc. Defaults to the name of this module. + Partition_name *string + // Type of the filesystem. Currently, ext4, cpio, and compressed_cpio are supported. Default // is ext4. Type *string @@ -279,7 +282,8 @@ func (f *filesystem) buildPropFile(ctx android.ModuleContext) (propFile android. key := android.PathForModuleSrc(ctx, proptools.String(f.properties.Avb_private_key)) addPath("avb_key_path", key) addStr("avb_add_hashtree_footer_args", "--do_not_generate_fec") - addStr("partition_name", f.Name()) + partitionName := proptools.StringDefault(f.properties.Partition_name, f.Name()) + addStr("partition_name", partitionName) } if proptools.String(f.properties.File_contexts) != "" { |