spongefish 0.2.0-alpha

A library for Fiat-Shamir transcripts.
use group::ff::PrimeField;

use super::FieldToUnitDeserialize;
use crate::{BytesToUnitDeserialize, DuplexSpongeInterface, ProofError, VerifierState};

impl<F, H, const N: usize> FieldToUnitDeserialize<F> for VerifierState<'_, H>
where
    H: DuplexSpongeInterface,
    F: PrimeField<Repr = [u8; N]>,
{
    fn fill_next_scalars(&mut self, output: &mut [F]) -> crate::ProofResult<()> {
        let mut buf = [0u8; N];
        for o in output.iter_mut() {
            self.fill_next_bytes(&mut buf)?;
            *o = F::from_repr_vartime(buf).ok_or(ProofError::SerializationError)?;
        }
        Ok(())
    }
}