drogue-tls 0.6.0

TLS 1.3 client with no_std support and no allocator
Documentation
use crate::parse_buffer::ParseBuffer;
use crate::signature_schemes::SignatureScheme;
use crate::TlsError;

#[derive(Debug)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub struct CertificateVerify<'a> {
    pub(crate) signature_scheme: SignatureScheme,
    pub(crate) signature: &'a [u8],
}

impl<'a> CertificateVerify<'a> {
    pub fn parse(buf: &mut ParseBuffer<'a>) -> Result<CertificateVerify<'a>, TlsError> {
        let signature_scheme = SignatureScheme::of(
            buf.read_u16()
                .map_err(|_| TlsError::InvalidSignatureScheme)?,
        )
        .ok_or(TlsError::InvalidSignatureScheme)?;

        let len = buf.read_u16().map_err(|_| TlsError::InvalidSignature)?;
        let signature = buf
            .slice(len as usize)
            .map_err(|_| TlsError::InvalidSignature)?;

        Ok(Self {
            signature_scheme,
            signature: signature.as_slice(),
        })
    }
}