embedded_tls/handshake/
finished.rs1use crate::TlsError;
2use crate::buffer::CryptoBuffer;
3use crate::parse_buffer::ParseBuffer;
4use core::fmt::{Debug, Formatter};
5use generic_array::{ArrayLength, GenericArray};
7pub struct Finished<N: ArrayLength<u8>> {
10 pub verify: GenericArray<u8, N>,
11 pub hash: Option<GenericArray<u8, N>>,
12}
13
14#[cfg(feature = "defmt")]
15impl<N: ArrayLength<u8>> defmt::Format for Finished<N> {
16 fn format(&self, f: defmt::Formatter<'_>) {
17 defmt::write!(f, "verify length:{}", &self.verify.len());
18 }
19}
20
21impl<N: ArrayLength<u8>> Debug for Finished<N> {
22 fn fmt(&self, f: &mut Formatter<'_>) -> core::fmt::Result {
23 f.debug_struct("Finished")
24 .field("verify", &self.hash)
25 .finish()
26 }
27}
28
29impl<N: ArrayLength<u8>> Finished<N> {
30 pub fn parse(buf: &mut ParseBuffer, _len: u32) -> Result<Self, TlsError> {
31 let mut verify = GenericArray::default();
33 buf.fill(&mut verify)?;
34 Ok(Self { verify, hash: None })
43 }
44
45 pub(crate) fn encode(&self, buf: &mut CryptoBuffer<'_>) -> Result<(), TlsError> {
46 buf.extend_from_slice(&self.verify[..self.verify.len()])
49 .map_err(|_| TlsError::EncodeError)?;
50 Ok(())
51 }
52}