arnaucube
arnaucube/testudoPublic Self-hosted repository
testudo/src/poseidon_transcript.rs
src/poseidon_transcript.rsRaw
 1use crate::group::{CompressedGroup, Fr};
 2
 3use super::scalar::Scalar;
 4
 5// use ark_r1cs_std::prelude::*;
 6use ark_sponge::{
 7  constraints::CryptographicSpongeVar,
 8  poseidon::{PoseidonParameters, PoseidonSponge},
 9  CryptographicSponge,
10};
11
12#[derive(Clone)]
13/// TODO
14pub struct PoseidonTranscript {
15  sponge: PoseidonSponge<Fr>,
16  params: PoseidonParameters<Fr>,
17}
18
19impl PoseidonTranscript {
20  /// create a new transcript
21  pub fn new(params: &PoseidonParameters<Fr>) -> Self {
22    let sponge = PoseidonSponge::new(params);
23    PoseidonTranscript {
24      sponge: sponge,
25      params: params.clone(),
26    }
27  }
28
29  pub fn new_from_state(&mut self, challenge: &Scalar) {
30    self.sponge = PoseidonSponge::new(&self.params);
31    self.append_scalar(&challenge);
32  }
33
34  pub fn append_u64(&mut self, x: u64) {
35    self.sponge.absorb(&x);
36  }
37
38  pub fn append_bytes(&mut self, x: &Vec<u8>) {
39    self.sponge.absorb(x);
40  }
41
42  pub fn append_scalar(&mut self, scalar: &Scalar) {
43    self.sponge.absorb(&scalar);
44  }
45
46  pub fn append_point(&mut self, point: &CompressedGroup) {
47    self.sponge.absorb(&point.0);
48  }
49
50  pub fn append_scalar_vector(&mut self, scalars: &Vec<Scalar>) {
51    for scalar in scalars.iter() {
52      self.append_scalar(&scalar);
53    }
54  }
55
56  pub fn challenge_scalar(&mut self) -> Scalar {
57    let scalar = self.sponge.squeeze_field_elements(1).remove(0);
58    scalar
59  }
60
61  pub fn challenge_vector(&mut self, len: usize) -> Vec<Scalar> {
62    let challenges = self.sponge.squeeze_field_elements(len);
63    challenges
64  }
65}
66
67pub trait AppendToPoseidon {
68  fn append_to_poseidon(&self, transcript: &mut PoseidonTranscript);
69}
70
71impl AppendToPoseidon for CompressedGroup {
72  fn append_to_poseidon(&self, transcript: &mut PoseidonTranscript) {
73    transcript.append_point(self);
74  }
75}