(* Note use of sha_splitandpad_blocks and sha_splitandpad_inc' (= concat the blocks) *)

(* Specifications: *)
Lemma len_min : forall {A : Type} (l : list A), (length l >= 0)%nat.
Theorem fold_hash_blocks_eq : forall (l : Blist) (ls : list Blist),
length l = 512%nat ->
Forall (fun x => length x = 512%nat) ls ->
fold_left sha_h (l :: ls) sha_iv =
hash_blocks_bits _ B sha_h sha_iv (l ++ concat ls).
Theorem HMAC_list_concat_explicit : forall (k m : Blist) (op ip : Blist),
length k = b ->
length op = b ->
length ip = b ->
HMAC_List.HMAC c p sha_h sha_iv sha_splitandpad_blocks fpad op ip k m =
HMAC_Concat.HMAC c p B sha_h sha_iv sha_splitandpad_inc fpad op ip k m.