diff --git a/logproof/Cargo.toml b/logproof/Cargo.toml index b6b28b1cc..33f8e91da 100644 --- a/logproof/Cargo.toml +++ b/logproof/Cargo.toml @@ -26,7 +26,6 @@ criterion = "0.4.0" default = [] metal = ["sunscreen_math/metal"] pina = ["sunscreen_math/pina"] -nightly-features = [] [[bench]] name = "linear_relation" diff --git a/logproof/benches/linear_relation.rs b/logproof/benches/linear_relation.rs index b4b64f988..a7385cbf5 100644 --- a/logproof/benches/linear_relation.rs +++ b/logproof/benches/linear_relation.rs @@ -3,7 +3,12 @@ use std::time::Instant; use ark_ff::Field; use ark_poly::univariate::DensePolynomial; use criterion::{criterion_group, criterion_main, Criterion}; -use logproof::{fields::FqSeal128_4096, math::make_poly, LogProofGenerators, linear_algebra::{Matrix, ScalarRem}, LogProofProverKnowledge, InnerProductVerifierKnowledge, LogProof}; +use logproof::{ + fields::FqSeal128_4096, + linear_algebra::{Matrix, ScalarRem}, + math::make_poly, + InnerProductVerifierKnowledge, LogProof, LogProofGenerators, LogProofProverKnowledge, +}; use merlin::Transcript; type MatrixPoly = Matrix>; @@ -35,10 +40,7 @@ fn bfv_3ct_benchmark(_: &mut Criterion) { println!("Generating data..."); - let coeffs = (0..POLY_DEGREE) - .map(|x| x % 2) - .into_iter() - .collect::>(); + let coeffs = (0..POLY_DEGREE).map(|x| x % 2).collect::>(); let delta = make_poly::(&[1234]); let p_0 = make_poly::(&coeffs); @@ -52,8 +54,8 @@ fn bfv_3ct_benchmark(_: &mut Criterion) { [zero.clone(), p_1.clone(), zero.clone(), one.clone()], [delta.clone(), p_0.clone(), one.clone(), zero.clone()], [zero.clone(), p_1.clone(), zero.clone(), one.clone()], - [delta.clone(), p_0.clone(), one.clone(), zero.clone()], - [zero.clone(), p_1.clone(), zero.clone(), one.clone()], + [delta, p_0.clone(), one.clone(), zero.clone()], + [zero.clone(), p_1, zero, one], ]); // Secret key @@ -65,7 +67,7 @@ fn bfv_3ct_benchmark(_: &mut Criterion) { let m = p_0.clone(); let u = p_0.clone(); let e_1 = p_0.clone(); - let e_2 = p_0.clone(); + let e_2 = p_0; let s = MatrixPoly::from([[m], [u], [e_1], [e_2]]); @@ -117,4 +119,4 @@ fn bfv_3ct_benchmark(_: &mut Criterion) { criterion_group!(benches, bfv_3ct_benchmark); -criterion_main!(benches); \ No newline at end of file +criterion_main!(benches); diff --git a/logproof/src/lib.rs b/logproof/src/lib.rs index b2a8113a0..ffae0791c 100644 --- a/logproof/src/lib.rs +++ b/logproof/src/lib.rs @@ -1,4 +1,3 @@ -#![cfg_attr(feature = "nightly-features", feature(test))] #![deny(missing_docs)] //! This crate contains proofs for demonstrating facts about lattice diff --git a/logproof/src/linear_algebra.rs b/logproof/src/linear_algebra.rs index c53fe0921..2681994ee 100644 --- a/logproof/src/linear_algebra.rs +++ b/logproof/src/linear_algebra.rs @@ -14,9 +14,9 @@ use crate::math::{ModSwitch, One, Rem, SmartMul, Tensor, Zero}; #[derive(Debug, Clone, PartialEq)] /** * An `m x n` matrix of elements. - * + * * # Remarks - * Matrix elements can be any type that implements [`Add`], [`Mul`], + * Matrix elements can be any type that implements [`Add`], [`Mul`], * [`Clone`], [`Zero`]. */ pub struct Matrix @@ -789,7 +789,7 @@ pub trait HadamardProduct { /** * Compute the Hadamard product between `self` and `rhs`. - * + * * # Remarks * The Hadamard product is element-wise multiplication. */ diff --git a/logproof/src/linear_relation.rs b/logproof/src/linear_relation.rs index c1171d574..7b0e79fda 100644 --- a/logproof/src/linear_relation.rs +++ b/logproof/src/linear_relation.rs @@ -1127,122 +1127,3 @@ mod test { assert_eq!(l, r); } } - -#[cfg(all(test, feature = "nightly-features"))] -mod benches { - use crate::{fields::FqSeal128_4096, math::make_poly, LogProofGenerators}; - - use super::*; - use std::time::Instant; - - extern crate test; - use test::Bencher; - - fn f(degree: usize) -> DensePolynomial { - let mut coeffs = Vec::with_capacity(degree + 1); - coeffs.push(F::ONE); - - for _ in 0..degree - 1 { - coeffs.push(F::ZERO); - } - - coeffs.push(F::ONE); - - DensePolynomial { coeffs } - } - - #[bench] - fn bfv_benchmark(_: &mut Bencher) { - // Secret key - // a = random in q - // e_1 = q / 2p - // c_1 = s * a + e_1 + del * m - // c_2 = a - - type Q = FqSeal128_4096; - - const POLY_DEGREE: u64 = 4096u64; - const BIT_SIZE: u64 = 2 << 8; - - println!("Generating data..."); - - let coeffs = (0..POLY_DEGREE) - .map(|x| x % 2) - .into_iter() - .collect::>(); - - let delta = make_poly::(&[1234]); - let p_0 = make_poly::(&coeffs); - let p_1 = p_0.clone(); - - let one = make_poly(&[1]); - let zero = make_poly(&[0]); - - let a = MatrixPoly::from([ - [delta.clone(), p_0.clone(), one.clone(), zero.clone()], - [zero.clone(), p_1.clone(), zero.clone(), one.clone()], - [delta.clone(), p_0.clone(), one.clone(), zero.clone()], - [zero.clone(), p_1.clone(), zero.clone(), one.clone()], - [delta.clone(), p_0.clone(), one.clone(), zero.clone()], - [zero.clone(), p_1.clone(), zero.clone(), one.clone()], - ]); - - // Secret key - // a = random in q - // e_1 = q / 2p - // c_1 = s * a + e_1 + del * m - // c_2 = a - - let m = p_0.clone(); - let u = p_0.clone(); - let e_1 = p_0.clone(); - let e_2 = p_0.clone(); - - let s = MatrixPoly::from([[m], [u], [e_1], [e_2]]); - - let f = f::(POLY_DEGREE as usize); - - let t = &a * &s; - let t = t.scalar_rem(&f); - - let mut transcript = Transcript::new(b"test"); - - println!("Generating prover knowlege"); - - let now = Instant::now(); - - let pk = ProverKnowledge::new(&a, &s, &t, BIT_SIZE, &f); - - println!("Generate PK {}s", now.elapsed().as_secs_f64()); - - println!("b={}", pk.vk.b()); - println!("b_1={}", pk.vk.b_1()); - println!("b_2={}", pk.vk.b_2()); - println!("mkdb={}", pk.vk.mkdb()); - println!("nk(2d-1)b_1={}", pk.vk.nk_2d_min_1_b_1()); - println!("nk(d-1)b_2={}", pk.vk.nk_d_min_1_b_2()); - println!("l={}", pk.vk.l()); - - println!("Starting proof..."); - - let gens = LogProofGenerators::new(pk.vk.l() as usize); - let u = inner_product::VerifierKnowledge::get_u(); - - let now = Instant::now(); - - let proof = LogProof::create(&mut transcript, &pk, &gens.g, &gens.h, &u); - - println!("Prover time {}s", now.elapsed().as_secs_f64()); - println!("Proof size {}B", bincode::serialize(&proof).unwrap().len()); - - let mut transcript = Transcript::new(b"test"); - - let now = Instant::now(); - - proof - .verify(&mut transcript, &pk.vk, &gens.g, &gens.h, &u) - .unwrap(); - - println!("Verifier time {}s", now.elapsed().as_secs_f64()); - } -} diff --git a/logproof/src/math.rs b/logproof/src/math.rs index d1535e905..67d32b41a 100644 --- a/logproof/src/math.rs +++ b/logproof/src/math.rs @@ -324,7 +324,7 @@ impl Log2 for BigInt { /** * A custom [`std::ops::Rem`] trait so we can implement * modulus on foreign crate types. - * + * * # Remarks * see [`std::ops::Rem`]. */ @@ -336,7 +336,7 @@ pub trait Rem { /** * Compute `self % rhs`. - * + * * # Remarks * see [`std::ops::Rem::rem`]. */ @@ -534,7 +534,7 @@ where { /** * Decompose the coefficients into binary 2's complement values. - * + * */ fn twos_complement_coeffs(b: usize) -> Vec; }