(*longer proof now in HAMC_equivalence Lemma opad_ne_ipad : EQ.opad_v <> EQ.ipad_v. intros N. assert (Vector.to_list EQ.opad_v = Vector.to_list EQ.ipad_v). rewrite N; trivial. unfold EQ.opad_v, EQ.ipad_v in H. repeat rewrite of_length_proof_irrel in H. unfold HP.Opad, HP.Ipad in H. simpl in H. discriminate. Qed. *)
Module PARS256 <: HMAC_is_PRF_Parameters SHA256 EQ256.
Parameter P : Blist -> Prop.
Parameter HP: forall m, P m -> NPeano.Nat.divide 8 (length m).

(* Specifications: *)
Lemma splitAndPad_1to1: forall b1 b2 (B:EQ256.splitAndPad_v b1 = EQ256.splitAndPad_v b2)
(L1: NPeano.Nat.divide 8 (length b1))
(L2: NPeano.Nat.divide 8 (length b2)), b1 = b2.
Lemma IpadsEQ: PRFMod.M.ipad_v =  EQ.ipad_v.
Theorem HMAC256_isPRF' A (A_wf : well_formed_oc A) tau epsilon sigma
(HH1: PRFMod.h_PRF A tau) (HH2: PRFMod.h_star_WCR A epsilon) (HH3: PRFMod.dual_h_RKA A sigma):
PRFMod.isPRF (Rnd (b EQ256.c EQ256.p)) (Rnd EQ256.c)
(HMAC EQ.h_v iv_v (HMAC_Abstract.wrappedSAP _ _ splitAndPad_v)
fpad_v EQ.opad_v EQ.ipad_v)
PRFMod.Message_eqdec _ (tau + epsilon + sigma) A.