1- pub fn poseidon2 <let N : u32 >(input : impl ArrayOrBoundedVec <Field , N >) -> Field {
1+ pub fn poseidon2 <T , let N : u32 >(input : T ) -> Field
2+ where
3+ T : ArrayOrBoundedVec <Field , N >,
4+ {
25 let input = input .as_bounded_vec ();
36 poseidon::poseidon2::Poseidon2 ::hash (input .storage (), input .len ())
47}
@@ -8,24 +11,30 @@ pub fn pedersen<let N: u32>(input: [Field; N]) -> Field {
811 std::hash:: pedersen_hash (input )
912}
1013
11- pub fn sha256 <let N : u32 >(input : impl ArrayOrBoundedVec <u8 , N >) -> [u8 ; 32 ] {
14+ pub fn sha256 <T , let N : u32 >(input : T ) -> [u8 ; 32 ]
15+ where
16+ T : ArrayOrBoundedVec <u8 , N >,
17+ {
1218 let input = input .as_bounded_vec ();
1319 dep::sha256:: sha256_var (input .storage (), input .len ())
1420}
1521
16- pub fn partial_sha256_interstitial <let N : u32 >(
17- mut h : [ u32 ; 8 ],
18- input : impl ArrayOrBoundedVec <u8 , N >,
19- ) -> [ u32 ; 8 ] {
22+ pub fn partial_sha256_interstitial <T , let N : u32 >(mut h : [ u32 ; 8 ], input : T ) -> [ u32 ; 8 ]
23+ where
24+ T : ArrayOrBoundedVec <u8 , N >,
25+ {
2026 let input = input .as_bounded_vec ();
2127 dep::sha256:: partial_sha256_var_interstitial (h , input .storage (), input .len ())
2228}
2329
24- pub fn partial_sha256_end <let N : u32 >(
30+ pub fn partial_sha256_end <T , let N : u32 >(
2531 mut h : [u32 ; 8 ],
26- partial_input : impl ArrayOrBoundedVec < u8 , N > ,
32+ partial_input : T ,
2733 full_input_len : u32 ,
28- ) -> [u8 ; 32 ] {
34+ ) -> [u8 ; 32 ]
35+ where
36+ T : ArrayOrBoundedVec <u8 , N >,
37+ {
2938 let partial_input = partial_input .as_bounded_vec ();
3039 dep::sha256:: partial_sha256_var_end (
3140 h ,
@@ -35,7 +44,10 @@ pub fn partial_sha256_end<let N: u32>(
3544 )
3645}
3746
38- pub fn keccak256 <let N : u32 >(input : impl ArrayOrBoundedVec <u8 , N >) -> [u8 ; 32 ] {
47+ pub fn keccak256 <T , let N : u32 >(input : T ) -> [u8 ; 32 ]
48+ where
49+ T : ArrayOrBoundedVec <u8 , N >,
50+ {
3951 let input = input .as_bounded_vec ();
4052 dep::keccak256:: keccak256 (input .storage (), input .len ())
4153}
@@ -70,38 +82,32 @@ mod tests {
7082
7183 #[test]
7284 fn test_equivalence () {
73- assert (
74- (poseidon2 (FIELD_INPUT_ARR ) == poseidon2 (FIELD_INPUT_VEC )),
75- // TODO: is this a bug? https://discord.com/channels/1113924620781883405/1333383938198212659
76- // & (poseidon2(FIELD_INPUT_ARR) == poseidon2(FIELD_INPUT_VEC_LONGER)),
77- );
78- assert (
79- (sha256 (U8_INPUT_VEC ) == sha256 (U8_INPUT_ARR ))
80- & (sha256 (U8_INPUT_VEC_LONGER ) == sha256 (U8_INPUT_ARR )),
81- );
82- assert (
83- (keccak256 (U8_INPUT_VEC ) == keccak256 (U8_INPUT_ARR ))
84- & (keccak256 (U8_INPUT_VEC_LONGER ) == keccak256 (U8_INPUT_ARR )),
85- );
85+ assert_eq (poseidon2 (FIELD_INPUT_ARR ), poseidon2 (FIELD_INPUT_VEC ));
86+ assert_eq (poseidon2 (FIELD_INPUT_ARR ), poseidon2 (FIELD_INPUT_VEC_LONGER ));
87+ assert_eq (sha256 (U8_INPUT_VEC ), sha256 (U8_INPUT_ARR ));
88+ assert_eq (sha256 (U8_INPUT_VEC_LONGER ), sha256 (U8_INPUT_ARR ));
89+ assert_eq (keccak256 (U8_INPUT_VEC ), keccak256 (U8_INPUT_ARR ));
90+ assert_eq (keccak256 (U8_INPUT_VEC_LONGER ), keccak256 (U8_INPUT_ARR ));
8691 }
8792
8893 #[test]
8994 fn test_against_std () {
90- assert (
91- poseidon2 (FIELD_INPUT_ARR )
92- == poseidon::poseidon2::Poseidon2 ::hash (FIELD_INPUT_ARR , FIELD_INPUT_ARR .len ()),
95+ assert_eq (
96+ poseidon2 (FIELD_INPUT_ARR ),
97+ poseidon::poseidon2::Poseidon2 ::hash (FIELD_INPUT_ARR , FIELD_INPUT_ARR .len ()),
9398 );
94- assert (
95- poseidon2 (FIELD_INPUT_VEC_LONGER )
96- == poseidon::poseidon2::Poseidon2 ::hash (
97- FIELD_INPUT_VEC_LONGER .storage (),
98- FIELD_INPUT_VEC_LONGER .len (),
99- ),
99+ assert_eq (
100+ poseidon2 (FIELD_INPUT_VEC_LONGER ),
101+ poseidon::poseidon2::Poseidon2 ::hash (
102+ FIELD_INPUT_VEC_LONGER .storage (),
103+ FIELD_INPUT_VEC_LONGER .len (),
104+ ),
100105 );
101- assert (pedersen (FIELD_INPUT_ARR ) == std::hash:: pedersen_hash (FIELD_INPUT_ARR ));
102- assert (sha256 (U8_INPUT_ARR ) == dep::sha256:: sha256_var (U8_INPUT_ARR , U8_INPUT_ARR .len ()));
103- assert (
104- keccak256 (U8_INPUT_ARR ) == dep::keccak256:: keccak256 (U8_INPUT_ARR , U8_INPUT_ARR .len ()),
106+ assert_eq (pedersen (FIELD_INPUT_ARR ), std::hash:: pedersen_hash (FIELD_INPUT_ARR ));
107+ assert_eq (sha256 (U8_INPUT_ARR ), dep::sha256:: sha256_var (U8_INPUT_ARR , U8_INPUT_ARR .len ()));
108+ assert_eq (
109+ keccak256 (U8_INPUT_ARR ),
110+ dep::keccak256:: keccak256 (U8_INPUT_ARR , U8_INPUT_ARR .len ()),
105111 );
106112 }
107113}
0 commit comments