use miden_core::Felt;
use crate::utils::split_u64;
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub struct KeccakDigest(pub [u64; 4]);
impl KeccakDigest {
pub fn from_state(state: &[u64; 25]) -> Self {
Self([state[0], state[1], state[2], state[3]])
}
pub fn to_felts(self) -> [Felt; 8] {
let mut out = [Felt::ZERO; 8];
for (i, &lane) in self.0.iter().enumerate() {
let [lo, hi] = split_u64(lane);
out[2 * i] = lo;
out[2 * i + 1] = hi;
}
out
}
pub fn to_u32s(self) -> [u32; 8] {
let mut out = [0u32; 8];
for (i, &lane) in self.0.iter().enumerate() {
out[2 * i] = lane as u32;
out[2 * i + 1] = (lane >> 32) as u32;
}
out
}
}