30 template<
typename ppT,
typename snarkT>
33 ppT::init_public_params();
35 libff::inhibit_profiling_info =
true;
36 libff::inhibit_profiling_counters =
true;
39 typename snarkT::proving_key proving_key;
42 snarkT::proving_key_read_bytes(proving_key, in_s);
45 libsnark::r1cs_primary_input<libff::Fr<ppT>> primary;
46 libsnark::r1cs_auxiliary_input<libff::Fr<ppT>> auxiliary;
54 typename snarkT::proof proof =
55 snarkT::generate_proof(proving_key, primary, auxiliary);
58 std::cout <<
"Writing proof to file: " <<
proof_file <<
"\n";
61 snarkT::proof_write_bytes(proof, out_s);
69 boost::program_options::options_description &options,
70 boost::program_options::options_description &all_options,
71 boost::program_options::positional_options_description &pos)
override
75 options.add_options()(
77 po::value<uint16_t>(),
78 "Number of primary inputs (default: 1)")(
79 "profile,r",
"Enable profiling output");
81 all_options.add(options).add_options()(
82 "pk_file", po::value<std::string>(),
"Proving key file");
83 all_options.add_options()(
84 "assignment_file", po::value<std::string>(),
"Assignment file");
85 all_options.add_options()(
86 "proof_file", po::value<std::string>(),
"(Output) Proof file");
88 pos.add(
"pk_file", 1);
89 pos.add(
"assignment_file", 1);
90 pos.add(
"proof_file", 1);
94 const boost::program_options::variables_map &vm)
override
98 if (vm.count(
"pk_file") == 0) {
99 throw po::error(
"pk_file not specified");
101 if (vm.count(
"assignment_file") == 0) {
102 throw po::error(
"assignment_file not specified");
104 if (vm.count(
"proof_file") == 0) {
105 throw po::error(
"proof_file not specified");
108 pk_file = vm[
"pk_file"].as<std::string>();
110 proof_file = vm[
"proof_file"].as<std::string>();
111 if (vm.count(
"primary_inputs")) {
114 profile = (bool)vm.count(
"profile");
119 std::cout <<
"Usage:\n"
122 <<
" prove [pk_file] [assignment_file] [proof_file]\n";
135 "prove",
"Generate proof given proving key and assignment");