From 68174334db922f70404e317f5263c93d0b7b8c78 Mon Sep 17 00:00:00 2001 From: pandadev <70103896+0PandaDEV@users.noreply.github.com> Date: Fri, 14 Feb 2025 17:53:04 +0100 Subject: [PATCH] refactor(sync): optimize emoji sequence generation in pairing --- src-tauri/src/sync/pairing.rs | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src-tauri/src/sync/pairing.rs b/src-tauri/src/sync/pairing.rs index 2c16f43..4ccd070 100644 --- a/src-tauri/src/sync/pairing.rs +++ b/src-tauri/src/sync/pairing.rs @@ -1,7 +1,8 @@ use aes_gcm::{ Aes256Gcm, KeyInit }; use aes_gcm::aead::Aead; use base64::{ engine::general_purpose::STANDARD, Engine }; -use rand::{ Rng, thread_rng }; +use rand::thread_rng; +use rand::Rng; use rand::seq::SliceRandom; use serde::{ Deserialize, Serialize }; use tauri::State; @@ -26,8 +27,8 @@ impl PairingManager { pub fn new() -> Self { let mut rng = thread_rng(); let pairing_key = Self::generate_emoji_sequence(&mut rng); - let encryption_key: [u8; 32] = rng.gen(); - let nonce: [u8; 12] = rng.gen(); + let encryption_key = rng.gen::<[u8; 32]>(); + let nonce = rng.gen::<[u8; 12]>(); PairingManager { pairing_key, encryption_key, @@ -35,9 +36,10 @@ impl PairingManager { } } - pub fn generate_emoji_sequence(rng: &mut impl Rng) -> String { - let key: Vec<&str> = EMOJI_POOL.choose_multiple(rng, PAIRING_KEY_LENGTH).cloned().collect(); - key.join(" ") + pub fn generate_emoji_sequence(rng: &mut R) -> String { + let mut emojis = EMOJI_POOL.to_vec(); + emojis.shuffle(rng); + emojis.iter().take(PAIRING_KEY_LENGTH).cloned().collect::>().join(" ") } pub fn validate_pairing(&self, input_key: &str) -> bool { @@ -110,3 +112,4 @@ pub fn complete_pairing( pub fn generate_invitation(pairing_manager: State<'_, PairingManager>) -> String { pairing_manager.generate_invitation_code() } +