wtx 0.50.0

A collection of different transport implementations and related tools focused primarily on web technologies.
Documentation
use crate::{
  codec::{Decode, Encode},
  collections::ArrayVectorCopy,
  crypto::SignatureTy,
  misc::counter_writer::{CounterWriterBytesTy, CounterWriterIterTy, u16_write_iter},
  tls::{
    TlsError, de::De, misc::u16_list, tls_decode_wrapper::TlsDecodeWrapper,
    tls_encode_wrapper::TlsEncodeWrapper,
  },
};

#[derive(Clone, Debug)]
pub(crate) struct SignatureAlgorithmsCert {
  pub(crate) supported_groups: ArrayVectorCopy<SignatureTy, { SignatureTy::len() }>,
}

impl SignatureAlgorithmsCert {
  pub(crate) fn new(
    supported_groups: ArrayVectorCopy<SignatureTy, { SignatureTy::len() }>,
  ) -> Self {
    Self { supported_groups }
  }
}

impl<'de> Decode<'de, De> for SignatureAlgorithmsCert {
  #[inline]
  fn decode(dw: &mut TlsDecodeWrapper<'de>) -> crate::Result<Self> {
    let mut supported_groups = ArrayVectorCopy::new();
    u16_list(&mut supported_groups, dw, TlsError::InvalidSignatureAlgorithmsCert)?;
    Ok(Self { supported_groups })
  }
}

impl Encode<De> for SignatureAlgorithmsCert {
  #[inline]
  fn encode(&self, ew: &mut TlsEncodeWrapper<'_>) -> crate::Result<()> {
    u16_write_iter(
      CounterWriterIterTy::Bytes(CounterWriterBytesTy::IgnoresLen),
      &self.supported_groups,
      None,
      ew,
      |el, local_ew| {
        let num: u16 = (*el).into();
        local_ew.buffer().extend_from_copyable_slice(&num.to_be_bytes())?;
        crate::Result::Ok(())
      },
    )?;
    Ok(())
  }
}