Definition BlockSize:= 64%nat.Definition DigestLength:= 32%nat.Definition Hash : list byte -> list byte := SHA_256'.Module HMAC_SHA256 := HP.HMAC_FUN SHA256.Definition Ipad := Byte.repr 54.(*0x36*)
Definition Opad := Byte.repr 92.(*0x5c*)

Definition HMAC256 := HMAC_SHA256.HMAC Ipad Opad.Definition HMACString (txt passwd:string): list byte :=
  HMAC256 (str_to_bytes txt) (str_to_bytes passwd).Definition HMACHex (text password:string): list byte :=
  HMAC256 (hexstring_to_bytelist text) (hexstring_to_bytelist password).Definition check password text digest :=
  bytelist_eq (HMACString text password) (hexstring_to_bytelist digest) = true.(*a random example, solution obtained via
  http://www.freeformatter.com/hmac-generator.html#ad-output*)
Goal check "bb" "aa"
      "c1201d3dccfb84c069771d07b3eda4dc26e5b34a4d8634b2bba84fb54d11e265".

(* Specifications: *)
Lemma RFC4231_Section4_3: check "Jefe" "what do ya want for nothing?" "5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843".