diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/generated/composer.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/generated/composer.cpp index dbbb2736140b..146e242b285b 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/generated/composer.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/generated/composer.cpp @@ -76,8 +76,7 @@ std::shared_ptr AvmComposer::compute_verification_key(C compute_proving_key(circuit_constructor); } - verification_key = - std::make_shared(proving_key->circuit_size, proving_key->num_public_inputs); + verification_key = std::make_shared(proving_key); return verification_key; } diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/generated/flavor.hpp b/barretenberg/cpp/src/barretenberg/vm/avm/generated/flavor.hpp index a88d98f21a2b..f6fcfae79853 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/generated/flavor.hpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/generated/flavor.hpp @@ -308,7 +308,25 @@ class AvmFlavor { auto get_to_be_shifted() { return AvmFlavor::get_to_be_shifted(*this); } }; - using VerificationKey = VerificationKey_, VerifierCommitmentKey>; + // Note(md): required for instantiation from the proving key - im sure there are other ways to construct this + 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) + { + // TODO(md): will likely need more information from this - circuit_size etc??? + + for (auto [polynomial, commitment] : + zip_view(proving_key->get_precomputed_polynomials(), this->get_all())) { + commitment = proving_key->commitment_key->commit(polynomial); + } + } + }; class AllValues : public AllEntities { public: diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/generated/verifier.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/generated/verifier.cpp index d452c718c440..4d726e199624 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/generated/verifier.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/generated/verifier.cpp @@ -53,9 +53,9 @@ bool AvmVerifier::verify_proof(const HonkProof& proof, using Flavor = AvmFlavor; using FF = Flavor::FF; using Commitment = Flavor::Commitment; - // using PCS = Flavor::PCS; - // using Curve = Flavor::Curve; - // using ZeroMorph = ZeroMorphVerifier_; + using PCS = Flavor::PCS; + using Curve = Flavor::Curve; + using ZeroMorph = ZeroMorphVerifier_; using VerifierCommitments = Flavor::VerifierCommitments; using CommitmentLabels = Flavor::CommitmentLabels; @@ -138,20 +138,19 @@ bool AvmVerifier::verify_proof(const HonkProof& proof, // Execute ZeroMorph rounds. See https://hackmd.io/dlf9xEwhTQyE3hiGbq4FsA?view for a complete description of the // unrolled protocol. - // NOTE: temporarily disabled - facing integration issues - // auto opening_claim = ZeroMorph::verify(circuit_size, - // commitments.get_unshifted(), - // commitments.get_to_be_shifted(), - // claimed_evaluations.get_unshifted(), - // claimed_evaluations.get_shifted(), - // multivariate_challenge, - // 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]); - // return sumcheck_verified.value() && verified; - return sumcheck_verified.value(); + + auto opening_claim = ZeroMorph::verify(circuit_size, + commitments.get_unshifted(), + commitments.get_to_be_shifted(), + claimed_evaluations.get_unshifted(), + claimed_evaluations.get_shifted(), + multivariate_challenge, + 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]); + return sumcheck_verified.value() && verified; } } // namespace bb diff --git a/bb-pilcom/bb-pil-backend/templates/composer.cpp.hbs b/bb-pilcom/bb-pil-backend/templates/composer.cpp.hbs index 0633cd7e532b..3fcfc9dd687c 100644 --- a/bb-pilcom/bb-pil-backend/templates/composer.cpp.hbs +++ b/bb-pilcom/bb-pil-backend/templates/composer.cpp.hbs @@ -76,8 +76,7 @@ std::shared_ptr {{name}}Composer::compute_verification_ compute_proving_key(circuit_constructor); } - verification_key = - std::make_shared(proving_key->circuit_size, proving_key->num_public_inputs); + verification_key = std::make_shared(proving_key); return verification_key; } diff --git a/bb-pilcom/bb-pil-backend/templates/flavor.hpp.hbs b/bb-pilcom/bb-pil-backend/templates/flavor.hpp.hbs index 8318a084de85..53a890cd9b2a 100644 --- a/bb-pilcom/bb-pil-backend/templates/flavor.hpp.hbs +++ b/bb-pilcom/bb-pil-backend/templates/flavor.hpp.hbs @@ -164,7 +164,25 @@ class {{name}}Flavor { } }; - using VerificationKey = VerificationKey_, VerifierCommitmentKey>; + // Note(md): required for instantiation from the proving key - im sure there are other ways to construct this + 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) + { + // TODO(md): will likely need more information from this - circuit_size etc??? + + for (auto [polynomial, commitment] : + zip_view(proving_key->get_precomputed_polynomials(), this->get_all())) { + commitment = proving_key->commitment_key->commit(polynomial); + } + } + }; {{!-- Used by sumcheck --}} class AllValues : public AllEntities { diff --git a/bb-pilcom/bb-pil-backend/templates/verifier.cpp.hbs b/bb-pilcom/bb-pil-backend/templates/verifier.cpp.hbs index 57910fa1adbd..694fa7335c37 100644 --- a/bb-pilcom/bb-pil-backend/templates/verifier.cpp.hbs +++ b/bb-pilcom/bb-pil-backend/templates/verifier.cpp.hbs @@ -52,9 +52,9 @@ bool {{name}}Verifier::verify_proof(const HonkProof& proof, [[maybe_unused]] con using Flavor = {{name}}Flavor; using FF = Flavor::FF; using Commitment = Flavor::Commitment; - // using PCS = Flavor::PCS; - // using Curve = Flavor::Curve; - // using ZeroMorph = ZeroMorphVerifier_; + using PCS = Flavor::PCS; + using Curve = Flavor::Curve; + using ZeroMorph = ZeroMorphVerifier_; using VerifierCommitments = Flavor::VerifierCommitments; using CommitmentLabels = Flavor::CommitmentLabels; @@ -117,20 +117,19 @@ bool {{name}}Verifier::verify_proof(const HonkProof& proof, [[maybe_unused]] con // Execute ZeroMorph rounds. See https://hackmd.io/dlf9xEwhTQyE3hiGbq4FsA?view for a complete description of the // unrolled protocol. - // NOTE: temporarily disabled - facing integration issues - // auto opening_claim = ZeroMorph::verify(circuit_size, - // commitments.get_unshifted(), - // commitments.get_to_be_shifted(), - // claimed_evaluations.get_unshifted(), - // claimed_evaluations.get_shifted(), - // multivariate_challenge, - // 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]); - // return sumcheck_verified.value() && verified; - return sumcheck_verified.value(); + + auto opening_claim = ZeroMorph::verify(circuit_size, + commitments.get_unshifted(), + commitments.get_to_be_shifted(), + claimed_evaluations.get_unshifted(), + claimed_evaluations.get_shifted(), + multivariate_challenge, + 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]); + return sumcheck_verified.value() && verified; } } // namespace bb