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)).

(*Hence, by induction the following equivalence property holds*)
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)).