24 auto d2 = base_point.dbl();
26 point_table[TABLE_SIZE / 2] = base_point;
27 for (
size_t i = 1; i < TABLE_SIZE / 2; ++i) {
28 point_table[i + TABLE_SIZE / 2] = point_table[i + TABLE_SIZE / 2 - 1] + d2;
30 for (
size_t i = 0; i < TABLE_SIZE / 2; ++i) {
31 point_table[TABLE_SIZE / 2 - 1 - i] = -point_table[TABLE_SIZE / 2 + i];
33 element::batch_normalize(&point_table[0], TABLE_SIZE);
35 auto beta = G1::Fq::cube_root_of_unity();
36 for (
size_t i = 0; i < TABLE_SIZE; ++i) {
46 constexpr size_t num_limb_bits = stdlib::NUM_LIMB_BITS_IN_FIELD_SIMULATION;
50 x = x >> num_limb_bits;
52 x = x >> num_limb_bits;
54 x = x >> num_limb_bits;
59 endo_x = endo_x >> num_limb_bits;
61 endo_x = endo_x >> num_limb_bits;
63 endo_x = endo_x >> num_limb_bits;
68 y = y >> num_limb_bits;
70 y = y >> num_limb_bits;
72 y = y >> num_limb_bits;
91 init_generator_tables();
92 const size_t index =
static_cast<size_t>(
key[0]);
103 init_generator_tables();
104 const size_t index =
static_cast<size_t>(
key[0]);
113template <
typename G1>
116 init_generator_tables();
117 const size_t index =
static_cast<size_t>(
key[0]);
126template <
typename G1>
129 init_generator_tables();
130 const size_t index =
static_cast<size_t>(
key[0]);
141 init_generator_tables();
142 const size_t index =
static_cast<size_t>(
key[0]);
153 init_generator_tables();
154 const size_t index =
static_cast<size_t>(
key[0]);
163template <
typename G1>
166 init_generator_tables();
167 const size_t index =
static_cast<size_t>(
key[0]);
176template <
typename G1>
179 init_generator_tables();
180 const size_t index =
static_cast<size_t>(
key[0]);
181 BB_ASSERT(
index < TABLE_SIZE,
"xyprime_endo table key out of range");
191 size_t table_size = TABLE_SIZE;
194 for (
size_t i = 0; i < table_size; ++i) {
214 size_t table_size = TABLE_SIZE;
217 for (
size_t i = 0; i < table_size; ++i) {
232template <
typename G1>
238 size_t table_size = TABLE_SIZE;
241 for (
size_t i = 0; i < table_size; ++i) {
256template <
typename G1>
262 size_t table_size = TABLE_SIZE;
265 for (
size_t i = 0; i < table_size; ++i) {
285 size_t table_size = TABLE_SIZE;
288 for (
size_t i = 0; i < table_size; ++i) {
308 size_t table_size = TABLE_SIZE;
311 for (
size_t i = 0; i < table_size; ++i) {
326template <
typename G1>
332 size_t table_size = TABLE_SIZE;
335 for (
size_t i = 0; i < table_size; ++i) {
350template <
typename G1>
356 size_t table_size = TABLE_SIZE;
359 for (
size_t i = 0; i < table_size; ++i) {
374template <
typename G1>
377 const size_t num_entries = 1;
381 for (
size_t i = 0; i < num_entries; ++i) {
389template <
typename G1>
392 const size_t num_entries = 1;
396 for (
size_t i = 0; i < num_entries; ++i) {
404template <
typename G1>
407 const size_t num_entries = 1;
411 for (
size_t i = 0; i < num_entries; ++i) {
419template <
typename G1>
422 const size_t num_entries = 1;
426 for (
size_t i = 0; i < num_entries; ++i) {
434template <
typename G1>
437 const size_t num_entries = 1;
441 for (
size_t i = 0; i < num_entries; ++i) {
449template <
typename G1>
452 const size_t num_entries = 1;
456 for (
size_t i = 0; i < num_entries; ++i) {
464template <
typename G1>
467 const size_t num_entries = 1;
471 for (
size_t i = 0; i < num_entries; ++i) {
479template <
typename G1>
482 const size_t num_entries = 1;
486 for (
size_t i = 0; i < num_entries; ++i) {
#define BB_ASSERT(expression,...)
static MultiTable get_yhi_table(const MultiTableId id, const BasicTableId basic_id)
static MultiTable get_xyprime_endo_table(const MultiTableId id, const BasicTableId basic_id)
static BasicTable generate_xlo_table(BasicTableId id, const size_t table_index)
static std::array< fr, 2 > get_xlo_endo_values(const std::array< uint64_t, 2 > key)
static BasicTable generate_xyprime_endo_table(BasicTableId id, const size_t table_index)
static BasicTable generate_yhi_table(BasicTableId id, const size_t table_index)
static BasicTable generate_xlo_endo_table(BasicTableId id, const size_t table_index)
static std::array< fr, 2 > get_xhi_values(const std::array< uint64_t, 2 > key)
static std::array< fr, 2 > get_xyprime_endo_values(const std::array< uint64_t, 2 > key)
static std::array< fr, 2 > get_xlo_values(const std::array< uint64_t, 2 > key)
static BasicTable generate_ylo_table(BasicTableId id, const size_t table_index)
static BasicTable generate_xhi_table(BasicTableId id, const size_t table_index)
static std::array< fr, 2 > get_yhi_values(const std::array< uint64_t, 2 > key)
static void init_generator_tables()
typename G1::element element
static MultiTable get_xlo_endo_table(const MultiTableId id, const BasicTableId basic_id)
static std::array< fr, 2 > get_ylo_values(const std::array< uint64_t, 2 > key)
static std::array< fr, 2 > get_xhi_endo_values(const std::array< uint64_t, 2 > key)
static std::array< fr, 2 > get_xyprime_values(const std::array< uint64_t, 2 > key)
static MultiTable get_xyprime_table(const MultiTableId id, const BasicTableId basic_id)
static MultiTable get_xhi_endo_table(const MultiTableId id, const BasicTableId basic_id)
static BasicTable generate_xyprime_table(BasicTableId id, const size_t table_index)
static BasicTable generate_xhi_endo_table(BasicTableId id, const size_t table_index)
static MultiTable get_xhi_table(const MultiTableId id, const BasicTableId basic_id)
static MultiTable get_xlo_table(const MultiTableId id, const BasicTableId basic_id)
static MultiTable get_ylo_table(const MultiTableId id, const BasicTableId basic_id)
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
A basic table from which we can perform lookups (for example, an xor table)
bb::fr column_2_step_size
bb::fr column_1_step_size
std::vector< bb::fr > column_3
std::vector< bb::fr > column_2
std::array< bb::fr, 2 >(* get_values_from_key)(const std::array< uint64_t, 2 >)
std::vector< bb::fr > column_1
bb::fr column_3_step_size
Container for managing multiple BasicTables plus the data needed to combine basic table outputs (e....
std::vector< BasicTableId > basic_table_ids
std::vector< uint64_t > slice_sizes
std::vector< table_out(*)(table_in)> get_table_values