Definition Equiv n:= forall k v blocks u 
   (G: Gen_loop_Zlist k v n = (blocks, u)) m
   (M: 32*(Z.of_nat n-1) < m <=32*(Z.of_nat n)),
   HMAC_DRBG_generate_helper_Z HMAC256 k v m = (u,flatten (rev blocks)).

(* Specifications: *)
Lemma E1: Equiv 1.
Lemma E2: Equiv 2.
Lemma E_aux k: forall n v blocks u, Gen_loop_Zlist k (HMAC256 v k) n = (blocks, u) -> flatten (rev blocks) ++ HMAC256 u k = HMAC256 (HMAC256 v k) k ++ flatten (rev (map (fun z : list byte => HMAC256 z k) blocks)).
Lemma E: forall n, Equiv (S n).
Lemma EE n (N:(0<n)%nat): Equiv n.