#![cfg(feature = "ztier")]
use crate::Error;
use data_encoding::BASE64URL_NOPAD;
pub(crate) struct ZSecret {
secret: [u8; 32],
}
impl ZSecret {
#[inline]
pub(crate) fn from_bytes(secret_bytes: &[u8; 32]) -> Result<Self, Error> {
Ok(ZSecret {
secret: *secret_bytes,
})
}
#[inline]
#[allow(dead_code)] pub(crate) fn from_base64(secret_base64: &str) -> Result<Self, Error> {
let secret: [u8; 32] = BASE64URL_NOPAD
.decode(secret_base64.as_bytes())
.map_err(|_| Error::InvalidB64)?
.try_into()
.map_err(|_| Error::InvalidKeyLength)?;
Self::from_bytes(&secret)
}
#[inline]
#[allow(dead_code)] #[cfg(feature = "hex-keys")]
pub(crate) fn from_hex(secret_hex: &str) -> Result<Self, Error> {
let secret_bytes: [u8; 32] = hex::decode(secret_hex)?
.try_into()
.map_err(|_| Error::InvalidKeyLength)?;
Self::from_bytes(&secret_bytes)
}
#[inline]
#[allow(dead_code)] pub(crate) fn secret_base64(&self) -> String {
BASE64URL_NOPAD.encode(&self.secret)
}
#[inline]
#[allow(dead_code)] #[cfg(feature = "bytes-keys")]
pub(crate) fn secret_bytes(&self) -> &[u8; 32] {
&self.secret
}
#[inline]
#[allow(dead_code)] #[cfg(feature = "hex-keys")]
pub(crate) fn secret_hex(&self) -> String {
hex::encode(&self.secret)
}
#[inline(always)]
pub(crate) fn master_secret(&self) -> &[u8; 32] {
&self.secret
}
#[inline(always)]
#[cfg(feature = "zrbcx")]
pub(crate) fn zrbcx(&self) -> &[u8; 32] {
&self.secret
}
#[inline(always)]
#[cfg(feature = "zmock")]
pub(crate) fn zmock1(&self) -> &[u8; 32] {
&self.secret
}
#[inline(always)]
#[cfg(feature = "legacy")]
#[allow(dead_code)] pub(crate) fn legacy(&self) -> &[u8; 32] {
&self.secret
}
}