mirror of
https://github.com/arnaucube/sonobe.git
synced 2026-01-12 00:41:28 +01:00
Port/hypernova multifolding (#10)
* Port HyperNova's multifolding from https://github.com/privacy-scaling-explorations/multifolding-poc adapting and refactoring some of its methods and structs. Note: adapted mle.rs methods from dense to sparse repr. Co-authored-by: George Kadianakis <desnacked@riseup.net> * HyperNova: move CCS struct outside of LCCCS & CCCS HyperNova nimfs: move CCS structure outside of LCCCS & CCCS, to avoid carrying around the whole CCS and duplicating data when is not needed. Also add feature flags for the folding schemes. --------- Co-authored-by: George Kadianakis <desnacked@riseup.net>
This commit is contained in:
@@ -102,15 +102,19 @@ impl<C: CurveGroup> CCS<C> {
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
pub mod tests {
|
||||
use super::*;
|
||||
use crate::ccs::r1cs::tests::{get_test_r1cs, get_test_z};
|
||||
use crate::ccs::r1cs::tests::{get_test_r1cs, get_test_z as r1cs_get_test_z};
|
||||
use ark_ff::PrimeField;
|
||||
use ark_pallas::Projective;
|
||||
|
||||
pub fn get_test_ccs<C: CurveGroup>() -> CCS<C> {
|
||||
let r1cs = get_test_r1cs::<C::ScalarField>();
|
||||
CCS::<C>::from_r1cs(r1cs)
|
||||
}
|
||||
pub fn get_test_z<F: PrimeField>(input: usize) -> Vec<F> {
|
||||
r1cs_get_test_z(input)
|
||||
}
|
||||
|
||||
/// Test that a basic CCS relation can be satisfied
|
||||
#[test]
|
||||
|
||||
@@ -75,24 +75,24 @@ pub mod tests {
|
||||
pub fn get_test_r1cs<F: PrimeField>() -> R1CS<F> {
|
||||
// R1CS for: x^3 + x + 5 = y (example from article
|
||||
// https://www.vitalik.ca/general/2016/12/10/qap.html )
|
||||
let A = dense_matrix_to_sparse(to_F_matrix::<F>(vec![
|
||||
let A = to_F_matrix::<F>(vec![
|
||||
vec![0, 1, 0, 0, 0, 0],
|
||||
vec![0, 0, 0, 1, 0, 0],
|
||||
vec![0, 1, 0, 0, 1, 0],
|
||||
vec![5, 0, 0, 0, 0, 1],
|
||||
]));
|
||||
let B = dense_matrix_to_sparse(to_F_matrix::<F>(vec![
|
||||
]);
|
||||
let B = to_F_matrix::<F>(vec![
|
||||
vec![0, 1, 0, 0, 0, 0],
|
||||
vec![0, 1, 0, 0, 0, 0],
|
||||
vec![1, 0, 0, 0, 0, 0],
|
||||
vec![1, 0, 0, 0, 0, 0],
|
||||
]));
|
||||
let C = dense_matrix_to_sparse(to_F_matrix::<F>(vec![
|
||||
]);
|
||||
let C = to_F_matrix::<F>(vec![
|
||||
vec![0, 0, 0, 1, 0, 0],
|
||||
vec![0, 0, 0, 0, 1, 0],
|
||||
vec![0, 0, 0, 0, 0, 1],
|
||||
vec![0, 0, 1, 0, 0, 0],
|
||||
]));
|
||||
]);
|
||||
|
||||
R1CS::<F> { l: 1, A, B, C }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user