wtx 0.50.0

A collection of different transport implementations and related tools focused primarily on web technologies.
Documentation
use crate::crypto::{GraviolaPrk, Hkdf, HkdfSha256Graviola, HkdfSha384Graviola};
use graviola::hashing::{HashOutput, Sha256, Sha384};

impl Hkdf for HkdfSha256Graviola {
  type Digest = HashOutput;

  #[inline]
  fn extract(salt: Option<&[u8]>, ikm: &[u8]) -> (Self::Digest, Self) {
    let (lhs, rhs) = GraviolaPrk::<Sha256>::extract(salt, ikm);
    (lhs, HkdfSha256Graviola(rhs))
  }

  #[inline]
  fn from_prk(prk: &[u8]) -> crate::Result<Self> {
    Ok(Self(GraviolaPrk::<Sha256>::new(prk)?))
  }

  #[inline]
  fn compute<'data>(
    data: impl IntoIterator<Item = &'data [u8]>,
    key: &[u8],
  ) -> crate::Result<Self::Digest> {
    Ok(GraviolaPrk::<Sha256>::compute(data, key))
  }

  #[inline]
  fn expand(&self, info: &[u8], okm: &mut [u8]) -> crate::Result<()> {
    self.0.expand(info, okm)
  }
}

impl Hkdf for HkdfSha384Graviola {
  type Digest = HashOutput;

  #[inline]
  fn extract(salt: Option<&[u8]>, ikm: &[u8]) -> (Self::Digest, Self) {
    let (lhs, rhs) = GraviolaPrk::<Sha384>::extract(salt, ikm);
    (lhs, HkdfSha384Graviola(rhs))
  }

  #[inline]
  fn from_prk(prk: &[u8]) -> crate::Result<Self> {
    Ok(Self(GraviolaPrk::<Sha384>::new(prk)?))
  }

  #[inline]
  fn compute<'data>(
    data: impl IntoIterator<Item = &'data [u8]>,
    key: &[u8],
  ) -> crate::Result<Self::Digest> {
    Ok(GraviolaPrk::<Sha384>::compute(data, key))
  }

  #[inline]
  fn expand(&self, info: &[u8], okm: &mut [u8]) -> crate::Result<()> {
    self.0.expand(info, okm)
  }
}