microdroid_manager: pass apex pubkeys to apexd
Microdroid_manager passes apex pubkeys from the instance.img so that
apexd uses them to verify APEXes.
Bug: 199371341
Test: MicrodroidHostTestCases
Change-Id: I9260e456a00e767a79c8121eb6b391978ece0ae3
diff --git a/microdroid_manager/src/payload.rs b/microdroid_manager/src/payload.rs
index bfc6c09..bf9d9f9 100644
--- a/microdroid_manager/src/payload.rs
+++ b/microdroid_manager/src/payload.rs
@@ -18,7 +18,7 @@
use crate::ioutil::wait_for_file;
use anyhow::Result;
use log::info;
-use microdroid_metadata::{read_metadata, Metadata};
+use microdroid_metadata::{read_metadata, ApexPayload, Metadata};
use std::fs::File;
use std::io::Read;
use std::time::Duration;
@@ -35,9 +35,9 @@
read_metadata(file)
}
-/// Loads (name, pubkey) from payload apexes and returns them as sorted by name.
+/// Loads (name, pubkey) from payload APEXes
pub fn get_apex_data_from_payload(metadata: &Metadata) -> Result<Vec<ApexData>> {
- let mut apex_data: Vec<ApexData> = metadata
+ metadata
.apexes
.iter()
.map(|apex| {
@@ -46,9 +46,7 @@
let pubkey = get_pubkey_from_apex(&partition)?;
Ok(ApexData { name, pubkey })
})
- .collect::<Result<Vec<_>>>()?;
- apex_data.sort_by(|a, b| a.name.cmp(&b.name));
- Ok(apex_data)
+ .collect()
}
fn get_pubkey_from_apex(path: &str) -> Result<Vec<u8>> {
@@ -59,3 +57,18 @@
pubkey_file.read_to_end(&mut pubkey)?;
Ok(pubkey)
}
+
+/// Convert vector of ApexData into Metadata
+pub fn to_metadata(apex_data: &[ApexData]) -> Metadata {
+ Metadata {
+ apexes: apex_data
+ .iter()
+ .map(|data| ApexPayload {
+ name: data.name.clone(),
+ public_key: data.pubkey.clone(),
+ ..Default::default()
+ })
+ .collect(),
+ ..Default::default()
+ }
+}