1use zeroize::Zeroize;
4
5pub type SecureString = zeroize::Zeroizing<String>;
7
8pub type SecureBytes = zeroize::Zeroizing<Vec<u8>>;
10
11pub trait SecureClear {
13 fn secure_clear(&mut self);
14}
15
16impl SecureClear for String {
17 fn secure_clear(&mut self) {
18 self.zeroize();
19 }
20}
21
22impl SecureClear for Vec<u8> {
23 fn secure_clear(&mut self) {
24 self.zeroize();
25 }
26}
27
28#[cfg(test)]
29mod tests {
30 use super::*;
31
32 #[test]
33 fn test_secure_string_zeros_on_drop() {
34 let secure_str = SecureString::new("sensitive_data".to_string());
35 drop(secure_str);
36 }
38}