use crate::util::{ ReprCSlice, sys };
pub mod pwhash;
sys! {
pub fn zig_std_rs__crypto__secure_zero_u8(ptr: ReprCSlice<u8>);
pub fn zig_std_rs__crypto__secure_zero_u16(ptr: ReprCSlice<u16>);
pub fn zig_std_rs__crypto__secure_zero_u32(ptr: ReprCSlice<u32>);
pub fn zig_std_rs__crypto__secure_zero_u64(ptr: ReprCSlice<u64>);
pub fn zig_std_rs__crypto__secure_zero_u128(ptr: ReprCSlice<u128>);
}
#[inline]
pub fn secure_zero_u8(val: &mut u8) {
unsafe { sys::zig_std_rs__crypto__secure_zero_u8(val.into()) }
}
#[inline]
pub fn secure_zero_u16(val: &mut u16) {
unsafe { sys::zig_std_rs__crypto__secure_zero_u16(val.into()) }
}
#[inline]
pub fn secure_zero_u32(val: &mut u32) {
unsafe { sys::zig_std_rs__crypto__secure_zero_u32(val.into()) }
}
#[inline]
pub fn secure_zero_u64(val: &mut u64) {
unsafe { sys::zig_std_rs__crypto__secure_zero_u64(val.into()) }
}
#[inline]
pub fn secure_zero_u128(val: &mut u128) {
unsafe { sys::zig_std_rs__crypto__secure_zero_u128(val.into()) }
}
#[inline]
pub fn secure_zero_u8_slice(val: &mut [u8]) {
unsafe { sys::zig_std_rs__crypto__secure_zero_u8(val.into()) }
}
#[inline]
pub fn secure_zero_u16_slice(val: &mut [u16]) {
unsafe { sys::zig_std_rs__crypto__secure_zero_u16(val.into()) }
}
#[inline]
pub fn secure_zero_u32_slice(val: &mut [u32]) {
unsafe { sys::zig_std_rs__crypto__secure_zero_u32(val.into()) }
}
#[inline]
pub fn secure_zero_u64_slice(val: &mut [u64]) {
unsafe { sys::zig_std_rs__crypto__secure_zero_u64(val.into()) }
}
#[inline]
pub fn secure_zero_u128_slice(val: &mut [u128]) {
unsafe { sys::zig_std_rs__crypto__secure_zero_u128(val.into()) }
}
#[cfg(test)]
mod tests {
use super::*;
macro_rules! test_secure_zero {
{
$(
$fn:ident
$test_fn:ident
$fn_slice:ident
$test_fn_slice:ident
$ty:ty
)*
} => {
$(
#[test]
fn $test_fn() {
let mut values: [$ty; _] = [1, 2, 4, 6, 247];
for value in &mut values {
$fn(value);
assert_eq!(*value, 0);
}
}
#[test]
fn $test_fn_slice() {
let mut values: [$ty; _] = [1, 2, 4, 6, 247];
$fn_slice(&mut values);
assert_eq!(values, [0; 5]);
}
)*
}
}
test_secure_zero! {
secure_zero_u8
test_secure_zero_u8
secure_zero_u8_slice
test_secure_zero_u8_slice
u8
secure_zero_u16
test_secure_zero_u16
secure_zero_u16_slice
test_secure_zero_u16_slice
u16
secure_zero_u32
test_secure_zero_u32
secure_zero_u32_slice
test_secure_zero_u32_slice
u32
secure_zero_u64
test_secure_zero_u64
secure_zero_u64_slice
test_secure_zero_u64_slice
u64
secure_zero_u128
test_secure_zero_u128
secure_zero_u128_slice
test_secure_zero_u128_slice
u128
}
}