poseidon: Seal the sponge modes

A sponge can only have two modes: absorbing, and squeezing.
This commit is contained in:
Jack Grigg 2021-12-15 13:08:08 +00:00
parent 5948a4977a
commit 8fe178e433
1 changed files with 7 additions and 2 deletions

View File

@ -147,9 +147,14 @@ fn poseidon_sponge<F: FieldExt, S: Spec<F, T, RATE>, const T: usize, const RATE:
Squeezing(output)
}
mod private {
pub trait SealedSpongeMode {}
impl<F, const RATE: usize> SealedSpongeMode for super::Absorbing<F, RATE> {}
impl<F, const RATE: usize> SealedSpongeMode for super::Squeezing<F, RATE> {}
}
/// The state of the `Sponge`.
// TODO: Seal this trait?
pub trait SpongeMode {}
pub trait SpongeMode: private::SealedSpongeMode {}
/// The absorbing state of the `Sponge`.
#[derive(Debug)]