#[cfg(feature = "keyless")]
use crate::constants::HARDCODED_KEY_BYTES;
use crate::{format::IntoFormat, Error, MasterKey};
pub struct Omnib {
masterkey: MasterKey,
}
impl Omnib {
pub fn new(key_b64: &str) -> Result<Self, Error> {
Ok(Self {
masterkey: MasterKey::from_base64(key_b64)?,
})
}
#[cfg(feature = "keyless")]
pub fn new_keyless() -> Result<Self, Error> {
Self::from_bytes(&HARDCODED_KEY_BYTES)
}
#[inline]
pub fn enc(&self, plaintext: &str, format: impl IntoFormat) -> Result<String, Error> {
let format = format.into_format()?;
crate::enc::enc_to_format(plaintext, format, self.masterkey.key())
}
#[inline]
pub fn dec(&self, obtext: &str, format: impl IntoFormat) -> Result<String, Error> {
let format = format.into_format()?;
crate::dec::dec_from_format(obtext, format, self.masterkey.key())
}
pub fn autodec(&self, obtext: &str) -> Result<String, Error> {
crate::dec_auto::dec_any_format(&self.masterkey, obtext)
}
pub fn key(&self) -> String {
self.masterkey.key_base64()
}
#[cfg(feature = "hex-keys")]
pub fn key_hex(&self) -> String {
self.masterkey.key_hex()
}
#[cfg(feature = "bytes-keys")]
pub fn key_bytes(&self) -> &[u8; 64] {
self.masterkey.key_bytes()
}
#[cfg(feature = "hex-keys")]
pub fn from_key_hex(key_hex: &str) -> Result<Self, Error> {
Ok(Self {
masterkey: MasterKey::from_hex(key_hex)?,
})
}
pub fn from_bytes(key_bytes: &[u8; 64]) -> Result<Self, Error> {
Ok(Self {
masterkey: MasterKey::from_bytes(key_bytes)?,
})
}
}