use axess_strings::ShortString;
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(
feature = "rkyv",
derive(rkyv::Archive, rkyv::Serialize, rkyv::Deserialize)
)]
#[derive(Clone, Debug, PartialEq, Eq, Hash, Default)]
pub struct KeyId(pub ShortString);
impl KeyId {
#[inline]
pub fn new(s: &str) -> Self {
Self(ShortString::new(s))
}
#[inline]
pub const fn from_static(s: &'static str) -> Self {
Self(ShortString::from_static(s))
}
#[inline]
pub fn as_str(&self) -> &str {
self.0.as_str()
}
}
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(
feature = "rkyv",
derive(rkyv::Archive, rkyv::Serialize, rkyv::Deserialize)
)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
pub enum AeadAlgorithm {
Aes256Gcm,
ChaCha20Poly1305,
}
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(
feature = "rkyv",
derive(rkyv::Archive, rkyv::Serialize, rkyv::Deserialize)
)]
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct EncryptedBlob {
pub key_id: KeyId,
pub algorithm: AeadAlgorithm,
pub nonce: [u8; 12],
pub ciphertext: Vec<u8>,
}