macro_rules! impl_zeroization_probe_int {
($($ty:ty),* $(,)?) => {
$(
impl crate::traits::ZeroizationProbe for $ty {
#[inline(always)]
fn is_zeroized(&self) -> bool {
self.to_le_bytes().iter().all(|b| *b == 0)
}
}
)*
};
}
impl crate::traits::ZeroizationProbe for bool {
#[inline(always)]
fn is_zeroized(&self) -> bool {
!(*self)
}
}
impl crate::traits::ZeroizationProbe for char {
#[inline(always)]
fn is_zeroized(&self) -> bool {
*self == '\0'
}
}
impl_zeroization_probe_int!(
u8, u16, u32, u64, u128, usize, i8, i16, i32, i64, i128, isize, f32, f64
);
macro_rules! impl_fast_zeroize_primitive {
($($ty:ty),* $(,)?) => {
$(
impl crate::traits::ZeroizeMetadata for $ty {
const CAN_BE_BULK_ZEROIZED: bool = true;
}
impl crate::traits::FastZeroizable for $ty {
#[inline(always)]
fn fast_zeroize(&mut self) {
redoubt_util::zeroize_primitive(self);
}
}
)*
};
}
impl_fast_zeroize_primitive!(
u8, u16, u32, u64, u128, usize, i8, i16, i32, i64, i128, isize, f32, f64, bool, char,
);
impl crate::traits::ZeroizationProbe for () {
#[inline(always)]
fn is_zeroized(&self) -> bool {
true
}
}
impl crate::traits::ZeroizeMetadata for () {
const CAN_BE_BULK_ZEROIZED: bool = true;
}
impl crate::traits::FastZeroizable for () {
#[inline(always)]
fn fast_zeroize(&mut self) {}
}