ark-crypto-primitives 0.6.0

A library of useful cryptographic primitives
Documentation
use crate::sponge::{Absorb, CryptographicSponge};
#[cfg(not(feature = "std"))]
use ark_std::vec::Vec;
pub use merlin::Transcript;

impl CryptographicSponge for Transcript {
    type Config = &'static [u8];

    fn new(params: &Self::Config) -> Self {
        Transcript::new(*params)
    }

    fn absorb(&mut self, input: &impl Absorb) {
        self.append_message(b"", &input.to_sponge_bytes_as_vec());
    }

    fn squeeze_bytes(&mut self, num_bytes: usize) -> Vec<u8> {
        let mut dest = vec![0; num_bytes];
        self.challenge_bytes(b"", &mut dest);
        dest
    }

    fn squeeze_bits(&mut self, num_bits: usize) -> Vec<bool> {
        let num_bytes = (num_bits + 7) / 8;
        let mut tmp = vec![0; num_bytes];
        self.challenge_bytes(b"", &mut tmp);
        let dest = tmp
            .iter()
            .flat_map(|byte| (0..8u32).rev().map(move |i| (byte >> i) & 1 == 1))
            .collect::<Vec<_>>();
        dest[..num_bits].to_vec()
    }
}