diff options
author | Jiyong Park <jiyong@google.com> | 2019-03-21 01:11:21 +0900 |
---|---|---|
committer | Jiyong Park <jiyong@google.com> | 2019-03-22 11:41:09 +0900 |
commit | 6788256d09f3fe29e790751f9b57be4387cc7a0c (patch) | |
tree | a9a450126b343d48ec49fad0e1bdd2d4250297d9 /apex | |
parent | 21c81326ff4ee6420e73077ce0f05e3cf5565e29 (diff) | |
download | build_soong-6788256d09f3fe29e790751f9b57be4387cc7a0c.tar.gz build_soong-6788256d09f3fe29e790751f9b57be4387cc7a0c.tar.bz2 build_soong-6788256d09f3fe29e790751f9b57be4387cc7a0c.zip |
:module syntax support properties in apex_key
public_key and private_key properties support :module syntax so that the
key pairs can be dynamically created during the build, which is useful
for one-time keys.
Bug: 128960614
Test: m (apex_test amended)
Change-Id: I249b1d29f247784193b0d733a7b6a20274ece105
Diffstat (limited to 'apex')
-rw-r--r-- | apex/apex_test.go | 35 | ||||
-rw-r--r-- | apex/key.go | 31 |
2 files changed, 56 insertions, 10 deletions
diff --git a/apex/apex_test.go b/apex/apex_test.go index ac2701f7..8a2e55af 100644 --- a/apex/apex_test.go +++ b/apex/apex_test.go @@ -161,6 +161,8 @@ func testApex(t *testing.T, bp string) *android.TestContext { "vendor/foo/devkeys/testkey.pem": nil, "NOTICE": nil, "custom_notice": nil, + "testkey2.avbpubkey": nil, + "testkey2.pem": nil, }) _, errs := ctx.ParseFileList(".", []string{"Android.bp"}) android.FailIfErrored(t, errs) @@ -1194,3 +1196,36 @@ func TestApexInProductPartition(t *testing.T) { } } + +func TestApexKeyFromOtherModule(t *testing.T) { + ctx := testApex(t, ` + apex_key { + name: "myapex.key", + public_key: ":my.avbpubkey", + private_key: ":my.pem", + product_specific: true, + } + + filegroup { + name: "my.avbpubkey", + srcs: ["testkey2.avbpubkey"], + } + + filegroup { + name: "my.pem", + srcs: ["testkey2.pem"], + } + `) + + apex_key := ctx.ModuleForTests("myapex.key", "android_common").Module().(*apexKey) + expected_pubkey := "testkey2.avbpubkey" + actual_pubkey := apex_key.public_key_file.String() + if actual_pubkey != expected_pubkey { + t.Errorf("wrong public key path. expected %q. actual %q", expected_pubkey, actual_pubkey) + } + expected_privkey := "testkey2.pem" + actual_privkey := apex_key.private_key_file.String() + if actual_privkey != expected_privkey { + t.Errorf("wrong private key path. expected %q. actual %q", expected_privkey, actual_privkey) + } +} diff --git a/apex/key.go b/apex/key.go index 07c3105e..848e8ceb 100644 --- a/apex/key.go +++ b/apex/key.go @@ -45,11 +45,11 @@ type apexKey struct { } type apexKeyProperties struct { - // Path to the public key file in avbpubkey format. Installed to the device. + // Path or module to the public key file in avbpubkey format. Installed to the device. // Base name of the file is used as the ID for the key. - Public_key *string - // Path to the private key file in pem format. Used to sign APEXs. - Private_key *string + Public_key *string `android:"path"` + // Path or module to the private key file in pem format. Used to sign APEXs. + Private_key *string `android:"path"` // Whether this key is installable to one of the partitions. Defualt: true. Installable *bool @@ -68,15 +68,26 @@ func (m *apexKey) installable() bool { } func (m *apexKey) GenerateAndroidBuildActions(ctx android.ModuleContext) { - m.public_key_file = ctx.Config().ApexKeyDir(ctx).Join(ctx, String(m.properties.Public_key)) - m.private_key_file = ctx.Config().ApexKeyDir(ctx).Join(ctx, String(m.properties.Private_key)) - - // If not found, fall back to the local key pairs - if !android.ExistentPathForSource(ctx, m.public_key_file.String()).Valid() { + // If the keys are from other modules (i.e. :module syntax) respect it. + // Otherwise, try to locate the key files in the default cert dir or + // in the local module dir + if android.SrcIsModule(String(m.properties.Public_key)) != "" { m.public_key_file = android.PathForModuleSrc(ctx, String(m.properties.Public_key)) + } else { + m.public_key_file = ctx.Config().ApexKeyDir(ctx).Join(ctx, String(m.properties.Public_key)) + // If not found, fall back to the local key pairs + if !android.ExistentPathForSource(ctx, m.public_key_file.String()).Valid() { + m.public_key_file = android.PathForModuleSrc(ctx, String(m.properties.Public_key)) + } } - if !android.ExistentPathForSource(ctx, m.private_key_file.String()).Valid() { + + if android.SrcIsModule(String(m.properties.Private_key)) != "" { m.private_key_file = android.PathForModuleSrc(ctx, String(m.properties.Private_key)) + } else { + m.private_key_file = ctx.Config().ApexKeyDir(ctx).Join(ctx, String(m.properties.Private_key)) + if !android.ExistentPathForSource(ctx, m.private_key_file.String()).Valid() { + m.private_key_file = android.PathForModuleSrc(ctx, String(m.properties.Private_key)) + } } pubKeyName := m.public_key_file.Base()[0 : len(m.public_key_file.Base())-len(m.public_key_file.Ext())] |