9 #include <boost/program_options.hpp>
14 namespace po = boost::program_options;
25 std::string lin_comb_file;
30 :
mpc_subcommand(
"phase2-begin",
"Create the initial MPC challenge")
37 void initialize_suboptions(
38 po::options_description &options,
39 po::options_description &all_options,
40 po::positional_options_description &pos)
override
42 all_options.add(options).add_options()(
43 "linear_combination_file",
44 po::value<std::string>(),
45 "linear combination file")(
47 po::value<std::string>(),
48 "initial challenge output file");
49 pos.add(
"linear_combination_file", 1).add(
"challenge_out_file", 1);
52 void parse_suboptions(
const po::variables_map &vm)
override
54 if (0 == vm.count(
"linear_combination_file")) {
55 throw po::error(
"linear_combination_file not specified");
57 if (0 == vm.count(
"challenge_out_file")) {
58 throw po::error(
"challenge_out_file not specified");
60 lin_comb_file = vm[
"linear_combination_file"].as<std::string>();
61 out_file = vm[
"challenge_out_file"].as<std::string>();
64 void subcommand_usage(
const char *argv0)
override
66 std::cout <<
"Usage:\n " << argv0 <<
" " << subcommand_name
67 <<
" [<options>] <linear_combination_file> "
68 "<challenge_out_file>\n\n";
74 std::cout <<
"lin_comb_file: " << lin_comb_file <<
"\n";
75 std::cout <<
"out: " << out_file << std::endl;
78 libff::enter_block(
"Load linear combination file");
81 read_from_file_and_hash<srs_mpc_layer_L1<pp>>(
82 lin_comb_file, cs_hash);
83 libff::leave_block(
"Load linear combination file");
86 libff::enter_block(
"Computing num inputs");
87 const size_t num_inputs = [&options]() {
88 libsnark::protoboard<Field> pb;
90 return pb.num_inputs();
92 libff::print_indent();
93 std::cout << std::to_string(num_inputs) << std::endl;
94 libff::leave_block(
"Computing num inputs");
97 libff::enter_block(
"Computing initial challenge");
99 srs_mpc_phase2_initial_challenge<pp>(
100 srs_mpc_phase2_begin<pp>(cs_hash, lin_comb, num_inputs));
101 libff::leave_block(
"Computing initial challenge");
103 libff::enter_block(
"Writing initial challenge");
104 libff::print_indent();
105 std::cout << out_file << std::endl;
107 std::ofstream out(out_file);
108 initial_challenge.
write(out);
110 libff::leave_block(
"Writing initial challenge");