use zeroize::{Zeroize, ZeroizeOnDrop};
use crate::error::KeyError;
use crate::types::MANIFEST_KEY;
#[derive(Zeroize, ZeroizeOnDrop)]
pub struct MandateKey([u8; 64]);
impl MandateKey {
pub fn generate() -> Self {
let mut bytes = [0u8; 64];
getrandom::getrandom(&mut bytes).expect("platform CSPRNG unavailable");
MandateKey(bytes)
}
pub fn from_bytes(bytes: [u8; 64]) -> Result<Self, KeyError> {
if bytes == MANIFEST_KEY {
return Err(KeyError::IsManifestKey);
}
if bytes == [0u8; 64] {
return Err(KeyError::AllZero);
}
Ok(MandateKey(bytes))
}
pub(crate) fn bytes(&self) -> &[u8; 64] {
&self.0
}
}