File tree Expand file tree Collapse file tree 1 file changed +13
-13
lines changed Expand file tree Collapse file tree 1 file changed +13
-13
lines changed Original file line number Diff line number Diff line change @@ -7,20 +7,18 @@ use ark_ff::Field;
7
7
fn apply_mds_matrix < F : Field , SC : SpongeConstants > (
8
8
params : & ArithmeticSpongeParams < F > ,
9
9
state : & [ F ] ,
10
- ) -> Vec < F > {
10
+ ) -> [ F ; 3 ] {
11
+ assert_eq ! ( params. mds. len( ) , 3 ) ;
11
12
if SC :: PERM_FULL_MDS {
12
- params
13
- . mds
14
- . iter ( )
15
- . map ( |m| {
16
- state
17
- . iter ( )
18
- . zip ( m. iter ( ) )
19
- . fold ( F :: zero ( ) , |x, ( s, & m) | m * s + x)
20
- } )
21
- . collect ( )
13
+ let mut new_state = [ F :: zero ( ) ; 3 ] ;
14
+ for ( i, sub_params) in params. mds . iter ( ) . enumerate ( ) {
15
+ for ( state, param) in state. iter ( ) . zip ( sub_params) {
16
+ new_state[ i] . add_assign ( * param * state) ;
17
+ }
18
+ }
19
+ new_state
22
20
} else {
23
- vec ! [
21
+ [
24
22
state[ 0 ] + state[ 2 ] ,
25
23
state[ 0 ] + state[ 1 ] ,
26
24
state[ 1 ] + state[ 2 ] ,
@@ -36,7 +34,9 @@ pub fn full_round<F: Field, SC: SpongeConstants>(
36
34
for state_i in state. iter_mut ( ) {
37
35
* state_i = sbox :: < F , SC > ( * state_i) ;
38
36
}
39
- * state = apply_mds_matrix :: < F , SC > ( params, state) ;
37
+ let new_state = apply_mds_matrix :: < F , SC > ( params, state) ;
38
+ state. clear ( ) ;
39
+ state. extend ( new_state) ;
40
40
for ( i, x) in params. round_constants [ r] . iter ( ) . enumerate ( ) {
41
41
state[ i] . add_assign ( x) ;
42
42
}
You can’t perform that action at this time.
0 commit comments