42 using cycle_group =
typename TestFixture::cycle_group;
43 using straus_lookup_table =
typename TestFixture::straus_lookup_table;
44 using Element =
typename TestFixture::Element;
48 auto base_point_native = Element::random_element(&
engine);
49 auto offset_gen_native = Element::random_element(&
engine);
51 auto base_point = cycle_group::from_witness(&
builder, base_point_native);
52 auto offset_gen = cycle_group::from_witness(&
builder, offset_gen_native);
54 const size_t table_bits = 4;
55 straus_lookup_table table(&
builder, base_point, offset_gen, table_bits);
58 check_circuit_and_gate_count(
builder, 184);
60 check_circuit_and_gate_count(
builder, 181);
70 using cycle_group =
typename TestFixture::cycle_group;
71 using straus_lookup_table =
typename TestFixture::straus_lookup_table;
72 using field_t =
typename TestFixture::field_t;
73 using Element =
typename TestFixture::Element;
74 using AffineElement =
typename TestFixture::AffineElement;
78 auto base_point_native = Element::random_element(&
engine);
79 auto offset_gen_native = Element::random_element(&
engine);
81 auto base_point = cycle_group::from_witness(&
builder, base_point_native);
82 auto offset_gen = cycle_group::from_witness(&
builder, offset_gen_native);
84 const size_t table_bits = 4;
85 straus_lookup_table table(&
builder, base_point, offset_gen, table_bits);
88 const size_t table_size = (1ULL << table_bits);
89 for (
size_t i = 0; i < table_size; i++) {
91 auto result = table.read(index);
94 AffineElement expected = AffineElement(offset_gen_native + (base_point_native * i));
95 EXPECT_EQ(result.get_value(), expected);
102 check_circuit_and_gate_count(
builder, 216);
104 check_circuit_and_gate_count(
builder, 213);
114 using cycle_group =
typename TestFixture::cycle_group;
115 using straus_lookup_table =
typename TestFixture::straus_lookup_table;
116 using field_t =
typename TestFixture::field_t;
117 using Element =
typename TestFixture::Element;
118 using AffineElement =
typename TestFixture::AffineElement;
122 auto base_point_native = Element::random_element(&
engine);
123 auto offset_gen_native = Element::random_element(&
engine);
125 auto base_point = cycle_group::from_witness(&
builder, base_point_native);
126 auto offset_gen = cycle_group::from_witness(&
builder, offset_gen_native);
128 const size_t table_bits = 3;
131 auto hints_elements = straus_lookup_table::compute_native_table(base_point_native, offset_gen_native, table_bits);
133 std::vector<AffineElement> hints_affine;
136 for (
size_t i = 1; i < hints_elements.size(); ++i) {
137 hints_affine.push_back(AffineElement(hints_elements[i]));
141 straus_lookup_table table(&
builder, base_point, offset_gen, table_bits, hints_affine);
146 auto result = table.read(index);
148 AffineElement expected = AffineElement(offset_gen_native + (base_point_native * index_val));
149 EXPECT_EQ(result.get_value(), expected);
154 check_circuit_and_gate_count(
builder, 98);
156 check_circuit_and_gate_count(
builder, 96);
166 using cycle_group =
typename TestFixture::cycle_group;
167 using straus_lookup_table =
typename TestFixture::straus_lookup_table;
168 using field_t =
typename TestFixture::field_t;
169 using Element =
typename TestFixture::Element;
170 using AffineElement =
typename TestFixture::AffineElement;
171 using Group =
typename TestFixture::Group;
175 auto base_point_native = Group::point_at_infinity;
176 auto offset_gen_native = Element::random_element(&
engine);
178 auto base_point = cycle_group::from_witness(&
builder, base_point_native);
179 auto offset_gen = cycle_group::from_witness(&
builder, offset_gen_native);
181 const size_t table_bits = 2;
182 straus_lookup_table table(&
builder, base_point, offset_gen, table_bits);
185 for (
size_t i = 0; i < (1ULL << table_bits); i++) {
187 auto result = table.read(index);
188 EXPECT_EQ(result.get_value(), AffineElement(offset_gen_native));
194 check_circuit_and_gate_count(
builder, 60);
196 check_circuit_and_gate_count(
builder, 59);