[refactoring] Group all the CBOR util functions in cbor_util
This cl only moves all the CBOR utility functions in one place.
Some return error types are adjusted to adapt the change. There
should be no behavior change.
Bug: 310931749
Test: atest rialto_test
Change-Id: Ie3db9c93b1355d25d7d796818e19e554560e1f23
diff --git a/libs/bssl/Android.bp b/libs/bssl/Android.bp
index e1f4ffd..bed3dfb 100644
--- a/libs/bssl/Android.bp
+++ b/libs/bssl/Android.bp
@@ -23,6 +23,7 @@
rustlibs: [
"libbssl_avf_error_nostd",
"libbssl_ffi_nostd",
+ "libcbor_util_nostd",
"libciborium_nostd",
"libcoset_nostd",
"liblog_rust_nostd",
diff --git a/libs/bssl/error/Android.bp b/libs/bssl/error/Android.bp
index dc2902e..000e385 100644
--- a/libs/bssl/error/Android.bp
+++ b/libs/bssl/error/Android.bp
@@ -21,6 +21,8 @@
"libcore.rust_sysroot",
],
rustlibs: [
+ "libcoset_nostd",
+ "liblog_rust_nostd",
"libserde_nostd",
],
}
@@ -32,6 +34,8 @@
"std",
],
rustlibs: [
+ "libcoset",
+ "liblog_rust",
"libserde",
],
}
diff --git a/libs/bssl/error/src/lib.rs b/libs/bssl/error/src/lib.rs
index df79104..7f01c6c 100644
--- a/libs/bssl/error/src/lib.rs
+++ b/libs/bssl/error/src/lib.rs
@@ -38,6 +38,9 @@
/// Failed to decode the COSE_Key.
CoseKeyDecodingFailed,
+ /// An error occurred when interacting with the coset crate.
+ CosetError,
+
/// Unimplemented operation.
Unimplemented,
}
@@ -50,11 +53,21 @@
}
Self::InternalError => write!(f, "An unexpected internal error occurred"),
Self::CoseKeyDecodingFailed => write!(f, "Failed to decode the COSE_Key"),
+ Self::CosetError => {
+ write!(f, "An error occurred when interacting with the coset crate")
+ }
Self::Unimplemented => write!(f, "Unimplemented operation"),
}
}
}
+impl From<coset::CoseError> for Error {
+ fn from(e: coset::CoseError) -> Self {
+ log::error!("Coset error: {e}");
+ Self::CosetError
+ }
+}
+
/// BoringSSL API names.
#[allow(missing_docs)]
#[allow(non_camel_case_types)]
diff --git a/libs/bssl/src/ec_key.rs b/libs/bssl/src/ec_key.rs
index 0c944cd..894934d 100644
--- a/libs/bssl/src/ec_key.rs
+++ b/libs/bssl/src/ec_key.rs
@@ -17,9 +17,7 @@
use crate::cbb::CbbFixed;
use crate::cbs::Cbs;
-use crate::util::{
- check_int_result, get_label_value, get_label_value_as_bytes, to_call_failed_error,
-};
+use crate::util::{check_int_result, to_call_failed_error};
use alloc::vec;
use alloc::vec::Vec;
use bssl_avf_error::{ApiName, Error, Result};
@@ -31,6 +29,7 @@
EC_KEY_set_public_key_affine_coordinates, EC_POINT_get_affine_coordinates,
NID_X9_62_prime256v1, NID_secp384r1, BIGNUM, EC_GROUP, EC_KEY, EC_POINT,
};
+use cbor_util::{get_label_value, get_label_value_as_bytes};
use ciborium::Value;
use core::ptr::{self, NonNull};
use coset::{
diff --git a/libs/bssl/src/evp.rs b/libs/bssl/src/evp.rs
index 86f99a8..fe3d88e 100644
--- a/libs/bssl/src/evp.rs
+++ b/libs/bssl/src/evp.rs
@@ -17,9 +17,7 @@
use crate::cbb::CbbFixed;
use crate::digest::{Digester, DigesterContext};
use crate::ec_key::EcKey;
-use crate::util::{
- check_int_result, get_label_value, get_label_value_as_bytes, to_call_failed_error,
-};
+use crate::util::{check_int_result, to_call_failed_error};
use alloc::vec::Vec;
use bssl_avf_error::{ApiName, Error, Result};
use bssl_ffi::{
@@ -27,6 +25,7 @@
EVP_PKEY_new_raw_public_key, EVP_PKEY_set1_EC_KEY, EVP_marshal_public_key, EVP_PKEY,
EVP_PKEY_ED25519, EVP_PKEY_X25519,
};
+use cbor_util::{get_label_value, get_label_value_as_bytes};
use ciborium::Value;
use core::ptr::{self, NonNull};
use coset::{
diff --git a/libs/bssl/src/util.rs b/libs/bssl/src/util.rs
index 7473fe1..880c85b 100644
--- a/libs/bssl/src/util.rs
+++ b/libs/bssl/src/util.rs
@@ -16,8 +16,6 @@
use crate::err::get_error_reason_code;
use bssl_avf_error::{ApiName, Error, Result};
-use ciborium::Value;
-use coset::{CoseKey, Label};
use log::error;
pub(crate) fn check_int_result(ret: i32, api_name: ApiName) -> Result<()> {
@@ -37,14 +35,3 @@
pub(crate) fn to_call_failed_error(api_name: ApiName) -> Error {
Error::CallFailed(api_name, get_error_reason_code())
}
-
-pub(crate) fn get_label_value_as_bytes(key: &CoseKey, label: Label) -> Result<&[u8]> {
- Ok(get_label_value(key, label)?.as_bytes().ok_or_else(|| {
- error!("Value not a bstr.");
- Error::CoseKeyDecodingFailed
- })?)
-}
-
-pub(crate) fn get_label_value(key: &CoseKey, label: Label) -> Result<&Value> {
- Ok(&key.params.iter().find(|(k, _)| k == &label).ok_or(Error::CoseKeyDecodingFailed)?.1)
-}