From bb0328137aa693425e0b35a2b38cc33a5bc4706f Mon Sep 17 00:00:00 2001 From: aniampio Date: Thu, 26 May 2022 13:06:44 +0100 Subject: [PATCH] 3 out of 4 pairing tests in the zk proof pass --- .../src/proofs/proof_spend.rs | 19 +++++----------- .../src/scheme/setup.rs | 8 ------- .../scheme/structure_preserving_signature.rs | 22 +++++++++---------- 3 files changed, 16 insertions(+), 33 deletions(-) diff --git a/common/nym_offline_divisible_ecash/src/proofs/proof_spend.rs b/common/nym_offline_divisible_ecash/src/proofs/proof_spend.rs index 7a5823f805..be66f0ccea 100644 --- a/common/nym_offline_divisible_ecash/src/proofs/proof_spend.rs +++ b/common/nym_offline_divisible_ecash/src/proofs/proof_spend.rs @@ -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, diff --git a/common/nym_offline_divisible_ecash/src/scheme/setup.rs b/common/nym_offline_divisible_ecash/src/scheme/setup.rs index 8cf7dfd085..4657456a57 100644 --- a/common/nym_offline_divisible_ecash/src/scheme/setup.rs +++ b/common/nym_offline_divisible_ecash/src/scheme/setup.rs @@ -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 { diff --git a/common/nym_offline_divisible_ecash/src/scheme/structure_preserving_signature.rs b/common/nym_offline_divisible_ecash/src/scheme/structure_preserving_signature.rs index 24b76b1893..f4774a9237 100644 --- a/common/nym_offline_divisible_ecash/src/scheme/structure_preserving_signature.rs +++ b/common/nym_offline_divisible_ecash/src/scheme/structure_preserving_signature.rs @@ -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 = us.iter().map(|u| grparams.gen1() * u).collect(); - let yy = grparams.gen2() * y; - let wws: Vec = 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 = us.iter().map(|u| grp.gen1() * u).collect(); + let yy = grp.gen2() * y; + let wws: Vec = 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,