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: %%%================================================================
  
  -define(COMPAT(CALL),
          try CALL
          catch
              error:{E,_Reason} when E==notsup ; E==badarg ->
                  error(E)
          end).
  
negative.code:                            {binary(), binary()} | run_time_error().
  
  
  block_encrypt(aes_ige256, Key, Ivec, PlainText) ->
      notsup_to_error(aes_ige_crypt_nif(Key, Ivec, PlainText, true));
  
  block_encrypt(Type, Key0, Ivec, Data) ->
      Key = iolist_to_binary(Key0),
      ?COMPAT(
         case Data of
             {AAD, PlainText} ->
                 aead_encrypt(alias(Type,Key), Key, Ivec, AAD, PlainText, aead_tag_len(Type));
             {AAD, PlainText, TagLength} ->
                 aead_encrypt(alias(Type,Key), Key, Ivec, AAD, PlainText, TagLength);
             PlainText ->
                 crypto_one_shot(alias(Type,Key), Key, Ivec, PlainText, true)
         end).
  
  -spec block_encrypt(Type::block_cipher_no_iv(), Key::key(), PlainText::iodata()) ->
                             binary() | run_time_error().
  
  block_encrypt(Type, Key0, PlainText) ->
      Key = iolist_to_binary(Key0),
      ?COMPAT(crypto_one_shot(alias(Type,Key), Key, <<>>, PlainText, true)).
  
  
  aead_tag_len(chacha20_poly1305) -> 16;
  aead_tag_len(aes_ccm) -> 12;
  aead_tag_len(aes_128_ccm) -> 12;
  aead_tag_len(aes_192_ccm) -> 12;
  aead_tag_len(aes_256_ccm) -> 12;
  aead_tag_len(aes_gcm) -> 16;
  aead_tag_len(aes_128_gcm) -> 16;
  aead_tag_len(aes_192_gcm) -> 16;
  aead_tag_len(aes_256_gcm) -> 16.
  
  %%%----------------------------------------------------------------
  %%%----------------------------------------------------------------
  