3 out of 4 pairing tests in the zk proof pass
This commit is contained in:
@@ -164,7 +164,7 @@ impl SpendProof {
|
||||
.chain(std::iter::once(zkcm_varphi0.to_bytes().as_ref()))
|
||||
.chain(std::iter::once(zkcm_varphi1.to_bytes().as_ref()))
|
||||
.chain(std::iter::once(zkcm_pg_eq1.to_compressed().as_ref()))
|
||||
// .chain(std::iter::once(zkcm_pg_eq2.to_compressed().as_ref()))
|
||||
.chain(std::iter::once(zkcm_pg_eq2.to_compressed().as_ref()))
|
||||
// .chain(std::iter::once(zkcm_pg_eq3.to_compressed().as_ref()))
|
||||
.chain(std::iter::once(zkcm_pg_eq4.to_compressed().as_ref()))
|
||||
);
|
||||
@@ -271,7 +271,7 @@ impl SpendProof {
|
||||
.chain(std::iter::once(zkcm_varphi0.to_bytes().as_ref()))
|
||||
.chain(std::iter::once(zkcm_varphi1.to_bytes().as_ref()))
|
||||
.chain(std::iter::once(zkcm_pg_eq1.to_compressed().as_ref()))
|
||||
// .chain(std::iter::once(zkcm_pg_eq2.to_compressed().as_ref()))
|
||||
.chain(std::iter::once(zkcm_pg_eq2.to_compressed().as_ref()))
|
||||
// .chain(std::iter::once(zkcm_pg_eq3.to_compressed().as_ref()))
|
||||
.chain(std::iter::once(zkcm_pg_eq4.to_compressed().as_ref()))
|
||||
);
|
||||
@@ -354,11 +354,12 @@ mod tests {
|
||||
let varsig_prime1 = params_u.get_ith_sigma(l as usize) + (psi_g1 * r_varsig1);
|
||||
let theta_prime1 = params_u.get_ith_theta(l as usize) + (psi_g1 * r_theta1);
|
||||
let varsig_prime2 = params_u.get_ith_sigma(l as usize + vv as usize - 1) + (psi_g1 * r_varsig2);
|
||||
let theta_prime2 = params_u.get_ith_sigma(l as usize + vv as usize - 1) + (psi_g1 * r_theta2);
|
||||
let theta_prime2 = params_u.get_ith_theta(l as usize + vv as usize - 1) + (psi_g1 * r_theta2);
|
||||
let rr_prime = params_u.get_ith_sps_sign(l as usize + vv as usize - 1).rr + (psi_g1 * r_rr);
|
||||
let ss_prime = params_u.get_ith_sps_sign(l as usize + vv as usize - 1).ss + (psi_g1 * r_ss);
|
||||
let tt_prime = params_u.get_ith_sps_sign(l as usize + vv as usize - 1).tt + (psi_g2 * r_tt);
|
||||
|
||||
|
||||
let rho1 = v.neg() * r_varsig1;
|
||||
let rho2 = v.neg() * r_theta1;
|
||||
let rho3 = r_rr * r_tt;
|
||||
@@ -388,19 +389,9 @@ mod tests {
|
||||
|
||||
let pg_eq1 = pg_varsigpr1_delta - pg_varsigpr2_gen2;
|
||||
let pg_eq2 = pg_thetapr1_delta - pg_thetapr2_gen2;
|
||||
let pg_eq3 = pg_rrprime_yy + pg_ssprime_gen2 + pg_varsigpr2_ww1 + pg_thetapr2_ww2 + pg_gen1_zz.neg();
|
||||
let pg_eq3 = pg_rrprime_yy + pg_ssprime_gen2 + pg_varsigpr2_ww1 + pg_thetapr2_ww2 - pg_gen1_zz;
|
||||
let pg_eq4 = pg_rr_tt - pg_gen1_gen2;
|
||||
|
||||
assert_eq!(pg_varsigpr1_delta + pg_psi0_delta * r_varsig1.neg(), pg_varsigpr2_gen2 + pg_psi0_gen2 * r_varsig2.neg());
|
||||
println!("--------------Check1---------------");
|
||||
|
||||
assert_eq!(pg_thetapr1_delta + pg_psi0_delta * r_theta1.neg(), pg_thetapr2_gen2 + pg_psi0_gen2 * r_theta2.neg());
|
||||
println!("--------------Check2---------------");
|
||||
|
||||
// assert_eq!(pg_rrprime_yy + pg_psi0_yy * r_rr.neg() + pg_ssprime_gen2 + pg_psi0_gen2 * r_ss.neg() + pg_varsigpr2_ww1 + pg_psi0_ww1 * r_varsig2.neg()
|
||||
// + pg_thetapr2_ww2 + pg_psi0_ww2 * r_theta2 - pg_gen1_zz, Gt::identity());
|
||||
// println!("--------------Check2---------------");
|
||||
|
||||
|
||||
let instance = SpendInstance {
|
||||
kappa,
|
||||
|
||||
@@ -116,14 +116,6 @@ impl Parameters {
|
||||
.map(|(sigma, theta)| sps_keypair.sps_sk.sign(grp.clone(), Some(&vec![*sigma, *theta]), None))
|
||||
.collect();
|
||||
|
||||
let l = 10;
|
||||
let vv = 20;
|
||||
|
||||
let tl = thetas_u.get(l - 1).unwrap();
|
||||
let dv = deltas_a.get(vv - 1).unwrap();
|
||||
let tlv = thetas_u.get(l - 1 + vv - 1).unwrap();
|
||||
assert_eq!(pairing(&tl.to_affine(), &dv.to_affine()), pairing(&tlv.to_affine(), g2));
|
||||
println!("Hello world!!");
|
||||
|
||||
// Compute signature for each pair sigma, theta
|
||||
let params_u = ParametersUser {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
use std::convert::TryFrom;
|
||||
use std::ops::Neg;
|
||||
|
||||
use bls12_381::{G1Projective, G2Projective, Scalar};
|
||||
use bls12_381::{G1Projective, G2Projective, Gt, pairing, Scalar};
|
||||
use group::Curve;
|
||||
|
||||
use crate::Attribute;
|
||||
@@ -86,18 +86,18 @@ pub struct SPSKeyPair {
|
||||
}
|
||||
|
||||
impl SPSKeyPair {
|
||||
pub fn new(grparams: GroupParameters, a: usize, b: usize) -> SPSKeyPair {
|
||||
let us = grparams.n_random_scalars(b);
|
||||
let ws = grparams.n_random_scalars(a);
|
||||
let y = grparams.random_scalar();
|
||||
let z = grparams.random_scalar();
|
||||
let uus: Vec<G1Projective> = us.iter().map(|u| grparams.gen1() * u).collect();
|
||||
let yy = grparams.gen2() * y;
|
||||
let wws: Vec<G2Projective> = ws.iter().map(|w| grparams.gen2() * w).collect();
|
||||
let zz = grparams.gen2() * z;
|
||||
pub fn new(grp: GroupParameters, a: usize, b: usize) -> SPSKeyPair {
|
||||
let us = grp.n_random_scalars(b);
|
||||
let ws = grp.n_random_scalars(a);
|
||||
let y = grp.random_scalar();
|
||||
let z = grp.random_scalar();
|
||||
let uus: Vec<G1Projective> = us.iter().map(|u| grp.gen1() * u).collect();
|
||||
let yy = grp.gen2() * y;
|
||||
let wws: Vec<G2Projective> = ws.iter().map(|w| grp.gen2() * w).collect();
|
||||
let zz = grp.gen2() * z;
|
||||
|
||||
let sps_vk = SPSVerificationKey {
|
||||
grp: grparams.clone(),
|
||||
grp: grp.clone(),
|
||||
uus,
|
||||
wws,
|
||||
yy,
|
||||
|
||||
Reference in New Issue
Block a user