Local Open Scope logic.
(* FIPS 197 section 5.3.5 mentions that ShiftRows and SubBytes (or InvShiftRows and * InvSubBytes) can commute. Normally, we would stipulate that the blocks are in bounds, * but it actually turns out to be unnecessary for the proof. *)

Lemma subbytes_shiftrows_comm : forall b : block,
ShiftRows (SubBytes b) = SubBytes (ShiftRows b).