From 1195f0fdc27892750b14878cb4ae70d59f6d0bd6 Mon Sep 17 00:00:00 2001 From: Gijs Van Laer Date: Fri, 14 Jun 2019 19:57:52 -0400 Subject: [PATCH] ped92: add methods to CSParams --- src/ped92.rs | 112 ++++++++++++++++++--------------------------------- 1 file changed, 39 insertions(+), 73 deletions(-) diff --git a/src/ped92.rs b/src/ped92.rs index 429860b..d2ce75d 100644 --- a/src/ped92.rs +++ b/src/ped92.rs @@ -1,19 +1,7 @@ -// commit_schemes.rs -extern crate serde; - -use serialization_wrappers; -use std::fmt; +// ped92.rs use rand::{thread_rng, Rng}; -use bn::{Group, Fr, G1, G2}; use pairing::{Engine, CurveProjective, CurveAffine}; use ff::Rand; -use clsigs; -use debug_elem_in_hex; -use bincode::SizeLimit::Infinite; -use bincode::rustc_serialize::encode; -use sodiumoxide::crypto::hash::sha512; - -use serde::{Serialize, Deserialize}; #[derive(Clone)] pub struct PublicKey { @@ -125,69 +113,47 @@ pub fn ped92_decommit(pk: &PublicKey, cm: &Commitment, m: E::Fr } -/* -Implements the setup algorithm for the Pedersen92 commitment scheme over -a vector of messages. -*/ -pub fn setup(len: usize, pub_bases: Vec, h: E::G2) -> CSParams { - let rng = &mut thread_rng(); - //let base_h = h.unwrap_or(G2::random(rng)); - let mut p: Vec = Vec::new(); - p.push(h); - - let _p = pub_bases; - for i in 0.._p.len() { - p.push(_p[i]); +impl CSParams { + /* + Implements the setup algorithm for the Pedersen92 commitment scheme over + a vector of messages. + */ + pub fn setup_gen_params(rng: &mut R, len: usize) -> Self { + let mut p: Vec = Vec::new(); + for i in 0..len { + p.push(E::G2::rand(rng)); + } + return CSParams { pub_bases: p }; } - return CSParams { pub_bases: p }; -} -pub fn setup_gen_params(len: usize) -> CSParams { - let rng = &mut thread_rng(); - - let mut p: Vec = Vec::new(); - for i in 0..len { - p.push(E::G2::rand(rng)); + pub fn commit(&self, rng: &mut R, x: &Vec, r: E::Fr) -> Commitment { + //let r = R.unwrap_or(Fr::random(rng)); + // c = g1^m1 * ... * gn^mn * h^r + let mut c = self.pub_bases[0].clone(); + c.mul_assign(r); + for i in 1..x.len() { + let mut basis = self.pub_bases[i]; + basis.mul_assign(x[i]); + c.add_assign(&basis); + } + // return (c, r) <- r + Commitment { c, r } } - return CSParams { pub_bases: p }; -} -pub fn commit(csp: &CSParams, x: &Vec, r: E::Fr) -> Commitment { - let rng = &mut thread_rng(); - - //let r = R.unwrap_or(Fr::random(rng)); - // c = g1^m1 * ... * gn^mn * h^r - //println!("(commit) index: 0"); - let mut c = csp.pub_bases[0].clone(); - c.mul_assign(r); - for i in 1..x.len() { - //println!("(commit) index: {}", i); - let mut basis = csp.pub_bases[i]; - basis.mul_assign(x[i]); - c.add_assign(&basis); + pub fn decommit(&self, cm: &Commitment, x: &Vec) -> bool { + let l = x.len(); + // pub_base[0] => h, x[0] => r + // check that cm.r == x[0] + let mut dc = self.pub_bases[0].clone(); + dc.mul_assign(cm.r.clone()); + for i in 1..l { + let mut basis = self.pub_bases[i]; + basis.mul_assign(x[i]); + dc.add_assign(&basis); + } + return dc == cm.c && cm.r == x[0]; } - // return (c, r) <- r - let commitment = Commitment { c, r }; - - // debugging - //println!("{}", commitment); - return commitment; -} - -pub fn decommit(csp: &CSParams, cm: &Commitment, x: &Vec) -> bool { - let l = x.len(); - // pub_base[0] => h, x[0] => r - // check that cm.r == x[0] - // assert!(cm.r == x[0]); - let mut dc = csp.pub_bases[0].clone(); - dc.mul_assign(cm.r.clone()); - for i in 1..l { - let mut basis = csp.pub_bases[i]; - basis.mul_assign(x[i]); - dc.add_assign(&basis); - } - return dc == cm.c && cm.r == x[0]; } #[cfg(test)] @@ -215,15 +181,15 @@ mod tests { fn commit_n_message_works() { let rng = &mut thread_rng(); let len = 3; - let csp = setup_gen_params::(len); + let csp = CSParams::::setup_gen_params(rng, len); let mut m: Vec = Vec::new(); for i in 0..len { m.push(Fr::rand(rng)); } let r = m[0].clone(); - let c = commit(&csp, &m, r); + let c = csp.commit(rng, &m, r); - assert_eq!(true, decommit(&csp, &c, &m)); + assert_eq!(true, csp.decommit( &c, &m)); } }