use crate::{
error::FastCryptoError,
traits::{FromUniformBytes, ToFromBytes},
};
use zeroize::{Zeroize, ZeroizeOnDrop};
#[derive(Debug, PartialEq, Eq, Zeroize, ZeroizeOnDrop)]
pub struct PrivateSeed<const RECOMMENDED_LENGTH: usize, const FIXED_LENGTH_ONLY: bool> {
bytes: Vec<u8>,
}
impl<const N: usize, const B: bool> FromUniformBytes<N> for PrivateSeed<N, B> {}
impl<const N: usize, const B: bool> AsRef<[u8]> for PrivateSeed<N, B> {
fn as_ref(&self) -> &[u8] {
self.bytes.as_ref()
}
}
impl<const RECOMMENDED_LENGTH: usize, const FIXED_LENGTH_ONLY: bool> ToFromBytes
for PrivateSeed<RECOMMENDED_LENGTH, FIXED_LENGTH_ONLY>
{
fn from_bytes(bytes: &[u8]) -> Result<Self, FastCryptoError> {
if FIXED_LENGTH_ONLY && bytes.len() != RECOMMENDED_LENGTH {
return Err(FastCryptoError::InputLengthWrong(RECOMMENDED_LENGTH));
}
Ok(Self {
bytes: bytes.into(),
})
}
fn as_bytes(&self) -> &[u8] {
self.as_ref()
}
}