use zeroize::{Zeroize, ZeroizeOnDrop};
use crate::constants::{AEAD_NONCE_12_LENGTH, ARGON2_SALT_16_LENGTH, ARGON2_SALT_32_LENGTH};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct AeadNonce12([u8; AEAD_NONCE_12_LENGTH]);
impl AeadNonce12 {
pub const fn as_bytes(&self) -> &[u8; AEAD_NONCE_12_LENGTH] {
&self.0
}
pub(crate) fn from_array(bytes: [u8; AEAD_NONCE_12_LENGTH]) -> Self {
Self(bytes)
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct Argon2Salt16([u8; ARGON2_SALT_16_LENGTH]);
impl Argon2Salt16 {
pub const fn as_bytes(&self) -> &[u8; ARGON2_SALT_16_LENGTH] {
&self.0
}
pub(crate) fn from_array(bytes: [u8; ARGON2_SALT_16_LENGTH]) -> Self {
Self(bytes)
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct Argon2Salt32([u8; ARGON2_SALT_32_LENGTH]);
impl Argon2Salt32 {
pub const fn as_bytes(&self) -> &[u8; ARGON2_SALT_32_LENGTH] {
&self.0
}
pub(crate) fn from_array(bytes: [u8; ARGON2_SALT_32_LENGTH]) -> Self {
Self(bytes)
}
}
#[derive(Zeroize, ZeroizeOnDrop)]
pub struct RandomBytes<const N: usize> {
bytes: [u8; N],
}
impl<const N: usize> RandomBytes<N> {
pub const fn as_bytes(&self) -> &[u8; N] {
&self.bytes
}
pub fn into_bytes(self) -> [u8; N] {
self.bytes
}
pub(crate) fn from_array(bytes: [u8; N]) -> Self {
Self { bytes }
}
}