3 out of 4 pairing tests in the zk proof pass

This commit is contained in:
aniampio
2022-05-26 13:06:44 +01:00
parent e07974ad2b
commit bb0328137a
3 changed files with 16 additions and 33 deletions
@@ -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,