62 const std::string& provider)
65#if defined(BOTAN_HAS_AEAD_CHACHA20_POLY1305)
66 if(algo ==
"ChaCha20Poly1305")
76 if(algo.find(
'/') != std::string::npos)
78 const std::vector<std::string> algo_parts =
split_on(algo,
'/');
79 const std::string cipher_name = algo_parts[0];
83 return std::unique_ptr<AEAD_Mode>();
85 std::ostringstream alg_args;
87 alg_args <<
'(' << cipher_name;
88 for(
size_t i = 1; i < mode_info.size(); ++i)
89 alg_args <<
',' << mode_info[i];
90 for(
size_t i = 2; i < algo_parts.size(); ++i)
91 alg_args <<
',' << algo_parts[i];
94 const std::string mode_name = mode_info[0] + alg_args.str();
98#if defined(BOTAN_HAS_BLOCK_CIPHER)
104 return std::unique_ptr<AEAD_Mode>();
111 return std::unique_ptr<AEAD_Mode>();
114#if defined(BOTAN_HAS_AEAD_CCM)
120 return std::unique_ptr<AEAD_Mode>(
new CCM_Encryption(bc.release(), tag_len, L_len));
122 return std::unique_ptr<AEAD_Mode>(
new CCM_Decryption(bc.release(), tag_len, L_len));
126#if defined(BOTAN_HAS_AEAD_GCM)
131 return std::unique_ptr<AEAD_Mode>(
new GCM_Encryption(bc.release(), tag_len));
133 return std::unique_ptr<AEAD_Mode>(
new GCM_Decryption(bc.release(), tag_len));
137#if defined(BOTAN_HAS_AEAD_OCB)
142 return std::unique_ptr<AEAD_Mode>(
new OCB_Encryption(bc.release(), tag_len));
144 return std::unique_ptr<AEAD_Mode>(
new OCB_Decryption(bc.release(), tag_len));
148#if defined(BOTAN_HAS_AEAD_EAX)
153 return std::unique_ptr<AEAD_Mode>(
new EAX_Encryption(bc.release(), tag_len));
155 return std::unique_ptr<AEAD_Mode>(
new EAX_Decryption(bc.release(), tag_len));
159#if defined(BOTAN_HAS_AEAD_SIV)
163 return std::unique_ptr<AEAD_Mode>(
new SIV_Encryption(bc.release()));
165 return std::unique_ptr<AEAD_Mode>(
new SIV_Decryption(bc.release()));
171 return std::unique_ptr<AEAD_Mode>();