2#include "../../primitives/plookup/plookup.hpp"
6#include <gtest/gtest.h>
20TEST(stdlib_keccak, keccak_format_input_table)
24 for (
size_t i = 0; i < 25; ++i) {
30 field_ct sparse_limb = accumulators[plookup::ColumnIdx::C2][0];
31 field_ct msb = accumulators[plookup::ColumnIdx::C3][accumulators[plookup::ColumnIdx::C3].size() - 1];
34 uint64_t expected_msb = (limb_native >> 63) & 1ULL;
37 EXPECT_EQ(
static_cast<uint64_t
>(msb.
get_value()), expected_msb);
41 EXPECT_EQ(proof_result,
true);
44TEST(stdlib_keccak, keccak_format_output_table)
48 for (
size_t i = 0; i < 25; ++i) {
54 field_ct normalized_limb = accumulators[plookup::ColumnIdx::C2][0];
58 EXPECT_EQ(proof_result,
true);
61TEST(stdlib_keccak, keccak_theta_output_table)
65 for (
size_t i = 0; i < 25; ++i) {
68 for (
size_t j = 0; j < 8; ++j) {
69 extended_native *= 11;
70 expected_normalized *= 11;
72 uint64_t bit = base_value & 1;
73 extended_native += base_value;
74 expected_normalized += bit;
84 EXPECT_EQ(proof_result,
true);
87TEST(stdlib_keccak, keccak_rho_output_table)
91 constexpr_for<0, 25, 1>([&]<
size_t i> {
94 for (
size_t j = 0; j < 64; ++j) {
95 extended_native *= 11;
96 binary_native = binary_native << 1;
98 extended_native += base_value;
99 binary_native += (base_value & 1);
102 const size_t right_bits = 64 - left_bits;
103 const uint256_t left = binary_native >> right_bits;
104 const uint256_t right = binary_native - (left << right_bits);
105 const uint256_t binary_rotated = left + (right << left_bits);
109 const uint256_t expected_msb = (binary_native >> 63);
117 info(
"num gates = ",
builder.get_num_finalized_gates_inefficient());
119 EXPECT_EQ(proof_result,
true);
122TEST(stdlib_keccak, keccak_chi_output_table)
124 static constexpr uint64_t chi_normalization_table[5]{
130 for (
size_t i = 0; i < 25; ++i) {
134 for (
size_t j = 0; j < 8; ++j) {
135 extended_native *= 11;
136 normalized_native *= 11;
137 binary_native = binary_native << 1;
139 extended_native += base_value;
140 normalized_native += chi_normalization_table[base_value];
141 binary_native += chi_normalization_table[base_value];
144 const auto accumulators =
147 field_ct normalized = accumulators[plookup::ColumnIdx::C2][0];
148 field_ct msb = accumulators[plookup::ColumnIdx::C3][accumulators[plookup::ColumnIdx::C3].size() - 1];
153 info(
"num gates = n",
builder.get_num_finalized_gates_inefficient());
155 EXPECT_EQ(proof_result,
true);
159TEST(stdlib_keccak, permutation_opcode)
165 for (
size_t i = 0; i < 25; ++i) {
175 for (
size_t i = 0; i < 25; i++) {
184 EXPECT_EQ(proof_result,
true);
187 for (
size_t i = 0; i < 25; i++) {
188 uint64_t circuit_value =
static_cast<uint64_t
>(circuit_output[i].get_value());
189 EXPECT_EQ(circuit_value, expected_state[i]);
192 info(
"num gates = ",
builder.get_num_finalized_gates_inefficient());
static bool check(const Builder &circuit)
Check the witness satisifies the circuit.
virtual uint64_t get_random_uint64()=0
Represents a dynamic array of bytes in-circuit.
bb::fr get_value() const
Given a := *this, compute its value given by a.v * a.mul + a.add.
static std::array< field_ct, NUM_KECCAK_LANES > permutation_opcode(std::array< field_ct, NUM_KECCAK_LANES > state, Builder *context)
static constexpr uint256_t convert_to_sparse(uint256_t input)
Convert a binary integer into a base11 integer.
static plookup::ReadData< field_pt > get_lookup_accumulators(const plookup::MultiTableId id, const field_pt &key_a, const field_pt &key_b=0, const bool is_2_to_1_lookup=false)
static field_pt read_from_1_to_2_table(const plookup::MultiTableId id, const field_pt &key_a)
void ethash_keccakf1600(uint64_t state[KECCAKF1600_LANES]) NOEXCEPT
RNG & get_debug_randomness(bool reset, std::uint_fast64_t seed)
Entry point for Barretenberg command-line interface.
UltraCircuitBuilder_< UltraExecutionTraceBlocks > UltraCircuitBuilder
TEST(BoomerangMegaCircuitBuilder, BasicCircuit)
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
stdlib::witness_t< Builder > witness_ct
UltraCircuitBuilder Builder