Clearmatics Libsnark  0.1
C++ library for zkSNARK proofs
demo_ram_ppzksnark_generator.cpp
Go to the documentation of this file.
1 
7 #include <fstream>
8 #include <iostream>
9 #ifndef MINDEPS
10 #include <boost/program_options.hpp>
11 #endif
12 
16 
17 #ifndef MINDEPS
18 namespace po = boost::program_options;
19 
21  const int argc,
22  const char **argv,
23  std::string &architecture_params_fn,
24  std::string &computation_bounds_fn,
25  std::string &proving_key_fn,
26  std::string &verification_key_fn)
27 {
28  try {
29  po::options_description desc("Usage");
30  desc.add_options()("help", "print this help message")(
31  "architecture_params",
32  po::value<std::string>(&architecture_params_fn)->required())(
33  "computation_bounds",
34  po::value<std::string>(&computation_bounds_fn)->required())(
35  "proving_key", po::value<std::string>(&proving_key_fn)->required())(
36  "verification_key",
37  po::value<std::string>(&verification_key_fn)->required());
38 
39  po::variables_map vm;
40  po::store(po::parse_command_line(argc, argv, desc), vm);
41 
42  if (vm.count("help")) {
43  std::cout << desc << "\n";
44  return false;
45  }
46 
47  po::notify(vm);
48  } catch (std::exception &e) {
49  std::cerr << "Error: " << e.what() << "\n";
50  return false;
51  }
52 
53  return true;
54 }
55 #endif
56 
57 using namespace libsnark;
58 
59 int main(int argc, const char *argv[])
60 {
62 #ifdef MINDEPS
63  std::string architecture_params_fn = "architecture_params.txt";
64  std::string computation_bounds_fn = "computation_bounds.txt";
65  std::string proving_key_fn = "proving_key.txt";
66  std::string verification_key_fn = "verification_key.txt";
67 #else
68  std::string architecture_params_fn;
69  std::string computation_bounds_fn;
70  std::string proving_key_fn;
71  std::string verification_key_fn;
72 
74  argc,
75  argv,
76  architecture_params_fn,
77  computation_bounds_fn,
78  proving_key_fn,
79  verification_key_fn)) {
80  return 1;
81  }
82 #endif
83  libff::start_profiling();
84 
85  /* load everything */
87  std::ifstream f_ap(architecture_params_fn);
88  f_ap >> ap;
89 
90  std::ifstream f_rp(computation_bounds_fn);
91  size_t tinyram_input_size_bound, tinyram_program_size_bound, time_bound;
92  f_rp >> tinyram_input_size_bound >> tinyram_program_size_bound >>
93  time_bound;
94 
95  const size_t boot_trace_size_bound =
96  tinyram_program_size_bound + tinyram_input_size_bound;
97 
99  ram_ppzksnark_generator<default_ram_ppzksnark_pp>(
100  ap, boot_trace_size_bound, time_bound);
101 
102  std::ofstream pk(proving_key_fn);
103  pk << keypair.pk;
104  pk.close();
105 
106  std::ofstream vk(verification_key_fn);
107  vk << keypair.vk;
108  vk.close();
109 }
tinyram_params.hpp
libsnark
Definition: accumulation_vector.hpp:18
libsnark::ram_ppzksnark_keypair::pk
ram_ppzksnark_proving_key< ram_ppzksnark_ppT > pk
Definition: ram_ppzksnark.hpp:184
main
int main(int argc, const char *argv[])
Definition: demo_ram_ppzksnark_generator.cpp:59
libsnark::ram_ppzksnark_keypair
Definition: ram_ppzksnark.hpp:182
process_generator_command_line
bool process_generator_command_line(const int argc, const char **argv, std::string &architecture_params_fn, std::string &computation_bounds_fn, std::string &proving_key_fn, std::string &verification_key_fn)
Definition: demo_ram_ppzksnark_generator.cpp:20
libsnark::ram_ppzksnark_architecture_params
ram_architecture_params< ram_ppzksnark_machine_pp< ram_ppzksnark_ppT > > ram_ppzksnark_architecture_params
Definition: ram_ppzksnark_params.hpp:68
libsnark::ram_ppzksnark_snark_pp
typename ram_ppzksnark_ppT::snark_pp ram_ppzksnark_snark_pp
Definition: ram_ppzksnark_params.hpp:61
ram_ppzksnark.hpp
ram_ppzksnark_pp.hpp
libsnark::ram_ppzksnark_keypair::vk
ram_ppzksnark_verification_key< ram_ppzksnark_ppT > vk
Definition: ram_ppzksnark.hpp:185