Implement proof generation
This commit is contained in:
parent
da4420a46e
commit
b5898aa958
|
@ -1,8 +1,12 @@
|
||||||
use crate::common::KzgRsError;
|
use crate::common::KzgRsError;
|
||||||
use ark_bls12_381::{Bls12_381, Fr};
|
use ark_bls12_381::{Bls12_381, Fr};
|
||||||
use ark_poly::univariate::DensePolynomial;
|
use ark_poly::univariate::DensePolynomial;
|
||||||
use ark_poly_commit::kzg10::{Commitment, Powers, KZG10};
|
use ark_poly::{DenseUVPolynomial, EvaluationDomain, GeneralEvaluationDomain, Polynomial};
|
||||||
|
use ark_poly_commit::kzg10::{Commitment, Powers, Proof, KZG10};
|
||||||
|
use num_traits::One;
|
||||||
|
|
||||||
|
/// Commit to a polynomial where each of the evaluations are over `w(i)` for the degree
|
||||||
|
/// of the polynomial being omega (`w`) the root of unity (2^x).
|
||||||
pub fn commit_polynomial(
|
pub fn commit_polynomial(
|
||||||
polynomial: &DensePolynomial<Fr>,
|
polynomial: &DensePolynomial<Fr>,
|
||||||
roots_of_unity: &Powers<Bls12_381>,
|
roots_of_unity: &Powers<Bls12_381>,
|
||||||
|
@ -12,6 +16,26 @@ pub fn commit_polynomial(
|
||||||
.map(|(commitment, _)| commitment)
|
.map(|(commitment, _)| commitment)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Compute a witness polynomial in that satisfies `witness(x) = (f(x)-v)/(x-u)`
|
||||||
|
fn generate_element_proof(
|
||||||
|
element_index: usize,
|
||||||
|
polynomial: &DensePolynomial<Fr>,
|
||||||
|
roots_of_unity: &Powers<Bls12_381>,
|
||||||
|
domain: &GeneralEvaluationDomain<Fr>,
|
||||||
|
) -> Result<Proof<Bls12_381>, KzgRsError> {
|
||||||
|
let u = domain.element(element_index);
|
||||||
|
let v = polynomial.evaluate(&u);
|
||||||
|
let f_x_v = polynomial + &DensePolynomial::<Fr>::from_coefficients_vec(vec![-v]);
|
||||||
|
let x_u = DensePolynomial::<Fr>::from_coefficients_vec(vec![-u, Fr::one()]);
|
||||||
|
let witness_polynomial: DensePolynomial<_> = &f_x_v / &x_u;
|
||||||
|
let proof = commit_polynomial(&witness_polynomial, roots_of_unity)?;
|
||||||
|
let proof = Proof {
|
||||||
|
w: proof.0,
|
||||||
|
random_v: None,
|
||||||
|
};
|
||||||
|
Ok(proof)
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod test {
|
mod test {
|
||||||
use crate::kzg::commit_polynomial;
|
use crate::kzg::commit_polynomial;
|
||||||
|
|
Loading…
Reference in New Issue