byte_array_ops/security/
zeroize.rs

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