1pub mod alloc;
8
9extern crate zeroize;
10use zeroize::Zeroize;
11
12#[no_mangle]
14pub unsafe extern "C" fn explicit_bzero(buf: *mut std::ffi::c_void, len: alloc::size_t) {
15 let buffer = core::slice::from_raw_parts_mut(buf as *mut std::ffi::c_char, len);
16 buffer.zeroize();
17}
18
19#[cfg(test)]
20mod tests {
21 use std::ffi::c_void;
22
23 use super::*;
24
25 #[test]
26 fn test_explicit_bzero() {
27 let mut buf = [1u8, 2, 3, 4, 5];
28 let len = buf.len();
29
30 unsafe {
32 explicit_bzero(buf.as_mut_ptr() as *mut c_void, len as alloc::size_t);
33 }
34
35 assert_eq!(&buf, &[0u8; 5]);
37 }
38
39 #[test]
40 fn test_explicit_bzero_zero_buffer() {
41 let mut buf = [0u8; 5];
42 let len = buf.len();
43
44 unsafe {
46 explicit_bzero(buf.as_mut_ptr() as *mut c_void, len as alloc::size_t);
47 }
48
49 assert_eq!(&buf, &[0u8; 5]);
51 }
52}