@@ -7,9 +7,8 @@ pub mod sha512;
77
88use crate::default::Default ;
99use crate::uint128::U128 ;
10- use crate::collections::vec::Vec ;
1110use crate::embedded_curve_ops:: {
12- EmbeddedCurvePoint , EmbeddedCurveScalar , multi_scalar_mul , multi_scalar_mul_slice ,
11+ EmbeddedCurvePoint , EmbeddedCurveScalar , multi_scalar_mul , multi_scalar_mul_array_return ,
1312};
1413use crate::meta::derive_via ;
1514
@@ -57,22 +56,22 @@ pub fn pedersen_hash<let N: u32>(input: [Field; N]) -> Field
5756
5857#[no_predicates]
5958pub fn pedersen_hash_with_separator <let N : u32 >(input : [Field ; N ], separator : u32 ) -> Field {
60- let mut scalars : Vec <EmbeddedCurveScalar > =
61- Vec ::from_slice ([EmbeddedCurveScalar { lo : 0 , hi : 0 }; N ].as_slice ()); //Vec::new();
62- for i in 0 ..N {
63- scalars .set (i , from_field_unsafe (input [i ]));
64- }
65- scalars .push (EmbeddedCurveScalar { lo : N as Field , hi : 0 as Field });
59+ let mut scalars : [EmbeddedCurveScalar ; N + 1 ] = [EmbeddedCurveScalar { lo : 0 , hi : 0 }; N + 1 ];
60+ let mut generators : [EmbeddedCurvePoint ; N + 1 ] =
61+ [EmbeddedCurvePoint ::point_at_infinity (); N + 1 ];
6662 let domain_generators : [EmbeddedCurvePoint ; N ] =
6763 derive_generators ("DEFAULT_DOMAIN_SEPARATOR" .as_bytes (), separator );
68- let mut vec_generators = Vec :: new ();
64+
6965 for i in 0 ..N {
70- vec_generators .push (domain_generators [i ]);
66+ scalars [i ] = from_field_unsafe (input [i ]);
67+ generators [i ] = domain_generators [i ];
7168 }
69+ scalars [N ] = EmbeddedCurveScalar { lo : N as Field , hi : 0 as Field };
70+
7271 let length_generator : [EmbeddedCurvePoint ; 1 ] =
7372 derive_generators ("pedersen_hash_length" .as_bytes (), 0 );
74- vec_generators . push ( length_generator [0 ]) ;
75- multi_scalar_mul_slice ( vec_generators . slice , scalars . slice )[0 ]
73+ generators [ N ] = length_generator [0 ];
74+ multi_scalar_mul_array_return ( generators , scalars )[0 ]
7675}
7776
7877#[field(bn254)]
0 commit comments