diff --git a/supernova/src/circuits/nova/mod.rs b/supernova/src/circuits/nova/mod.rs index 6f51b419..e5bece43 100644 --- a/supernova/src/circuits/nova/mod.rs +++ b/supernova/src/circuits/nova/mod.rs @@ -4,4 +4,4 @@ pub mod sequential; pub mod public_params; pub use super::{NovaConstraintSynthesizer, StepCircuit}; -pub use crate::multifold::Error; +pub use crate::folding::nova::cyclefold::Error; diff --git a/supernova/src/circuits/nova/pcd/augmented.rs b/supernova/src/circuits/nova/pcd/augmented.rs index efa35fe6..b9ea9729 100644 --- a/supernova/src/circuits/nova/pcd/augmented.rs +++ b/supernova/src/circuits/nova/pcd/augmented.rs @@ -22,14 +22,14 @@ use ark_std::Zero; use crate::{ circuits::{NovaConstraintSynthesizer, StepCircuit}, commitment::CommitmentScheme, - gadgets::multifold::{ - multifold, multifold_with_relaxed, primary, secondary, NonNativeAffineVar, - }, - multifold::{ + folding::nova::cyclefold::{ self, nimfs::{NIMFSProof, R1CSInstance, R1CSShape, RelaxedR1CSInstance}, secondary::Circuit as SecondaryCircuit, }, + gadgets::cyclefold::{ + multifold, multifold_with_relaxed, primary, secondary, NonNativeAffineVar, + }, }; pub const SQUEEZE_NATIVE_ELEMENTS_NUM: usize = 1; @@ -298,7 +298,7 @@ where NovaAugmentedCircuitInput::Base { vk, i, z_i } => { let shape = R1CSShape::::new(0, 0, AUGMENTED_CIRCUIT_NUM_IO, &[], &[], &[]).unwrap(); - let shape_secondary = multifold::secondary::setup_shape::()?; + let shape_secondary = cyclefold::secondary::setup_shape::()?; let U = RelaxedR1CSInstance::::new(&shape); let U_secondary = RelaxedR1CSInstance::::new(&shape_secondary); diff --git a/supernova/src/circuits/nova/pcd/compression/conversion.rs b/supernova/src/circuits/nova/pcd/compression/conversion.rs index 407478bf..0baee1c1 100644 --- a/supernova/src/circuits/nova/pcd/compression/conversion.rs +++ b/supernova/src/circuits/nova/pcd/compression/conversion.rs @@ -8,7 +8,7 @@ use ark_spartan::{ use super::PolyVectorCommitment; use crate::{ - multifold::nimfs::{R1CSShape, RelaxedR1CSInstance, RelaxedR1CSWitness}, + folding::nova::cyclefold::nimfs::{R1CSShape, RelaxedR1CSInstance, RelaxedR1CSWitness}, r1cs::SparseMatrix, }; diff --git a/supernova/src/circuits/nova/pcd/compression/error.rs b/supernova/src/circuits/nova/pcd/compression/error.rs index a330286c..247fd189 100644 --- a/supernova/src/circuits/nova/pcd/compression/error.rs +++ b/supernova/src/circuits/nova/pcd/compression/error.rs @@ -2,7 +2,7 @@ use ark_relations::r1cs::SynthesisError; use ark_spartan::errors::ProofVerifyError; use super::conversion::ConversionError; -pub use crate::multifold::Error as NovaError; +pub use crate::folding::nova::cyclefold::Error as NovaError; #[derive(Debug)] pub enum ProofError { diff --git a/supernova/src/circuits/nova/pcd/compression/mod.rs b/supernova/src/circuits/nova/pcd/compression/mod.rs index a5c6af7a..9571517c 100644 --- a/supernova/src/circuits/nova/pcd/compression/mod.rs +++ b/supernova/src/circuits/nova/pcd/compression/mod.rs @@ -20,7 +20,9 @@ use super::PublicParams; use crate::{ absorb::CryptographicSpongeExt, commitment::CommitmentScheme, - multifold::nimfs::{NIMFSProof, R1CSInstance, RelaxedR1CSInstance, RelaxedR1CSWitness}, + folding::nova::cyclefold::nimfs::{ + NIMFSProof, R1CSInstance, RelaxedR1CSInstance, RelaxedR1CSWitness, + }, nova::pcd::{augmented::SQUEEZE_NATIVE_ELEMENTS_NUM, PCDNode}, StepCircuit, LOG_TARGET, }; diff --git a/supernova/src/circuits/nova/pcd/mod.rs b/supernova/src/circuits/nova/pcd/mod.rs index 069c5e40..e90ecb7d 100644 --- a/supernova/src/circuits/nova/pcd/mod.rs +++ b/supernova/src/circuits/nova/pcd/mod.rs @@ -14,7 +14,7 @@ use super::{public_params, NovaConstraintSynthesizer, StepCircuit}; use crate::{ absorb::CryptographicSpongeExt, commitment::CommitmentScheme, - multifold::{ + folding::nova::cyclefold::{ self, nimfs::{ NIMFSProof, R1CSInstance, R1CSShape, R1CSWitness, RelaxedR1CSInstance, @@ -56,7 +56,7 @@ where step_circuit: &SC, aux1: &C1::SetupAux, aux2: &C2::SetupAux, - ) -> Result, multifold::Error> { + ) -> Result, cyclefold::Error> { let _span = tracing::debug_span!(target: LOG_TARGET, "setup").entered(); let i = G1::ScalarField::ZERO; @@ -76,7 +76,7 @@ where cs.finalize(); let shape = R1CSShape::from(cs); - let shape_secondary = multifold::secondary::setup_shape::()?; + let shape_secondary = cyclefold::secondary::setup_shape::()?; let pp = C1::setup(shape.num_vars.max(shape.num_constraints), aux1); let pp_secondary = C2::setup( @@ -169,7 +169,7 @@ where step_circuit: &SC, i: usize, z_i: &[G1::ScalarField], - ) -> Result { + ) -> Result { Self::prove_step_with_commit_fn(params, step_circuit, i, z_i, |pp, w| w.commit::(pp)) } @@ -181,7 +181,7 @@ where i: usize, z_i: &[G1::ScalarField], mut commit_fn: impl FnMut(&C1::PP, &R1CSWitness) -> C1::Commitment, - ) -> Result { + ) -> Result { let _span = tracing::debug_span!( target: LOG_TARGET, "prove_step", @@ -249,7 +249,7 @@ where step_circuit: &SC, left_node: &Self, right_node: &Self, - ) -> Result { + ) -> Result { Self::prove_from_with_commit_fn(params, step_circuit, left_node, right_node, |pp, w| { w.commit::(pp) }) @@ -261,7 +261,7 @@ where left_node: &Self, right_node: &Self, mut commit_fn: impl FnMut(&C1::PP, &R1CSWitness) -> C1::Commitment, - ) -> Result { + ) -> Result { let _span = tracing::debug_span!( target: LOG_TARGET, "prove_from", @@ -378,7 +378,7 @@ where pub fn verify( &self, params: &PublicParams, - ) -> Result<(), multifold::Error> { + ) -> Result<(), cyclefold::Error> { let _span = tracing::debug_span!( target: LOG_TARGET, "verify", @@ -387,8 +387,8 @@ where ) .entered(); - const NOT_SATISFIED_ERROR: multifold::Error = - multifold::Error::R1CS(crate::r1cs::Error::NotSatisfied); + const NOT_SATISFIED_ERROR: cyclefold::Error = + cyclefold::Error::R1CS(crate::r1cs::Error::NotSatisfied); let PCDNode { i, j, @@ -456,7 +456,7 @@ mod tests { .unwrap() } - fn ivc_base_step_with_cycle() -> Result<(), multifold::Error> + fn ivc_base_step_with_cycle() -> Result<(), cyclefold::Error> where G1: SWCurveConfig, G2: SWCurveConfig, @@ -499,7 +499,7 @@ mod tests { .unwrap() } - fn ivc_multiple_steps_with_cycle() -> Result<(), multifold::Error> + fn ivc_multiple_steps_with_cycle() -> Result<(), cyclefold::Error> where G1: SWCurveConfig, G2: SWCurveConfig, diff --git a/supernova/src/circuits/nova/public_params.rs b/supernova/src/circuits/nova/public_params.rs index 537939e7..b731582d 100644 --- a/supernova/src/circuits/nova/public_params.rs +++ b/supernova/src/circuits/nova/public_params.rs @@ -8,7 +8,7 @@ use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, CanonicalSerialize use super::{Error, StepCircuit}; use crate::{ commitment::CommitmentScheme, - multifold::nimfs::{R1CSShape, SQUEEZE_ELEMENTS_BIT_SIZE}, + folding::nova::cyclefold::nimfs::{R1CSShape, SQUEEZE_ELEMENTS_BIT_SIZE}, utils, }; diff --git a/supernova/src/circuits/nova/sequential/augmented.rs b/supernova/src/circuits/nova/sequential/augmented.rs index b04769f5..8d997f16 100644 --- a/supernova/src/circuits/nova/sequential/augmented.rs +++ b/supernova/src/circuits/nova/sequential/augmented.rs @@ -21,12 +21,12 @@ use ark_std::Zero; use crate::{ circuits::{NovaConstraintSynthesizer, StepCircuit}, commitment::CommitmentScheme, - gadgets::multifold::{multifold, primary, secondary, NonNativeAffineVar}, - multifold::{ + folding::nova::cyclefold::{ self, nimfs::{NIMFSProof, R1CSInstance, R1CSShape, RelaxedR1CSInstance}, secondary::Circuit as SecondaryCircuit, }, + gadgets::cyclefold::{multifold, primary, secondary, NonNativeAffineVar}, }; pub const SQUEEZE_NATIVE_ELEMENTS_NUM: usize = 1; @@ -138,7 +138,7 @@ where NovaAugmentedCircuitInput::Base { vk, z_0 } => { let shape = R1CSShape::::new(0, 0, AUGMENTED_CIRCUIT_NUM_IO, &[], &[], &[]).unwrap(); - let shape_secondary = multifold::secondary::setup_shape::()?; + let shape_secondary = cyclefold::secondary::setup_shape::()?; let U = RelaxedR1CSInstance::::new(&shape); let U_secondary = RelaxedR1CSInstance::::new(&shape_secondary); diff --git a/supernova/src/circuits/nova/sequential/mod.rs b/supernova/src/circuits/nova/sequential/mod.rs index 7ea0a9a2..42b12eca 100644 --- a/supernova/src/circuits/nova/sequential/mod.rs +++ b/supernova/src/circuits/nova/sequential/mod.rs @@ -13,7 +13,7 @@ use ark_serialize::{CanonicalDeserialize, CanonicalSerialize}; use crate::{ absorb::CryptographicSpongeExt, commitment::CommitmentScheme, - multifold::{ + folding::nova::cyclefold::{ self, nimfs::{ NIMFSProof, R1CSInstance, R1CSShape, R1CSWitness, RelaxedR1CSInstance, @@ -53,7 +53,7 @@ where step_circuit: &SC, aux1: &C1::SetupAux, aux2: &C2::SetupAux, - ) -> Result, multifold::Error> { + ) -> Result, cyclefold::Error> { let _span = tracing::debug_span!(target: LOG_TARGET, "setup").entered(); let z_0 = vec![G1::ScalarField::ZERO; SC::ARITY]; @@ -71,7 +71,7 @@ where cs.finalize(); let shape = R1CSShape::from(cs); - let shape_secondary = multifold::secondary::setup_shape::()?; + let shape_secondary = cyclefold::secondary::setup_shape::()?; let pp = C1::setup(shape.num_vars.max(shape.num_constraints), aux1); let pp_secondary = C2::setup( @@ -221,7 +221,7 @@ where .unwrap_or(0) } - pub fn prove_step(self, step_circuit: &SC) -> Result { + pub fn prove_step(self, step_circuit: &SC) -> Result { let _span = tracing::debug_span!( target: LOG_TARGET, "prove_step", @@ -330,11 +330,11 @@ where }) } - pub fn verify(&self, num_steps: usize) -> Result<(), multifold::Error> { + pub fn verify(&self, num_steps: usize) -> Result<(), cyclefold::Error> { let _span = tracing::debug_span!(target: LOG_TARGET, "verify", %num_steps).entered(); - const NOT_SATISFIED_ERROR: multifold::Error = - multifold::Error::R1CS(crate::r1cs::Error::NotSatisfied); + const NOT_SATISFIED_ERROR: cyclefold::Error = + cyclefold::Error::R1CS(crate::r1cs::Error::NotSatisfied); let Some(non_base) = &self.non_base else { return Err(NOT_SATISFIED_ERROR); @@ -436,7 +436,7 @@ pub(crate) mod tests { .unwrap() } - fn ivc_base_step_with_cycle() -> Result<(), multifold::Error> + fn ivc_base_step_with_cycle() -> Result<(), cyclefold::Error> where G1: SWCurveConfig, G2: SWCurveConfig, @@ -480,7 +480,7 @@ pub(crate) mod tests { .unwrap() } - fn ivc_multiple_steps_with_cycle() -> Result<(), multifold::Error> + fn ivc_multiple_steps_with_cycle() -> Result<(), cyclefold::Error> where G1: SWCurveConfig, G2: SWCurveConfig, diff --git a/supernova/src/ml_sumcheck/data_structures.rs b/supernova/src/folding/hypernova/ml_sumcheck/data_structures.rs similarity index 100% rename from supernova/src/ml_sumcheck/data_structures.rs rename to supernova/src/folding/hypernova/ml_sumcheck/data_structures.rs diff --git a/supernova/src/ml_sumcheck/mod.rs b/supernova/src/folding/hypernova/ml_sumcheck/mod.rs similarity index 100% rename from supernova/src/ml_sumcheck/mod.rs rename to supernova/src/folding/hypernova/ml_sumcheck/mod.rs diff --git a/supernova/src/ml_sumcheck/protocol/mod.rs b/supernova/src/folding/hypernova/ml_sumcheck/protocol/mod.rs similarity index 100% rename from supernova/src/ml_sumcheck/protocol/mod.rs rename to supernova/src/folding/hypernova/ml_sumcheck/protocol/mod.rs diff --git a/supernova/src/ml_sumcheck/protocol/prover.rs b/supernova/src/folding/hypernova/ml_sumcheck/protocol/prover.rs similarity index 99% rename from supernova/src/ml_sumcheck/protocol/prover.rs rename to supernova/src/folding/hypernova/ml_sumcheck/protocol/prover.rs index 7ebc2091..db51deb7 100644 --- a/supernova/src/ml_sumcheck/protocol/prover.rs +++ b/supernova/src/folding/hypernova/ml_sumcheck/protocol/prover.rs @@ -7,7 +7,7 @@ use ark_std::{cfg_iter_mut, vec::Vec}; #[cfg(feature = "parallel")] use rayon::prelude::*; -use crate::ml_sumcheck::{ +use super::super::{ data_structures::ListOfProductsOfPolynomials, protocol::{verifier::VerifierMsg, IPForMLSumcheck}, }; diff --git a/supernova/src/ml_sumcheck/protocol/verifier.rs b/supernova/src/folding/hypernova/ml_sumcheck/protocol/verifier.rs similarity index 99% rename from supernova/src/ml_sumcheck/protocol/verifier.rs rename to supernova/src/folding/hypernova/ml_sumcheck/protocol/verifier.rs index 088cd6cb..b4c4b8f5 100644 --- a/supernova/src/ml_sumcheck/protocol/verifier.rs +++ b/supernova/src/folding/hypernova/ml_sumcheck/protocol/verifier.rs @@ -4,7 +4,7 @@ use ark_ff::{Field, PrimeField}; use ark_serialize::{CanonicalDeserialize, CanonicalSerialize}; use ark_std::vec::Vec; -use crate::ml_sumcheck::{ +use super::super::{ data_structures::PolynomialInfo, protocol::{prover::ProverMsg, IPForMLSumcheck}, Error, diff --git a/supernova/src/ml_sumcheck/tests.rs b/supernova/src/folding/hypernova/ml_sumcheck/tests.rs similarity index 100% rename from supernova/src/ml_sumcheck/tests.rs rename to supernova/src/folding/hypernova/ml_sumcheck/tests.rs diff --git a/supernova/src/folding/hypernova/mod.rs b/supernova/src/folding/hypernova/mod.rs new file mode 100644 index 00000000..76c750ad --- /dev/null +++ b/supernova/src/folding/hypernova/mod.rs @@ -0,0 +1 @@ +pub mod ml_sumcheck; diff --git a/supernova/src/folding/mod.rs b/supernova/src/folding/mod.rs new file mode 100644 index 00000000..d82a952b --- /dev/null +++ b/supernova/src/folding/mod.rs @@ -0,0 +1,2 @@ +pub mod hypernova; +pub mod nova; diff --git a/supernova/src/multifold/mod.rs b/supernova/src/folding/nova/cyclefold/mod.rs similarity index 76% rename from supernova/src/multifold/mod.rs rename to supernova/src/folding/nova/cyclefold/mod.rs index a427ca91..c9fa4629 100644 --- a/supernova/src/multifold/mod.rs +++ b/supernova/src/folding/nova/cyclefold/mod.rs @@ -1,17 +1,19 @@ pub(crate) mod nimfs; pub(crate) mod secondary; +use crate::r1cs::Error as R1CSError; + #[derive(Debug, Clone, Copy)] pub enum Error { - R1CS(super::r1cs::Error), + R1CS(R1CSError), Synthesis(ark_relations::r1cs::SynthesisError), #[cfg(any(test, feature = "spartan"))] InvalidPublicInput, } -impl From for Error { - fn from(error: super::r1cs::Error) -> Self { +impl From for Error { + fn from(error: R1CSError) -> Self { Self::R1CS(error) } } diff --git a/supernova/src/multifold/nimfs/mod.rs b/supernova/src/folding/nova/cyclefold/nimfs/mod.rs similarity index 99% rename from supernova/src/multifold/nimfs/mod.rs rename to supernova/src/folding/nova/cyclefold/nimfs/mod.rs index 640bd9c7..2f60d2ec 100644 --- a/supernova/src/multifold/nimfs/mod.rs +++ b/supernova/src/folding/nova/cyclefold/nimfs/mod.rs @@ -13,7 +13,7 @@ use crate::{ pub(crate) mod relaxed; -pub use crate::nifs::{NIFSProof, SQUEEZE_ELEMENTS_BIT_SIZE}; +pub use crate::folding::nova::nifs::{NIFSProof, SQUEEZE_ELEMENTS_BIT_SIZE}; pub(crate) type R1CSShape = r1cs::R1CSShape>; pub(crate) type R1CSInstance = r1cs::R1CSInstance, C>; diff --git a/supernova/src/multifold/nimfs/relaxed.rs b/supernova/src/folding/nova/cyclefold/nimfs/relaxed.rs similarity index 99% rename from supernova/src/multifold/nimfs/relaxed.rs rename to supernova/src/folding/nova/cyclefold/nimfs/relaxed.rs index d1e7752a..02ae62c1 100644 --- a/supernova/src/multifold/nimfs/relaxed.rs +++ b/supernova/src/folding/nova/cyclefold/nimfs/relaxed.rs @@ -5,7 +5,7 @@ use ark_ff::{Field, PrimeField}; use crate::{ absorb::CryptographicSpongeExt, commitment::{Commitment, CommitmentScheme}, - multifold::secondary, + folding::nova::cyclefold::secondary, r1cs, utils::{cast_field_element, cast_field_element_unique}, }; diff --git a/supernova/src/multifold/secondary/mod.rs b/supernova/src/folding/nova/cyclefold/secondary/mod.rs similarity index 100% rename from supernova/src/multifold/secondary/mod.rs rename to supernova/src/folding/nova/cyclefold/secondary/mod.rs diff --git a/supernova/src/folding/nova/mod.rs b/supernova/src/folding/nova/mod.rs new file mode 100644 index 00000000..efa3170f --- /dev/null +++ b/supernova/src/folding/nova/mod.rs @@ -0,0 +1,2 @@ +pub mod cyclefold; +pub mod nifs; diff --git a/supernova/src/nifs.rs b/supernova/src/folding/nova/nifs.rs similarity index 99% rename from supernova/src/nifs.rs rename to supernova/src/folding/nova/nifs.rs index 65e6b8f6..fd34bd12 100644 --- a/supernova/src/nifs.rs +++ b/supernova/src/folding/nova/nifs.rs @@ -4,7 +4,7 @@ use ark_crypto_primitives::sponge::{Absorb, CryptographicSponge, FieldElementSiz use ark_ec::CurveGroup; use ark_ff::{PrimeField, ToConstraintField}; -use super::{ +use crate::{ absorb::{AbsorbNonNative, CryptographicSpongeExt}, commitment::{Commitment, CommitmentScheme}, r1cs::{self, R1CSShape, RelaxedR1CSInstance, RelaxedR1CSWitness}, diff --git a/supernova/src/gadgets/multifold/mod.rs b/supernova/src/gadgets/cyclefold/mod.rs similarity index 99% rename from supernova/src/gadgets/multifold/mod.rs rename to supernova/src/gadgets/cyclefold/mod.rs index c2cce118..7c947f17 100644 --- a/supernova/src/gadgets/multifold/mod.rs +++ b/supernova/src/gadgets/cyclefold/mod.rs @@ -16,7 +16,9 @@ pub(crate) mod primary; pub(crate) mod secondary; pub use super::nonnative::{cast_field_element_unique, short_weierstrass::NonNativeAffineVar}; -use crate::{commitment::CommitmentScheme, multifold::nimfs::SQUEEZE_ELEMENTS_BIT_SIZE}; +use crate::{ + commitment::CommitmentScheme, folding::nova::cyclefold::nimfs::SQUEEZE_ELEMENTS_BIT_SIZE, +}; pub fn multifold( config: &>::Parameters, @@ -326,7 +328,7 @@ where mod tests { use super::*; use crate::{ - multifold::{ + folding::nova::cyclefold::{ nimfs::{NIMFSProof, RelaxedR1CSInstance, RelaxedR1CSWitness}, secondary as multifold_secondary, }, diff --git a/supernova/src/gadgets/multifold/primary.rs b/supernova/src/gadgets/cyclefold/primary.rs similarity index 99% rename from supernova/src/gadgets/multifold/primary.rs rename to supernova/src/gadgets/cyclefold/primary.rs index cbc5d372..826b4d92 100644 --- a/supernova/src/gadgets/multifold/primary.rs +++ b/supernova/src/gadgets/cyclefold/primary.rs @@ -17,7 +17,7 @@ use ark_std::fmt::Debug; use super::NonNativeAffineVar; use crate::{ commitment::CommitmentScheme, - multifold::nimfs::{R1CSInstance, RelaxedR1CSInstance}, + folding::nova::cyclefold::nimfs::{R1CSInstance, RelaxedR1CSInstance}, }; #[must_use] diff --git a/supernova/src/gadgets/multifold/secondary.rs b/supernova/src/gadgets/cyclefold/secondary.rs similarity index 99% rename from supernova/src/gadgets/multifold/secondary.rs rename to supernova/src/gadgets/cyclefold/secondary.rs index d1d8e69a..ddc3333f 100644 --- a/supernova/src/gadgets/multifold/secondary.rs +++ b/supernova/src/gadgets/cyclefold/secondary.rs @@ -24,7 +24,7 @@ use ark_relations::r1cs::{ConstraintSystemRef, Namespace, SynthesisError}; use super::{cast_field_element_unique, NonNativeAffineVar}; use crate::{ commitment::CommitmentScheme, - multifold::{ + folding::nova::cyclefold::{ nimfs::{R1CSInstance, RelaxedR1CSInstance}, secondary::{Circuit as SecondaryCircuit, Proof}, }, diff --git a/supernova/src/gadgets/mod.rs b/supernova/src/gadgets/mod.rs index cab1ddb9..0b8b4c7b 100644 --- a/supernova/src/gadgets/mod.rs +++ b/supernova/src/gadgets/mod.rs @@ -1,2 +1,2 @@ -pub(crate) mod multifold; +pub(crate) mod cyclefold; pub(crate) mod nonnative; diff --git a/supernova/src/lib.rs b/supernova/src/lib.rs index 30acb613..cbb4fb16 100644 --- a/supernova/src/lib.rs +++ b/supernova/src/lib.rs @@ -5,13 +5,11 @@ #![allow(clippy::large_enum_variant)] mod absorb; -mod ml_sumcheck; -mod multifold; -mod nifs; mod provider; mod utils; mod circuits; +mod folding; mod gadgets; #[cfg(test)]