@@ -168,29 +168,33 @@ impl MD5State {
168168 }
169169
170170 #[ inline]
171- fn md5_compress ( & mut self , block : & MD5Block ) {
172- let mut schedule: [ u32 ; 16 ] = Default :: default ( ) ;
173-
174- for ( s, bytes) in schedule. iter_mut ( ) . zip ( block. 0 . chunks_exact ( 32 / 8 ) )
175- {
176- * s = u32:: from_le_bytes ( bytes. try_into ( ) . unwrap ( ) ) ;
177- }
171+ #[ expect( clippy:: many_single_char_names) ]
172+ fn round < S > ( & mut self , r : MD5Round , step : & StepParams , schedule : S )
173+ where
174+ S : Fn ( usize ) -> u32 ,
175+ {
176+ let [ a, b, c, d] = self . 0 ;
177+ let expr = r. get_expr ( * self ) ;
178+ let a = a
179+ . wrapping_add ( expr)
180+ . wrapping_add ( step. t )
181+ . wrapping_add ( schedule ( step. k ) )
182+ . rotate_left ( step. s )
183+ . wrapping_add ( b) ;
184+ self . 0 = [ d, a, b, c] ;
185+ }
178186
179- let round_impl = |r : MD5Round , tmp : MD5State , step : & StepParams | {
180- let [ a, b, _rest @ ..] = tmp. 0 ;
181- let expr = r. get_expr ( tmp) ;
182- let a = a
183- . wrapping_add ( expr)
184- . wrapping_add ( step. t )
185- . wrapping_add ( * schedule. get ( step. k ) . unwrap ( ) ) ;
186- b. wrapping_add ( a. rotate_left ( step. s ) )
187+ #[ inline]
188+ fn md5_compress ( & mut self , block : & MD5Block ) {
189+ let schedule = |k : usize | -> u32 {
190+ let bytes = block. 0 . chunks_exact ( 32 / 8 ) . nth ( k) . unwrap ( ) ;
191+ u32:: from_le_bytes ( bytes. try_into ( ) . unwrap ( ) )
187192 } ;
188193
189194 let mut tmp = * self ;
190195 for ( round, steps) in STAGES . iter ( ) . enumerate ( ) {
191196 for step in steps {
192- tmp. 0 [ 0 ] = round_impl ( MD5Round ( round) , tmp, step) ;
193- tmp. 0 . rotate_right ( 1 ) ;
197+ tmp. round ( MD5Round ( round) , step, schedule) ;
194198 }
195199 }
196200
0 commit comments