@@ -94,28 +94,24 @@ __contract__(
9494 assigns (memory_slice (out2 , nblocks * r ))
9595 assigns (memory_slice (out3 , nblocks * r )))
9696{
97+ size_t current_offset = 0 ;
9798 while (nblocks > 0 )
9899 __loop__ (
99- assigns (out0 , out1 , out2 , out3 , nblocks ,
100+ assigns (nblocks , current_offset ,
100101 memory_slice (s , sizeof (uint64_t ) * MLD_KECCAK_LANES * MLD_KECCAK_WAY ),
101102 memory_slice (out0 , nblocks * r ),
102103 memory_slice (out1 , nblocks * r ),
103104 memory_slice (out2 , nblocks * r ),
104105 memory_slice (out3 , nblocks * r ))
105- invariant (nblocks <= loop_entry (nblocks ) &&
106- out0 == loop_entry (out0 ) + r * (loop_entry (nblocks ) - nblocks ) &&
107- out1 == loop_entry (out1 ) + r * (loop_entry (nblocks ) - nblocks ) &&
108- out2 == loop_entry (out2 ) + r * (loop_entry (nblocks ) - nblocks ) &&
109- out3 == loop_entry (out3 ) + r * (loop_entry (nblocks ) - nblocks ))
106+ invariant (nblocks <= loop_entry (nblocks ))
107+ invariant (current_offset == (loop_entry (nblocks ) - nblocks ) * r )
110108 decreases (nblocks ))
111109 {
112110 mld_keccakf1600x4_permute (s );
113- mld_keccakf1600x4_extract_bytes (s , out0 , out1 , out2 , out3 , 0 , r );
114-
115- out0 += r ;
116- out1 += r ;
117- out2 += r ;
118- out3 += r ;
111+ mld_keccakf1600x4_extract_bytes (
112+ s , & out0 [current_offset ], & out1 [current_offset ], & out2 [current_offset ],
113+ & out3 [current_offset ], 0 , r );
114+ current_offset += r ;
119115 nblocks -- ;
120116 }
121117}
0 commit comments