Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
sha256.test.cpp
Go to the documentation of this file.
2
3#include <gmock/gmock.h>
4#include <gtest/gtest.h>
5
16
17namespace bb::avm2::simulation {
18namespace {
19
20using ::testing::NiceMock;
21using ::testing::Return;
22using ::testing::ReturnRef;
23using ::testing::StrictMock;
24
25using simulation::MockExecutionIdManager;
26using simulation::MockRangeCheck;
27
28TEST(Sha256CompressionSimulationTest, Sha256Compression)
29{
30 MemoryStore mem;
31 StrictMock<MockExecutionIdManager> execution_id_manager;
32 EXPECT_CALL(execution_id_manager, get_execution_id()).WillRepeatedly(Return(1));
33 PureGreaterThan gt;
34 PureBitwise bitwise;
35 NiceMock<MockRangeCheck> range_check;
36
37 EventEmitter<Sha256CompressionEvent> sha256_event_emitter;
38 Sha256 sha256(execution_id_manager, bitwise, gt, range_check, sha256_event_emitter);
39
40 // TODO: actually can choose to mock, not even use a memory, check the events, etc.
41 std::array<uint32_t, 8> state = { 0, 1, 2, 3, 4, 5, 6, 7 };
42 MemoryAddress state_addr = 0;
43 for (uint32_t i = 0; i < 8; ++i) {
44 mem.set(state_addr + i, MemoryValue::from<uint32_t>(state[i]));
45 }
46
47 std::array<uint32_t, 16> input = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };
48 MemoryAddress input_addr = 8;
49 for (uint32_t i = 0; i < 16; ++i) {
50 mem.set(input_addr + i, MemoryValue::from<uint32_t>(input[i]));
51 }
53
54 sha256.compression(mem, state_addr, input_addr, dst_addr);
55
56 auto result = sha256_block(state, input);
57
58 std::array<uint32_t, 8> result_from_memory;
59 for (uint32_t i = 0; i < 8; ++i) {
60 auto c = mem.get(dst_addr + i);
61 result_from_memory[i] = c.as<uint32_t>();
62 }
63 EXPECT_EQ(result_from_memory, result);
64}
65
66} // namespace
67} // namespace bb::avm2::simulation
RangeCheck range_check
void set(MemoryAddress index, MemoryValue value) override
const MemoryValue & get(MemoryAddress index) const override
void compression(MemoryInterface &memory, MemoryAddress state_addr, MemoryAddress input_addr, MemoryAddress output_addr) override
ExecutionIdManager execution_id_manager
MemoryStore mem
uint32_t dst_addr
GreaterThan gt
AVM range check gadget for witness generation.
std::array< uint32_t, 8 > sha256_block(const std::array< uint32_t, 8 > &h_init, const std::array< uint32_t, 16 > &input)
uint32_t MemoryAddress
TEST(BoomerangMegaCircuitBuilder, BasicCircuit)
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13
PureSha256 sha256
Bitwise bitwise
VectorField result