secure_gate/cloneable/
array.rs

1use crate::Fixed;
2use zeroize::Zeroize;
3
4#[cfg(feature = "zeroize")]
5#[derive(Clone, PartialEq, Zeroize)]
6#[zeroize(drop)]
7pub struct CloneableArrayInner<const N: usize>([u8; N]);
8
9#[cfg(feature = "zeroize")]
10impl<const N: usize> crate::CloneableSecret for CloneableArrayInner<N> {}
11
12#[cfg(feature = "zeroize")]
13pub type CloneableArray<const N: usize> = Fixed<CloneableArrayInner<N>>;
14
15#[cfg(feature = "zeroize")]
16impl<const N: usize> CloneableArray<N> {
17    #[inline(always)]
18    pub const fn expose_inner(&self) -> &[u8; N] {
19        &self.expose_secret().0
20    }
21
22    #[inline(always)]
23    pub fn expose_inner_mut(&mut self) -> &mut [u8; N] {
24        &mut self.expose_secret_mut().0
25    }
26}
27
28#[cfg(feature = "zeroize")]
29impl<const N: usize> From<[u8; N]> for CloneableArray<N> {
30    fn from(arr: [u8; N]) -> Self {
31        Fixed::new(CloneableArrayInner(arr))
32    }
33}