use zeroize::Zeroizing;
#[derive(Clone)]
pub struct ProjectKey(Zeroizing<[u8; 32]>);
impl ProjectKey {
pub fn new(bytes: [u8; 32]) -> Self {
Self(Zeroizing::new(bytes))
}
pub fn as_bytes(&self) -> &[u8; 32] {
&self.0
}
pub fn read_only_placeholder() -> Self {
Self::new([0u8; 32])
}
pub fn is_read_only_placeholder(&self) -> bool {
*self.0 == [0u8; 32]
}
}
impl std::fmt::Debug for ProjectKey {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.write_str("ProjectKey(<redacted>)")
}
}
#[derive(Clone)]
pub struct SecretKey(Zeroizing<[u8; 32]>);
impl SecretKey {
pub fn new(bytes: [u8; 32]) -> Self {
Self(Zeroizing::new(bytes))
}
pub fn as_bytes(&self) -> &[u8; 32] {
&self.0
}
pub fn from_legacy_project_key(project_key: &ProjectKey) -> Self {
Self::new(*project_key.as_bytes())
}
}
impl std::fmt::Debug for SecretKey {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.write_str("SecretKey(<redacted>)")
}
}