diff --git a/common/nym_offline_compact_ecash/src/proofs/mod.rs b/common/nym_offline_compact_ecash/src/proofs/mod.rs index 7208560002..6f42ee0f05 100644 --- a/common/nym_offline_compact_ecash/src/proofs/mod.rs +++ b/common/nym_offline_compact_ecash/src/proofs/mod.rs @@ -1,18 +1,10 @@ use std::borrow::Borrow; -use std::convert::TryFrom; -use std::convert::TryInto; -use bls12_381::{G1Affine, G1Projective, Scalar}; -use digest::generic_array::typenum::Unsigned; +use bls12_381::Scalar; use digest::Digest; -use group::GroupEncoding; +use digest::generic_array::typenum::Unsigned; use sha2::Sha256; -use crate::error::{CompactEcashError, Result}; -use crate::scheme::keygen::PublicKeyUser; -use crate::scheme::setup::GroupParameters; -use crate::utils::try_deserialize_g1_projective; - pub mod proof_spend; pub mod proof_withdrawal; @@ -20,10 +12,10 @@ type ChallengeDigest = Sha256; /// Generates a Scalar [or Fp] challenge by hashing a number of elliptic curve points. fn compute_challenge(iter: I) -> Scalar -where - D: Digest, - I: Iterator, - B: AsRef<[u8]>, + where + D: Digest, + I: Iterator, + B: AsRef<[u8]>, { let mut h = D::new(); for point_representation in iter { @@ -51,8 +43,8 @@ fn produce_response(witness_replacement: &Scalar, challenge: &Scalar, secret: &S // note: it's caller's responsibility to ensure witnesses.len() = secrets.len() fn produce_responses(witnesses: &[Scalar], challenge: &Scalar, secrets: &[S]) -> Vec -where - S: Borrow, + where + S: Borrow, { debug_assert_eq!(witnesses.len(), secrets.len()); diff --git a/common/nym_offline_compact_ecash/src/proofs/proof_spend.rs b/common/nym_offline_compact_ecash/src/proofs/proof_spend.rs index 50e23e64c0..2674658c39 100644 --- a/common/nym_offline_compact_ecash/src/proofs/proof_spend.rs +++ b/common/nym_offline_compact_ecash/src/proofs/proof_spend.rs @@ -1,13 +1,12 @@ use std::convert::{TryFrom, TryInto}; -use std::ops::Neg; use bls12_381::{G1Projective, G2Projective, Scalar}; -use group::{Curve, Group, GroupEncoding}; +use group::{Curve, GroupEncoding}; use crate::error::{CompactEcashError, Result}; use crate::proofs::{ChallengeDigest, compute_challenge, produce_response, produce_responses}; -use crate::scheme::keygen::{SecretKeyUser, VerificationKeyAuth}; -use crate::scheme::setup::{GroupParameters, Parameters}; +use crate::scheme::keygen::VerificationKeyAuth; +use crate::scheme::setup::Parameters; use crate::utils::{try_deserialize_g1_projective, try_deserialize_g2_projective}; #[derive(Debug)] @@ -303,7 +302,7 @@ impl SpendProof { let zkcm_kappa_k = r_lk.iter() .zip(r_r_lk.iter()) - .map(|(r_k, r_r_k)| params.pkRP().alpha + params.pkRP().beta * r_k + grparams.gen2() * r_r_k) + .map(|(r_k, r_r_k)| params.pk_rp().alpha + params.pk_rp().beta * r_k + grparams.gen2() * r_r_k) .collect::>(); let zkcm_kappa_k_bytes = zkcm_kappa_k @@ -439,7 +438,7 @@ impl SpendProof { .iter() .zip(self.response_r_l.iter()) .zip(self.response_l.iter()) - .map(|((kappa_k, resp_r_k), resp_r_l_k)| kappa_k * self.challenge + grparams.gen2() * resp_r_k + params.pkRP().alpha * (Scalar::one() - self.challenge) + params.pkRP().beta * resp_r_l_k) + .map(|((kappa_k, resp_r_k), resp_r_l_k)| kappa_k * self.challenge + grparams.gen2() * resp_r_k + params.pk_rp().alpha * (Scalar::one() - self.challenge) + params.pk_rp().beta * resp_r_l_k) .collect::>(); let zkcm_kappa_k_bytes = zkcm_kappa_k @@ -469,26 +468,25 @@ impl SpendProof { #[cfg(test)] mod tests { - use bls12_381::{G1Projective, G2Projective, Scalar}; - use group::Curve; - use rand::{Rng, thread_rng}; + use bls12_381::{G2Projective, Scalar}; + use rand::thread_rng; use crate::proofs::proof_spend::{SpendInstance, SpendProof, SpendWitness}; use crate::scheme::{pseudorandom_f_delta_v, pseudorandom_f_g_v}; use crate::scheme::aggregation::aggregate_verification_keys; use crate::scheme::keygen::{PublicKeyUser, ttp_keygen, VerificationKeyAuth}; use crate::scheme::PayInfo; - use crate::scheme::setup::{GroupParameters, setup}; + use crate::scheme::setup::setup; use crate::utils::hash_to_scalar; #[test] fn spend_proof_construct_and_verify() { - let rng = thread_rng(); + let _rng = thread_rng(); let L = 32; let params = setup(L); let grparams = params.grp(); let sk = grparams.random_scalar(); - let pk_user = PublicKeyUser { + let _pk_user = PublicKeyUser { pk: grparams.gen1() * sk, }; let authorities_keypairs = ttp_keygen(&grparams, 2, 3).unwrap(); @@ -539,10 +537,10 @@ mod tests { // parse the signature associated with value l let sign_l = params.get_sign_by_idx(l).unwrap(); // randomise the signature associated with value l - let (sign_l_prime, r_l) = sign_l.randomise(grparams); + let (_sign_l_prime, r_l) = sign_l.randomise(grparams); // compute kappa_l let kappa_k = - grparams.gen2() * r_l + params.pkRP().alpha + params.pkRP().beta * Scalar::from(l); + grparams.gen2() * r_l + params.pk_rp().alpha + params.pk_rp().beta * Scalar::from(l); let instance = SpendInstance { kappa, diff --git a/common/nym_offline_compact_ecash/src/proofs/proof_withdrawal.rs b/common/nym_offline_compact_ecash/src/proofs/proof_withdrawal.rs index d44db84c42..35c4da55a8 100644 --- a/common/nym_offline_compact_ecash/src/proofs/proof_withdrawal.rs +++ b/common/nym_offline_compact_ecash/src/proofs/proof_withdrawal.rs @@ -5,7 +5,7 @@ use group::GroupEncoding; use itertools::izip; use crate::error::{CompactEcashError, Result}; -use crate::proofs::{compute_challenge, produce_response, produce_responses, ChallengeDigest}; +use crate::proofs::{ChallengeDigest, compute_challenge, produce_response, produce_responses}; use crate::scheme::keygen::PublicKeyUser; use crate::scheme::setup::GroupParameters; use crate::utils::try_deserialize_g1_projective; @@ -136,10 +136,10 @@ impl WithdrawalReqProof { // compute zkp commitments for each instance let zkcm_com = params.gen1() * r_com_opening + r_attributes - .iter() - .zip(params.gammas().iter()) - .map(|(rm_i, gamma_i)| gamma_i * rm_i) - .sum::(); + .iter() + .zip(params.gammas().iter()) + .map(|(rm_i, gamma_i)| gamma_i * rm_i) + .sum::(); let zkcm_pedcom = r_pedcom_openings .iter() @@ -201,21 +201,21 @@ impl WithdrawalReqProof { let zkcm_com = instance.com * self.challenge + params.gen1() * self.response_opening + self - .response_attributes - .iter() - .zip(params.gammas().iter()) - .map(|(m_i, gamma_i)| gamma_i * m_i) - .sum::(); + .response_attributes + .iter() + .zip(params.gammas().iter()) + .map(|(m_i, gamma_i)| gamma_i * m_i) + .sum::(); let zkcm_pedcom = izip!( instance.pc_coms.iter(), self.response_openings.iter(), self.response_attributes.iter() ) - .map(|(cm_j, resp_o_j, resp_m_j)| { - cm_j * self.challenge + params.gen1() * resp_o_j + instance.h * resp_m_j - }) - .collect::>(); + .map(|(cm_j, resp_o_j, resp_m_j)| { + cm_j * self.challenge + params.gen1() * resp_o_j + instance.h * resp_m_j + }) + .collect::>(); let zk_commitment_user_sk = instance.pk_user.pk * self.challenge + params.gen1() * self.response_attributes[0]; @@ -279,7 +279,7 @@ mod tests { #[test] fn withdrawal_proof_construct_and_verify() { - let rng = thread_rng(); + let _rng = thread_rng(); let params = GroupParameters::new().unwrap(); let sk = params.random_scalar(); let pk_user = PublicKeyUser { @@ -292,10 +292,10 @@ mod tests { let com_opening = params.random_scalar(); let com = params.gen1() * com_opening + attr - .iter() - .zip(params.gammas()) - .map(|(&m, gamma)| gamma * m) - .sum::(); + .iter() + .zip(params.gammas()) + .map(|(&m, gamma)| gamma * m) + .sum::(); let h = hash_g1(com.to_bytes()); let pc_openings = params.n_random_scalars(attr.len()); diff --git a/common/nym_offline_compact_ecash/src/scheme/identify.rs b/common/nym_offline_compact_ecash/src/scheme/identify.rs index 8d9cd9280e..7b4deaed14 100644 --- a/common/nym_offline_compact_ecash/src/scheme/identify.rs +++ b/common/nym_offline_compact_ecash/src/scheme/identify.rs @@ -1,8 +1,3 @@ -use std::collections::HashSet; - -use bls12_381::G1Projective; -use group::Curve; - use crate::{PayInfo, VerificationKeyAuth}; use crate::error::{CompactEcashError, Result}; use crate::scheme::keygen::PublicKeyUser; @@ -51,9 +46,6 @@ pub fn identify(params: &Parameters, public_keys_u: &[PublicKeyUser], verificati #[cfg(test)] mod tests { - use std::collections::HashSet; - - use group::Curve; use itertools::izip; use crate::{aggregate_verification_keys, aggregate_wallets, generate_keypair_user, issue_verify, issue_wallet, PartialWallet, PayInfo, ttp_keygen, VerificationKeyAuth, withdrawal_request}; @@ -109,7 +101,7 @@ mod tests { let pay_info1 = PayInfo { info: [6u8; 32] }; let spend_vv = 1; - let (payment1, upd_wallet) = aggr_wallet.spend( + let (payment1, _upd_wallet) = aggr_wallet.spend( ¶ms, &verification_key, &user_keypair.secret_key(), @@ -221,7 +213,7 @@ mod tests { // GENERATE KEYS FOR OTHER USERS let mut public_keys: Vec = Default::default(); - for i in 0..50 { + for _i in 0..50 { let sk = grp.random_scalar(); let sk_user = SecretKeyUser { sk }; let pk_user = sk_user.public_key(&grp); @@ -271,7 +263,7 @@ mod tests { let pay_info1 = PayInfo { info: [6u8; 32] }; let spend_vv = 1; - let (payment1, _) = aggr_wallet.spend( + let (payment1, _upd_wallet) = aggr_wallet.spend( ¶ms, &verification_key, &user_keypair.secret_key(), diff --git a/common/nym_offline_compact_ecash/src/scheme/keygen.rs b/common/nym_offline_compact_ecash/src/scheme/keygen.rs index 92f47557f0..13d670fb20 100644 --- a/common/nym_offline_compact_ecash/src/scheme/keygen.rs +++ b/common/nym_offline_compact_ecash/src/scheme/keygen.rs @@ -5,7 +5,7 @@ use std::convert::TryFrom; use std::convert::TryInto; use bls12_381::{G1Projective, G2Projective, Scalar}; -use group::{Curve, GroupEncoding}; +use group::Curve; use crate::error::{CompactEcashError, Result}; use crate::scheme::aggregation::aggregate_verification_keys; diff --git a/common/nym_offline_compact_ecash/src/scheme/mod.rs b/common/nym_offline_compact_ecash/src/scheme/mod.rs index 4999a3a79c..bdda78e4c5 100644 --- a/common/nym_offline_compact_ecash/src/scheme/mod.rs +++ b/common/nym_offline_compact_ecash/src/scheme/mod.rs @@ -1,9 +1,7 @@ use std::cell::Cell; -use std::convert::TryFrom; -use std::convert::TryInto; use bls12_381::{G1Projective, G2Prepared, G2Projective, Scalar}; -use group::{Curve, Group}; +use group::Curve; use crate::Attribute; use crate::error::{CompactEcashError, Result}; @@ -11,7 +9,7 @@ use crate::proofs::proof_spend::{SpendInstance, SpendProof, SpendWitness}; use crate::scheme::keygen::{SecretKeyUser, VerificationKeyAuth}; use crate::scheme::setup::{GroupParameters, Parameters}; use crate::utils::{ - check_bilinear_pairing, hash_to_scalar, Signature, SignerIndex, try_deserialize_g1_projective, + check_bilinear_pairing, hash_to_scalar, Signature, SignerIndex, }; pub mod aggregation; @@ -59,9 +57,6 @@ impl Wallet { self.l.set(self.l.get() + 1); } - fn down(&self) { - self.l.set(self.l.get() - 1); - } pub fn spend( &self, @@ -105,8 +100,6 @@ impl Wallet { let mut o_a: Vec = Default::default(); let mut o_mu: Vec = Default::default(); let mut mu: Vec = Default::default(); - let mut o_lambda: Vec = Default::default(); - let mut lambda: Vec = Default::default(); let mut r_k_vec: Vec = Default::default(); let mut kappa_k_vec: Vec = Default::default(); let mut sign_lk_prime_vec: Vec = Default::default(); @@ -148,8 +141,8 @@ impl Wallet { r_k_vec.push(r_k); // compute kappa_k let kappa_k = grparams.gen2() * r_k - + params.pkRP().alpha - + params.pkRP().beta * Scalar::from(self.l() + k); + + params.pk_rp().alpha + + params.pk_rp().beta * Scalar::from(self.l() + k); kappa_k_vec.push(kappa_k); } diff --git a/common/nym_offline_compact_ecash/src/scheme/setup.rs b/common/nym_offline_compact_ecash/src/scheme/setup.rs index e21471023e..d0507129fa 100644 --- a/common/nym_offline_compact_ecash/src/scheme/setup.rs +++ b/common/nym_offline_compact_ecash/src/scheme/setup.rs @@ -2,7 +2,6 @@ use std::collections::HashMap; use bls12_381::{G1Affine, G1Projective, G2Affine, G2Prepared, G2Projective, Scalar}; use ff::Field; -use group::{Curve, GroupEncoding}; use rand::thread_rng; use crate::error::{CompactEcashError, Result}; @@ -102,7 +101,7 @@ pub struct Parameters { /// group parameters grp: GroupParameters, /// Public Key for range proof verification - pkRP: PublicKeyRP, + pk_rp: PublicKeyRP, /// Max value of wallet L: u64, /// list of signatures for values l in [0, L] @@ -113,8 +112,8 @@ impl Parameters { pub fn grp(&self) -> &GroupParameters { &self.grp } - pub fn pkRP(&self) -> &PublicKeyRP { - &self.pkRP + pub fn pk_rp(&self) -> &PublicKeyRP { + &self.pk_rp } pub fn L(&self) -> u64 { self.L @@ -140,8 +139,8 @@ pub fn setup(L: u64) -> Parameters { let grp = GroupParameters::new().unwrap(); let x = grp.random_scalar(); let y = grp.random_scalar(); - let skRP = SecretKeyRP { x, y }; - let pkRP = skRP.public_key(&grp); + let sk_rp = SecretKeyRP { x, y }; + let pk_rp = sk_rp.public_key(&grp); let mut signs = HashMap::new(); for l in 0..L { let r = grp.random_scalar(); @@ -156,7 +155,7 @@ pub fn setup(L: u64) -> Parameters { } Parameters { grp, - pkRP, + pk_rp, L, signs, } diff --git a/common/nym_offline_compact_ecash/src/scheme/withdrawal.rs b/common/nym_offline_compact_ecash/src/scheme/withdrawal.rs index 2c5e32711d..4f8411fb63 100644 --- a/common/nym_offline_compact_ecash/src/scheme/withdrawal.rs +++ b/common/nym_offline_compact_ecash/src/scheme/withdrawal.rs @@ -6,9 +6,8 @@ use crate::proofs::proof_withdrawal::{ WithdrawalReqInstance, WithdrawalReqProof, WithdrawalReqWitness, }; use crate::scheme::keygen::{PublicKeyUser, SecretKeyAuth, SecretKeyUser, VerificationKeyAuth}; -use crate::scheme::keygen::ttp_keygen; use crate::scheme::PartialWallet; -use crate::scheme::setup::{GroupParameters, Parameters}; +use crate::scheme::setup::GroupParameters; use crate::utils::{check_bilinear_pairing, hash_g1}; use crate::utils::{BlindedSignature, Signature}; @@ -197,7 +196,3 @@ pub fn issue_verify( }) } -#[cfg(test)] -mod tests { - use super::*; -} diff --git a/common/nym_offline_compact_ecash/src/tests/e2e.rs b/common/nym_offline_compact_ecash/src/tests/e2e.rs index 2cd1126c78..9469e3b5d5 100644 --- a/common/nym_offline_compact_ecash/src/tests/e2e.rs +++ b/common/nym_offline_compact_ecash/src/tests/e2e.rs @@ -1,18 +1,16 @@ use itertools::izip; use crate::error::CompactEcashError; -use crate::scheme::{PartialWallet, Payment}; use crate::scheme::aggregation::{ - aggregate_signature_shares, aggregate_verification_keys, aggregate_wallets, + aggregate_verification_keys, aggregate_wallets, }; -use crate::scheme::identify::identify; use crate::scheme::keygen::{ - generate_keypair_user, PublicKeyUser, SecretKeyUser, ttp_keygen, VerificationKeyAuth, + generate_keypair_user, ttp_keygen, VerificationKeyAuth, }; +use crate::scheme::PartialWallet; use crate::scheme::PayInfo; -use crate::scheme::setup::{GroupParameters, Parameters, setup}; +use crate::scheme::setup::setup; use crate::scheme::withdrawal::{issue_verify, issue_wallet, withdrawal_request}; -use crate::utils::{hash_to_scalar, SignatureShare}; #[test] fn main() -> Result<(), CompactEcashError> { @@ -62,7 +60,7 @@ fn main() -> Result<(), CompactEcashError> { let pay_info = PayInfo { info: [6u8; 32] }; let spend_vv = 1; - let (payment, upd_wallet) = aggr_wallet.spend( + let (payment, _) = aggr_wallet.spend( ¶ms, &verification_key, &user_keypair.secret_key(),