Clearmatics Libsnark  0.1
C++ library for zkSNARK proofs
as_waksman_routing_gadget.hpp
Go to the documentation of this file.
1 
15 #ifndef AS_WAKSMAN_ROUTING_GADGET_HPP_
16 #define AS_WAKSMAN_ROUTING_GADGET_HPP_
17 
22 
23 namespace libsnark
24 {
25 
26 template<typename FieldT>
27 class as_waksman_routing_gadget : public gadget<FieldT>
28 {
29 private:
30  /*
31  Indexing conventions:
32 
33  routed_packets[column_idx][packet_idx][subpacket_idx]
34  pack_inputs/unpack_outputs[packet_idx]
35  asw_switch_bits[column_idx][row_idx]
36 
37  Where column_idx ranges is in range 0 .. width and packet_idx is
38  in range 0 .. num_packets-1.
39 
40  Note that unlike in Bene\v{s} routing networks row_idx are
41  *not* necessarily consecutive; similarly for straight edges
42  routed_packets[column_idx][packet_idx] will *reuse* previously
43  allocated variables.
44 
45  */
46  std::vector<std::vector<pb_variable_array<FieldT>>> routed_packets;
47  std::vector<multipacking_gadget<FieldT>> pack_inputs, unpack_outputs;
48 
49  /*
50  If #packets = 1 then we can route without explicit switch bits
51  (and save half the constraints); in this case asw_switch_bits will
52  be unused.
53 
54  For asw_switch_bits 0 corresponds to switch off (straight
55  connection), and 1 corresponds to switch on (crossed
56  connection).
57  */
58  std::vector<std::map<size_t, pb_variable<FieldT>>> asw_switch_bits;
59  as_waksman_topology neighbors;
60 
61 public:
62  const size_t num_packets;
63  const size_t num_columns;
64  const std::vector<pb_variable_array<FieldT>> routing_input_bits;
65  const std::vector<pb_variable_array<FieldT>> routing_output_bits;
66 
67  const size_t packet_size, num_subpackets;
68 
71  const size_t num_packets,
74  const std::string &annotation_prefix = "");
76  void generate_r1cs_witness(const integer_permutation &permutation);
77 };
78 
79 template<typename FieldT>
81  const size_t num_packets, const size_t packet_size);
82 
83 } // namespace libsnark
84 
86 
87 #endif // AS_WAKSMAN_ROUTING_GADGET_HPP_
libsnark::as_waksman_routing_gadget::routing_output_bits
const std::vector< pb_variable_array< FieldT > > routing_output_bits
Definition: as_waksman_routing_gadget.hpp:65
libsnark::gadget::annotation_prefix
const std::string annotation_prefix
Definition: gadget.hpp:20
libsnark::as_waksman_topology
std::vector< std::vector< std::pair< size_t, size_t > > > as_waksman_topology
Definition: as_waksman_routing_algorithm.hpp:83
libsnark
Definition: accumulation_vector.hpp:18
libsnark::gadget::pb
protoboard< FieldT > & pb
Definition: gadget.hpp:19
libsnark::as_waksman_routing_gadget::as_waksman_routing_gadget
as_waksman_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 std::string &annotation_prefix="")
libsnark::as_waksman_routing_gadget::num_subpackets
const size_t num_subpackets
Definition: as_waksman_routing_gadget.hpp:67
integer_permutation.hpp
libsnark::gadget
Definition: gadget.hpp:16
libsnark::as_waksman_routing_gadget::generate_r1cs_witness
void generate_r1cs_witness(const integer_permutation &permutation)
libsnark::as_waksman_routing_gadget::routing_input_bits
const std::vector< pb_variable_array< FieldT > > routing_input_bits
Definition: as_waksman_routing_gadget.hpp:64
protoboard.hpp
libsnark::integer_permutation
Definition: integer_permutation.hpp:22
basic_gadgets.hpp
libsnark::pb_variable_array
Definition: pb_variable.hpp:44
libsnark::as_waksman_routing_gadget::num_packets
const size_t num_packets
Definition: as_waksman_routing_gadget.hpp:62
libsnark::as_waksman_routing_gadget::packet_size
const size_t packet_size
Definition: as_waksman_routing_gadget.hpp:67
libsnark::as_waksman_routing_gadget
Definition: as_waksman_routing_gadget.hpp:27
libsnark::as_waksman_routing_gadget::generate_r1cs_constraints
void generate_r1cs_constraints()
as_waksman_routing_algorithm.hpp
as_waksman_routing_gadget.tcc
libsnark::protoboard
Definition: pb_variable.hpp:22
libsnark::test_as_waksman_routing_gadget
void test_as_waksman_routing_gadget(const size_t num_packets, const size_t packet_size)
libsnark::as_waksman_routing_gadget::num_columns
const size_t num_columns
Definition: as_waksman_routing_gadget.hpp:63