1use crate::util::{ ReprCSlice, sys };
2
3pub mod pwhash;
4
5sys! {
6 pub fn zig_std_rs__crypto__secure_zero_u8(ptr: ReprCSlice<u8>);
7 pub fn zig_std_rs__crypto__secure_zero_u16(ptr: ReprCSlice<u16>);
8 pub fn zig_std_rs__crypto__secure_zero_u32(ptr: ReprCSlice<u32>);
9 pub fn zig_std_rs__crypto__secure_zero_u64(ptr: ReprCSlice<u64>);
10 pub fn zig_std_rs__crypto__secure_zero_u128(ptr: ReprCSlice<u128>);
11}
12
13#[inline]
14pub fn secure_zero_u8(val: &mut u8) {
15 unsafe { sys::zig_std_rs__crypto__secure_zero_u8(val.into()) }
16}
17
18#[inline]
19pub fn secure_zero_u16(val: &mut u16) {
20 unsafe { sys::zig_std_rs__crypto__secure_zero_u16(val.into()) }
21}
22
23#[inline]
24pub fn secure_zero_u32(val: &mut u32) {
25 unsafe { sys::zig_std_rs__crypto__secure_zero_u32(val.into()) }
26}
27
28#[inline]
29pub fn secure_zero_u64(val: &mut u64) {
30 unsafe { sys::zig_std_rs__crypto__secure_zero_u64(val.into()) }
31}
32
33#[inline]
34pub fn secure_zero_u128(val: &mut u128) {
35 unsafe { sys::zig_std_rs__crypto__secure_zero_u128(val.into()) }
36}
37
38#[inline]
39pub fn secure_zero_u8_slice(val: &mut [u8]) {
40 unsafe { sys::zig_std_rs__crypto__secure_zero_u8(val.into()) }
41}
42
43#[inline]
44pub fn secure_zero_u16_slice(val: &mut [u16]) {
45 unsafe { sys::zig_std_rs__crypto__secure_zero_u16(val.into()) }
46}
47
48#[inline]
49pub fn secure_zero_u32_slice(val: &mut [u32]) {
50 unsafe { sys::zig_std_rs__crypto__secure_zero_u32(val.into()) }
51}
52
53#[inline]
54pub fn secure_zero_u64_slice(val: &mut [u64]) {
55 unsafe { sys::zig_std_rs__crypto__secure_zero_u64(val.into()) }
56}
57
58#[inline]
59pub fn secure_zero_u128_slice(val: &mut [u128]) {
60 unsafe { sys::zig_std_rs__crypto__secure_zero_u128(val.into()) }
61}
62
63#[cfg(test)]
64mod tests {
65 use super::*;
66
67 macro_rules! test_secure_zero {
68 {
69 $(
70 $fn:ident
71 $test_fn:ident
72 $fn_slice:ident
73 $test_fn_slice:ident
74 $ty:ty
75 )*
76 } => {
77 $(
78 #[test]
79 fn $test_fn() {
80 let mut values: [$ty; _] = [1, 2, 4, 6, 247];
81
82 for value in &mut values {
83 $fn(value);
84 assert_eq!(*value, 0);
85 }
86 }
87
88 #[test]
89 fn $test_fn_slice() {
90 let mut values: [$ty; _] = [1, 2, 4, 6, 247];
91
92 $fn_slice(&mut values);
93 assert_eq!(values, [0; 5]);
94 }
95 )*
96 }
97 }
98
99 test_secure_zero! {
100 secure_zero_u8
101 test_secure_zero_u8
102 secure_zero_u8_slice
103 test_secure_zero_u8_slice
104 u8
105
106 secure_zero_u16
107 test_secure_zero_u16
108 secure_zero_u16_slice
109 test_secure_zero_u16_slice
110 u16
111
112 secure_zero_u32
113 test_secure_zero_u32
114 secure_zero_u32_slice
115 test_secure_zero_u32_slice
116 u32
117
118 secure_zero_u64
119 test_secure_zero_u64
120 secure_zero_u64_slice
121 test_secure_zero_u64_slice
122 u64
123
124 secure_zero_u128
125 test_secure_zero_u128
126 secure_zero_u128_slice
127 test_secure_zero_u128_slice
128 u128
129
130 }
131}