anchor.diff:           ].
   
   groups() -> [{md5, [], [hash]},
  -             {sha, [], [hash]},
  +             {sha, [], [hash, hmac]},
                {sha256, [], [hash]},
                {sha512, [], [hash]},
                {rsa, [], [sign_verify, public_encrypt]}
  
positive.code: group_config(sha = Type, Config) ->
      Msgs = [rfc_4634_test1(), rfc_4634_test2_1(),long_msg()],
      Digests = rfc_4634_sha_digests() ++ [long_sha_digest()],
      [{hash, {Type, Msgs, Digests}} | Config];
  group_config(sha256 = Type, Config) ->
      Msgs =   [rfc_4634_test1(), rfc_4634_test2_1(), long_msg()],
      Digests = rfc_4634_sha256_digests() ++ [long_sha256_digest()],
  
negative.code:     hash(Type, lists:map(fun iolistify/1, Msgs), Digests),
      hash_increment(Type, Inc, IncrDigest).
  
  hmac() ->
       [{doc, "Test all different hmac functions"}].
  hmac(Config) when is_list(Config) ->
      {Type, Keys, DataLE, Expected} = proplists:get_value(hmac, Config),
      Data = lazy_eval(DataLE),
      hmac(Type, Keys, Data, Expected),
      hmac(Type, lists:map(fun iolistify/1, Keys), lists:map(fun iolistify/1, Data), Expected).
  
  public_encrypt() ->
       [{doc, "Test public_encrypt/decrypt and private_encrypt/decrypt functions. "}].
  public_encrypt(Config) when is_list(Config) ->
  