5 #ifndef __ZETH_TOOL_TOOL_COMMON_HPP__ 
    6 #define __ZETH_TOOL_TOOL_COMMON_HPP__ 
   12 #include <libff/algebra/curves/alt_bn128/alt_bn128_pp.hpp> 
   13 #include <libff/algebra/curves/bls12_377/bls12_377_pp.hpp> 
   14 #include <libff/algebra/curves/bw6_761/bw6_761_pp.hpp> 
   34 template<
template<
typename, 
typename> 
class Callee>
 
   38     template<
typename... Args>
 
   40         const std::string &curve_name,
 
   41         const std::string &snark_name,
 
   44         if (curve_name == 
"alt-bn128") {
 
   45             return resolve_snark<libff::alt_bn128_pp>(snark_name, args...);
 
   46         } 
else if (curve_name == 
"bls12-377") {
 
   47             return resolve_snark<libff::bls12_377_pp>(snark_name, args...);
 
   53         throw po::error(
"unrecognized curve");
 
   57     template<
typename ppT, 
typename... Args>
 
   60         if (snark_name == 
"groth16") {
 
   61             return Callee<ppT, libzeth::groth16_snark<ppT>>::execute(args...);
 
   62         } 
else if (snark_name == 
"pghr13") {
 
   63             return Callee<ppT, libzeth::pghr13_snark<ppT>>::execute(args...);
 
   66         throw po::error(
"unrecognized snark");
 
   98         boost::program_options::options_description &options,
 
   99         boost::program_options::options_description &,
 
  100         boost::program_options::positional_options_description &)
 override 
  103         options.add_options()(
 
  105             po::value<std::string>(),
 
  106             "Curve: alt-bn128, bls12-377 or bw6-761");
 
  107         options.add_options()(
 
  108             "snark,s", po::value<std::string>(), 
"Snark: groth16 or pghr13");
 
  112         const boost::program_options::variables_map &vm)
 override 
  114         curve = vm.count(
"curve") ? vm[
"curve"].as<std::string>() : 
"alt-bn128";
 
  115         snark = vm.count(
"snark") ? vm[
"snark"].as<std::string>() : 
"groth16";
 
  131             return ((CommandT *)that)->template execute_generic<ppT, snarkT>(o);
 
  141 #endif // __ZETH_TOOL_TOOL_COMMON_HPP__