Local Open Scope logic.
Opaque HMAC256.
Opaque hmac256drbgabs_generate.
Opaque HMAC256_DRBG_generate_function.
Opaque mbedtls_HMAC256_DRBG_generate_function.
Definition POSTRESEED (IS:reptype t_struct_hmac256drbg_context_st)
(b:bool) (s:ENTROPY.stream) (mc:mdstate) (K V:list byte) (RC EL:Z) (PR:bool) (RI:Z) (c:list byte)
(s':ENTROPY.stream) (K':list byte) (ctx':reptype t_struct_hmac256drbg_context_st):Prop :=
if b then
exists VV KK aa zz cc ss,
mbedtls_HMAC256_DRBG_reseed_function s
(HMAC256DRBGabs K V RC EL PR RI) c
= ENTROPY.success (VV, KK, aa, zz, cc) ss
/\ s' = ss /\ K'=KK /\
ctx' = (mc,
(map Vubyte VV,
(Vint (Int.repr aa),
(Vint (Int.repr EL),
(Val.of_bool cc, Vint (Int.repr RI))))))
else s'=s /\ K'=K /\ ctx'=IS.
Definition POSTUPDATE (b:bool) additional c key V (mc:mdstate) RC EL PR RI ctx1 key1 K' (ctx':reptype t_struct_hmac256drbg_context_st): Prop :=
if b
then (exists (bb : block), exists (ii : ptrofs), exists (UVal : list byte),
additional = Vptr bb ii /\
(K', UVal) =
HMAC256_DRBG_update
(contents_with_add (Vptr bb ii) (Zlength c) c) key V /\
ctx' = (mc,
(map Vubyte UVal,
(Vint (Int.repr RC),
(Vint (Int.repr EL),
(Val.of_bool PR, Vint (Int.repr RI)))))))
else (ctx' = ctx1 /\ K'=key1).
Opaque mbedtls_HMAC256_DRBG_reseed_function.

(* Specifications: *)
Lemma body_hmac_drbg_generate_abs: semax_body HmacDrbgVarSpecs HmacDrbgFunSpecs
f_mbedtls_hmac_drbg_random_with_add hmac_drbg_generate_abs_spec.