Skip to content

Commit

Permalink
7790: Fix for zeromorph verification issue
Browse files Browse the repository at this point in the history
  • Loading branch information
jeanmon committed Aug 21, 2024
1 parent 2d70215 commit c2a448d
Show file tree
Hide file tree
Showing 6 changed files with 72 additions and 40 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -76,8 +76,7 @@ std::shared_ptr<Flavor::VerificationKey> AvmComposer::compute_verification_key(C
compute_proving_key(circuit_constructor);
}

verification_key =
std::make_shared<Flavor::VerificationKey>(proving_key->circuit_size, proving_key->num_public_inputs);
verification_key = std::make_shared<Flavor::VerificationKey>(proving_key);

return verification_key;
}
Expand Down
20 changes: 19 additions & 1 deletion barretenberg/cpp/src/barretenberg/vm/avm/generated/flavor.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -308,7 +308,25 @@ class AvmFlavor {
auto get_to_be_shifted() { return AvmFlavor::get_to_be_shifted<DataType>(*this); }
};

using VerificationKey = VerificationKey_<PrecomputedEntities<Commitment>, VerifierCommitmentKey>;
// Note(md): required for instantiation from the proving key - im sure there are other ways to construct this
class VerificationKey : public VerificationKey_<PrecomputedEntities<Commitment>, 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<ProvingKey>& 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<FF> {
public:
Expand Down
33 changes: 16 additions & 17 deletions barretenberg/cpp/src/barretenberg/vm/avm/generated/verifier.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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_<Curve>;
using PCS = Flavor::PCS;
using Curve = Flavor::Curve;
using ZeroMorph = ZeroMorphVerifier_<Curve>;
using VerifierCommitments = Flavor::VerifierCommitments;
using CommitmentLabels = Flavor::CommitmentLabels;

Expand Down Expand Up @@ -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
3 changes: 1 addition & 2 deletions bb-pilcom/bb-pil-backend/templates/composer.cpp.hbs
Original file line number Diff line number Diff line change
Expand Up @@ -76,8 +76,7 @@ std::shared_ptr<Flavor::VerificationKey> {{name}}Composer::compute_verification_
compute_proving_key(circuit_constructor);
}

verification_key =
std::make_shared<Flavor::VerificationKey>(proving_key->circuit_size, proving_key->num_public_inputs);
verification_key = std::make_shared<Flavor::VerificationKey>(proving_key);

return verification_key;
}
Expand Down
20 changes: 19 additions & 1 deletion bb-pilcom/bb-pil-backend/templates/flavor.hpp.hbs
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,25 @@ class {{name}}Flavor {
}
};

using VerificationKey = VerificationKey_<PrecomputedEntities<Commitment>, VerifierCommitmentKey>;
// Note(md): required for instantiation from the proving key - im sure there are other ways to construct this
class VerificationKey : public VerificationKey_<PrecomputedEntities<Commitment>, 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<ProvingKey>& 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<FF> {
Expand Down
33 changes: 16 additions & 17 deletions bb-pilcom/bb-pil-backend/templates/verifier.cpp.hbs
Original file line number Diff line number Diff line change
Expand Up @@ -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_<Curve>;
using PCS = Flavor::PCS;
using Curve = Flavor::Curve;
using ZeroMorph = ZeroMorphVerifier_<Curve>;
using VerifierCommitments = Flavor::VerifierCommitments;
using CommitmentLabels = Flavor::CommitmentLabels;

Expand Down Expand Up @@ -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

0 comments on commit c2a448d

Please sign in to comment.