use crate::digest::TypedDigest;
use alloc::string::String;
use alloc::vec::Vec;
use sha3::{Digest, Sha3_256};
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct TransparencySerializationError;
impl core::fmt::Display for TransparencySerializationError {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
f.write_str("transparency event serialization failed")
}
}
#[cfg(feature = "std")]
impl std::error::Error for TransparencySerializationError {}
#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
pub struct TransparencyEvent {
pub timestamp: u64,
pub device_id: String,
pub event_hash: TypedDigest,
}
impl TransparencyEvent {
pub fn to_cbor(&self) -> Result<Vec<u8>, TransparencySerializationError> {
let mut buf = Vec::new();
ciborium::into_writer(self, &mut buf).map_err(|_| TransparencySerializationError)?;
Ok(buf)
}
pub fn canonical_hash(&self) -> Result<[u8; 32], TransparencySerializationError> {
let bytes = self.to_cbor()?;
let mut hasher = Sha3_256::new();
hasher.update(&bytes);
Ok(hasher.finalize().into())
}
}