anchor.diff:      #{block_size => 1,iv_length => 16,key_length => 24,mode => ctr_mode,type => undefined};
   cipher_info(aes_256_ctr) ->
       #{block_size => 1,iv_length => 16,key_length => 32,mode => ctr_mode,type => undefined};
  -%% %% These ciphers belong to the "old" interface:
  -%% cipher_info(aes_cbc) ->
  -%%     #{block_size => 16,iv_length => 16,key_length => 24,mode => cbc_mode,type => 423};
  -%% cipher_info(aes_cbc128) ->
  -%%     #{block_size => 16,iv_length => 16,key_length => 16,mode => cbc_mode,type => 419};
  -%% cipher_info(aes_cbc256) ->
  -%%     #{block_size => 16,iv_length => 16,key_length => 32,mode => cbc_mode,type => 427};
  -%% cipher_info(aes_ccm) ->
  -%%     #{block_size => 1,iv_length => 12,key_length => 24,mode => ccm_mode,type => 899};
  -%% cipher_info(aes_cfb128) ->
  -%%     #{block_size => 1,iv_length => 16,key_length => 32,mode => cfb_mode,type => 429};
  -%% cipher_info(aes_cfb8) ->
  -%%     #{block_size => 1,iv_length => 16,key_length => 32,mode => cfb_mode,type => 429};
  -%% cipher_info(aes_ecb) ->
  -%%     #{block_size => 16,iv_length => 0,key_length => 24,mode => ecb_mode,type => 422};
  -%% cipher_info(aes_gcm) ->
  -%%     #{block_size => 1,iv_length => 12,key_length => 24,mode => gcm_mode,type => 898};
  -%% cipher_info(des3_cbc) ->
  -%%     #{block_size => 8,iv_length => 8,key_length => 24,mode => cbc_mode,type => 44};
  -%% cipher_info(des3_cbf) ->
  -%%     #{block_size => 1,iv_length => 8,key_length => 24,mode => cfb_mode,type => 30};
  -%% cipher_info(des3_cfb) ->
  -%%     #{block_size => 1,iv_length => 8,key_length => 24,mode => cfb_mode,type => 30};
  -%% cipher_info(des_ede3) ->
  -%%     #{block_size => 8,iv_length => 8,key_length => 24,mode => cbc_mode,type => 44};
  -%% cipher_info(des_ede3_cbf) ->
  -%%     #{block_size => 1,iv_length => 8,key_length => 24,mode => cfb_mode,type => 30};
   cipher_info(Type) ->
  -    cipher_info_nif(alias(Type)).
  -
  -%%%---- Block ciphers
  -%%%----------------------------------------------------------------
  --spec block_encrypt(Type::block_cipher_with_iv(), Key::key()|des3_key(), Ivec::binary(), PlainText::iodata()) ->
  -                           binary() | run_time_error();
  -                   (Type::aead_cipher(),  Key::iodata(), Ivec::binary(), {AAD::binary(), PlainText::iodata()}) ->
  -                           {binary(), binary()} | run_time_error();
  -                   (aes_gcm | aes_ccm, Key::iodata(), Ivec::binary(), {AAD::binary(), PlainText::iodata(), TagLength::1..16}) ->
  -                           {binary(), binary()} | run_time_error().
  -
  -block_encrypt(Type, Key0, Ivec, Data) ->
  -    Key = iolist_to_binary(Key0),
  -    ?COMPAT(
  -       case Data of
  -           {AAD, PlainText} ->
  -               crypto_one_time_aead(alias(Type,Key), Key, Ivec, PlainText, AAD, true);
  -           {AAD, PlainText, TagLength} ->
  -               crypto_one_time_aead(alias(Type,Key), Key, Ivec, PlainText, AAD, TagLength, true);
  -           PlainText ->
  -               block_crypt(alias(Type,Key), Key, Ivec, PlainText, true)
  -       end).
  -
  --spec block_encrypt(Type::block_cipher_without_iv(), Key::key(), PlainText::iodata()) ->
  -                           binary() | run_time_error().
  -
  -block_encrypt(Type, Key0, PlainText) ->
  -    Key = iolist_to_binary(Key0),
  -    ?COMPAT(block_crypt(alias(Type,Key), Key, undefined, PlainText, true)).
  -
  -
  -%%%----------------------------------------------------------------
  -%%%----------------------------------------------------------------
  --spec block_decrypt(Type::block_cipher_with_iv(), Key::key()|des3_key(), Ivec::binary(), Data::iodata()) ->
  -                           binary() | run_time_error();
  -		   (Type::aead_cipher(), Key::iodata(), Ivec::binary(),
  -		    {AAD::binary(), Data::iodata(), Tag::binary()}) ->
  -                           binary() | error | run_time_error() .
  -
  -block_decrypt(Type, Key0, Ivec, Data) ->
  -    Key = iolist_to_binary(Key0),
  -    ?COMPAT(
  -       case Data of
  -           {AAD, CryptoText, Tag} ->
  -               crypto_one_time_aead(alias(Type,Key), Key, Ivec, CryptoText, AAD, Tag, false);
  -           CryptoText ->
  -               block_crypt(alias(Type,Key), Key, Ivec, CryptoText, false)
  -       end).
  -
  -
  --spec block_decrypt(Type::block_cipher_without_iv(), Key::key(), Data::iodata()) ->
  -                           binary() | run_time_error().
  -
  -block_decrypt(Type, Key0, CryptoText) ->
  -    Key = iolist_to_binary(Key0),
  -    ?COMPAT(block_crypt(alias(Type,Key), Key, undefined, CryptoText, false)).
  -
  -
  -
  -block_crypt(Cipher, Key, IV, Data, EncryptFlag) ->
  -    Ctx = case IV of
  -              undefined -> crypto_init(Cipher, Key, EncryptFlag);
  -              _ -> crypto_init(Cipher, Key, IV, EncryptFlag)
  -          end,
  -    crypto_update(Ctx, Data).
  -
  -%%%-------- Stream ciphers API
  -
  --opaque stream_state() :: {stream_cipher(),
  -                           crypto_state() | {crypto_state(),flg_undefined}
  -                          }.
  -
  -%%%---- stream_init
  --spec stream_init(Type, Key, IVec) -> State | run_time_error()
  -                                          when Type :: stream_cipher(),
  -                                               Key :: iodata(),
  -                                               IVec ::binary(),
  -                                               State :: stream_state() .
  -stream_init(Type, Key0, IVec) when is_binary(IVec) ->
  -    Key = iolist_to_binary(Key0),
  -    Ref = ?COMPAT(ng_crypto_init_nif(alias(Type,Key),
  -                                     Key, iolist_to_binary(IVec),
  -                                     get_crypto_opts([{encrypt,undefined}]))
  -                 ),
  -    {Type, {Ref,flg_undefined}}.
  -
  -
  --spec stream_init(Type, Key) -> State | run_time_error()
  -                                    when Type :: rc4,
  -                                         Key :: iodata(),
  -                                         State :: stream_state() .
  -stream_init(rc4 = Type, Key0) ->
  -    Key = iolist_to_binary(Key0),
  -    Ref = ?COMPAT(ng_crypto_init_nif(alias(Type,Key),
  -                                     Key, <<>>,
  -                                     get_crypto_opts([{encrypt,undefined}]))
  -                 ),
  -    {Type, {Ref,flg_undefined}}.
  -
  -%%%---- stream_encrypt
  --spec stream_encrypt(State, PlainText) -> {NewState, CipherText} | run_time_error()
  -                                              when State :: stream_state(),
  -                                                   PlainText :: iodata(),
  -                                                   NewState :: stream_state(),
  -                                                   CipherText :: iodata() .
  -stream_encrypt(State, Data) ->
  -    crypto_stream_emulate(State, Data, true).
  -
  -%%%---- stream_decrypt
  --spec stream_decrypt(State, CipherText) -> {NewState, PlainText} | run_time_error()
  -                                              when State :: stream_state(),
  -                                                   CipherText :: iodata(),
  -                                                   NewState :: stream_state(),
  -                                                   PlainText :: iodata() .
  -stream_decrypt(State, Data) ->
  -    crypto_stream_emulate(State, Data, false).
  -
  -%%%-------- helpers
  -crypto_stream_emulate({Cipher,{Ref0,flg_undefined}}, Data, EncryptFlag) when is_reference(Ref0) ->
  -    ?COMPAT(begin
  -                Ref = ng_crypto_init_nif(Ref0, <<>>, <<>>,
  -                                     get_crypto_opts([{encrypt,EncryptFlag}])),
  -                {{Cipher,Ref}, crypto_update(Ref, Data)}
  -            end);
  -
  -crypto_stream_emulate({Cipher,Ref}, Data, _) when is_reference(Ref) ->
  -    ?COMPAT({{Cipher,Ref}, crypto_update(Ref, Data)}).
  -
  -%%%----------------------------------------------------------------
  --spec next_iv(Type:: cbc_cipher(), Data) -> NextIVec when % Type :: cbc_cipher(), %des_cbc | des3_cbc | aes_cbc | aes_ige,
  -                                           Data :: iodata(),
  -                                           NextIVec :: binary().
  -next_iv(Type, Data) when is_binary(Data) ->
  -    IVecSize = case Type of
  -                   des_cbc  -> 8;
  -                   des3_cbc -> 8;
  -                   aes_cbc  -> 16;
  -                   aes_ige  -> 32
  -               end,
  -    {_, IVec} = split_binary(Data, size(Data) - IVecSize),
  -    IVec;
  -next_iv(Type, Data) when is_list(Data) ->
  -    next_iv(Type, list_to_binary(Data)).
  -
  --spec next_iv(des_cfb, Data, IVec) -> NextIVec when Data :: iodata(),
  -                                                    IVec :: binary(),
  -                                                    NextIVec :: binary().
  -
  -next_iv(des_cfb, Data, IVec) ->
  -    IVecAndData = list_to_binary([IVec, Data]),
  -    {_, NewIVec} = split_binary(IVecAndData, byte_size(IVecAndData) - 8),
  -    NewIVec;
  -next_iv(Type, Data, _Ivec) ->
  -    next_iv(Type, Data).
  +    cipher_info_nif(Type).
  +
   
   %%%================================================================
   %%%
  
positive.code:                              RSAopts :: [rsa_sign_verify_opt() | rsa_opt()] .
  supports() ->
       [{hashs,       supports(hashs)},
        {ciphers,     prepend_old_aliases(supports(ciphers))}
        | [{T,supports(T)} || T <- [public_keys,
                                    macs,
                                    curves,
  
negative.code: -export([ec_curve/1, ec_curves/0]).
  -export([rand_seed/1]).
  
  %%%----------------------------------------------------------------
  %% Removed functions.
  %%
  %% Old interface. Now implemented with the New interface.
  %% Removed in OTP-24.0 See OTP-16232 (deprecation) and OTP-16656 (removal)
  
  -removed([{next_iv, '_', "see the 'New and Old API' chapter of the CRYPTO User's guide"},
            {hmac, 3, "use crypto:mac/4 instead"},
  