Definition shah : Blist -> Blist ->  Blist := EQ.h.Definition hashblock : list int -> list int -> list int :=EQ.hashblock.Definition HHB : shah =
      (fun rgs bl : Blist =>
       intsToBits (hashblock (bitsToInts rgs) (bitsToInts bl))) := EQ.HHB.Definition hashblocks: list int -> list int -> list int := EQ.hashblocks.Definition d:nat := EQ.d.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 := EQ.HBS_eq.(*Module HM:= HP.HMAC_FUN HF.*)
Module PAD := HMAC_Pad HF I.Definition h_v (iv:Bvector EQ.c) (blk:Bvector EQ.b): Bvector EQ.c :=
    of_list_length _
       (EQ.h_length _ _ (VectorToList_length _ iv) (VectorToList_length _ blk)).

(* Specifications: *)
Lemma h_eq : forall (block_v : Bvector EQ.b) (block_l : Blist) (HVL: block_l = Vector.to_list block_v) ivA ivB (IV: ivA = Vector.to_list ivB), EQ.h ivA block_l = Vector.to_list (h_v ivB block_v).