mirror of
https://github.com/Sunscreen-tech/Sunscreen.git
synced 2026-04-19 03:00:06 -04:00
clippy+fmt
This commit is contained in:
@@ -26,7 +26,6 @@ criterion = "0.4.0"
|
||||
default = []
|
||||
metal = ["sunscreen_math/metal"]
|
||||
pina = ["sunscreen_math/pina"]
|
||||
nightly-features = []
|
||||
|
||||
[[bench]]
|
||||
name = "linear_relation"
|
||||
|
||||
@@ -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<Q> = Matrix<DensePolynomial<Q>>;
|
||||
@@ -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::<Vec<u64>>();
|
||||
let coeffs = (0..POLY_DEGREE).map(|x| x % 2).collect::<Vec<u64>>();
|
||||
|
||||
let delta = make_poly::<Q>(&[1234]);
|
||||
let p_0 = make_poly::<Q>(&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);
|
||||
criterion_main!(benches);
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
#![cfg_attr(feature = "nightly-features", feature(test))]
|
||||
#![deny(missing_docs)]
|
||||
|
||||
//! This crate contains proofs for demonstrating facts about lattice
|
||||
|
||||
@@ -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<T>
|
||||
@@ -789,7 +789,7 @@ pub trait HadamardProduct<Rhs> {
|
||||
|
||||
/**
|
||||
* Compute the Hadamard product between `self` and `rhs`.
|
||||
*
|
||||
*
|
||||
* # Remarks
|
||||
* The Hadamard product is element-wise multiplication.
|
||||
*/
|
||||
|
||||
@@ -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<F: Field>(degree: usize) -> DensePolynomial<F> {
|
||||
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::<Vec<u64>>();
|
||||
|
||||
let delta = make_poly::<Q>(&[1234]);
|
||||
let p_0 = make_poly::<Q>(&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::<FqSeal128_4096>(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());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -324,7 +324,7 @@ impl<const N: usize> Log2 for BigInt<N> {
|
||||
/**
|
||||
* 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<Rhs = Self> {
|
||||
|
||||
/**
|
||||
* 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<Self>;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user