secure_gate/cloneable/
array.rs1use 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}