use zeroize::Zeroize; /// Provides wrapper around `Vec` that implements `Zeroize`. #[derive(Zeroize, Clone, PartialEq)] #[zeroize(drop)] pub struct PlainText(Vec); impl PlainText { /// Instantiate self with `len` zeros. pub fn zero(len: usize) -> Self { Self(vec![0; len]) } /// The byte-length of `self` pub fn len(&self) -> usize { self.0.len() } /// Returns a reference to the underlying bytes. pub fn as_bytes(&self) -> &[u8] { &self.0 } /// Returns a mutable reference to the underlying bytes. pub fn as_mut_bytes(&mut self) -> &mut [u8] { &mut self.0 } } impl From> for PlainText { fn from(vec: Vec) -> Self { Self(vec) } } impl AsRef<[u8]> for PlainText { fn as_ref(&self) -> &[u8] { &self.0 } }