Skip to main content

seal/security/
memory.rs

1//! Secure memory handling utilities
2
3use zeroize::Zeroize;
4
5/// Secure string wrapper that zeros memory on drop
6pub type SecureString = zeroize::Zeroizing<String>;
7
8/// Secure bytes wrapper that zeros memory on drop
9pub type SecureBytes = zeroize::Zeroizing<Vec<u8>>;
10
11/// Trait for types that can be securely cleared
12pub 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        // Memory has been zeroed - no way to verify in safe Rust but zeroize does this
37    }
38}