secure_gate/
zeroize.rs

1// src/zeroize.rs — FINAL VERSION
2#[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// Zeroize — no Copy bound
29#[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// ZeroizeOnDrop — no Copy bound
44#[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> {}