From 24f877fda558bb6a43a13e1a0a3eef2c6e80ded9 Mon Sep 17 00:00:00 2001 From: Georgio Nicolas Date: Tue, 29 Jul 2025 15:04:11 +0200 Subject: [PATCH] replace unsafe static values by function calls --- common/dkg/Cargo.toml | 1 - common/dkg/src/bte/encryption.rs | 25 ++++++++++++++----------- common/dkg/src/bte/mod.rs | 13 +++++-------- 3 files changed, 19 insertions(+), 20 deletions(-) diff --git a/common/dkg/Cargo.toml b/common/dkg/Cargo.toml index 58e899d7b3..b8e4f55731 100644 --- a/common/dkg/Cargo.toml +++ b/common/dkg/Cargo.toml @@ -17,7 +17,6 @@ nym-contracts-common = { path = "../cosmwasm-smart-contracts/contracts-common", bs58 = { workspace = true } -lazy_static = { workspace = true } rand = { workspace = true } rand_chacha = { workspace = true } rand_core = { workspace = true } diff --git a/common/dkg/src/bte/encryption.rs b/common/dkg/src/bte/encryption.rs index 81b304bc7b..33dd5d3c45 100644 --- a/common/dkg/src/bte/encryption.rs +++ b/common/dkg/src/bte/encryption.rs @@ -2,7 +2,10 @@ // SPDX-License-Identifier: Apache-2.0 use crate::bte::keys::{DecryptionKey, PublicKey}; -use crate::bte::{evaluate_f, Params, CHUNK_SIZE, G2_GENERATOR_PREPARED, NUM_CHUNKS, PAIRING_BASE}; +use crate::bte::{ + evaluate_f, precompute_g2_generator_prepared, precompute_pairing_base, Params, CHUNK_SIZE, + NUM_CHUNKS, +}; use crate::error::DkgError; use crate::utils::{combine_g1_chunks, combine_scalar_chunks, deserialize_g1, deserialize_g2}; use crate::{Chunk, ChunkedShare, Share}; @@ -296,14 +299,14 @@ pub fn decrypt_share( let cc_ij = &ciphertext.ciphertext_chunks[i][j]; let miller = bls12_381::multi_miller_loop(&[ - (&cc_ij.to_affine(), &G2_GENERATOR_PREPARED), + (&cc_ij.to_affine(), &precompute_g2_generator_prepared()), (&rr_j.to_affine(), &G2Prepared::from(b_neg)), (&dk.a.to_affine(), &G2Prepared::from(zz_j)), (&ss_j.to_affine(), &G2Prepared::from(e_neg)), ]); let m = miller.final_exponentiation(); - plaintext.chunks[j] = baby_step_giant_step(&m, &PAIRING_BASE, lookup_table)?; + plaintext.chunks[j] = baby_step_giant_step(&m, &precompute_pairing_base(), lookup_table)?; } plaintext.try_into() @@ -363,7 +366,7 @@ impl BabyStepGiantStepLookup { impl Default for BabyStepGiantStepLookup { fn default() -> Self { - BabyStepGiantStepLookup::precompute(&PAIRING_BASE) + BabyStepGiantStepLookup::precompute(&precompute_pairing_base()) } } @@ -399,7 +402,7 @@ pub fn baby_step_giant_step( #[cfg(test)] mod tests { use super::*; - use crate::bte::{keygen, setup, DEFAULT_BSGS_TABLE}; + use crate::bte::{encryption, keygen, setup}; use rand_core::SeedableRng; fn verify_hazmat_rand(ciphertext: &Ciphertexts, randomness: &HazmatRandomness) { @@ -457,7 +460,7 @@ mod tests { let (decryption_key1, public_key1) = keygen(¶ms, &mut rng); let (decryption_key2, public_key2) = keygen(¶ms, &mut rng); - let lookup_table = &DEFAULT_BSGS_TABLE; + let lookup_table = encryption::BabyStepGiantStepLookup::default(); for _ in 0..10 { let m1 = Share::random(&mut rng); @@ -472,7 +475,7 @@ mod tests { &decryption_key1, 0, &ciphertext, - Some(lookup_table), + Some(&lookup_table), ) .unwrap(); let recovered2 = decrypt_share( @@ -480,7 +483,7 @@ mod tests { &decryption_key2, 1, &ciphertext, - Some(lookup_table), + Some(&lookup_table), ) .unwrap(); assert_eq!(m1, recovered1); @@ -498,7 +501,7 @@ mod tests { let (decryption_key1, public_key1) = keygen(¶ms, &mut rng); let (decryption_key2, public_key2) = keygen(¶ms, &mut rng); - let lookup_table = &DEFAULT_BSGS_TABLE; + let lookup_table = encryption::BabyStepGiantStepLookup::default(); for _ in 0..10 { let m1 = Share::random(&mut rng); @@ -513,7 +516,7 @@ mod tests { &decryption_key1, 0, &ciphertext, - Some(lookup_table), + Some(&lookup_table), ) .unwrap(); let recovered2 = decrypt_share( @@ -521,7 +524,7 @@ mod tests { &decryption_key2, 1, &ciphertext, - Some(lookup_table), + Some(&lookup_table), ) .unwrap(); assert_eq!(m1, recovered1); diff --git a/common/dkg/src/bte/mod.rs b/common/dkg/src/bte/mod.rs index 0bb18dc082..a6be5cfe95 100644 --- a/common/dkg/src/bte/mod.rs +++ b/common/dkg/src/bte/mod.rs @@ -5,7 +5,6 @@ use crate::utils::hash_g2; use crate::{Chunk, Share}; use bls12_381::{G1Affine, G2Affine, G2Prepared, G2Projective, Gt}; use group::Curve; -use lazy_static::lazy_static; pub mod encryption; pub mod keys; @@ -16,13 +15,11 @@ pub mod proof_sharing; pub use encryption::{decrypt_share, encrypt_shares, Ciphertexts}; pub use keys::{keygen, DecryptionKey, PublicKey, PublicKeyWithProof}; -lazy_static! { - pub(crate) static ref PAIRING_BASE: Gt = - bls12_381::pairing(&G1Affine::generator(), &G2Affine::generator()); - pub(crate) static ref G2_GENERATOR_PREPARED: G2Prepared = - G2Prepared::from(G2Affine::generator()); - pub(crate) static ref DEFAULT_BSGS_TABLE: encryption::BabyStepGiantStepLookup = - encryption::BabyStepGiantStepLookup::default(); +pub(crate) fn precompute_pairing_base() -> Gt { + bls12_381::pairing(&G1Affine::generator(), &G2Affine::generator()) +} +pub(crate) fn precompute_g2_generator_prepared() -> G2Prepared { + G2Prepared::from(G2Affine::generator()) } // Domain tries to follow guidelines specified by: