[dice] Move hash function to the library libdiced_open_dice
This is part of the project of merging the two existing dice
wrapper libraries into one library. The upstream library
libdiced_open_dice will be the merged library.
Test: atest diced_utils_test diced_sample_inputs_test \
diced_test diced_vendor_test diced_open_dice_cbor_test
Test: m pvmfw_img microdroid_manager && atest \
microdroid_manager_test
Bug: 267575445
Change-Id: I43011a5767b5d8547df20290a61c5ff95863980d
diff --git a/diced/open_dice/Android.bp b/diced/open_dice/Android.bp
index e581085..3fd447b 100644
--- a/diced/open_dice/Android.bp
+++ b/diced/open_dice/Android.bp
@@ -23,6 +23,10 @@
"libopen_dice_bcc_bindgen_nostd",
"libopen_dice_cbor_bindgen_nostd",
],
+ whole_static_libs: [
+ "libopen_dice_cbor",
+ "libcrypto_baremetal",
+ ],
}
rust_library {
@@ -40,4 +44,6 @@
whole_static_libs: [
"libopen_dice_bcc",
],
-}
\ No newline at end of file
+}
+
+// TODO(b/267575445): Add integration tests to check the exposed API
diff --git a/diced/open_dice/src/lib.rs b/diced/open_dice/src/lib.rs
index 0723b2d..d1bd9e4 100644
--- a/diced/open_dice/src/lib.rs
+++ b/diced/open_dice/src/lib.rs
@@ -23,6 +23,7 @@
mod bcc;
mod dice;
mod error;
+mod ops;
#[cfg(feature = "std")]
mod retry;
@@ -32,5 +33,6 @@
HIDDEN_SIZE,
};
pub use error::{check_result, DiceError, Result};
+pub use ops::hash;
#[cfg(feature = "std")]
pub use retry::retry_bcc_format_config_descriptor;
diff --git a/diced/open_dice/src/ops.rs b/diced/open_dice/src/ops.rs
new file mode 100644
index 0000000..ca0e341
--- /dev/null
+++ b/diced/open_dice/src/ops.rs
@@ -0,0 +1,38 @@
+// Copyright 2023, The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+//! This module mirrors the content in open-dice/include/dice/ops.h
+//! It contains the set of functions that implement various operations that the
+//! main DICE functions depend on.
+
+use crate::dice::{Hash, HASH_SIZE};
+use crate::error::{check_result, Result};
+use open_dice_cbor_bindgen::DiceHash;
+use std::ptr;
+
+/// Hashes the provided input using DICE's hash function `DiceHash`.
+pub fn hash(input: &[u8]) -> Result<Hash> {
+ let mut output: Hash = [0; HASH_SIZE];
+ // SAFETY: DiceHash takes a sized input buffer and writes to a constant-sized output buffer.
+ // The first argument context is not used in this function.
+ check_result(unsafe {
+ DiceHash(
+ ptr::null_mut(), // context
+ input.as_ptr(),
+ input.len(),
+ output.as_mut_ptr(),
+ )
+ })?;
+ Ok(output)
+}