Require sha.sha.
Local Open Scope logic.

(*Here's the proof for the alternative specification:*)
Lemma cleanupbodyproof1 Espec wsh c h
(Hwsh: writable_share wsh):
@semax CompSpecs Espec (func_tycontext f_HMAC_cleanup HmacVarSpecs HmacFunSpecs nil)
(PROP  ()
LOCAL  (temp _ctx c)
SEP  (EX  key : list byte, hmacstate_PreInitNull wsh key h c))
(Ssequence (fn_body f_HMAC_cleanup) (Sreturn None))
(frame_ret_assert
(function_body_ret_assert tvoid
(PROP  ()
LOCAL ()
SEP
(data_block wsh
(list_repeat (Z.to_nat (sizeof t_struct_hmac_ctx_st)) Byte.zero)
c))) emp).