46 constexpr std::array<uint32_t, 8> H_INIT = { 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,
47 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 };
55 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
56 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
61 constexpr std::array<uint32_t, 8> EXPECTED = { 0xba7816bf, 0x8f01cfea, 0x414140de, 0x5dae2223,
62 0xb00361a3, 0x96177a9c, 0xb410ff61, 0xf20015ad };
66 for (
size_t i = 0; i < 8; i++) {
67 EXPECT_EQ(native_output[i], EXPECTED[i]) <<
"Native mismatch at index " << i;
72 for (
size_t i = 0; i < 8; i++) {
77 for (
size_t i = 0; i < 16; i++) {
85 for (
size_t i = 0; i < 8; i++) {
86 uint32_t circuit_val =
static_cast<uint32_t
>(
uint256_t(circuit_output[i].get_value()));
87 EXPECT_EQ(circuit_val, EXPECTED[i]) <<
"Circuit mismatch at index " << i;
90 check_circuit_and_gate_count(
builder, 6679);
91 EXPECT_EQ(
builder.get_tables_size(), 35992);
111 constexpr std::array<uint32_t, 8> H_INIT = { 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,
112 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 };
118 0x61626364, 0x62636465, 0x63646566, 0x64656667,
119 0x65666768, 0x66676869, 0x6768696a, 0x68696a6b,
120 0x696a6b6c, 0x6a6b6c6d, 0x6b6c6d6e, 0x6c6d6e6f,
121 0x6d6e6f70, 0x6e6f7071, 0x80000000, 0x00000000
126 0x00000000, 0x00000000, 0x00000000, 0x00000000,
127 0x00000000, 0x00000000, 0x00000000, 0x00000000,
128 0x00000000, 0x00000000, 0x00000000, 0x000001c0 };
131 constexpr std::array<uint32_t, 8> EXPECTED = { 0x248d6a61, 0xd20638b8, 0xe5c02693, 0x0c3e6039,
132 0xa33ce459, 0x64ff2167, 0xf6ecedd4, 0x19db06c1 };
137 for (
size_t i = 0; i < 8; i++) {
138 EXPECT_EQ(native_output[i], EXPECTED[i]) <<
"Native mismatch at index " << i;
143 for (
size_t i = 0; i < 8; i++) {
148 for (
size_t i = 0; i < 16; i++) {
156 for (
size_t i = 0; i < 16; i++) {
163 for (
size_t i = 0; i < 8; i++) {
164 uint32_t circuit_val =
static_cast<uint32_t
>(
uint256_t(circuit_output[i].get_value()));
165 EXPECT_EQ(circuit_val, EXPECTED[i]) <<
"Circuit mismatch at index " << i;
168 check_circuit_and_gate_count(
builder, 10611);
169 EXPECT_EQ(
builder.get_tables_size(), 35992);
190 for (
size_t i = 0; i < 16; i++) {
204 bool any_modification_passed =
false;
205 for (
auto& single_extended_witness : w_ext) {
207 uint32_t variable_index = single_extended_witness.get_witness_index();
210 while (
builder.get_variable(variable_index) ==
fr(random32bits)) {
214 auto backup =
builder.get_variable(variable_index);
215 builder.set_variable(variable_index,
fr(random32bits));
219 any_modification_passed =
true;
222 builder.set_variable(variable_index, backup);
226 EXPECT_FALSE(any_modification_passed);
static std::array< field_ct, 8 > sha256_block(const std::array< field_ct, 8 > &h_init, const std::array< field_ct, 16 > &input)
Apply the SHA-256 compression function to a single 512-bit message block.
std::array< uint32_t, 8 > sha256_block(const std::array< uint32_t, 8 > &h_init, const std::array< uint32_t, 16 > &input)
SHA-256 compression function (FIPS 180-4 Section 6.2.2)