1#[cfg(feature = "zeroize")]
3use zeroize::{Zeroize, ZeroizeOnDrop, Zeroizing};
4
5#[cfg(feature = "zeroize")]
6use secrecy::SecretBox;
7
8#[cfg(feature = "zeroize")]
9pub type FixedZeroizing<T> = Zeroizing<T>;
10
11#[cfg(feature = "zeroize")]
12pub type DynamicZeroizing<T> = SecretBox<T>;
13
14#[cfg(feature = "zeroize")]
15impl<T: Zeroize> From<crate::Fixed<T>> for FixedZeroizing<T> {
16 fn from(fixed: crate::Fixed<T>) -> Self {
17 Zeroizing::new(fixed.0)
18 }
19}
20
21#[cfg(feature = "zeroize")]
22impl<T: ?Sized + Zeroize> From<crate::Dynamic<T>> for DynamicZeroizing<T> {
23 fn from(dynamic: crate::Dynamic<T>) -> Self {
24 SecretBox::new(dynamic.0)
25 }
26}
27
28#[cfg(feature = "zeroize")]
30impl<T: Zeroize> Zeroize for crate::Fixed<T> {
31 fn zeroize(&mut self) {
32 self.0.zeroize();
33 }
34}
35
36#[cfg(feature = "zeroize")]
37impl<T: ?Sized + Zeroize> Zeroize for crate::Dynamic<T> {
38 fn zeroize(&mut self) {
39 self.0.zeroize();
40 }
41}
42
43#[cfg(feature = "zeroize")]
45impl<T: Zeroize> ZeroizeOnDrop for crate::Fixed<T> {}
46
47#[cfg(feature = "zeroize")]
48impl<T: ?Sized + Zeroize> ZeroizeOnDrop for crate::Dynamic<T> {}