71 static constexpr uint64_t
BASE = 11;
91 uint64_t accumulator = 0;
92 uint64_t input =
key[0];
93 uint64_t base_shift = 1;
99 accumulator += (bit * base_shift);
104 return {
bb::fr(accumulator),
bb::fr(accumulator / divisor) };
143 constexpr uint64_t divisor =
numeric::pow64(
static_cast<uint64_t
>(
BASE), divisor_exponent);
155 uint64_t normalized_value = 0;
157 value += counts[i] * scaled_bases[i];
160 return {
value, normalized_value, normalized_value / divisor };
182 for (
size_t i = 0; i < table_size; ++i) {
183 table.
column_1.emplace_back(column_values[0]);
184 table.
column_2.emplace_back(column_values[1]);
185 table.
column_3.emplace_back(column_values[2]);
241 constexpr size_t num_tables_per_multitable =
246 MultiTable table(column_multiplier, column_multiplier, 0, num_tables_per_multitable);
249 for (
size_t i = 0; i < num_tables_per_multitable; ++i) {
Generates plookup tables required for CHI round of Keccak hash function.
static constexpr uint64_t TABLE_BITS
static std::array< uint64_t, 3 > get_column_values_for_next_row(std::array< size_t, TABLE_BITS > &counts)
Get column values for next row of plookup table. Used to generate plookup table row values.
static BasicTable generate_chi_renormalization_table(BasicTableId id, const size_t table_index)
Generate the CHI plookup table.
static constexpr uint64_t EFFECTIVE_BASE
static constexpr uint64_t CHI_NORMALIZATION_TABLE[5]
static MultiTable get_chi_output_table(const MultiTableId id=KECCAK_CHI_OUTPUT)
Create the CHI MultiTable used by plookup to generate a sequence of lookups.
static std::array< bb::fr, 2 > get_chi_renormalization_values(const std::array< uint64_t, 2 > key)
Given a table input value, return the table output value.
static constexpr std::array< uint64_t, TABLE_BITS > get_scaled_bases()
Precompute an array of base multipliers (11^i for i = [0, ..., TABLE_BITS - 1]) Code is slightly fast...
static constexpr uint64_t BASE
constexpr uint64_t pow64(const uint64_t input, const uint64_t exponent)
field< Bn254FrParams > fr
C slice(C const &container, size_t start)
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