1#include <gmock/gmock.h>
2#include <gtest/gtest.h>
25class KeccakSimulationTest :
public ::testing::Test {
27 KeccakSimulationTest()
50TEST_F(KeccakSimulationTest, matchesReferenceImplementation)
53 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
72 output[i] = val.as<uint64_t>();
76 EXPECT_THAT(input, testing::ElementsAreArray(output));
80TEST_F(KeccakSimulationTest, officialTestVector)
94 output[i] = val.as<uint64_t>();
97 EXPECT_THAT(output[0], 0xF1258F7940E1DDE7);
98 EXPECT_THAT(output[1], 0x84D5CCF933C0478A);
99 EXPECT_THAT(output[2], 0xD598261EA65AA9EE);
100 EXPECT_THAT(output[3], 0xBD1547306F80494D);
101 EXPECT_THAT(output[4], 0x8B284E056253D057);
102 EXPECT_THAT(output[5], 0xFF97A42D7F8E6FD4);
103 EXPECT_THAT(output[6], 0x90FEE5A0A44647C4);
104 EXPECT_THAT(output[7], 0x8C5BDA0CD6192E76);
105 EXPECT_THAT(output[8], 0xAD30A6F71B19059C);
106 EXPECT_THAT(output[9], 0x30935AB7D08FFC64);
107 EXPECT_THAT(output[10], 0xEB5AA93F2317D635);
108 EXPECT_THAT(output[11], 0xA9A6E6260D712103);
109 EXPECT_THAT(output[12], 0x81A57C16DBCF555F);
110 EXPECT_THAT(output[13], 0x43B831CD0347C826);
111 EXPECT_THAT(output[14], 0x01F22F1A11A5569F);
112 EXPECT_THAT(output[15], 0x05E5635A21D9AE61);
113 EXPECT_THAT(output[16], 0x64BEFEF28CC970F2);
114 EXPECT_THAT(output[17], 0x613670957BC46611);
115 EXPECT_THAT(output[18], 0xB87C5A554FD00ECB);
116 EXPECT_THAT(output[19], 0x8C3EE88A1CCF32C8);
117 EXPECT_THAT(output[20], 0x940C7922AE3A2614);
118 EXPECT_THAT(output[21], 0x1841F924A2C509E4);
119 EXPECT_THAT(output[22], 0x16F53526E70465C2);
120 EXPECT_THAT(output[23], 0x75F644E97F30A13B);
121 EXPECT_THAT(output[24], 0xEAF1FF7B5CECA249);
133 output2[i] = val.as<uint64_t>();
137 EXPECT_THAT(output2[0], 0x2D5C954DF96ECB3C);
139 EXPECT_THAT(output2[1], 0x6A332CD07057B56D);
141 EXPECT_THAT(output2[2], 0x093D8D1270D76B6C);
143 EXPECT_THAT(output2[3], 0x8A20D9B25569D094);
145 EXPECT_THAT(output2[4], 0x4F9C4F99E5E7F156);
147 EXPECT_THAT(output2[5], 0xF957B9A2DA65FB38);
149 EXPECT_THAT(output2[6], 0x85773DAE1275AF0D);
151 EXPECT_THAT(output2[7], 0xFAF4F247C3D810F7);
153 EXPECT_THAT(output2[8], 0x1F1B9EE6F79A8759);
155 EXPECT_THAT(output2[9], 0xE4FECC0FEE98B425);
157 EXPECT_THAT(output2[10], 0x68CE61B6B9CE68A1);
159 EXPECT_THAT(output2[11], 0xDEEA66C4BA8F974F);
161 EXPECT_THAT(output2[12], 0x33C43D836EAFB1F5);
163 EXPECT_THAT(output2[13], 0xE00654042719DBD9);
165 EXPECT_THAT(output2[14], 0x7CF8A9F009831265);
167 EXPECT_THAT(output2[15], 0xFD5449A6BF174743);
169 EXPECT_THAT(output2[16], 0x97DDAD33D8994B40);
171 EXPECT_THAT(output2[17], 0x48EAD5FC5D0BE774);
173 EXPECT_THAT(output2[18], 0xE3B8C8EE55B7B03C);
175 EXPECT_THAT(output2[19], 0x91A0226E649E42E9);
177 EXPECT_THAT(output2[20], 0x900E3129E7BADD7B);
179 EXPECT_THAT(output2[21], 0x202A9EC5FAA3CCE8);
181 EXPECT_THAT(output2[22], 0x5B3402464E1C3DB6);
183 EXPECT_THAT(output2[23], 0x609F4E62A44C1059);
185 EXPECT_THAT(output2[24], 0x20D06CD26A8FBF5C);
191TEST_F(KeccakSimulationTest, tagError)
209 format(
"Read slice tag invalid - addr: ", src_addr_wrong_tag,
" tag: ",
static_cast<uint32_t
>(wrong_tag)));
212TEST_F(KeccakSimulationTest, srcSliceOutOfBounds)
220TEST_F(KeccakSimulationTest, dstSliceOutOfBounds)
FieldGreaterThan field_gt
#define AVM_KECCAKF1600_STATE_SIZE
#define AVM_HIGHEST_MEM_ADDRESS
static TaggedValue from_tag_truncating(ValueTag tag, FF value)
void permutation(MemoryInterface &memory, MemoryAddress dst_addr, MemoryAddress src_addr) override
Permutation Keccak-f[1600] consisting in AVM_KECCAKF1600_NUM_ROUNDS (24) rounds and a state of 25 64-...
void set(MemoryAddress index, MemoryValue value) override
const MemoryValue & get(MemoryAddress index) const override
std::string format(Args... args)
ExecutionIdManager execution_id_manager
EventEmitter< RangeCheckEvent > range_check_event_emitter
void ethash_keccakf1600(uint64_t state[25]) NOEXCEPT
#define EXPECT_THROW_WITH_MESSAGE(code, expectedMessage)
TEST_F(IPATest, ChallengesAreZero)
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
NoopEventEmitter< GreaterThanEvent > greater_than_event_emitter
NoopEventEmitter< FieldGreaterThanEvent > field_gt_event_emitter
NoopEventEmitter< BitwiseEvent > bitwise_event_emitter
NoopEventEmitter< KeccakF1600Event > keccak_event_emitter