Clearmatics Libsnark  0.1
C++ library for zkSNARK proofs
tbcs_examples.cpp
Go to the documentation of this file.
1 
15 #include <cassert>
16 #include <libff/common/utils.hpp>
18 
19 namespace libsnark
20 {
21 
23  const size_t primary_input_size,
24  const size_t auxiliary_input_size,
25  const size_t num_gates,
26  const size_t num_outputs)
27 {
28  tbcs_example example;
29  for (size_t i = 0; i < primary_input_size; ++i) {
30  example.primary_input.push_back(std::rand() % 2 == 0 ? false : true);
31  }
32 
33  for (size_t i = 0; i < auxiliary_input_size; ++i) {
34  example.auxiliary_input.push_back(std::rand() % 2 == 0 ? false : true);
35  }
36 
37  example.circuit.primary_input_size = primary_input_size;
38  example.circuit.auxiliary_input_size = auxiliary_input_size;
39 
40  tbcs_variable_assignment all_vals;
41  all_vals.insert(
42  all_vals.end(),
43  example.primary_input.begin(),
44  example.primary_input.end());
45  all_vals.insert(
46  all_vals.end(),
47  example.auxiliary_input.begin(),
48  example.auxiliary_input.end());
49 
50  for (size_t i = 0; i < num_gates; ++i) {
51  const size_t num_variables =
52  primary_input_size + auxiliary_input_size + i;
53  tbcs_gate gate;
54  gate.left_wire = std::rand() % (num_variables + 1);
55  gate.right_wire = std::rand() % (num_variables + 1);
56  gate.output = num_variables + 1;
57 
58  if (i >= num_gates - num_outputs) {
59  /* make gate a circuit output and fix */
60  do {
61  gate.type = (tbcs_gate_type)(std::rand() % num_tbcs_gate_types);
62  } while (gate.evaluate(all_vals));
63 
64  gate.is_circuit_output = true;
65  } else {
66  gate.type = (tbcs_gate_type)(std::rand() % num_tbcs_gate_types);
67  gate.is_circuit_output = false;
68  }
69 
70  example.circuit.add_gate(gate);
71  all_vals.push_back(gate.evaluate(all_vals));
72  }
73 
74  assert(example.circuit.is_satisfied(
75  example.primary_input, example.auxiliary_input));
76 
77  return example;
78 }
79 
80 } // namespace libsnark
libsnark::tbcs_gate::output
tbcs_wire_t output
Definition: tbcs.hpp:95
libsnark::tbcs_gate::left_wire
tbcs_wire_t left_wire
Definition: tbcs.hpp:90
libsnark
Definition: accumulation_vector.hpp:18
libsnark::tbcs_gate::right_wire
tbcs_wire_t right_wire
Definition: tbcs.hpp:91
libsnark::tbcs_circuit::primary_input_size
size_t primary_input_size
Definition: tbcs.hpp:136
libsnark::tbcs_gate::evaluate
bool evaluate(const tbcs_variable_assignment &input) const
Definition: tbcs.cpp:24
libsnark::tbcs_circuit::add_gate
void add_gate(const tbcs_gate &g)
Definition: tbcs.cpp:264
libsnark::tbcs_gate
Definition: tbcs.hpp:87
libsnark::tbcs_circuit::is_satisfied
bool is_satisfied(const tbcs_primary_input &primary_input, const tbcs_auxiliary_input &auxiliary_input) const
Definition: tbcs.cpp:249
libsnark::tbcs_gate_type
tbcs_gate_type
Definition: tbcs.hpp:55
libsnark::tbcs_example::circuit
tbcs_circuit circuit
Definition: tbcs_examples.hpp:27
libsnark::tbcs_gate::type
tbcs_gate_type type
Definition: tbcs.hpp:93
libsnark::tbcs_circuit::auxiliary_input_size
size_t auxiliary_input_size
Definition: tbcs.hpp:137
libsnark::generate_tbcs_example
tbcs_example generate_tbcs_example(const size_t primary_input_size, const size_t auxiliary_input_size, const size_t num_gates, const size_t num_outputs)
Definition: tbcs_examples.cpp:22
libsnark::tbcs_variable_assignment
std::vector< bool > tbcs_variable_assignment
Definition: tbcs.hpp:31
libsnark::tbcs_gate::is_circuit_output
bool is_circuit_output
Definition: tbcs.hpp:97
libsnark::tbcs_example::auxiliary_input
tbcs_auxiliary_input auxiliary_input
Definition: tbcs_examples.hpp:29
libsnark::tbcs_example::primary_input
tbcs_primary_input primary_input
Definition: tbcs_examples.hpp:28
tbcs_examples.hpp
libsnark::tbcs_example
Definition: tbcs_examples.hpp:25