4#include "./fixed_base_params.hpp"
5#include "barretenberg/crypto/generators/generator_data.hpp"
6#include "barretenberg/crypto/pedersen_hash/pedersen.hpp"
7#include "barretenberg/ecc/curves/grumpkin/grumpkin.hpp"
9namespace plookup::fixed_base {
19 using single_lookup_table = std::vector<affine_element>;
20 using fixed_base_scalar_mul_tables = std::vector<single_lookup_table>;
21 using all_multi_tables = std::array<fixed_base_scalar_mul_tables, NUM_FIXED_BASE_MULTI_TABLES>;
41 inline static const affine_element lhs_base_point_lo = LHS_GENERATOR_POINT;
43 inline static const affine_element rhs_base_point_lo = RHS_GENERATOR_POINT;
49 static const all_multi_tables fixed_base_tables;
72 template <
size_t multitable_index>
76 template <
size_t multitable_index,
size_t table_index>
77 static std::array<barretenberg::fr, 2> get_basic_fixed_base_table_values(
const std::array<uint64_t, 2> key)
79 static_assert(multitable_index < NUM_FIXED_BASE_MULTI_TABLES);
81 const auto& basic_table = fixed_base_tables[multitable_index][table_index];
82 const auto index =
static_cast<size_t>(key[0]);
83 return { basic_table[index].x, basic_table[index].y };
87extern template table::affine_element table::generate_generator_offset<table::BITS_PER_LO_SCALAR>(
88 const table::affine_element&);
89extern template table::affine_element table::generate_generator_offset<table::BITS_PER_HI_SCALAR>(
90 const table::affine_element&);
91extern template table::fixed_base_scalar_mul_tables table::generate_tables<table::BITS_PER_LO_SCALAR>(
92 const table::affine_element&);
93extern template table::fixed_base_scalar_mul_tables table::generate_tables<table::BITS_PER_HI_SCALAR>(
94 const table::affine_element&);
96extern template BasicTable table::generate_basic_fixed_base_table<0>(BasicTableId,
size_t,
size_t);
97extern template BasicTable table::generate_basic_fixed_base_table<1>(BasicTableId,
size_t,
size_t);
98extern template BasicTable table::generate_basic_fixed_base_table<2>(BasicTableId,
size_t,
size_t);
99extern template BasicTable table::generate_basic_fixed_base_table<3>(BasicTableId,
size_t,
size_t);
100extern template MultiTable table::get_fixed_base_table<0, table::BITS_PER_LO_SCALAR>(MultiTableId);
101extern template MultiTable table::get_fixed_base_table<1, table::BITS_PER_HI_SCALAR>(MultiTableId);
102extern template MultiTable table::get_fixed_base_table<2, table::BITS_PER_LO_SCALAR>(MultiTableId);
103extern template MultiTable table::get_fixed_base_table<3, table::BITS_PER_HI_SCALAR>(MultiTableId);
Definition: affine_element.hpp:11
element class. Implements ecc group arithmetic using Jacobian coordinates See https://hyperelliptic....
Definition: element.hpp:27
class that stores precomputed generators used for Pedersen commitments and Pedersen hashes
Definition: generator_data.hpp:40
Definition: uint256.hpp:25
Generates plookup tables required to perform fixed-base scalar multiplication over a fixed number of ...
Definition: fixed_base.hpp:15
static single_lookup_table generate_single_lookup_table(const affine_element &base_point, const affine_element &offset_generator)
Given a base_point [P] and an offset_generator [G], compute a lookup table of MAX_TABLE_SIZE that con...
Definition: fixed_base.cpp:21
static fixed_base_scalar_mul_tables generate_tables(const affine_element &input)
For a given base point [P], compute the lookup tables required to traverse a num_bits sized lookup.
Definition: fixed_base.cpp:51
static bool lookup_table_exists_for_point(const affine_element &input)
Given a point, do we have a precomputed lookup table for this point?
Definition: fixed_base.cpp:106
static BasicTable generate_basic_fixed_base_table(BasicTableId id, size_t basic_table_index, size_t table_index)
Generate a single fixed-base-scalar-mul plookup table.
Definition: fixed_base.cpp:186
static std::optional< std::array< MultiTableId, 2 > > get_lookup_table_ids_for_point(const affine_element &input)
Given a point, return (if it exists) the 2 MultiTableId's that correspond to the LO_SCALAR,...
Definition: fixed_base.cpp:118
static const std::array< affine_element, table::NUM_FIXED_BASE_MULTI_TABLES > fixed_base_table_offset_generators
offset generators!
Definition: fixed_base.hpp:66
static MultiTable get_fixed_base_table(MultiTableId id)
Generate a multi-table that describes the lookups required to cover a fixed-base-scalar-mul of num_bi...
Definition: fixed_base.cpp:231
static std::optional< affine_element > get_generator_offset_for_table_id(MultiTableId table_id)
Given a table id, return the offset generator term that will be present in the final scalar mul outpu...
Definition: fixed_base.cpp:138
The structure contains the most basic table serving one function (for, example an xor table)
Definition: types.hpp:263
Parameters definitions for our fixed-base-scalar-multiplication lookup tables.
Definition: fixed_base_params.hpp:14
static constexpr size_t get_num_bits_of_multi_table(const size_t multitable_index)
For a given multitable index, how many scalar mul bits are we traversing with our multitable?
Definition: fixed_base_params.hpp:67
Definition: types.hpp:124