assert ((Vector.to_list ipad_v)  = bytesToBits (PAD.HM.sixtyfour ipd)  ).
apply bits_bytes_ind_comp; trivial.
apply IPADX.
assert ((Vector.to_list opad_v)  = bytesToBits (PAD.HM.sixtyfour opd)  ).
apply bits_bytes_ind_comp; trivial.
apply OPADX.
rewrite N, H in H0; clear N H.
apply bytesToBits_injective in H0; trivial.
unfold PAD.HM.sixtyfour in H0.
apply list_repeat_injective in H0. inv H0.
apply BS_pos.
Qed.

(* Specifications: *)
Lemma Equivalence (P : Blist -> Prop) (HP: forall msg, P msg -> NPeano.Nat.divide 8 (length msg))
(kv : Bvector EQ.b) (m : HMAC_Abstract.Message P):
Vector.to_list (HMAC_spec.HMAC h_v EQ.iv_v (HMAC_Abstract.wrappedSAP _ _ EQ.splitAndPad_v)
EQ.fpad_v opad_v ipad_v kv m) =
bytesToBits (PAD.HM.HmacCore ipd opd
(bitsToBytes (HMAC_Abstract.Message2Blist m))
(bitsToBytes (Vector.to_list kv))).