openmls/ciphersuite/
codec.rs

1//! Tls serialization implementations for the ciphersuites.
2//! Provides encoding and decoding functionality.
3
4use std::io::{Read, Write};
5
6use ::tls_codec::Error;
7use tls_codec::{Deserialize, DeserializeBytes, Serialize, Size};
8
9use crate::ciphersuite::*;
10
11impl Size for Secret {
12    fn tls_serialized_len(&self) -> usize {
13        self.value.tls_serialized_len()
14    }
15}
16
17impl Serialize for Secret {
18    fn tls_serialize<W: Write>(&self, writer: &mut W) -> Result<usize, Error> {
19        self.value.tls_serialize(writer)
20    }
21}
22
23impl Deserialize for Secret {
24    fn tls_deserialize<R: Read>(bytes: &mut R) -> Result<Self, Error> {
25        let value = Vec::tls_deserialize(bytes)?;
26        Ok(Secret {
27            value: value.into(),
28        })
29    }
30}
31
32impl DeserializeBytes for Secret {
33    fn tls_deserialize_bytes(bytes: &[u8]) -> Result<(Self, &[u8]), Error>
34    where
35        Self: Sized,
36    {
37        let mut bytes_ref = bytes;
38        let secret = Secret::tls_deserialize(&mut bytes_ref)?;
39        let remainder = &bytes[secret.tls_serialized_len()..];
40        Ok((secret, remainder))
41    }
42}