diff --git a/src/tests/aggregation.rs b/src/tests/aggregation.rs index 78654b9..86c93da 100644 --- a/src/tests/aggregation.rs +++ b/src/tests/aggregation.rs @@ -574,18 +574,83 @@ fn test_aggregation_split_sha256_rsa2() { println!("Aggregation snark success"); } +#[test] +fn test_aggregation_split_sha256_rsa3() { + println!("Generating dummy snark"); + let snark1 = generate_sha256_circuit( + "./certs/cert_3.pem", + "./certs/cert_2.pem", + 16 + ); + let snark2 = generate_rsa_circuit( + "./certs/cert_3.pem", + "./certs/cert_2.pem", + 16 + ); + let snark3 = generate_sha256_circuit( + "./certs/cert_2.pem", + "./certs/cert_1.pem", + 16 + ); + let snark4 = generate_rsa_circuit( + "./certs/cert_2.pem", + "./certs/cert_1.pem", + 16 + ); + + // Create an aggregation circuit using the snark + let agg_k = 20; + let agg_lookup_bits = agg_k - 1; + let agg_params = gen_srs(agg_k as u32); + let mut agg_circuit = AggregationCircuit::new::( + CircuitBuilderStage::Keygen, + AggregationConfigParams {degree: agg_k, lookup_bits: agg_lookup_bits as usize, ..Default::default()}, + &agg_params, + vec![snark1.clone(), snark2.clone(), snark3.clone(), snark4.clone()], + VerifierUniversality::Full + ); + + println!("Aggregation circuit calculating params"); + let agg_config = agg_circuit.calculate_params(Some(10)); + + // let start0 = start_timer!(|| "gen vk & pk"); + println!("Aggregation circuit generating pk"); + let pk = gen_pk(&agg_params, &agg_circuit, None); + + let break_points = agg_circuit.break_points(); + + // std::fs::remove_file(Path::new("examples/agg.pk")).ok(); + // let _pk = gen_pk(¶ms, &agg_circuit, Some(Path::new("examples/agg.pk"))); + // end_timer!(start0); + // let pk = read_pk::(Path::new("examples/agg.pk"), agg_config).unwrap(); + // std::fs::remove_file(Path::new("examples/agg.pk")).ok(); + // let break_points = agg_circuit.break_points(); + + let agg_circuit = AggregationCircuit::new::( + CircuitBuilderStage::Prover, + agg_config, + &agg_params, + vec![snark1, snark2, snark3, snark4], + VerifierUniversality::Full, + ).use_break_points(break_points.clone()); + + println!("Generating aggregation snark"); + let _agg_snark = gen_snark_shplonk(&agg_params, &pk, agg_circuit, None::<&str>); + println!("Aggregation snark success"); +} + #[test] fn test_two_level_aggregation_split_sha256_rsa() { println!("Generating dummy snark"); let snark1 = generate_sha256_circuit( "./certs/cert_3.pem", "./certs/cert_2.pem", - 18 + 16 ); let snark2 = generate_rsa_circuit( "./certs/cert_3.pem", "./certs/cert_2.pem", - 18 + 16 ); // Create an aggregation circuit using the snark @@ -633,12 +698,12 @@ fn test_two_level_aggregation_split_sha256_rsa() { let snark3 = generate_sha256_circuit( "./certs/cert_2.pem", "./certs/cert_1.pem", - 18 + 16 ); let snark4 = generate_rsa_circuit( "./certs/cert_2.pem", "./certs/cert_1.pem", - 18 + 16 ); // std::fs::remove_file(Path::new("examples/agg.pk")).ok();