Definition sha_splitandpad_blocks (msg : Blist) : list Blist :=
toBlocks (sha_splitandpad_inc msg).

(* Specifications: *)
(* Definition sha_splitandpad_inc' (msg : Blist) : Blist := concat (sha_splitandpad_blocks msg). *)
Lemma InBlocks_Forall_512 b: (InBlocks 512 b) ->
Forall (fun x : list bool => length x = 512%nat) (toBlocks b).
Lemma sha_splitandpad_blocks_512 m:
Forall (fun x => length x = 512%nat) (sha_splitandpad_blocks m).
Lemma concat_toBlocks_id l: InBlocks 512 l -> concat (toBlocks l) = l.
Theorem HMAC_list_concat_sap_instantiated
h (HH: forall x y, length x = c -> length y = b -> length (h x y)  = c)
iv (IV: length iv = c) (op ip : Blist) (IL: length ip = b) (OL: length op = b)
(FOLD_hash_blocks_eq : forall (l : Blist) (ls : list Blist),
length l = b ->
Forall (fun x : list bool => length x = b) ls ->
fold_left h (l :: ls) iv =
hash_blocks_bits _ B h iv (l ++ concat ls))
: forall (k m : Blist), length k = b ->
HMAC_List.HMAC c p h iv sha_splitandpad_blocks fpad op ip k m =
HMAC_Concat.HMAC c p B h iv sha_splitandpad_inc fpad op ip k m.