anchor.diff:           rand_uniform/1,
            sign_verify/0,
            sign_verify/1,
  +         ec_key_padding/1,
            use_all_ec_sign_verify/1,
            use_all_ecdh_generate_compute/1,
            use_all_eddh_generate_compute/1,
  
positive.code:      {group, fips},
       {group, non_fips},
       cipher_padding,
       node_supports_cache,
       mod_pow,
       exor,
  
negative.code:                    [Key, IV, Tplain, Tcrypt, Tdecrypt, Tpad]),
              ct:fail("~p", [Cipher])
      end.
  
  %%--------------------------------------------------------------------
  ec_key_padding(_Config) ->
      lists:foreach(fun test_ec_key_padding/1,
                    crypto:supports(curves) -- [ed25519, ed448, x25519, x448]
                   ).
  
  test_ec_key_padding(CurveName) ->
      ExpectedSize = expected_ec_size(CurveName),
      repeat(100, % Enough to provoke an error in the 85 curves
                 % With for example 1000, the total test time would be too large
             fun() ->
                     case crypto:generate_key(ecdh, CurveName) of
                         {_PubKey, PrivKey} when byte_size(PrivKey) == ExpectedSize ->
                             %% ct:pal("~p:~p Test ~p, size ~p, expected size ~p",
                             %%        [?MODULE,?LINE, CurveName, byte_size(PrivKey), ExpectedSize]),
                             ok;
                         {_PubKey, PrivKey} ->
                             ct:fail("Bad ~p size: ~p expected: ~p", [CurveName, byte_size(PrivKey), ExpectedSize]);
                         Other ->
                             ct:pal("~p:~p ~p", [?MODULE,?LINE,Other]),
                             ct:fail("Bad public_key:generate_key result for ~p", [CurveName])
                     end
             end).
  
  repeat(Times, F) when Times > 0 -> F(), repeat(Times-1, F);
  repeat(_, _) -> ok.
  
  expected_ec_size(CurveName) when is_atom(CurveName) ->
      expected_ec_size(crypto_ec_curves:curve(CurveName));
  expected_ec_size({{prime_field,_}, _, _, Order, _}) -> byte_size(Order);
  expected_ec_size({{characteristic_two_field, _, _}, _, _, Order, _}) -> size(Order).
  
  %%--------------------------------------------------------------------
  no_aead() ->
       [{doc, "Test disabled aead ciphers"}].
  no_aead(Config) when is_list(Config) ->
      EncArg4 =
          case lazy_eval(proplists:get_value(cipher, Config)) of
              [{Type, Key, PlainText, Nonce, AAD, CipherText, CipherTag, TagLen, _Info} | _] ->
                  {AAD, PlainText, TagLen};
              [{Type, Key, PlainText, Nonce, AAD, CipherText, CipherTag, _Info} | _] ->
                  {AAD, PlainText}
          end,
      EncryptArgs = [Type, Key, Nonce, EncArg4],
      DecryptArgs = [Type, Key, Nonce, {AAD, CipherText, CipherTag}],
      notsup(fun crypto:block_encrypt/4, EncryptArgs),
      notsup(fun crypto:block_decrypt/4, DecryptArgs).
  
  %%--------------------------------------------------------------------
  no_aead_ng() ->
  