Skip to main content

zig_std/
crypto.rs

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}