28 {
29#if defined(BOTAN_HAS_EME_RAW)
30 if(algo_spec == "Raw") {
31 return std::make_unique<EME_Raw>();
32 }
33#endif
34
35#if defined(BOTAN_HAS_EME_PKCS1)
36
37 if(algo_spec == "PKCS1v15" || algo_spec == "EME-PKCS1-v1_5") {
38 return std::make_unique<EME_PKCS1v15>();
39 }
40#endif
41
42#if defined(BOTAN_HAS_EME_OAEP)
43 SCAN_Name req(algo_spec);
44
45
46 if(req.algo_name() == "OAEP" || req.algo_name() == "EME-OAEP" || req.algo_name() == "EME1") {
47 if(req.arg_count() == 1 || ((req.arg_count() == 2 || req.arg_count() == 3) && req.arg(1) == "MGF1")) {
49 return std::make_unique<OAEP>(std::move(hash), req.arg(2, ""));
50 }
51 } else if(req.arg_count() == 2 || req.arg_count() == 3) {
53
54 if(mgf_params.size() == 2 && mgf_params[0] == "MGF1") {
57
58 if(hash && mgf1_hash) {
59 return std::make_unique<OAEP>(std::move(hash), std::move(mgf1_hash), req.arg(2, ""));
60 }
61 }
62 }
63 }
64#endif
65
66 throw Algorithm_Not_Found(algo_spec);
67}
static std::unique_ptr< HashFunction > create(std::string_view algo_spec, std::string_view provider="")
std::vector< std::string > parse_algorithm_name(std::string_view namex)