Get CompOS talking to diced
Create a module in compsvc to handle using DICE for signing. Initially
we just expose a method for returning our key's attestation
chain.
Add a method to composd, accessed via compos_cmd, to exercise this
functionality for testing purposes.
Bug: 214233409
Test: composd_cmd dice
Change-Id: I65ef19d0126862b800b6539ae1798b1a433085b8
diff --git a/compos/composd_cmd/composd_cmd.rs b/compos/composd_cmd/composd_cmd.rs
index 546c4af..9b41104 100644
--- a/compos/composd_cmd/composd_cmd.rs
+++ b/compos/composd_cmd/composd_cmd.rs
@@ -29,6 +29,8 @@
};
use anyhow::{bail, Context, Result};
use compos_common::timeouts::timeouts;
+use std::fs::File;
+use std::io::Write;
use std::sync::{Arc, Condvar, Mutex};
use std::time::Duration;
@@ -38,7 +40,7 @@
.index(1)
.takes_value(true)
.required(true)
- .possible_values(&["staged-apex-compile", "test-compile"]),
+ .possible_values(&["staged-apex-compile", "test-compile", "dice"]),
);
let args = app.get_matches();
let command = args.value_of("command").unwrap();
@@ -48,6 +50,7 @@
match command {
"staged-apex-compile" => run_staged_apex_compile()?,
"test-compile" => run_test_compile()?,
+ "dice" => write_dice()?,
_ => panic!("Unexpected command {}", command),
}
@@ -112,6 +115,16 @@
run_async_compilation(|service, callback| service.startTestCompile(callback))
}
+fn write_dice() -> Result<()> {
+ let service = wait_for_interface::<dyn IIsolatedCompilationService>("android.system.composd")
+ .context("Failed to connect to composd service")?;
+
+ let bcc = service.getBcc()?;
+ let mut file =
+ File::create("/data/misc/apexdata/com.android.compos/bcc").context("Creating bcc file")?;
+ file.write_all(&bcc).context("Writing bcc")
+}
+
fn run_async_compilation<F>(start_compile_fn: F) -> Result<()>
where
F: FnOnce(