pub use crate::sha3::KeccakState;
use crate::sha3::{SHA3_256_RATE, SHA3_512_RATE, SHAKE128_RATE, SHAKE256_RATE};
pub fn sha3_256(input: &[u8]) -> [u8; 32] {
let mut state = KeccakState::new(SHA3_256_RATE, 0x06);
state.absorb(input);
let mut out = [0u8; 32];
state.squeeze(&mut out);
out
}
pub fn sha3_512(input: &[u8]) -> [u8; 64] {
let mut state = KeccakState::new(SHA3_512_RATE, 0x06);
state.absorb(input);
let mut out = [0u8; 64];
state.squeeze(&mut out);
out
}
pub fn shake128() -> KeccakState {
KeccakState::new(SHAKE128_RATE, 0x1f)
}
pub fn shake256() -> KeccakState {
KeccakState::new(SHAKE256_RATE, 0x1f)
}
pub fn shake256_digest(input: &[u8], out: &mut [u8]) {
let mut state = shake256();
state.absorb(input);
state.squeeze(out);
}
pub fn shake128_digest(input: &[u8], out: &mut [u8]) {
let mut state = shake128();
state.absorb(input);
state.squeeze(out);
}
pub fn h_init() -> KeccakState {
shake256()
}
pub fn g_init() -> KeccakState {
shake128()
}