Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions barretenberg/cpp/src/barretenberg/flavor/flavor.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -448,14 +448,14 @@ class UltraKeccakZKFlavor;
class MegaFlavor;
class MegaZKFlavor;
class TranslatorFlavor;
class ECCVMRecursiveFlavor;
class TranslatorRecursiveFlavor;

template <typename BuilderType> class UltraRecursiveFlavor_;
template <typename BuilderType> class UltraZKRecursiveFlavor_;
template <typename BuilderType> class UltraRollupRecursiveFlavor_;
template <typename BuilderType> class MegaRecursiveFlavor_;
template <typename BuilderType> class MegaZKRecursiveFlavor_;
template <typename BuilderType> class TranslatorRecursiveFlavor_;
template <typename BuilderType> class ECCVMRecursiveFlavor_;
template <typename BuilderType> class AvmRecursiveFlavor_;
namespace avm2 {

Expand Down
11 changes: 5 additions & 6 deletions barretenberg/cpp/src/barretenberg/flavor/flavor_concepts.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ concept HasDataBus = IsMegaFlavor<T>;
// hence requiring an adjustment to the round univariates via the RowDisablingPolynomial.
// This is not the case for Translator, where randomness resides in different parts of the trace and the locations will
// be reflected via Translator relations.
template <typename T> concept UseRowDisablingPolynomial = !IsAnyOf<T,TranslatorFlavor, TranslatorRecursiveFlavor_<UltraCircuitBuilder>, TranslatorRecursiveFlavor_<MegaCircuitBuilder>>;
template <typename T> concept UseRowDisablingPolynomial = !IsAnyOf<T,TranslatorFlavor, TranslatorRecursiveFlavor>;

template <typename T>
concept HasIPAAccumulator = IsAnyOf<T, UltraRollupFlavor, UltraRollupRecursiveFlavor_<UltraCircuitBuilder>>;
Expand All @@ -52,17 +52,16 @@ concept IsRecursiveFlavor = IsAnyOf<T, UltraRecursiveFlavor_<UltraCircuitBuilder
MegaRecursiveFlavor_<MegaCircuitBuilder>,
MegaZKRecursiveFlavor_<MegaCircuitBuilder>,
MegaZKRecursiveFlavor_<UltraCircuitBuilder>,
TranslatorRecursiveFlavor_<UltraCircuitBuilder>,
TranslatorRecursiveFlavor_<MegaCircuitBuilder>,
ECCVMRecursiveFlavor_<UltraCircuitBuilder>,
TranslatorRecursiveFlavor,
ECCVMRecursiveFlavor,
AvmRecursiveFlavor_<UltraCircuitBuilder>,
AvmRecursiveFlavor_<MegaCircuitBuilder>,
avm2::AvmRecursiveFlavor_<UltraCircuitBuilder>,
avm2::AvmRecursiveFlavor_<MegaCircuitBuilder>>;

// These concepts are relevant for Sumcheck, where the logic is different for BN254 and Grumpkin Flavors
template <typename T> concept IsGrumpkinFlavor = IsAnyOf<T, ECCVMFlavor, ECCVMRecursiveFlavor_<UltraCircuitBuilder>>;
template <typename T> concept IsECCVMRecursiveFlavor = IsAnyOf<T, ECCVMRecursiveFlavor_<UltraCircuitBuilder>>;
template <typename T> concept IsGrumpkinFlavor = IsAnyOf<T, ECCVMFlavor, ECCVMRecursiveFlavor>;
template <typename T> concept IsECCVMRecursiveFlavor = IsAnyOf<T, ECCVMRecursiveFlavor>;

#ifdef STARKNET_GARAGA_FLAVORS
template <typename T> concept IsFoldingFlavor = IsAnyOf<T, UltraFlavor,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,5 @@

namespace bb {
template class ECCVMBoolsRelationImpl<stdlib::bigfield<UltraCircuitBuilder, bb::Bn254FqParams>>;
template class ECCVMBoolsRelationImpl<stdlib::bigfield<MegaCircuitBuilder, bb::Bn254FqParams>>;
DEFINE_SUMCHECK_VERIFIER_RELATION_CLASS(ECCVMBoolsRelationImpl, ECCVMRecursiveFlavor_<UltraCircuitBuilder>);
DEFINE_SUMCHECK_VERIFIER_RELATION_CLASS(ECCVMBoolsRelationImpl, ECCVMRecursiveFlavor_<MegaCircuitBuilder>);
DEFINE_SUMCHECK_VERIFIER_RELATION_CLASS(ECCVMBoolsRelationImpl, ECCVMRecursiveFlavor);
} // namespace bb
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,5 @@

namespace bb {
template class ECCVMLookupRelationImpl<stdlib::bigfield<UltraCircuitBuilder, bb::Bn254FqParams>>;
template class ECCVMLookupRelationImpl<stdlib::bigfield<MegaCircuitBuilder, bb::Bn254FqParams>>;
DEFINE_SUMCHECK_VERIFIER_RELATION_CLASS(ECCVMLookupRelationImpl, ECCVMRecursiveFlavor_<UltraCircuitBuilder>);
DEFINE_SUMCHECK_VERIFIER_RELATION_CLASS(ECCVMLookupRelationImpl, ECCVMRecursiveFlavor_<MegaCircuitBuilder>);
DEFINE_SUMCHECK_VERIFIER_RELATION_CLASS(ECCVMLookupRelationImpl, ECCVMRecursiveFlavor);
} // namespace bb
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,5 @@

namespace bb {
template class ECCVMMSMRelationImpl<stdlib::bigfield<UltraCircuitBuilder, bb::Bn254FqParams>>;
template class ECCVMMSMRelationImpl<stdlib::bigfield<MegaCircuitBuilder, bb::Bn254FqParams>>;
DEFINE_SUMCHECK_VERIFIER_RELATION_CLASS(ECCVMMSMRelationImpl, ECCVMRecursiveFlavor_<UltraCircuitBuilder>);
DEFINE_SUMCHECK_VERIFIER_RELATION_CLASS(ECCVMMSMRelationImpl, ECCVMRecursiveFlavor_<MegaCircuitBuilder>);
DEFINE_SUMCHECK_VERIFIER_RELATION_CLASS(ECCVMMSMRelationImpl, ECCVMRecursiveFlavor);
} // namespace bb
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,5 @@

namespace bb {
template class ECCVMPointTableRelationImpl<stdlib::bigfield<UltraCircuitBuilder, bb::Bn254FqParams>>;
template class ECCVMPointTableRelationImpl<stdlib::bigfield<MegaCircuitBuilder, bb::Bn254FqParams>>;
DEFINE_SUMCHECK_VERIFIER_RELATION_CLASS(ECCVMPointTableRelationImpl, ECCVMRecursiveFlavor_<UltraCircuitBuilder>);
DEFINE_SUMCHECK_VERIFIER_RELATION_CLASS(ECCVMPointTableRelationImpl, ECCVMRecursiveFlavor_<MegaCircuitBuilder>);
DEFINE_SUMCHECK_VERIFIER_RELATION_CLASS(ECCVMPointTableRelationImpl, ECCVMRecursiveFlavor);
} // namespace bb
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,9 @@ class EccRelationsConsistency : public testing::Test {
template <template <typename> class Relation> static void validate_relation_execution()
{
auto builder = UltraCircuitBuilder();
using RecursiveFlavor = ECCVMRecursiveFlavor_<UltraCircuitBuilder>;
using RecursiveRelation = Relation<typename RecursiveFlavor::FF>;
const RelationParameters<typename RecursiveFlavor::FF> parameters;
using RecursiveFlavor = ECCVMRecursiveFlavor;
using RecursiveRelation = Relation<RecursiveFlavor::FF>;
const RelationParameters<RecursiveFlavor::FF> parameters;
RecursiveFlavor::AllValues input_elements;
for (auto& element : input_elements.get_all()) {
element = 4;
Expand Down Expand Up @@ -57,4 +57,4 @@ TEST_F(EccRelationsConsistency, RecursiveToNativeConsistency)
validate_relation_execution<ECCVMWnafRelation>();
validate_relation_execution<ECCVMBoolsRelation>();
}
} // namespace bb
} // namespace bb
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,6 @@

namespace bb {
template class ECCVMSetRelationImpl<stdlib::bigfield<UltraCircuitBuilder, bb::Bn254FqParams>>;
template class ECCVMSetRelationImpl<stdlib::bigfield<MegaCircuitBuilder, bb::Bn254FqParams>>;
DEFINE_SUMCHECK_VERIFIER_RELATION_CLASS(ECCVMSetRelationImpl, ECCVMRecursiveFlavor_<UltraCircuitBuilder>);
DEFINE_SUMCHECK_VERIFIER_RELATION_CLASS(ECCVMSetRelationImpl, ECCVMRecursiveFlavor_<MegaCircuitBuilder>);
DEFINE_SUMCHECK_VERIFIER_PERMUTATION_CLASS(ECCVMSetRelationImpl, ECCVMRecursiveFlavor_<UltraCircuitBuilder>);
DEFINE_SUMCHECK_VERIFIER_PERMUTATION_CLASS(ECCVMSetRelationImpl, ECCVMRecursiveFlavor_<MegaCircuitBuilder>);

DEFINE_SUMCHECK_VERIFIER_RELATION_CLASS(ECCVMSetRelationImpl, ECCVMRecursiveFlavor);
DEFINE_SUMCHECK_VERIFIER_PERMUTATION_CLASS(ECCVMSetRelationImpl, ECCVMRecursiveFlavor);
} // namespace bb
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,5 @@

namespace bb {
template class ECCVMTranscriptRelationImpl<stdlib::bigfield<UltraCircuitBuilder, bb::Bn254FqParams>>;
template class ECCVMTranscriptRelationImpl<stdlib::bigfield<MegaCircuitBuilder, bb::Bn254FqParams>>;
DEFINE_SUMCHECK_VERIFIER_RELATION_CLASS(ECCVMTranscriptRelationImpl, ECCVMRecursiveFlavor_<UltraCircuitBuilder>);
DEFINE_SUMCHECK_VERIFIER_RELATION_CLASS(ECCVMTranscriptRelationImpl, ECCVMRecursiveFlavor_<MegaCircuitBuilder>);
DEFINE_SUMCHECK_VERIFIER_RELATION_CLASS(ECCVMTranscriptRelationImpl, ECCVMRecursiveFlavor);
} // namespace bb
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,5 @@

namespace bb {
template class ECCVMWnafRelationImpl<stdlib::bigfield<UltraCircuitBuilder, bb::Bn254FqParams>>;
template class ECCVMWnafRelationImpl<stdlib::bigfield<MegaCircuitBuilder, bb::Bn254FqParams>>;
DEFINE_SUMCHECK_VERIFIER_RELATION_CLASS(ECCVMWnafRelationImpl, ECCVMRecursiveFlavor_<UltraCircuitBuilder>);
DEFINE_SUMCHECK_VERIFIER_RELATION_CLASS(ECCVMWnafRelationImpl, ECCVMRecursiveFlavor_<MegaCircuitBuilder>);
DEFINE_SUMCHECK_VERIFIER_RELATION_CLASS(ECCVMWnafRelationImpl, ECCVMRecursiveFlavor);
} // namespace bb
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,9 @@

namespace bb {

template <typename BuilderType> class ECCVMRecursiveFlavor_ {
class ECCVMRecursiveFlavor {
public:
using CircuitBuilder = BuilderType; // determines the arithmetisation of recursive verifier
using CircuitBuilder = UltraCircuitBuilder; // determines the arithmetisation of recursive verifier
using Curve = stdlib::grumpkin<CircuitBuilder>;
using Commitment = Curve::AffineElement;
using GroupElement = Curve::Element;
Expand Down Expand Up @@ -95,7 +95,8 @@ template <typename BuilderType> class ECCVMRecursiveFlavor_ {
* resolve that, and split out separate PrecomputedPolynomials/Commitments data for clarity but also for
* portability of our circuits.
*/
class VerificationKey : public StdlibVerificationKey_<BuilderType, ECCVMFlavor::PrecomputedEntities<Commitment>> {
class VerificationKey
: public StdlibVerificationKey_<CircuitBuilder, ECCVMFlavor::PrecomputedEntities<Commitment>> {
public:
VerifierCommitmentKey pcs_verification_key;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,9 @@
#include "barretenberg/transcript/transcript.hpp"

namespace bb {

template <typename Flavor>
ECCVMRecursiveVerifier_<Flavor>::ECCVMRecursiveVerifier_(
Builder* builder,
const std::shared_ptr<NativeVerificationKey>& native_verifier_key,
const std::shared_ptr<Transcript>& transcript)
ECCVMRecursiveVerifier::ECCVMRecursiveVerifier(Builder* builder,
const std::shared_ptr<NativeVerificationKey>& native_verifier_key,
const std::shared_ptr<Transcript>& transcript)
: key(std::make_shared<VerificationKey>(builder, native_verifier_key))
, builder(builder)
, transcript(transcript)
Expand All @@ -29,9 +26,8 @@ ECCVMRecursiveVerifier_<Flavor>::ECCVMRecursiveVerifier_(
* @tparam Flavor
* @param proof Native ECCVM proof
*/
template <typename Flavor>
typename ECCVMRecursiveVerifier_<Flavor>::IpaClaimAndProof ECCVMRecursiveVerifier_<Flavor>::verify_proof(
const ECCVMProof& proof)

ECCVMRecursiveVerifier::IpaClaimAndProof ECCVMRecursiveVerifier::verify_proof(const ECCVMProof& proof)
{
StdlibProof stdlib_proof(*builder, proof);
return verify_proof(stdlib_proof);
Expand All @@ -43,11 +39,9 @@ typename ECCVMRecursiveVerifier_<Flavor>::IpaClaimAndProof ECCVMRecursiveVerifie
* @tparam Flavor
* @param proof Stdlib ECCVM proof
*/
template <typename Flavor>
typename ECCVMRecursiveVerifier_<Flavor>::IpaClaimAndProof ECCVMRecursiveVerifier_<Flavor>::verify_proof(
const StdlibProof& proof)
ECCVMRecursiveVerifier::IpaClaimAndProof ECCVMRecursiveVerifier::verify_proof(const StdlibProof& proof)
{
using Curve = typename Flavor::Curve;
using Curve = Flavor::Curve;
using Shplemini = ShpleminiVerifier_<Curve>;
using Shplonk = ShplonkVerifier_<Curve>;
using OpeningClaim = OpeningClaim<Curve>;
Expand Down Expand Up @@ -160,12 +154,10 @@ typename ECCVMRecursiveVerifier_<Flavor>::IpaClaimAndProof ECCVMRecursiveVerifie
* @param translation_commitments Commitments to `op`, `Px`, `Py`, `z1`, and `z2`
* @return Populate `opening_claims`.
*/
template <typename Flavor>
void ECCVMRecursiveVerifier_<Flavor>::compute_translation_opening_claims(
const std::vector<Commitment>& translation_commitments)
void ECCVMRecursiveVerifier::compute_translation_opening_claims(const std::vector<Commitment>& translation_commitments)
{
// Used to capture the batched evaluation of unmasked `translation_polynomials` while preserving ZK
using SmallIPA = SmallSubgroupIPAVerifier<typename Flavor::Curve>;
using SmallIPA = SmallSubgroupIPAVerifier<Flavor::Curve>;

// Initialize SmallSubgroupIPA structures
SmallSubgroupIPACommitments<Commitment> small_ipa_commitments;
Expand Down Expand Up @@ -240,6 +232,4 @@ void ECCVMRecursiveVerifier_<Flavor>::compute_translation_opening_claims(
// NUM_DISABLED_ROWS_IN_SUMCHECK}
shift_translation_masking_term_eval(evaluation_challenge_x, translation_masking_term_eval);
};

template class ECCVMRecursiveVerifier_<ECCVMRecursiveFlavor_<UltraCircuitBuilder>>;
} // namespace bb
Original file line number Diff line number Diff line change
Expand Up @@ -10,19 +10,20 @@
#include "barretenberg/stdlib/proof/proof.hpp"

namespace bb {
template <typename Flavor> class ECCVMRecursiveVerifier_ {
using FF = typename Flavor::FF;
using BF = typename Flavor::BF;
using Curve = typename Flavor::Curve;
using Commitment = typename Flavor::Commitment;
using CommitmentLabels = typename Flavor::CommitmentLabels;
using VerificationKey = typename Flavor::VerificationKey;
using NativeVerificationKey = typename Flavor::NativeVerificationKey;
using VerifierCommitmentKey = typename Flavor::VerifierCommitmentKey;
using Builder = typename Flavor::CircuitBuilder;
using PCS = typename Flavor::PCS;
class ECCVMRecursiveVerifier {
using Flavor = ECCVMRecursiveFlavor;
using FF = Flavor::FF;
using BF = Flavor::BF;
using Curve = Flavor::Curve;
using Commitment = Flavor::Commitment;
using CommitmentLabels = Flavor::CommitmentLabels;
using VerificationKey = Flavor::VerificationKey;
using NativeVerificationKey = Flavor::NativeVerificationKey;
using VerifierCommitmentKey = Flavor::VerifierCommitmentKey;
using Builder = Flavor::CircuitBuilder;
using PCS = Flavor::PCS;
using Transcript = bb::BaseTranscript<bb::stdlib::recursion::honk::StdlibTranscriptParams<Builder>>;
using VerifierCommitments = typename Flavor::VerifierCommitments;
using VerifierCommitments = Flavor::VerifierCommitments;
using StdlibPreIpaProof = bb::stdlib::Proof<Builder>;
using StdlibIpaProof = bb::stdlib::Proof<Builder>;
using IpaClaimAndProof = std::pair<OpeningClaim<Curve>, StdlibIpaProof>;
Expand All @@ -38,9 +39,9 @@ template <typename Flavor> class ECCVMRecursiveVerifier_ {
{}
};

explicit ECCVMRecursiveVerifier_(Builder* builder,
const std::shared_ptr<NativeVerificationKey>& native_verifier_key,
const std::shared_ptr<Transcript>& transcript);
explicit ECCVMRecursiveVerifier(Builder* builder,
const std::shared_ptr<NativeVerificationKey>& native_verifier_key,
const std::shared_ptr<Transcript>& transcript);

[[nodiscard("IPA claim should be accumulated")]] IpaClaimAndProof verify_proof(const ECCVMProof& proof);
[[nodiscard("IPA claim should be accumulated")]] IpaClaimAndProof verify_proof(const StdlibProof& proof);
Expand Down
Loading
Loading