3838// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
3939// SOFTWARE.
4040
41- use ark_ff:: { LegendreSymbol , PrimeField } ;
41+ use ark_ff:: { LegendreSymbol , PrimeField , field_hashers :: hash_to_field } ;
4242use ark_r1cs_std:: {
4343 GR1CSVar ,
4444 alloc:: AllocVar ,
@@ -121,31 +121,16 @@ impl<F: PrimeField> GriffinParams<F> {
121121 }
122122
123123 fn instantiate_rc ( t : usize , rounds : usize , shake : & mut Shake128Reader ) -> Vec < Vec < F > > {
124- fn field_element_from_shake < F : PrimeField > ( reader : & mut impl XofReader ) -> F {
125- let mut buf = vec ! [ 0u8 ; F :: MODULUS_BIT_SIZE . div_ceil( 8 ) as usize ] ;
126-
127- loop {
128- reader. read ( & mut buf) ;
129- if let Some ( element) = F :: from_random_bytes ( & buf) {
130- return element;
131- }
132- }
133- }
134-
135124 ( 0 ..rounds - 1 )
136- . map ( |_| ( 0 ..t) . map ( |_| field_element_from_shake ( shake) ) . collect ( ) )
125+ . map ( |_| ( 0 ..t) . map ( |_| hash_to_field :: < _ , _ , 128 > ( shake) ) . collect ( ) )
137126 . collect ( )
138127 }
139128
140129 fn instantiate_alpha_beta ( t : usize , shake : & mut Shake128Reader ) -> Vec < [ F ; 2 ] > {
141- fn field_element_from_shake_without_0 < F : PrimeField > ( reader : & mut impl XofReader ) -> F {
142- let mut buf = vec ! [ 0u8 ; F :: MODULUS_BIT_SIZE . div_ceil( 8 ) as usize ] ;
143-
130+ fn hash_to_non_zero_field < F : PrimeField > ( reader : & mut impl XofReader ) -> F {
144131 loop {
145- reader. read ( & mut buf) ;
146- if let Some ( element) = F :: from_random_bytes ( & buf)
147- && !element. is_zero ( )
148- {
132+ let element = hash_to_field :: < F , _ , 128 > ( reader) ;
133+ if !element. is_zero ( ) {
149134 return element;
150135 }
151136 }
@@ -155,11 +140,11 @@ impl<F: PrimeField> GriffinParams<F> {
155140
156141 // random alpha/beta
157142 loop {
158- let alpha = field_element_from_shake_without_0 :: < F > ( shake) ;
159- let mut beta = field_element_from_shake_without_0 :: < F > ( shake) ;
143+ let alpha = hash_to_non_zero_field :: < F > ( shake) ;
144+ let mut beta = hash_to_non_zero_field :: < F > ( shake) ;
160145 // distinct
161146 while alpha == beta {
162- beta = field_element_from_shake_without_0 :: < F > ( shake) ;
147+ beta = hash_to_non_zero_field :: < F > ( shake) ;
163148 }
164149 let mut symbol = alpha;
165150 symbol. square_in_place ( ) ;
@@ -181,7 +166,7 @@ impl<F: PrimeField> GriffinParams<F> {
181166 beta. mul_assign ( & F :: from ( ( i * i) as u64 ) ) ;
182167 // distinct
183168 while alpha == beta {
184- beta = field_element_from_shake_without_0 :: < F > ( shake) ;
169+ beta = hash_to_non_zero_field :: < F > ( shake) ;
185170 }
186171
187172 #[ cfg( debug_assertions) ]
0 commit comments