Zeth - Zerocash on Ethereum  0.8
Reference implementation of the Zeth protocol by Clearmatics
verify_cmd.cpp
Go to the documentation of this file.
1 // Copyright (c) 2015-2022 Clearmatics Technologies Ltd
2 //
3 // SPDX-License-Identifier: LGPL-3.0+
4 
6 
7 #include "libtool/tool_util.hpp"
9 
10 namespace zethtool
11 {
12 
13 namespace commands
14 {
15 
16 class verify_cmd : public generic_subcommand<verify_cmd>
17 {
18 public:
20 
22  const std::string &subcommand_name, const std::string &description)
24  {
25  }
26 
27  template<typename ppT, typename snarkT>
29  {
30  ppT::init_public_params();
31  libff::inhibit_profiling_info = true;
32  libff::inhibit_profiling_counters = true;
33 
34  typename snarkT::verification_key verification_key;
35  {
36  std::ifstream in_s = libtool::open_binary_input_file(vk_file);
37  snarkT::verification_key_read_bytes(verification_key, in_s);
38  }
39 
40  libsnark::r1cs_primary_input<libff::Fr<ppT>> primary_input;
41  {
42  std::ifstream in_s =
45  }
46 
47  typename snarkT::proof proof;
48  {
49  std::ifstream in_s = libtool::open_binary_input_file(proof_file);
50  snarkT::proof_read_bytes(proof, in_s);
51  }
52 
53  if (!snarkT::verify(primary_input, proof, verification_key)) {
54  std::cout << "verification failed.\n";
55  return 1;
56  }
57 
58  return 0;
59  }
60 
61 protected:
63  boost::program_options::options_description &options,
64  boost::program_options::options_description &all_options,
65  boost::program_options::positional_options_description &pos) override
66  {
67  base_class::initialize_suboptions(options, all_options, pos);
68 
69  all_options.add(options).add_options()(
70  "vk_file", po::value<std::string>(), "Verification key file");
71  all_options.add_options()(
72  "primary_input_file",
73  po::value<std::string>(),
74  "Primary input file");
75  all_options.add_options()(
76  "proof_file", po::value<std::string>(), "Proof file");
77 
78  pos.add("vk_file", 1);
79  pos.add("primary_input_file", 1);
80  pos.add("proof_file", 1);
81  }
82 
84  const boost::program_options::variables_map &vm) override
85  {
87 
88  if (vm.count("vk_file") == 0) {
89  throw po::error("vk_file not specified");
90  }
91  if (vm.count("primary_input_file") == 0) {
92  throw po::error("primary_input_file not specified");
93  }
94  if (vm.count("proof_file") == 0) {
95  throw po::error("proof_file not specified");
96  }
97 
98  vk_file = vm["vk_file"].as<std::string>();
99  proof_file = vm["proof_file"].as<std::string>();
100  primary_input_file = vm["primary_input_file"].as<std::string>();
101  }
102 
103  void subcommand_usage(const char *argv0) override
104  {
105  std::cout << "Usage:\n"
106  " "
107  << argv0
108  << " verify [vk_file] [primary_input_file] [proof_file]\n";
109  }
110 
111  std::string vk_file;
112  std::string proof_file;
113  std::string primary_input_file;
114 };
115 
116 } // namespace commands
117 
119  "verify", "Verify proof against verification key and primary input");
120 
121 } // namespace zethtool
zethtool::commands::verify_cmd::verify_cmd
verify_cmd(const std::string &subcommand_name, const std::string &description)
Definition: verify_cmd.cpp:21
zethtool::generic_subcommand< verify_cmd >::parse_suboptions
void parse_suboptions(const boost::program_options::variables_map &vm) override
Definition: tool_common.hpp:111
libtool::subcommand::description
const std::string & description() const
commands
Definition: __init__.py:1
zethtool::generic_subcommand< verify_cmd >::initialize_suboptions
void initialize_suboptions(boost::program_options::options_description &options, boost::program_options::options_description &, boost::program_options::positional_options_description &) override
Definition: tool_common.hpp:97
tool_util.hpp
zethtool::commands::verify_cmd::parse_suboptions
void parse_suboptions(const boost::program_options::variables_map &vm) override
Definition: verify_cmd.cpp:83
zethtool::generic_subcommand
Definition: tool_common.hpp:87
zethtool::verify_cmd
zeth_subcommand * verify_cmd
Definition: verify_cmd.cpp:118
global_options
Definition: mpc_subcommand.hpp:15
zethtool::commands::verify_cmd
Definition: verify_cmd.cpp:16
verify_cmd.hpp
zeth.core.signing.verify
bool verify(SigningVerificationKey vk, bytes m, int sigma)
Definition: signing.py:145
zethtool::commands::verify_cmd::initialize_suboptions
void initialize_suboptions(boost::program_options::options_description &options, boost::program_options::options_description &all_options, boost::program_options::positional_options_description &pos) override
Instantiation can now set up the boost program_options structures.
Definition: verify_cmd.cpp:62
libtool::subcommand::subcommand_name
std::string subcommand_name
Definition: subcommand.hpp:54
zethtool::commands::verify_cmd::vk_file
std::string vk_file
Definition: verify_cmd.cpp:111
zethtool::commands::verify_cmd::primary_input_file
std::string primary_input_file
Definition: verify_cmd.cpp:113
libtool::open_binary_input_file
std::ifstream open_binary_input_file(const std::string &filename)
Definition: tool_util.cpp:10
zethtool::commands::verify_cmd::proof_file
std::string proof_file
Definition: verify_cmd.cpp:112
libzeth::r1cs_variable_assignment_read_bytes
void r1cs_variable_assignment_read_bytes(libsnark::r1cs_variable_assignment< FieldT > &assignment, std::istream &in_s)
zethtool::commands::verify_cmd::execute_generic
int execute_generic(const global_options &)
Definition: verify_cmd.cpp:28
libtool::subcommand
Class representing a tool subcommand.
Definition: subcommand.hpp:18
zethtool
Definition: dump_proof_cmd.cpp:11
zethtool::commands::verify_cmd::subcommand_usage
void subcommand_usage(const char *argv0) override
Any command-specific output for usage.
Definition: verify_cmd.cpp:103
r1cs_variable_assignment_serialization.hpp