@@ -3,7 +3,7 @@ use ark_ff::bytes::ToBytes;
33use ark_std:: rand:: Rng ;
44use ark_std:: { fmt:: Debug , hash:: Hash , marker:: PhantomData } ;
55
6- use super :: { pedersen, CRH } ;
6+ use super :: { pedersen, TwoToOneCRH , CRH } ;
77use 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