byte_array_ops/security/
zeroize.rs

1use crate::ByteArray;
2use zeroize::Zeroize;
3
4impl Drop for ByteArray {
5    fn drop(&mut self) {
6        self.bytes.zeroize();
7    }
8}
9#[cfg(test)]
10mod tests {
11    use crate::try_hex;
12    use zeroize::Zeroize;
13
14    #[test]
15    #[allow(unsafe_code)]
16    fn test_zeroize() {
17        unsafe {
18            let mut byte_array = try_hex!("deadbeef").unwrap();
19            let ptr = byte_array.bytes.as_ptr();
20            let zero_ptr = ptr;
21            let len = byte_array.len();
22
23            assert_eq!(*ptr, 0xde);
24            let ptr_1 = ptr.add(1);
25            assert_eq!(*ptr_1, 0xad);
26            let ptr_2 = ptr_1.add(1);
27            assert_eq!(*ptr_2, 0xbe);
28            let ptr_3 = ptr_2.add(1);
29            assert_eq!(*ptr_3, 0xef);
30
31            byte_array.bytes.zeroize();
32
33            // assert zeroize worked
34
35            for i in 0..len {
36                assert_eq!(*zero_ptr.add(i), 0x00, "panicked on index : {i}");
37            }
38        }
39    }
40}