103 const std::string& provider)
106#if defined(BOTAN_HAS_COMMONCRYPTO)
120#if defined(BOTAN_HAS_SHA1)
121 if(algo_spec ==
"SHA-160" ||
122 algo_spec ==
"SHA-1" ||
125 return std::unique_ptr<HashFunction>(
new SHA_160);
129#if defined(BOTAN_HAS_SHA2_32)
130 if(algo_spec ==
"SHA-224")
132 return std::unique_ptr<HashFunction>(
new SHA_224);
135 if(algo_spec ==
"SHA-256")
137 return std::unique_ptr<HashFunction>(
new SHA_256);
141#if defined(BOTAN_HAS_SHA2_64)
142 if(algo_spec ==
"SHA-384")
144 return std::unique_ptr<HashFunction>(
new SHA_384);
147 if(algo_spec ==
"SHA-512")
149 return std::unique_ptr<HashFunction>(
new SHA_512);
152 if(algo_spec ==
"SHA-512-256")
154 return std::unique_ptr<HashFunction>(
new SHA_512_256);
158#if defined(BOTAN_HAS_RIPEMD_160)
159 if(algo_spec ==
"RIPEMD-160")
161 return std::unique_ptr<HashFunction>(
new RIPEMD_160);
165#if defined(BOTAN_HAS_WHIRLPOOL)
166 if(algo_spec ==
"Whirlpool")
168 return std::unique_ptr<HashFunction>(
new Whirlpool);
172#if defined(BOTAN_HAS_MD5)
173 if(algo_spec ==
"MD5")
175 return std::unique_ptr<HashFunction>(
new MD5);
179#if defined(BOTAN_HAS_MD4)
180 if(algo_spec ==
"MD4")
182 return std::unique_ptr<HashFunction>(
new MD4);
186#if defined(BOTAN_HAS_GOST_34_11)
187 if(algo_spec ==
"GOST-R-34.11-94" || algo_spec ==
"GOST-34.11")
189 return std::unique_ptr<HashFunction>(
new GOST_34_11);
193#if defined(BOTAN_HAS_ADLER32)
194 if(algo_spec ==
"Adler32")
196 return std::unique_ptr<HashFunction>(
new Adler32);
200#if defined(BOTAN_HAS_CRC24)
201 if(algo_spec ==
"CRC24")
203 return std::unique_ptr<HashFunction>(
new CRC24);
207#if defined(BOTAN_HAS_CRC32)
208 if(algo_spec ==
"CRC32")
210 return std::unique_ptr<HashFunction>(
new CRC32);
216#if defined(BOTAN_HAS_TIGER)
219 return std::unique_ptr<HashFunction>(
225#if defined(BOTAN_HAS_SKEIN_512)
228 return std::unique_ptr<HashFunction>(
233#if defined(BOTAN_HAS_BLAKE2B)
236 return std::unique_ptr<HashFunction>(
241#if defined(BOTAN_HAS_KECCAK)
244 return std::unique_ptr<HashFunction>(
249#if defined(BOTAN_HAS_SHA3)
252 return std::unique_ptr<HashFunction>(
257#if defined(BOTAN_HAS_SHAKE)
268#if defined(BOTAN_HAS_STREEBOG)
269 if(algo_spec ==
"Streebog-256")
273 if(algo_spec ==
"Streebog-512")
279#if defined(BOTAN_HAS_SM3)
280 if(algo_spec ==
"SM3")
282 return std::unique_ptr<HashFunction>(
new SM3);
286#if defined(BOTAN_HAS_WHIRLPOOL)
289 return std::unique_ptr<HashFunction>(
new Whirlpool);
293#if defined(BOTAN_HAS_PARALLEL_HASH)
296 std::vector<std::unique_ptr<HashFunction>> hashes;
298 for(
size_t i = 0; i != req.
arg_count(); ++i)
305 hashes.push_back(std::move(h));
308 return std::unique_ptr<HashFunction>(
new Parallel(hashes));
312#if defined(BOTAN_HAS_COMB4P)
319 return std::unique_ptr<HashFunction>(
new Comb4P(h1.release(), h2.release()));