2#include "barretenberg/common/throw_or_abort.hpp"
4#include "./fixed_base/fixed_base.hpp"
8#include "keccak/keccak_chi.hpp"
9#include "keccak/keccak_input.hpp"
10#include "keccak/keccak_output.hpp"
11#include "keccak/keccak_rho.hpp"
12#include "keccak/keccak_theta.hpp"
13#include "non_native_group_generator.hpp"
21const MultiTable& create_table(MultiTableId
id);
23ReadData<barretenberg::fr> get_lookup_accumulators(MultiTableId
id,
26 bool is_2_to_1_lookup =
false);
28inline BasicTable create_basic_table(
const BasicTableId
id,
const size_t index)
31 auto id_var =
static_cast<size_t>(id);
32 if (id_var >=
static_cast<size_t>(FIXED_BASE_0_0) && id_var < static_cast<size_t>(FIXED_BASE_1_0)) {
33 return fixed_base::table::generate_basic_fixed_base_table<0>(
34 id, index, id_var -
static_cast<size_t>(FIXED_BASE_0_0));
36 if (id_var >=
static_cast<size_t>(FIXED_BASE_1_0) && id_var <
static_cast<size_t>(FIXED_BASE_2_0)) {
37 return fixed_base::table::generate_basic_fixed_base_table<1>(
38 id, index, id_var -
static_cast<size_t>(FIXED_BASE_1_0));
40 if (id_var >=
static_cast<size_t>(FIXED_BASE_2_0) && id_var <
static_cast<size_t>(FIXED_BASE_3_0)) {
41 return fixed_base::table::generate_basic_fixed_base_table<2>(
42 id, index, id_var -
static_cast<size_t>(FIXED_BASE_2_0));
44 if (id_var >=
static_cast<size_t>(FIXED_BASE_3_0) && id_var <
static_cast<size_t>(HONK_DUMMY_BASIC1)) {
45 return fixed_base::table::generate_basic_fixed_base_table<3>(
46 id, index, id_var -
static_cast<size_t>(FIXED_BASE_3_0));
49 case AES_SPARSE_MAP: {
50 return sparse_tables::generate_sparse_table_with_rotation<9, 8, 0>(AES_SPARSE_MAP, index);
53 return aes128_tables::generate_aes_sbox_table(AES_SBOX_MAP, index);
55 case AES_SPARSE_NORMALIZE: {
56 return aes128_tables::generate_aes_sparse_normalization_table(AES_SPARSE_NORMALIZE, index);
58 case SHA256_WITNESS_NORMALIZE: {
59 return sha256_tables::generate_witness_extension_normalization_table(SHA256_WITNESS_NORMALIZE, index);
61 case SHA256_WITNESS_SLICE_3: {
62 return sparse_tables::generate_sparse_table_with_rotation<16, 3, 0>(SHA256_WITNESS_SLICE_3, index);
64 case SHA256_WITNESS_SLICE_7_ROTATE_4: {
65 return sparse_tables::generate_sparse_table_with_rotation<16, 7, 4>(SHA256_WITNESS_SLICE_7_ROTATE_4, index);
67 case SHA256_WITNESS_SLICE_8_ROTATE_7: {
68 return sparse_tables::generate_sparse_table_with_rotation<16, 8, 7>(SHA256_WITNESS_SLICE_8_ROTATE_7, index);
70 case SHA256_WITNESS_SLICE_14_ROTATE_1: {
71 return sparse_tables::generate_sparse_table_with_rotation<16, 14, 1>(SHA256_WITNESS_SLICE_14_ROTATE_1, index);
73 case SHA256_CH_NORMALIZE: {
74 return sha256_tables::generate_choose_normalization_table(SHA256_CH_NORMALIZE, index);
76 case SHA256_MAJ_NORMALIZE: {
77 return sha256_tables::generate_majority_normalization_table(SHA256_MAJ_NORMALIZE, index);
80 return sparse_tables::generate_sparse_table_with_rotation<28, 11, 0>(SHA256_BASE28, index);
82 case SHA256_BASE28_ROTATE6: {
83 return sparse_tables::generate_sparse_table_with_rotation<28, 11, 6>(SHA256_BASE28_ROTATE6, index);
85 case SHA256_BASE28_ROTATE3: {
86 return sparse_tables::generate_sparse_table_with_rotation<28, 11, 3>(SHA256_BASE28_ROTATE3, index);
89 return sparse_tables::generate_sparse_table_with_rotation<16, 11, 0>(SHA256_BASE16, index);
91 case SHA256_BASE16_ROTATE2: {
92 return sparse_tables::generate_sparse_table_with_rotation<16, 11, 2>(SHA256_BASE16_ROTATE2, index);
94 case UINT_XOR_ROTATE0: {
95 return uint_tables::generate_xor_rotate_table<6, 0>(UINT_XOR_ROTATE0, index);
97 case UINT_AND_ROTATE0: {
98 return uint_tables::generate_and_rotate_table<6, 0>(UINT_AND_ROTATE0, index);
100 case BN254_XLO_BASIC: {
101 return ecc_generator_tables::ecc_generator_table<barretenberg::g1>::generate_xlo_table(BN254_XLO_BASIC, index);
103 case BN254_XHI_BASIC: {
104 return ecc_generator_tables::ecc_generator_table<barretenberg::g1>::generate_xhi_table(BN254_XHI_BASIC, index);
106 case BN254_YLO_BASIC: {
107 return ecc_generator_tables::ecc_generator_table<barretenberg::g1>::generate_ylo_table(BN254_YLO_BASIC, index);
109 case BN254_YHI_BASIC: {
110 return ecc_generator_tables::ecc_generator_table<barretenberg::g1>::generate_yhi_table(BN254_YHI_BASIC, index);
112 case BN254_XYPRIME_BASIC: {
113 return ecc_generator_tables::ecc_generator_table<barretenberg::g1>::generate_xyprime_table(BN254_XYPRIME_BASIC,
116 case BN254_XLO_ENDO_BASIC: {
117 return ecc_generator_tables::ecc_generator_table<barretenberg::g1>::generate_xlo_endo_table(
118 BN254_XLO_ENDO_BASIC, index);
120 case BN254_XHI_ENDO_BASIC: {
121 return ecc_generator_tables::ecc_generator_table<barretenberg::g1>::generate_xhi_endo_table(
122 BN254_XHI_ENDO_BASIC, index);
124 case BN254_XYPRIME_ENDO_BASIC: {
125 return ecc_generator_tables::ecc_generator_table<barretenberg::g1>::generate_xyprime_endo_table(
126 BN254_XYPRIME_ENDO_BASIC, index);
128 case SECP256K1_XLO_BASIC: {
129 return ecc_generator_tables::ecc_generator_table<secp256k1::g1>::generate_xlo_table(SECP256K1_XLO_BASIC, index);
131 case SECP256K1_XHI_BASIC: {
132 return ecc_generator_tables::ecc_generator_table<secp256k1::g1>::generate_xhi_table(SECP256K1_XHI_BASIC, index);
134 case SECP256K1_YLO_BASIC: {
135 return ecc_generator_tables::ecc_generator_table<secp256k1::g1>::generate_ylo_table(SECP256K1_YLO_BASIC, index);
137 case SECP256K1_YHI_BASIC: {
138 return ecc_generator_tables::ecc_generator_table<secp256k1::g1>::generate_yhi_table(SECP256K1_YHI_BASIC, index);
140 case SECP256K1_XYPRIME_BASIC: {
141 return ecc_generator_tables::ecc_generator_table<secp256k1::g1>::generate_xyprime_table(SECP256K1_XYPRIME_BASIC,
144 case SECP256K1_XLO_ENDO_BASIC: {
145 return ecc_generator_tables::ecc_generator_table<secp256k1::g1>::generate_xlo_endo_table(
146 SECP256K1_XLO_ENDO_BASIC, index);
148 case SECP256K1_XHI_ENDO_BASIC: {
149 return ecc_generator_tables::ecc_generator_table<secp256k1::g1>::generate_xhi_endo_table(
150 SECP256K1_XHI_ENDO_BASIC, index);
152 case SECP256K1_XYPRIME_ENDO_BASIC: {
153 return ecc_generator_tables::ecc_generator_table<secp256k1::g1>::generate_xyprime_endo_table(
154 SECP256K1_XYPRIME_ENDO_BASIC, index);
156 case BLAKE_XOR_ROTATE0: {
157 return blake2s_tables::generate_xor_rotate_table<6, 0>(BLAKE_XOR_ROTATE0, index);
159 case BLAKE_XOR_ROTATE0_SLICE5_MOD4: {
160 return blake2s_tables::generate_xor_rotate_table<5, 0, true>(BLAKE_XOR_ROTATE0_SLICE5_MOD4, index);
162 case BLAKE_XOR_ROTATE2: {
163 return blake2s_tables::generate_xor_rotate_table<6, 2>(BLAKE_XOR_ROTATE2, index);
165 case BLAKE_XOR_ROTATE1: {
166 return blake2s_tables::generate_xor_rotate_table<6, 1>(BLAKE_XOR_ROTATE1, index);
168 case BLAKE_XOR_ROTATE4: {
169 return blake2s_tables::generate_xor_rotate_table<6, 4>(BLAKE_XOR_ROTATE4, index);
171 case HONK_DUMMY_BASIC1: {
172 return dummy_tables::generate_honk_dummy_table<HONK_DUMMY_BASIC1>(HONK_DUMMY_BASIC1, index);
174 case HONK_DUMMY_BASIC2: {
175 return dummy_tables::generate_honk_dummy_table<HONK_DUMMY_BASIC2>(HONK_DUMMY_BASIC2, index);
186 case KECCAK_OUTPUT: {
214 throw_or_abort(
"table id does not exist");
215 return sparse_tables::generate_sparse_table_with_rotation<9, 8, 0>(AES_SPARSE_MAP, index);
static BasicTable generate_chi_renormalization_table(BasicTableId id, const size_t table_index)
Generate the CHI plookup table.
Definition: keccak_chi.hpp:167
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.
Definition: keccak_output.hpp:89
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.
Definition: keccak_rho.hpp:168
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.
Definition: keccak_theta.hpp:166
This file contains functions for the dummy tables that we use in UltraHonk to make table,...