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__