pub use tessera::sha3::KeccakState;
pub const SHA3_256_RATE: usize = 136;
pub const SHA3_512_RATE: usize = 72;
pub const SHAKE128_RATE: usize = 168;
pub const SHAKE256_RATE: usize = 136;
#[cfg(test)]
mod tests {
use super::*;
fn sha3_256(input: &[u8]) -> [u8; 32] {
let mut s = KeccakState::new(SHA3_256_RATE, 0x06);
s.absorb(input);
let mut out = [0u8; 32];
s.squeeze(&mut out);
out
}
fn sha3_512(input: &[u8]) -> [u8; 64] {
let mut s = KeccakState::new(SHA3_512_RATE, 0x06);
s.absorb(input);
let mut out = [0u8; 64];
s.squeeze(&mut out);
out
}
#[test]
fn sha3_256_empty_kat() {
let out = sha3_256(b"");
let expected = [
0xa7, 0xff, 0xc6, 0xf8, 0xbf, 0x1e, 0xd7, 0x66, 0x51, 0xc1, 0x47, 0x56, 0xa0, 0x61, 0xd6, 0x62, 0xf5, 0x80,
0xff, 0x4d, 0xe4, 0x3b, 0x49, 0xfa, 0x82, 0xd8, 0x0a, 0x4b, 0x80, 0xf8, 0x43, 0x4a,
];
assert_eq!(out, expected);
}
#[test]
fn sha3_512_empty_kat_first_32() {
let out = sha3_512(b"");
let expected_first_32 = [
0xa6, 0x9f, 0x73, 0xcc, 0xa2, 0x3a, 0x9a, 0xc5, 0xc8, 0xb5, 0x67, 0xdc, 0x18, 0x5a, 0x75, 0x6e, 0x97, 0xc9,
0x82, 0x16, 0x4f, 0xe2, 0x58, 0x59, 0xe0, 0xd1, 0xdc, 0xc1, 0x47, 0x5c, 0x80, 0xa6,
];
assert_eq!(&out[..32], &expected_first_32);
}
}