mod sponge;
pub(super) use sponge::*;
mod state;
pub(super) use state::*;
use snarkvm_console_types::{Field, prelude::*};
use smallvec::SmallVec;
pub trait AlgebraicSponge<E: Environment, const RATE: usize, const CAPACITY: usize>: Clone + Debug {
type Parameters;
fn new(params: &Self::Parameters) -> Self;
fn absorb(&mut self, input: &[Field<E>]);
fn squeeze(&mut self, num_elements: u16) -> SmallVec<[Field<E>; 10]>;
}
#[derive(PartialEq, Eq, Clone, Debug)]
pub enum DuplexSpongeMode {
Absorbing {
next_absorb_index: usize,
},
Squeezing {
next_squeeze_index: usize,
},
}