pub fn digest_to_hex_lower<const N: usize>(digest: &[u8; N], out: &mut [u8]) -> bool {
const HEX: &[u8; 16] = b"0123456789abcdef";
if out.len() < N * 2 {
return false;
}
for i in 0..N {
let b = digest[i];
out[i * 2] = HEX[(b >> 4) as usize];
out[i * 2 + 1] = HEX[(b & 0x0f) as usize];
}
true
}
pub fn constant_time_eq(a: &[u8], b: &[u8]) -> bool {
if a.len() != b.len() {
return false;
}
let mut diff = 0u8;
for i in 0..a.len() {
diff |= a[i] ^ b[i];
}
diff == 0
}