111 bb::constexpr_for<0, 25, 1>([&]<
size_t i>() {
132 return get_multi_tables()[id];
155 const bool is_2_to_1_lookup)
159 const size_t num_lookups = multi_table.basic_table_ids.size();
162 BB_ASSERT_EQ(multi_table.column_1_coefficients.size(), num_lookups,
"MultiTable coefficient/table count mismatch");
163 BB_ASSERT_EQ(multi_table.get_table_values.size(), num_lookups,
"MultiTable get_table_values/table count mismatch");
164 BB_ASSERT_EQ(multi_table.slice_sizes.size(), num_lookups,
"MultiTable slice_sizes/table count mismatch");
170 std::vector<fr> column_1_raw_values;
171 std::vector<fr> column_2_raw_values;
172 std::vector<fr> column_3_raw_values;
174 for (
size_t i = 0; i < num_lookups; ++i) {
176 const auto values = multi_table.get_table_values[i]({ key_a_slices[i], key_b_slices[i] });
178 column_1_raw_values.emplace_back(key_a_slices[i]);
179 column_2_raw_values.emplace_back(is_2_to_1_lookup ? key_b_slices[i] : values[0]);
180 column_3_raw_values.emplace_back(is_2_to_1_lookup ? values[0] : values[1]);
187 lookup[
C1].resize(num_lookups);
188 lookup[
C2].resize(num_lookups);
189 lookup[
C3].resize(num_lookups);
230 lookup[
C1][num_lookups - 1] = column_1_raw_values[num_lookups - 1];
231 lookup[
C2][num_lookups - 1] = column_2_raw_values[num_lookups - 1];
232 lookup[
C3][num_lookups - 1] = column_3_raw_values[num_lookups - 1];
234 for (
size_t i = num_lookups - 1; i > 0; --i) {
235 lookup[
C1][i - 1] = column_1_raw_values[i - 1] + lookup[
C1][i] * multi_table.column_1_step_sizes[i];
236 lookup[
C2][i - 1] = column_2_raw_values[i - 1] + lookup[
C2][i] * multi_table.column_2_step_sizes[i];
237 lookup[
C3][i - 1] = column_3_raw_values[i - 1] + lookup[
C3][i] * multi_table.column_3_step_sizes[i];
245 auto id_var =
static_cast<size_t>(id);
247 return fixed_base::table::generate_basic_fixed_base_table<0>(
251 return fixed_base::table::generate_basic_fixed_base_table<1>(
255 return fixed_base::table::generate_basic_fixed_base_table<2>(
259 return fixed_base::table::generate_basic_fixed_base_table<3>(
294 return sparse_tables::generate_sparse_table_with_rotation<28, 11, 0>(
SHA256_BASE28,
index);
303 return sparse_tables::generate_sparse_table_with_rotation<16, 11, 0>(
SHA256_BASE16,
index);
#define BB_ASSERT_EQ(actual, expected,...)
Container for lookup accumulator values and table reads.
std::vector< BasicTable::LookupEntry > lookup_entries
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 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 BasicTable generate_ylo_table(BasicTableId id, const size_t table_index)
static BasicTable generate_xhi_table(BasicTableId id, const size_t table_index)
static MultiTable get_xlo_endo_table(const MultiTableId id, const BasicTableId basic_id)
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)
static BasicTable generate_chi_renormalization_table(BasicTableId id, const size_t table_index)
Generate the CHI plookup table.
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 MultiTable get_keccak_output_table(const MultiTableId id=KECCAK_FORMAT_OUTPUT)
Create the KeccakOutput MultiTable used by plookup to generate a sequence of lookups.
static BasicTable generate_keccak_output_table(BasicTableId id, const size_t table_index)
Generate plookup table that maps a TABLE_BITS-slice of a base-11 integer into a base-2 integer.
static MultiTable get_rho_output_table(const MultiTableId id=KECCAK_NORMALIZE_AND_ROTATE)
Create the Rho MultiTable used by plookup to generate a sequence of lookups.
static BasicTable generate_rho_renormalization_table(BasicTableId id, const size_t table_index)
Generate plookup table that normalizes a TABLE_BITS-slice of a base-11 integer and extracts the msb.
static MultiTable get_theta_output_table(const MultiTableId id=KECCAK_THETA_OUTPUT)
Create the THETA MultiTable used by plookup to generate a sequence of lookups.
static BasicTable generate_theta_renormalization_table(BasicTableId id, const size_t table_index)
Generate plookup table that normalizes a TABLE_BITS-slice of a base-11 integer.
This file contains functions for the dummy tables that we use in UltraHonk to make table,...
std::vector< uint64_t > slice_input_using_variable_bases(const uint256_t &input, const std::vector< uint64_t > &bases)
Decompose a uint256_t using a different base for each digit position (least-significant first)....
MultiTable get_aes_input_table(const MultiTableId id=AES_INPUT)
Creates a MultiTable for converting a 128-bit AES input block into 16 sparse-form bytes.
BasicTable generate_aes_sparse_normalization_table(BasicTableId id, const size_t table_index)
Generates a BasicTable for normalizing 4 sparse digits back to valid sparse form.
MultiTable get_aes_normalization_table(const MultiTableId id=AES_NORMALIZE)
Creates a MultiTable for normalizing 8 sparse digits back to binary digits.
BasicTable generate_aes_sbox_table(BasicTableId id, const size_t table_index)
Generates a plookup table for AES S-box substitution with precomputed MixColumns values.
MultiTable get_aes_sbox_table(const MultiTableId id=AES_SBOX)
MultiTable get_blake2s_xor_rotate_8_table(const MultiTableId id=BLAKE_XOR_ROTATE_8)
MultiTable get_blake2s_xor_rotate_7_table(const MultiTableId id=BLAKE_XOR_ROTATE_7)
MultiTable get_blake2s_xor_rotate_16_table(const MultiTableId id=BLAKE_XOR_ROTATE_16)
MultiTable get_blake2s_xor_table(const MultiTableId id=BLAKE_XOR)
MultiTable get_honk_dummy_multitable()
Create a multitable for filling UltraHonk polynomials with non-zero values.
MultiTable get_witness_extension_input_table(const MultiTableId id=SHA256_WITNESS_INPUT)
Constructs a MultiTable for decomposing a 32-bit word for message schedule extension.
MultiTable get_majority_input_table(const MultiTableId id=SHA256_MAJ_INPUT)
Constructs a MultiTable for decomposing a into sparse form and computing rotation components for Σ₀(a...
BasicTable generate_choose_normalization_table(BasicTableId id, const size_t table_index)
Generates a BasicTable for normalizing choose sparse digits.
MultiTable get_witness_extension_output_table(const MultiTableId id=SHA256_WITNESS_OUTPUT)
Constructs a MultiTable for normalizing witness extension sparse results back to normal form.
BasicTable generate_majority_normalization_table(BasicTableId id, const size_t table_index)
Generates a BasicTable for normalizing majority sparse digits.
MultiTable get_choose_output_table(const MultiTableId id=SHA256_CH_OUTPUT)
Constructs a MultiTable for normalizing choose sparse results back to normal form.
MultiTable get_choose_input_table(const MultiTableId id=SHA256_CH_INPUT)
Constructs a MultiTable for decomposing e into sparse form and computing rotation components for Σ₁(e...
MultiTable get_majority_output_table(const MultiTableId id=SHA256_MAJ_OUTPUT)
Constructs a MultiTable for normalizing majority sparse results back to normal form.
BasicTable generate_witness_extension_normalization_table(BasicTableId id, const size_t table_index)
Generates a BasicTable for normalizing witness extension sparse digits.
BasicTable generate_xor_rotate_table(BasicTableId id, const size_t table_index)
BasicTable generate_and_rotate_table(BasicTableId id, const size_t table_index)
@ BLAKE_XOR_ROTATE0_SLICE5_MOD4
@ SHA256_WITNESS_SLICE_8_ROTATE_7
@ UINT_AND_SLICE_6_ROTATE_0
@ SECP256K1_XYPRIME_ENDO_BASIC
@ UINT_AND_SLICE_4_ROTATE_0
@ UINT_XOR_SLICE_4_ROTATE_0
@ UINT_XOR_SLICE_6_ROTATE_0
@ UINT_AND_SLICE_2_ROTATE_0
@ SECP256K1_XYPRIME_BASIC
@ SECP256K1_XLO_ENDO_BASIC
@ SECP256K1_XHI_ENDO_BASIC
@ SHA256_WITNESS_SLICE_7_ROTATE_4
@ SHA256_WITNESS_NORMALIZE
@ SHA256_WITNESS_SLICE_14_ROTATE_1
@ UINT_XOR_SLICE_2_ROTATE_0
ReadData< bb::fr > get_lookup_accumulators(const MultiTableId id, const fr &key_a, const fr &key_b, const bool is_2_to_1_lookup)
Given a table ID and the key(s) for a key-value lookup, return the lookup accumulators.
@ KECCAK_NORMALIZE_AND_ROTATE
BasicTable create_basic_table(const BasicTableId id, const size_t index)
const MultiTable & get_multitable(const MultiTableId id)
Return the multitable with the provided ID; construct all MultiTables if not constructed already.
Entry point for Barretenberg command-line interface.
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Plookup tables for SHA-256 using sparse form representation.
A basic table from which we can perform lookups (for example, an xor table)
Container for managing multiple BasicTables plus the data needed to combine basic table outputs (e....
void throw_or_abort(std::string const &err)