[service-vm] Add more context when reading value as bytes failed
Test: atest rialto_test
Change-Id: I1ecec1a6fadd7cb16b83727e5d219da5f22ff0eb
diff --git a/service_vm/comm/src/csr.rs b/service_vm/comm/src/csr.rs
index 5e1cbad..17c69bd 100644
--- a/service_vm/comm/src/csr.rs
+++ b/service_vm/comm/src/csr.rs
@@ -19,6 +19,7 @@
use alloc::vec::Vec;
use ciborium::Value;
use coset::{self, CborSerializable, CoseError};
+use log::error;
/// Represents a CSR sent from the client VM to the service VM for attestation.
#[derive(Clone, Debug, Eq, PartialEq)]
@@ -52,8 +53,8 @@
return Err(CoseError::UnexpectedItem("array", "array with 2 items"));
}
Ok(Self {
- signed_csr_payload: try_as_bytes(arr.remove(1))?,
- dice_cert_chain: try_as_bytes(arr.remove(0))?,
+ signed_csr_payload: try_as_bytes(arr.remove(1), "signed_csr_payload")?,
+ dice_cert_chain: try_as_bytes(arr.remove(0), "dice_cert_chain")?,
})
}
}
@@ -91,17 +92,19 @@
return Err(CoseError::UnexpectedItem("array", "array with 2 items"));
}
Ok(Self {
- challenge: try_as_bytes(arr.remove(1))?,
- public_key: try_as_bytes(arr.remove(0))?,
+ challenge: try_as_bytes(arr.remove(1), "challenge")?,
+ public_key: try_as_bytes(arr.remove(0), "public_key")?,
})
}
}
-fn try_as_bytes(v: Value) -> coset::Result<Vec<u8>> {
+fn try_as_bytes(v: Value, context: &str) -> coset::Result<Vec<u8>> {
if let Value::Bytes(data) = v {
Ok(data)
} else {
- Err(CoseError::UnexpectedItem(cbor_value_type(&v), "bytes"))
+ let v_type = cbor_value_type(&v);
+ error!("The provided value type '{v_type}' is not of type 'bytes': {context}");
+ Err(CoseError::UnexpectedItem(v_type, "bytes"))
}
}