(* THIS FILE CONTAINS Lemmas that DO NOT depend on CompCert or Verifiable C, and that are used in the proof of the C program but are not used in the proof of functional_prog.v. *)
Require Export sha.common_lemmas.
Require Psatz.
Global Opaque CBLOCKz LBLOCKz.
Hint Rewrite Zlength_intlist_to_bytelist : sublist.
Hint Rewrite Zlength_intlist_to_bytelist : Zlength.
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.