use subtle::ConstantTimeEq;
use zeroize::Zeroize;
pub fn wipe(buf: &mut [u8]) {
buf.zeroize();
}
pub fn ct_eq(a: &[u8], b: &[u8]) -> bool {
if a.len() != b.len() {
return false;
}
a.ct_eq(b).into()
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn wipe_zeroes_the_buffer() {
let mut secret = [0xAAu8; 32];
wipe(&mut secret);
assert_eq!(secret, [0u8; 32]);
}
#[test]
fn ct_eq_matches_equality() {
assert!(ct_eq(b"clave-igual", b"clave-igual"));
assert!(!ct_eq(b"clave-igual", b"clave-otra!"));
assert!(!ct_eq(b"corta", b"mas-larga"));
}
}