From ada02fe631a3015fd9b2be8d833e3d269fc98935 Mon Sep 17 00:00:00 2001 From: aniampio Date: Tue, 24 Oct 2023 15:02:19 +0100 Subject: [PATCH] Improve function performance and readability --- .../src/proofs/proof_spend.rs | 2 +- .../src/scheme/identify.rs | 51 +++++++++---------- .../src/scheme/mod.rs | 23 ++++----- .../src/tests/e2e.rs | 2 +- 4 files changed, 37 insertions(+), 41 deletions(-) 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 c3f77ee435..a7d5efd973 100644 --- a/common/nym_offline_compact_ecash/src/proofs/proof_spend.rs +++ b/common/nym_offline_compact_ecash/src/proofs/proof_spend.rs @@ -744,7 +744,7 @@ mod tests { let cc = g1 * o_c + gamma1 * v; // compute hash of the payment info - let pay_info = PayInfo { info: [37u8; 32] }; + let pay_info = PayInfo { info: [37u8; 88] }; let rr = hash_to_scalar(pay_info.info); // evaluate the pseudorandom functions diff --git a/common/nym_offline_compact_ecash/src/scheme/identify.rs b/common/nym_offline_compact_ecash/src/scheme/identify.rs index c9bbe1b519..c6294019a1 100644 --- a/common/nym_offline_compact_ecash/src/scheme/identify.rs +++ b/common/nym_offline_compact_ecash/src/scheme/identify.rs @@ -107,7 +107,7 @@ mod tests { .unwrap(); // Let's try to spend some coins - let pay_info1 = PayInfo { info: [6u8; 32] }; + let pay_info1 = PayInfo { info: [6u8; 88] }; let spend_vv = 1; let (payment1, _upd_wallet) = aggr_wallet @@ -188,7 +188,7 @@ mod tests { .unwrap(); // Let's try to spend some coins - let pay_info1 = PayInfo { info: [6u8; 32] }; + let pay_info1 = PayInfo { info: [6u8; 88] }; let spend_vv = 1; let (payment1, upd_wallet) = aggr_wallet @@ -206,17 +206,16 @@ mod tests { .spend_verify(¶ms, &verification_key, &pay_info1) .unwrap()); - let pay_info2 = PayInfo { info: [7u8; 32] }; - let (payment2, _) = upd_wallet - .spend( - ¶ms, - &verification_key, - &user_keypair.secret_key(), - &pay_info2, - false, - spend_vv, - ) - .unwrap(); + + let pay_info2 = PayInfo { info: [7u8; 88] }; + let (payment2, _) = upd_wallet.spend( + ¶ms, + &verification_key, + &user_keypair.secret_key(), + &pay_info2, + false, + spend_vv, + ).unwrap(); assert!(payment2 .spend_verify(¶ms, &verification_key, &pay_info2) @@ -284,7 +283,7 @@ mod tests { .unwrap(); // Let's try to spend some coins - let pay_info1 = PayInfo { info: [6u8; 32] }; + let pay_info1 = PayInfo { info: [6u8; 88] }; let spend_vv = 1; let (payment1, _upd_wallet) = aggr_wallet @@ -306,7 +305,7 @@ mod tests { let current_l = aggr_wallet.l.get(); aggr_wallet.l.set(current_l - 1); - let pay_info2 = PayInfo { info: [7u8; 32] }; + let pay_info2 = PayInfo { info: [7u8; 88] }; let (payment2, _) = aggr_wallet .spend( @@ -388,7 +387,7 @@ mod tests { .unwrap(); // Let's try to spend some coins - let pay_info1 = PayInfo { info: [6u8; 32] }; + let pay_info1 = PayInfo { info: [6u8; 88] }; let spend_vv = 10; let (payment1, _) = aggr_wallet @@ -410,17 +409,15 @@ mod tests { let current_l = aggr_wallet.l.get(); aggr_wallet.l.set(current_l - 10); - let pay_info2 = PayInfo { info: [7u8; 32] }; - let (payment2, _) = aggr_wallet - .spend( - ¶ms, - &verification_key, - &user_keypair.secret_key(), - &pay_info2, - false, - spend_vv, - ) - .unwrap(); + let pay_info2 = PayInfo { info: [7u8; 88] }; + let (payment2, _) = aggr_wallet.spend( + ¶ms, + &verification_key, + &user_keypair.secret_key(), + &pay_info2, + false, + spend_vv, + ).unwrap(); let identify_result = identify(payment1, payment2, pay_info1.clone(), pay_info2.clone()).unwrap(); diff --git a/common/nym_offline_compact_ecash/src/scheme/mod.rs b/common/nym_offline_compact_ecash/src/scheme/mod.rs index 537f891bb1..4ecb3bac1a 100644 --- a/common/nym_offline_compact_ecash/src/scheme/mod.rs +++ b/common/nym_offline_compact_ecash/src/scheme/mod.rs @@ -315,25 +315,24 @@ pub fn compute_kappa( #[derive(PartialEq, Eq, Debug, Clone)] pub struct PayInfo { - pub info: [u8; 32], + pub info: [u8; 88], } -pub fn generate_payinfo(provider_pk: PublicKeyUser) -> Vec{ - let mut rng = thread_rng(); - let mut rbytes = [0u8; 32]; - rng.fill(&mut rbytes); +pub fn generate_payinfo(provider_pk: PublicKeyUser) -> PayInfo{ + let mut info = [0u8; 88]; + // Generating random bytes + thread_rng().fill(&mut info[..32]); + + // Adding timestamp bytes let timestamp = Utc::now().timestamp(); - let timestamp_bytes: [u8; 8] = timestamp.to_be_bytes(); + info[32..40].copy_from_slice(×tamp.to_be_bytes()); + // Adding provider public key bytes let ppk_bytes = provider_pk.pk.to_affine().to_compressed(); + info[40..].copy_from_slice(&ppk_bytes); - let mut payinfo = Vec::with_capacity(32 + 8 +48); - payinfo.extend_from_slice(&rbytes); - payinfo.extend_from_slice(×tamp_bytes); - payinfo.extend_from_slice(&ppk_bytes); - - payinfo + PayInfo { info } } #[derive(Debug, Clone, PartialEq)] diff --git a/common/nym_offline_compact_ecash/src/tests/e2e.rs b/common/nym_offline_compact_ecash/src/tests/e2e.rs index 2a6f3bc45c..94182b98f7 100644 --- a/common/nym_offline_compact_ecash/src/tests/e2e.rs +++ b/common/nym_offline_compact_ecash/src/tests/e2e.rs @@ -70,7 +70,7 @@ fn main() -> Result<(), CompactEcashError> { assert_eq!(aggr_wallet, wallet); // Let's try to spend some coins - let pay_info = PayInfo { info: [6u8; 32] }; + let pay_info = PayInfo { info: [6u8; 88] }; let spend_vv = 1; let (payment, _) = aggr_wallet.spend(