Inductive HABS := hABS: forall (key data:list byte), HABS.Inductive HABS := hABS: forall (key data:list byte), HABS.Definition abs_relate (a: HABS) (r: hmacstate) : Prop :=
  match a with hABS key data => 
    hmac_relate (hmacUpdate data (hmacInit key)) r
  end.Definition EMPTY sh c : mpred := data_at_ sh t_struct_hmac_ctx_st c.

(* Specifications: *)
Lemma body_hmac_crypto: semax_body HmacVarSpecs HmacFunSpecs f_HMAC hmac_crypto_spec.
Lemma body_hmac_reset: semax_body HmacVarSpecs HmacFunSpecs f_HMAC_Init hmac_reset_spec.
Lemma body_hmac_final: semax_body HmacVarSpecs HmacFunSpecs f_HMAC_Final hmac_final_spec.
Lemma body_hmac_update: semax_body HmacVarSpecs HmacFunSpecs f_HMAC_Update hmac_update_spec.
Lemma body_hmac_starts: semax_body HmacVarSpecs HmacFunSpecs f_HMAC_Init hmac_starts_spec.
Lemma body_hmac_cleanup: semax_body HmacVarSpecs HmacFunSpecs f_HMAC_cleanup hmac_cleanup_spec.