26 auto d2 = base_point.dbl();
28 point_table[128] = base_point;
29 for (
size_t i = 1; i < 128; ++i) {
30 point_table[i + 128] = point_table[i + 127] + d2;
32 for (
size_t i = 0; i < 128; ++i) {
33 point_table[127 - i] = -point_table[128 + i];
35 element::batch_normalize(&point_table[0], 256);
37 auto beta = G1::Fq::cube_root_of_unity();
38 for (
size_t i = 0; i < 256; ++i) {
54 endo_x = endo_x >> 68;
56 endo_x = endo_x >> 68;
58 endo_x = endo_x >> 68;
86 return (position * 2);
91 return shifted_naf / 2;
99 init_generator_tables();
100 const size_t index =
static_cast<size_t>(
key[0]);
110 init_generator_tables();
111 const size_t index =
static_cast<size_t>(
key[0]);
119template <
typename G1>
122 init_generator_tables();
123 const size_t index =
static_cast<size_t>(
key[0]);
131template <
typename G1>
134 init_generator_tables();
135 const size_t index =
static_cast<size_t>(
key[0]);
145 init_generator_tables();
146 const size_t index =
static_cast<size_t>(
key[0]);
156 init_generator_tables();
157 const size_t index =
static_cast<size_t>(
key[0]);
165template <
typename G1>
168 init_generator_tables();
169 const size_t index =
static_cast<size_t>(
key[0]);
177template <
typename G1>
180 init_generator_tables();
181 const size_t index =
static_cast<size_t>(
key[0]);
191 size_t table_size = 256;
194 for (
size_t i = 0; i < table_size; ++i) {
214 size_t table_size = 256;
217 for (
size_t i = 0; i < table_size; ++i) {
232template <
typename G1>
238 size_t table_size = 256;
241 for (
size_t i = 0; i < table_size; ++i) {
256template <
typename G1>
262 size_t table_size = 256;
265 for (
size_t i = 0; i < table_size; ++i) {
285 size_t table_size = 256;
288 for (
size_t i = 0; i < table_size; ++i) {
308 size_t table_size = 256;
311 for (
size_t i = 0; i < table_size; ++i) {
326template <
typename G1>
332 size_t table_size = 256;
335 for (
size_t i = 0; i < table_size; ++i) {
350template <
typename G1>
356 size_t table_size = 256;
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) {
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 size_t convert_position_to_shifted_naf(const size_t position)
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 size_t convert_shifted_naf_to_position(const size_t shifted_naf)
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