From 14632284d79339bd4a517eab592219da2920bf03 Mon Sep 17 00:00:00 2001 From: fufesou Date: Sun, 31 May 2026 10:58:48 +0800 Subject: [PATCH] fix(crypt): symmetric crypt compatibility Signed-off-by: fufesou --- src/config.rs | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/src/config.rs b/src/config.rs index 496d6bae3..0463046ad 100644 --- a/src/config.rs +++ b/src/config.rs @@ -516,12 +516,17 @@ impl Config2 { fn store(&self) { let mut config = self.clone(); + let stored = Config::load_::("2"); if let Some(mut socks) = config.socks { + let stored_password = stored + .socks + .as_ref() + .map(|socks| socks.password.as_str()) + .unwrap_or_default(); socks.password = - encrypt_str_or_original(&socks.password, PASSWORD_ENC_VERSION, ENCRYPT_MAX_LEN); + keep_encrypted_storage_if_plaintext_unchanged(&socks.password, stored_password); config.socks = Some(socks); } - let stored = Config::load_::("2"); config.unlock_pin = keep_encrypted_storage_if_plaintext_unchanged(&config.unlock_pin, &stored.unlock_pin); Config::store_(&config, "2"); @@ -716,8 +721,15 @@ impl Config { if !config.password.is_empty() && decode_permanent_password_h1_from_storage(&config.password).is_none() { - config.password = - encrypt_str_or_original(&config.password, PASSWORD_ENC_VERSION, ENCRYPT_MAX_LEN); + let stored = Config::load_::(""); + if stored.password == config.password { + config.password = stored.password; + } else { + config.password = keep_encrypted_storage_if_plaintext_unchanged( + &config.password, + &stored.password, + ); + } } let (stored_id, encrypted, _) = decrypt_str_or_original(&config.enc_id, PASSWORD_ENC_VERSION);