108#if defined(BOTAN_HAS_COMMONCRYPTO)
122#if defined(BOTAN_HAS_SHA1)
123 if(algo_spec ==
"SHA-1") {
124 return std::make_unique<SHA_1>();
128#if defined(BOTAN_HAS_SHA2_32)
129 if(algo_spec ==
"SHA-224") {
130 return std::make_unique<SHA_224>();
133 if(algo_spec ==
"SHA-256") {
134 return std::make_unique<SHA_256>();
138#if defined(BOTAN_HAS_SHA2_64)
139 if(algo_spec ==
"SHA-384") {
140 return std::make_unique<SHA_384>();
143 if(algo_spec ==
"SHA-512") {
144 return std::make_unique<SHA_512>();
147 if(algo_spec ==
"SHA-512-256") {
148 return std::make_unique<SHA_512_256>();
152#if defined(BOTAN_HAS_RIPEMD_160)
153 if(algo_spec ==
"RIPEMD-160") {
154 return std::make_unique<RIPEMD_160>();
158#if defined(BOTAN_HAS_WHIRLPOOL)
159 if(algo_spec ==
"Whirlpool") {
160 return std::make_unique<Whirlpool>();
164#if defined(BOTAN_HAS_MD5)
165 if(algo_spec ==
"MD5") {
166 return std::make_unique<MD5>();
170#if defined(BOTAN_HAS_MD4)
171 if(algo_spec ==
"MD4") {
172 return std::make_unique<MD4>();
176#if defined(BOTAN_HAS_GOST_34_11)
177 if(algo_spec ==
"GOST-R-34.11-94" || algo_spec ==
"GOST-34.11") {
178 return std::make_unique<GOST_34_11>();
182#if defined(BOTAN_HAS_ADLER32)
183 if(algo_spec ==
"Adler32") {
184 return std::make_unique<Adler32>();
188#if defined(BOTAN_HAS_CRC24)
189 if(algo_spec ==
"CRC24") {
190 return std::make_unique<CRC24>();
194#if defined(BOTAN_HAS_CRC32)
195 if(algo_spec ==
"CRC32") {
196 return std::make_unique<CRC32>();
200#if defined(BOTAN_HAS_STREEBOG)
201 if(algo_spec ==
"Streebog-256") {
202 return std::make_unique<Streebog>(256);
204 if(algo_spec ==
"Streebog-512") {
205 return std::make_unique<Streebog>(512);
209#if defined(BOTAN_HAS_SM3)
210 if(algo_spec ==
"SM3") {
211 return std::make_unique<SM3>();
217#if defined(BOTAN_HAS_SKEIN_512)
223#if defined(BOTAN_HAS_BLAKE2B)
229#if defined(BOTAN_HAS_BLAKE2S)
235#if defined(BOTAN_HAS_KECCAK)
241#if defined(BOTAN_HAS_SHA3)
247#if defined(BOTAN_HAS_SHAKE)
256#if defined(BOTAN_HAS_PARALLEL_HASH)
258 std::vector<std::unique_ptr<HashFunction>> hashes;
260 for(
size_t i = 0; i != req.
arg_count(); ++i) {
265 hashes.push_back(std::move(h));
268 return std::make_unique<Parallel>(hashes);
272#if defined(BOTAN_HAS_TRUNCATED_HASH)
279 return std::make_unique<Truncated_Hash>(std::move(hash), req.
arg_as_integer(1));
283#if defined(BOTAN_HAS_COMB4P)
289 return std::make_unique<Comb4P>(std::move(h1), std::move(h2));