diff --git a/barretenberg/cpp/src/barretenberg/bb/main.cpp b/barretenberg/cpp/src/barretenberg/bb/main.cpp index 7c84088fe78a..f2dee5b90557 100644 --- a/barretenberg/cpp/src/barretenberg/bb/main.cpp +++ b/barretenberg/cpp/src/barretenberg/bb/main.cpp @@ -1012,10 +1012,14 @@ bool avm_verify(const std::filesystem::path& proof_path, const std::filesystem:: vinfo("circuit size: ", circuit_size); vinfo("num of pub inputs: ", num_public_inputs); + // Each commitment (precomputed entity) is represented as 2 Fq field elements. + // Each Fq element is split into two limbs of Fr elements. + // We therefore need 2 (circuit_size, num_public_inputs) + 4 * NUM_PRECOMPUTED_ENTITIES fr elements. ASSERT(vk_as_fields.size() == 4 * AvmFlavor::NUM_PRECOMPUTED_ENTITIES + 2); std::array precomputed_cmts; for (size_t i = 0; i < AvmFlavor::NUM_PRECOMPUTED_ENTITIES; i++) { + // Start at offset 2 and adds 4 fr elements per commitment. Therefore, index = 4 * i + 2. precomputed_cmts[i] = field_conversion::convert_from_bn254_frs(vk_span.subspan(4 * i + 2, 4)); } diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/generated/composer.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/generated/composer.cpp index 064753f28090..baaebcea2f78 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/generated/composer.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/generated/composer.cpp @@ -39,7 +39,7 @@ AvmProver AvmComposer::create_prover(CircuitConstructor& circuit_constructor) AvmVerifier AvmComposer::create_verifier(CircuitConstructor& circuit_constructor) { auto verification_key = compute_verification_key(circuit_constructor); - return AvmVerifier(verification_key); + return AvmVerifier(std::move(verification_key)); } std::shared_ptr AvmComposer::compute_proving_key(CircuitConstructor& circuit_constructor) diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/generated/flavor.hpp b/barretenberg/cpp/src/barretenberg/vm/avm/generated/flavor.hpp index 5f5916351ae6..da57edf4b8d4 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/generated/flavor.hpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/generated/flavor.hpp @@ -312,9 +312,6 @@ class AvmFlavor { class VerificationKey : public VerificationKey_, VerifierCommitmentKey> { public: VerificationKey() = default; - VerificationKey(const size_t circuit_size, const size_t num_public_inputs) - : VerificationKey_(circuit_size, num_public_inputs) - {} VerificationKey(const std::shared_ptr& proving_key) : VerificationKey_(proving_key->circuit_size, proving_key->num_public_inputs) diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/generated/verifier.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/generated/verifier.cpp index ae2991214d5b..cde64c811e42 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/generated/verifier.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/generated/verifier.cpp @@ -10,8 +10,7 @@ namespace bb { AvmVerifier::AvmVerifier(std::shared_ptr verifier_key) - : key(verifier_key) - , pcs_verification_key(std::make_shared()) + : key(std::move(verifier_key)) {} AvmVerifier::AvmVerifier(AvmVerifier&& other) noexcept @@ -22,7 +21,7 @@ AvmVerifier::AvmVerifier(AvmVerifier&& other) noexcept AvmVerifier& AvmVerifier::operator=(AvmVerifier&& other) noexcept { key = other.key; - pcs_verification_key = (std::move(other.pcs_verification_key)); + pcs_verification_key = other.pcs_verification_key; commitments.clear(); return *this; } @@ -146,11 +145,11 @@ bool AvmVerifier::verify_proof(const HonkProof& proof, claimed_evaluations.get_unshifted(), claimed_evaluations.get_shifted(), multivariate_challenge, - pcs_verification_key->get_g1_identity(), + pcs_verification_key.get_g1_identity(), transcript); auto pairing_points = PCS::reduce_verify(opening_claim, transcript); - auto verified = pcs_verification_key->pairing_check(pairing_points[0], pairing_points[1]); + auto verified = pcs_verification_key.pairing_check(pairing_points[0], pairing_points[1]); return sumcheck_verified.value() && verified; } diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/generated/verifier.hpp b/barretenberg/cpp/src/barretenberg/vm/avm/generated/verifier.hpp index 723173562170..09569deff312 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/generated/verifier.hpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/generated/verifier.hpp @@ -27,7 +27,7 @@ class AvmVerifier { std::shared_ptr key; std::map commitments; - std::shared_ptr pcs_verification_key; + VerifierCommitmentKey pcs_verification_key; std::shared_ptr transcript; }; diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/trace/execution.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/trace/execution.cpp index 1606df51a8d8..36e0aba65a3e 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/trace/execution.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/trace/execution.cpp @@ -325,13 +325,7 @@ VmPublicInputs Execution::convert_public_inputs(std::vector const& public_in bool Execution::verify(AvmFlavor::VerificationKey vk, HonkProof const& proof) { - auto verification_key = std::make_shared(vk); - AvmVerifier verifier(verification_key); - - // todo: not needed for now until we verify the PCS/pairing of the proof - // auto pcs_verification_key = std::make_unique(verification_key->circuit_size, - // crs_factory_); - // output_state.pcs_verification_key = std::move(pcs_verification_key); + AvmVerifier verifier(std::make_shared(vk)); // Proof structure: public_inputs | calldata_size | calldata | returndata_size | returndata | raw proof std::vector public_inputs_vec; diff --git a/bb-pilcom/bb-pil-backend/templates/composer.cpp.hbs b/bb-pilcom/bb-pil-backend/templates/composer.cpp.hbs index 3affc5847f2d..f4776a7121ed 100644 --- a/bb-pilcom/bb-pil-backend/templates/composer.cpp.hbs +++ b/bb-pilcom/bb-pil-backend/templates/composer.cpp.hbs @@ -39,7 +39,7 @@ void {{name}}Composer::compute_witness(CircuitConstructor& circuit) {{name}}Verifier {{name}}Composer::create_verifier(CircuitConstructor& circuit_constructor) { auto verification_key = compute_verification_key(circuit_constructor); - return {{name}}Verifier(verification_key); + return {{name}}Verifier(std::move(verification_key)); } std::shared_ptr {{name}}Composer::compute_proving_key(CircuitConstructor& circuit_constructor) diff --git a/bb-pilcom/bb-pil-backend/templates/flavor.hpp.hbs b/bb-pilcom/bb-pil-backend/templates/flavor.hpp.hbs index 0afc5ef5e356..416257d5dcd5 100644 --- a/bb-pilcom/bb-pil-backend/templates/flavor.hpp.hbs +++ b/bb-pilcom/bb-pil-backend/templates/flavor.hpp.hbs @@ -168,9 +168,6 @@ class {{name}}Flavor { class VerificationKey : public VerificationKey_, VerifierCommitmentKey> { public: VerificationKey() = default; - VerificationKey(const size_t circuit_size, const size_t num_public_inputs) - : VerificationKey_(circuit_size, num_public_inputs) - {} VerificationKey(const std::shared_ptr& proving_key) : VerificationKey_(proving_key->circuit_size, proving_key->num_public_inputs) diff --git a/bb-pilcom/bb-pil-backend/templates/verifier.cpp.hbs b/bb-pilcom/bb-pil-backend/templates/verifier.cpp.hbs index 1b577df64683..9fa328e47b2f 100644 --- a/bb-pilcom/bb-pil-backend/templates/verifier.cpp.hbs +++ b/bb-pilcom/bb-pil-backend/templates/verifier.cpp.hbs @@ -10,8 +10,7 @@ namespace bb { {{name}}Verifier::{{name}}Verifier(std::shared_ptr verifier_key) - : key(verifier_key) - , pcs_verification_key(std::make_shared()) + : key(std::move(verifier_key)) {} {{name}}Verifier::{{name}}Verifier({{name}}Verifier&& other) noexcept @@ -22,7 +21,7 @@ namespace bb { {{name}}Verifier& {{name}}Verifier::operator=({{name}}Verifier&& other) noexcept { key = other.key; - pcs_verification_key = (std::move(other.pcs_verification_key)); + pcs_verification_key = other.pcs_verification_key; commitments.clear(); return *this; } @@ -125,11 +124,11 @@ bool {{name}}Verifier::verify_proof(const HonkProof& proof, [[maybe_unused]] con claimed_evaluations.get_unshifted(), claimed_evaluations.get_shifted(), multivariate_challenge, - pcs_verification_key->get_g1_identity(), + pcs_verification_key.get_g1_identity(), transcript); auto pairing_points = PCS::reduce_verify(opening_claim, transcript); - auto verified = pcs_verification_key->pairing_check(pairing_points[0], pairing_points[1]); + auto verified = pcs_verification_key.pairing_check(pairing_points[0], pairing_points[1]); return sumcheck_verified.value() && verified; } diff --git a/bb-pilcom/bb-pil-backend/templates/verifier.hpp.hbs b/bb-pilcom/bb-pil-backend/templates/verifier.hpp.hbs index b20fc9ecf2ef..05514fbb9e4f 100644 --- a/bb-pilcom/bb-pil-backend/templates/verifier.hpp.hbs +++ b/bb-pilcom/bb-pil-backend/templates/verifier.hpp.hbs @@ -27,7 +27,7 @@ class {{name}}Verifier { std::shared_ptr key; std::map commitments; - std::shared_ptr pcs_verification_key; + VerifierCommitmentKey pcs_verification_key; std::shared_ptr transcript; };