[dice] Use libdiced_open_dice_nostd for dice input and config
Bug: 267575445
Test: m pvmfw_img microdroid_manager && atest \
microdroid_manager_test
Change-Id: I5ac3b8a02ca3dfb3ac591db5ea266aa5b5a363b9
diff --git a/libs/dice/src/lib.rs b/libs/dice/src/lib.rs
index 5332092..f0ac2ae 100644
--- a/libs/dice/src/lib.rs
+++ b/libs/dice/src/lib.rs
@@ -19,16 +19,12 @@
#![no_std]
use core::fmt;
-use core::mem;
-use core::ptr;
use core::result;
+pub use diced_open_dice::{Config, Hash, InputValues, HASH_SIZE};
pub use open_dice_cbor_bindgen::DiceMode;
-use open_dice_cbor_bindgen::DiceConfigType_kDiceConfigTypeDescriptor as DICE_CONFIG_TYPE_DESCRIPTOR;
-use open_dice_cbor_bindgen::DiceConfigType_kDiceConfigTypeInline as DICE_CONFIG_TYPE_INLINE;
use open_dice_cbor_bindgen::DiceHash;
-use open_dice_cbor_bindgen::DiceInputValues;
use open_dice_cbor_bindgen::DiceResult;
use open_dice_cbor_bindgen::DiceResult_kDiceResultBufferTooSmall as DICE_RESULT_BUFFER_TOO_SMALL;
use open_dice_cbor_bindgen::DiceResult_kDiceResultInvalidInput as DICE_RESULT_INVALID_INPUT;
@@ -38,18 +34,9 @@
pub mod bcc;
const CDI_SIZE: usize = open_dice_cbor_bindgen::DICE_CDI_SIZE as usize;
-const HASH_SIZE: usize = open_dice_cbor_bindgen::DICE_HASH_SIZE as usize;
-const HIDDEN_SIZE: usize = open_dice_cbor_bindgen::DICE_HIDDEN_SIZE as usize;
-const INLINE_CONFIG_SIZE: usize = open_dice_cbor_bindgen::DICE_INLINE_CONFIG_SIZE as usize;
/// Array type of CDIs.
pub type Cdi = [u8; CDI_SIZE];
-/// Array type of hashes used by DICE.
-pub type Hash = [u8; HASH_SIZE];
-/// Array type of additional input.
-pub type Hidden = [u8; HIDDEN_SIZE];
-/// Array type of inline configuration values.
-pub type InlineConfig = [u8; INLINE_CONFIG_SIZE];
/// Error type used by DICE.
pub enum Error {
@@ -87,59 +74,6 @@
}
}
-/// DICE configuration input type.
-#[derive(Debug)]
-pub enum ConfigType<'a> {
- /// Uses the formatted 64-byte configuration input value (See the Open Profile for DICE).
- Inline(InlineConfig),
- /// Uses the 64-byte hash of more configuration data.
- Descriptor(&'a [u8]),
-}
-
-/// Set of DICE inputs.
-#[repr(transparent)]
-#[derive(Clone, Debug)]
-pub struct InputValues(DiceInputValues);
-
-impl InputValues {
- /// Wrap the DICE inputs in a InputValues, expected by bcc::main_flow().
- pub fn new(
- code_hash: &Hash,
- code_descriptor: Option<&[u8]>,
- config: &ConfigType,
- auth_hash: Option<&Hash>,
- auth_descriptor: Option<&[u8]>,
- mode: DiceMode,
- hidden: Option<&Hidden>,
- ) -> Self {
- const ZEROED_INLINE_CONFIG: InlineConfig = [0; INLINE_CONFIG_SIZE];
- let (config_type, config_value, config_descriptor) = match config {
- ConfigType::Inline(value) => (DICE_CONFIG_TYPE_INLINE, *value, None),
- ConfigType::Descriptor(desc) => {
- (DICE_CONFIG_TYPE_DESCRIPTOR, ZEROED_INLINE_CONFIG, Some(*desc))
- }
- };
- let (code_descriptor, code_descriptor_size) = as_raw_parts(code_descriptor);
- let (config_descriptor, config_descriptor_size) = as_raw_parts(config_descriptor);
- let (authority_descriptor, authority_descriptor_size) = as_raw_parts(auth_descriptor);
-
- Self(DiceInputValues {
- code_hash: *code_hash,
- code_descriptor,
- code_descriptor_size,
- config_type,
- config_value,
- config_descriptor,
- config_descriptor_size,
- authority_hash: auth_hash.map_or([0; mem::size_of::<Hash>()], |h| *h),
- authority_descriptor,
- authority_descriptor_size,
- mode,
- hidden: hidden.map_or([0; mem::size_of::<Hidden>()], |h| *h),
- })
- }
-}
-
fn ctx() -> *mut core::ffi::c_void {
core::ptr::null_mut()
}
@@ -151,10 +85,3 @@
check_call(unsafe { DiceHash(ctx(), bytes.as_ptr(), bytes.len(), output.as_mut_ptr()) })?;
Ok(output)
}
-
-fn as_raw_parts<T: Sized>(s: Option<&[T]>) -> (*const T, usize) {
- match s {
- Some(s) => (s.as_ptr(), s.len()),
- None => (ptr::null(), 0),
- }
-}