Local Open Scope nat.
Definition LBLOCK : nat := Z.to_nat LBLOCKz.
Definition CBLOCK : nat := Z.to_nat CBLOCKz.
Opaque LBLOCK CBLOCK.

Lemma hash_blocks_equation' : forall (r : registers) (msg : list int),
hash_blocks r msg =
match msg with
| [] => r
| _ :: _ => hash_blocks (hash_block r (firstn LBLOCK msg)) (skipn LBLOCK msg)
end.