diff --git a/barretenberg/cpp/src/barretenberg/crypto/blake3s/CMakeLists.txt b/barretenberg/cpp/src/barretenberg/crypto/blake3s/CMakeLists.txt index 8fad42d253f3..edca59338cc8 100644 --- a/barretenberg/cpp/src/barretenberg/crypto/blake3s/CMakeLists.txt +++ b/barretenberg/cpp/src/barretenberg/crypto/blake3s/CMakeLists.txt @@ -1 +1 @@ -barretenberg_module(crypto_blake3s) \ No newline at end of file +barretenberg_module(crypto_blake3s common) diff --git a/barretenberg/cpp/src/barretenberg/crypto/blake3s/blake3s.tcc b/barretenberg/cpp/src/barretenberg/crypto/blake3s/blake3s.tcc index 9e2a5ef61263..3444028b8c87 100644 --- a/barretenberg/cpp/src/barretenberg/crypto/blake3s/blake3s.tcc +++ b/barretenberg/cpp/src/barretenberg/crypto/blake3s/blake3s.tcc @@ -32,6 +32,7 @@ #include #include +#include "barretenberg/common/assert.hpp" #include "blake3s.hpp" namespace blake3 { @@ -240,6 +241,8 @@ constexpr void blake3_hasher_finalize(const blake3_hasher* self, uint8_t* out) std::vector blake3s(std::vector const& input) { + ASSERT(input.size() <= 1024, "Barretenberg does not support blake3s with input lengths greater than 1024 bytes."); + blake3_hasher hasher; blake3_hasher_init(&hasher); blake3_hasher_update(&hasher, static_cast(input.data()), input.size()); diff --git a/barretenberg/cpp/src/barretenberg/crypto/blake3s/blake3s.test.cpp b/barretenberg/cpp/src/barretenberg/crypto/blake3s/blake3s.test.cpp index 7f38889e02c3..be0a8d896d29 100644 --- a/barretenberg/cpp/src/barretenberg/crypto/blake3s/blake3s.test.cpp +++ b/barretenberg/cpp/src/barretenberg/crypto/blake3s/blake3s.test.cpp @@ -414,3 +414,9 @@ TEST(MiscBlake3s, TestVectors) static_assert(result_constexpr == v.output); }); } + +TEST(MiscBlake3s, TooLargeInputTest) +{ + std::vector input(1025, 0); + EXPECT_DEATH(blake3::blake3s(input), "Assertion failed"); +} diff --git a/barretenberg/cpp/src/barretenberg/crypto/blake3s_full/blake3s.cpp b/barretenberg/cpp/src/barretenberg/crypto/blake3s_full/blake3s.cpp index d02388fe5ee7..fe11e38f8702 100644 --- a/barretenberg/cpp/src/barretenberg/crypto/blake3s_full/blake3s.cpp +++ b/barretenberg/cpp/src/barretenberg/crypto/blake3s_full/blake3s.cpp @@ -865,7 +865,6 @@ std::vector blake3s(std::vector const& input, // Initialize the hasher. blake3_hasher hasher; blake3_hasher_init(&hasher); - switch (mode_id) { case HASH_MODE: blake3_hasher_init(&hasher); diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/blake3_constraint.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/blake3_constraint.cpp index b0c333f87db1..54256420d6d5 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/blake3_constraint.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/blake3_constraint.cpp @@ -27,7 +27,7 @@ template void create_blake3_constraints(Builder& builder, con // XXX: The implementation requires us to truncate the element to the nearest byte and not bit auto num_bytes = round_to_nearest_byte(num_bits); - + ASSERT(num_bytes <= 1024, "barretenberg does not support blake3 inputs with more than 1024 bytes"); field_ct element = to_field_ct(witness_index, builder); byte_array_ct element_bytes(element, num_bytes); diff --git a/barretenberg/cpp/src/barretenberg/stdlib/hash/blake3s/blake3s.cpp b/barretenberg/cpp/src/barretenberg/stdlib/hash/blake3s/blake3s.cpp index 4df21cf013af..df9a388feaec 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib/hash/blake3s/blake3s.cpp +++ b/barretenberg/cpp/src/barretenberg/stdlib/hash/blake3s/blake3s.cpp @@ -246,6 +246,8 @@ using namespace blake3_internal; template byte_array blake3s(const byte_array& input) { + ASSERT(input.size() <= 1024, "Barretenberg does not support blake3s with input lengths greater than 1024 bytes."); + if constexpr (HasPlookup) { return blake3s_plookup::blake3s(input); } diff --git a/barretenberg/cpp/src/barretenberg/stdlib/hash/blake3s/blake3s.test.cpp b/barretenberg/cpp/src/barretenberg/stdlib/hash/blake3s/blake3s.test.cpp index de327c2e2439..5bc7da4869fd 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib/hash/blake3s/blake3s.test.cpp +++ b/barretenberg/cpp/src/barretenberg/stdlib/hash/blake3s/blake3s.test.cpp @@ -48,3 +48,14 @@ TEST(stdlib_blake3s, test_double_block_plookup) bool proof_result = CircuitChecker::check(builder); EXPECT_EQ(proof_result, true); } + +TEST(stdlib_blake3s, test_too_large_input_plookup) +{ + auto builder = UltraBuilder(); + + std::vector input_v(1025, 0); + + byte_array_plookup input_arr(&builder, input_v); + EXPECT_DEATH(stdlib::blake3s(input_arr), + "Barretenberg does not support blake3s with input lengths greater than 1024 bytes."); +} diff --git a/barretenberg/noir/bb_proof_verification/src/lib.nr b/barretenberg/noir/bb_proof_verification/src/lib.nr index 4f2fe753d8b0..64f1a93f080f 100644 --- a/barretenberg/noir/bb_proof_verification/src/lib.nr +++ b/barretenberg/noir/bb_proof_verification/src/lib.nr @@ -1,6 +1,6 @@ // Constants for UltraHonk recursive verifier inputs pub global PROOF_TYPE_HONK: u32 = 1; // identifier for UltraHonk verfier -pub global RECURSIVE_PROOF_LENGTH: u32 = 456; +pub global RECURSIVE_PROOF_LENGTH: u32 = 456; pub global HONK_VERIFICATION_KEY_LENGTH_IN_FIELDS: u32 = 112; pub type UltraHonkProof = [Field; RECURSIVE_PROOF_LENGTH]; @@ -10,7 +10,8 @@ pub type UltraHonkVerificationKey = [Field; HONK_VERIFICATION_KEY_LENGTH_IN_FIEL pub global PROOF_TYPE_ROLLUP_HONK: u32 = 5; // identifier for rollup-UltraHonk verfier pub global IPA_CLAIM_SIZE: u32 = 10; pub global IPA_PROOF_LENGTH: u32 = 69; -pub global RECURSIVE_ROLLUP_HONK_PROOF_LENGTH: u32 = RECURSIVE_PROOF_LENGTH + IPA_CLAIM_SIZE + IPA_PROOF_LENGTH; +pub global RECURSIVE_ROLLUP_HONK_PROOF_LENGTH: u32 = + RECURSIVE_PROOF_LENGTH + IPA_CLAIM_SIZE + IPA_PROOF_LENGTH; pub global ROLLUP_HONK_VERIFICATION_KEY_LENGTH_IN_FIELDS: u32 = 113; pub type RollupHonkProof = [Field; RECURSIVE_ROLLUP_HONK_PROOF_LENGTH];