Clearmatics Libsnark  0.1
C++ library for zkSNARK proofs
benes_routing_gadget.hpp
Go to the documentation of this file.
1 
15 #ifndef BENES_ROUTING_GADGET_HPP_
16 #define BENES_ROUTING_GADGET_HPP_
17 
22 
23 namespace libsnark
24 {
25 
26 template<typename FieldT> class benes_routing_gadget : public gadget<FieldT>
27 {
28 private:
29  /*
30  Indexing conventions:
31 
32  routed_packets[column_idx][packet_idx][subpacket_idx]
33  pack_inputs/unpack_outputs[packet_idx]
34  benes_switch_bits[column_idx][row_idx]
35 
36  Where column_idx ranges is in range 0 .. 2*dimension
37  (2*dimension-1 for switch bits/topology) and packet_idx is in
38  range 0 .. num_packets-1.
39  */
40  std::vector<std::vector<pb_variable_array<FieldT>>> routed_packets;
41  std::vector<multipacking_gadget<FieldT>> pack_inputs, unpack_outputs;
42 
43  /*
44  If #packets = 1 then we can route without explicit routing bits
45  (and save half the constraints); in this case benes_switch_bits will
46  be unused.
47 
48  For benes_switch_bits 0 corresponds to straight edge and 1
49  corresponds to cross edge.
50  */
51  std::vector<pb_variable_array<FieldT>> benes_switch_bits;
52  benes_topology neighbors;
53 
54 public:
55  const size_t num_packets;
56  const size_t num_columns;
57 
58  const std::vector<pb_variable_array<FieldT>> routing_input_bits;
59  const std::vector<pb_variable_array<FieldT>> routing_output_bits;
61 
62  const size_t packet_size, num_subpackets;
63 
66  const size_t num_packets,
69  const size_t lines_to_unpack,
70  const std::string &annotation_prefix = "");
71 
73 
74  void generate_r1cs_witness(const integer_permutation &permutation);
75 };
76 
77 template<typename FieldT>
79  const size_t num_packets, const size_t packet_size);
80 
81 } // namespace libsnark
82 
84 
85 #endif // BENES_ROUTING_GADGET_HPP_
libsnark::gadget::annotation_prefix
const std::string annotation_prefix
Definition: gadget.hpp:20
libsnark
Definition: accumulation_vector.hpp:18
libsnark::benes_topology
std::vector< std::vector< std::pair< size_t, size_t > > > benes_topology
Definition: benes_routing_algorithm.hpp:51
libsnark::gadget::pb
protoboard< FieldT > & pb
Definition: gadget.hpp:19
libsnark::test_benes_routing_gadget
void test_benes_routing_gadget(const size_t num_packets, const size_t packet_size)
libsnark::benes_routing_gadget::packet_size
const size_t packet_size
Definition: benes_routing_gadget.hpp:62
integer_permutation.hpp
libsnark::gadget
Definition: gadget.hpp:16
benes_routing_algorithm.hpp
protoboard.hpp
libsnark::benes_routing_gadget::generate_r1cs_witness
void generate_r1cs_witness(const integer_permutation &permutation)
libsnark::benes_routing_gadget::num_packets
const size_t num_packets
Definition: benes_routing_gadget.hpp:55
libsnark::benes_routing_gadget::routing_input_bits
const std::vector< pb_variable_array< FieldT > > routing_input_bits
Definition: benes_routing_gadget.hpp:58
libsnark::benes_routing_gadget::num_columns
const size_t num_columns
Definition: benes_routing_gadget.hpp:56
libsnark::integer_permutation
Definition: integer_permutation.hpp:22
libsnark::benes_routing_gadget::lines_to_unpack
size_t lines_to_unpack
Definition: benes_routing_gadget.hpp:60
benes_routing_gadget.tcc
libsnark::benes_routing_gadget
Definition: benes_routing_gadget.hpp:26
basic_gadgets.hpp
libsnark::pb_variable_array
Definition: pb_variable.hpp:44
libsnark::benes_routing_gadget::generate_r1cs_constraints
void generate_r1cs_constraints()
libsnark::benes_routing_gadget::routing_output_bits
const std::vector< pb_variable_array< FieldT > > routing_output_bits
Definition: benes_routing_gadget.hpp:59
libsnark::benes_routing_gadget::num_subpackets
const size_t num_subpackets
Definition: benes_routing_gadget.hpp:62
libsnark::benes_routing_gadget::benes_routing_gadget
benes_routing_gadget(protoboard< FieldT > &pb, const size_t num_packets, const std::vector< pb_variable_array< FieldT >> &routing_input_bits, const std::vector< pb_variable_array< FieldT >> &routing_output_bits, const size_t lines_to_unpack, const std::string &annotation_prefix="")
libsnark::protoboard
Definition: pb_variable.hpp:22