anchor.diff:  alias(aes_cbc256)   -> aes_256_cbc;
   
   alias(Alg) -> Alg.
  +
  +
  +%%%---- des_ede3_cbc
  +alias(des3_cbc, _)     -> des_ede3_cbc;
  +alias(des_ede3, _)     -> des_ede3_cbc;
  +%%%---- des_ede3_cfb
  +alias(des_ede3_cbf,_ ) -> des_ede3_cfb;
  +alias(des3_cbf, _)     -> des_ede3_cfb;
  +alias(des3_cfb, _)     -> des_ede3_cfb;
  +%%%---- aes_*_cbc
  +alias(aes_cbc128, _)   -> aes_128_cbc;
  +alias(aes_cbc256, _)   -> aes_256_cbc;
  +
  +alias(aes_cbc, Key) when size(Key)==128  -> aes_128_cbc;
  +alias(aes_cbc, Key) when size(Key)==192  -> aes_192_cbc;
  +alias(aes_cbc, Key) when size(Key)==256  -> aes_256_cbc;
  +
  +alias(aes_cfb8, Key) when size(Key)==128  -> aes_128_cfb8;
  +alias(aes_cfb8, Key) when size(Key)==192  -> aes_192_cfb8;
  +alias(aes_cfb8, Key) when size(Key)==256  -> aes_256_cfb8;
  +
  +alias(aes_cfb128, Key) when size(Key)==128  -> aes_128_cfb128;
  +alias(aes_cfb128, Key) when size(Key)==192  -> aes_192_cfb128;
  +alias(aes_cfb128, Key) when size(Key)==256  -> aes_256_cfb128;
  +
  +alias(aes_ctr, Key) when size(Key)==128  -> aes_128_ctr;
  +alias(aes_ctr, Key) when size(Key)==192  -> aes_192_ctr;
  +alias(aes_ctr, Key) when size(Key)==256  -> aes_256_ctr;
  +
  +alias(aes_gcm, Key) when size(Key)==128  -> aes_128_gcm;
  +alias(aes_gcm, Key) when size(Key)==192  -> aes_192_gcm;
  +alias(aes_gcm, Key) when size(Key)==256  -> aes_256_gcm;
  +
  +alias(aes_ccm, Key) when size(Key)==128  -> aes_128_ccm;
  +alias(aes_ccm, Key) when size(Key)==192  -> aes_192_ccm;
  +alias(aes_ccm, Key) when size(Key)==256  -> aes_256_ccm;
  +
  +alias(Alg, _) -> Alg.
   
   %%%================================================================
   %%%
  
positive.code:                            {binary(), binary()} | run_time_error().
  
  
  block_encrypt(Type, Key, Ivec, Data) ->
      do_block_encrypt(alias(Type), Key, Ivec, Data).
  
  do_block_encrypt(Type, Key, Ivec, PlainText) when Type =:= aes_ige256 ->
      notsup_to_error(aes_ige_crypt_nif(Key, Ivec, PlainText, true));
  
  do_block_encrypt(Type, Key, Ivec, {AAD, PlainText}) when Type =:= chacha20_poly1305 ->
      aead_encrypt(Type, Key, Ivec, AAD, PlainText, 16);
  
  do_block_encrypt(Type, Key, Ivec, Data) when Type =:= aes_gcm;
                                            Type =:= aes_ccm ->
      case Data of
          {AAD, PlainText} ->
              aead_encrypt(Type, Key, Ivec, AAD, PlainText);
          {AAD, PlainText, TagLength} ->
              aead_encrypt(Type, Key, Ivec, AAD, PlainText, TagLength)
      end;
  
  do_block_encrypt(Type, Key, Ivec, PlainText) ->
      ?COMPAT(crypto_one_shot(Type, Key, Ivec, PlainText, true)).
  
  
  -spec block_encrypt(Type::block_cipher_no_iv(), Key::key(), PlainText::iodata()) ->
                             binary() | run_time_error().
  
  block_encrypt(Type, Key, PlainText) ->
      ?COMPAT(crypto_one_shot(Type, Key, <<>>, PlainText, true)).
  
  %%%----------------------------------------------------------------
  %%%----------------------------------------------------------------
  
negative.code: %% AES - in Galois/Counter Mode (GCM)
  %%
  %% The default tag length is EVP_GCM_TLS_TAG_LEN(16),
  aead_encrypt(_Type, _Key, _Ivec, _AAD, _In, _TagLength) -> ?nif_stub.
  aead_decrypt(_Type, _Key, _Ivec, _AAD, _In, _Tag) -> ?nif_stub.
  
  