Skip to content

Commit 6e739b0

Browse files
authored
Make PedersenCompressor a TwoToOneCRH (#42)
* Make `PedersenCompressor` a `TwoToOneCRH` * Fmt
1 parent 16418d2 commit 6e739b0

File tree

1 file changed

+34
-3
lines changed

1 file changed

+34
-3
lines changed

src/crh/injective_map/mod.rs

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use ark_ff::bytes::ToBytes;
33
use ark_std::rand::Rng;
44
use ark_std::{fmt::Debug, hash::Hash, marker::PhantomData};
55

6-
use super::{pedersen, CRH};
6+
use super::{pedersen, TwoToOneCRH, CRH};
77
use ark_ec::{
88
models::{ModelParameters, TEModelParameters},
99
twisted_edwards_extended::{GroupAffine as TEAffine, GroupProjective as TEProjective},
@@ -45,14 +45,45 @@ impl<C: ProjectiveCurve, I: InjectiveMap<C>, W: pedersen::Window> CRH
4545

4646
fn setup<R: Rng>(rng: &mut R) -> Result<Self::Parameters, Error> {
4747
let time = start_timer!(|| format!("PedersenCRHCompressor::Setup"));
48-
let params = pedersen::CRH::<C, W>::setup(rng);
48+
let params = <pedersen::CRH<C, W> as CRH>::setup(rng);
4949
end_timer!(time);
5050
params
5151
}
5252

5353
fn evaluate(parameters: &Self::Parameters, input: &[u8]) -> Result<Self::Output, Error> {
5454
let eval_time = start_timer!(|| "PedersenCRHCompressor::Eval");
55-
let result = I::injective_map(&pedersen::CRH::<C, W>::evaluate(parameters, input)?)?;
55+
let result = I::injective_map(&<pedersen::CRH<C, W> as CRH>::evaluate(parameters, input)?)?;
56+
end_timer!(eval_time);
57+
Ok(result)
58+
}
59+
}
60+
61+
impl<C: ProjectiveCurve, I: InjectiveMap<C>, W: pedersen::Window> TwoToOneCRH
62+
for PedersenCRHCompressor<C, I, W>
63+
{
64+
const LEFT_INPUT_SIZE_BITS: usize = pedersen::CRH::<C, W>::LEFT_INPUT_SIZE_BITS;
65+
const RIGHT_INPUT_SIZE_BITS: usize = pedersen::CRH::<C, W>::RIGHT_INPUT_SIZE_BITS;
66+
type Output = I::Output;
67+
type Parameters = pedersen::Parameters<C>;
68+
69+
fn setup<R: Rng>(r: &mut R) -> Result<Self::Parameters, Error> {
70+
<pedersen::CRH<C, W> as TwoToOneCRH>::setup(r)
71+
}
72+
73+
/// A simple implementation method: just concat the left input and right input together
74+
///
75+
/// `evaluate` requires that `left_input` and `right_input` are of equal length.
76+
fn evaluate(
77+
parameters: &Self::Parameters,
78+
left_input: &[u8],
79+
right_input: &[u8],
80+
) -> Result<Self::Output, Error> {
81+
let eval_time = start_timer!(|| "PedersenCRHCompressor::Eval");
82+
let result = I::injective_map(&<pedersen::CRH<C, W> as TwoToOneCRH>::evaluate(
83+
parameters,
84+
left_input,
85+
right_input,
86+
)?)?;
5687
end_timer!(eval_time);
5788
Ok(result)
5889
}

0 commit comments

Comments
 (0)