reflexivity. Qed.
Definition hashblocks: list int -> list int -> list int:= SHA256.hash_blocks.
Definition d := 16%nat.
Definition HBS_eq : forall r msg : list int,
hashblocks r msg =
match msg with
| List.nil => r
| _ :: _ => hashblocks (hashblock r (firstn d msg)) (skipn d msg)
end := SHA256.hash_blocks_equation.

(* Specifications: *)
Lemma D: (d * 32)%nat = b. reflexivity. Qed.
Definition gap:list byte -> list int := SHA256.generate_and_pad.
Lemma GAP: forall bits, NPeano.Nat.divide d (length (gap (bitsToBytes bits))).
intros. rewrite <- pad_compose_equal. apply gap_divide16. Qed.
Lemma sap_gap: splitAndPad = fun bits => bytesToBits (intlist_to_bytelist (gap (bitsToBytes bits))).
Lemma HASH m: SHA256.Hash m = intlist_to_bytelist (hashblocks ir (gap m)).
unfold SHA256.Hash.