• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 use alloc::vec::Vec;
2 use core::fmt;
3 use core::fmt::Debug;
4 
5 use mls_rs_codec::{MlsDecode, MlsEncode, MlsSize};
6 use mls_rs_core::crypto::CipherSuiteProvider;
7 
8 use crate::{client::MlsError, error::IntoAnyError, MlsMessage};
9 
10 #[derive(Clone, PartialEq, Eq, MlsEncode, MlsDecode, MlsSize, Hash)]
11 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
12 pub(crate) struct MessageHash(
13     #[mls_codec(with = "mls_rs_codec::byte_vec")]
14     #[cfg_attr(feature = "serde", serde(with = "mls_rs_core::vec_serde"))]
15     Vec<u8>,
16 );
17 
18 impl Debug for MessageHash {
fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result19     fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
20         mls_rs_core::debug::pretty_bytes(&self.0)
21             .named("MessageHash")
22             .fmt(f)
23     }
24 }
25 
26 impl MessageHash {
27     #[cfg_attr(not(mls_build_async), maybe_async::must_be_sync)]
compute<CS: CipherSuiteProvider>( cs: &CS, message: &MlsMessage, ) -> Result<Self, MlsError>28     pub(crate) async fn compute<CS: CipherSuiteProvider>(
29         cs: &CS,
30         message: &MlsMessage,
31     ) -> Result<Self, MlsError> {
32         cs.hash(&message.mls_encode_to_vec()?)
33             .await
34             .map_err(|e| MlsError::CryptoProviderError(e.into_any_error()))
35             .map(Self)
36     }
37 }
38