ccs08: add general proving and verifying method
This commit is contained in:
parent
86449da92e
commit
9d6c4095b2
37
src/ccs08.rs
37
src/ccs08.rs
|
@ -293,6 +293,33 @@ impl<E: Engine> RPPublicParams<E> {
|
|||
panic!("log(b) is zero");
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
Prove method is responsible for generating the zero knowledge proof.
|
||||
*/
|
||||
pub fn prove<R: Rng>(&self, rng: &mut R, x: i64) -> RangeProof<E> {
|
||||
let ul = self.p.u.pow(self.p.l as u32);
|
||||
let r = E::Fr::rand(rng);
|
||||
|
||||
// x - b + ul
|
||||
let xb = x + self.b + ul;
|
||||
let first = self.p.prove_ul(rng, xb, r);
|
||||
|
||||
// x - a
|
||||
let xa = x - self.a;
|
||||
let second = self.p.prove_ul(rng, xa, r);
|
||||
|
||||
return RangeProof { p1: first, p2: second };
|
||||
}
|
||||
|
||||
/*
|
||||
Verify is responsible for validating the proof.
|
||||
*/
|
||||
pub fn verify(&self, proof: RangeProof<E>) -> bool {
|
||||
let first = self.p.verify_ul(&proof.p1);
|
||||
let second = self.p.verify_ul(&proof.p2);
|
||||
return first && second;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -352,6 +379,16 @@ mod tests {
|
|||
assert_eq!(params.verify_ul(&proof), true);
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[ignore]
|
||||
fn prove_and_verify_works() {
|
||||
let rng = &mut rand::thread_rng();
|
||||
let params = RPPublicParams::<Bls12>::setup(rng, 2, 25);
|
||||
let fr = Fr::rand(rng);
|
||||
let proof = params.prove(rng, 10);
|
||||
assert_eq!(params.verify(proof), true);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn decompose_works() {
|
||||
assert_eq!(decompose(25, 3, 3), vec! {1, 2, 2});
|
||||
|
|
Loading…
Reference in New Issue