diff --git a/src/e2ee.rs b/src/e2ee.rs index 0779da3b8..a09298ce1 100644 --- a/src/e2ee.rs +++ b/src/e2ee.rs @@ -83,12 +83,15 @@ impl EncryptHelper { None }; + let shared_secret = shared_secret.to_string(); let mut raw_message = Vec::new(); let cursor = Cursor::new(&mut raw_message); mail_to_encrypt.clone().write_part(cursor).ok(); - let ctext = - pgp::symm_encrypt_message(raw_message, sign_key, shared_secret, compress).await?; + let ctext = tokio::task::spawn_blocking(move || { + pgp::symm_encrypt_message(raw_message, sign_key, shared_secret, compress) + }) + .await??; Ok(ctext) } diff --git a/src/mimeparser/shared_secret_decryption_tests.rs b/src/mimeparser/shared_secret_decryption_tests.rs index 3364b4b42..f6aed1d1e 100644 --- a/src/mimeparser/shared_secret_decryption_tests.rs +++ b/src/mimeparser/shared_secret_decryption_tests.rs @@ -48,10 +48,9 @@ async fn test_shared_secret_decryption_ex( let encrypted_msg = pgp::symm_encrypt_message( plain_text.as_bytes().to_vec(), signer_key, - secret_for_encryption, + secret_for_encryption.to_string(), true, - ) - .await?; + )?; let boundary = "boundary123"; let rcvd_mail = format!( diff --git a/src/pgp.rs b/src/pgp.rs index 8e1d27555..f573e5468 100644 --- a/src/pgp.rs +++ b/src/pgp.rs @@ -254,44 +254,41 @@ pub fn pk_validate( /// Symmetrically encrypt the message. /// This is used for broadcast channels and for version 2 of the Securejoin protocol. /// `shared secret` is the secret that will be used for symmetric encryption. -pub async fn symm_encrypt_message( +pub fn symm_encrypt_message( plain: Vec, private_key_for_signing: Option, - shared_secret: &str, + shared_secret: String, compress: bool, ) -> Result { - let shared_secret = Password::from(shared_secret.to_string()); + let shared_secret = Password::from(shared_secret); - tokio::task::spawn_blocking(move || { - let msg = MessageBuilder::from_bytes("", plain); - let mut rng = thread_rng(); - let mut salt = [0u8; 8]; - rng.fill(&mut salt[..]); - let s2k = StringToKey::Salted { - hash_alg: HashAlgorithm::default(), - salt, - }; - let mut msg = msg.seipd_v2( - &mut rng, - SYMMETRIC_KEY_ALGORITHM, - AeadAlgorithm::Ocb, - ChunkSize::C8KiB, - ); - msg.encrypt_with_password(&mut rng, s2k, &shared_secret)?; + let msg = MessageBuilder::from_bytes("", plain); + let mut rng = thread_rng(); + let mut salt = [0u8; 8]; + rng.fill(&mut salt[..]); + let s2k = StringToKey::Salted { + hash_alg: HashAlgorithm::default(), + salt, + }; + let mut msg = msg.seipd_v2( + &mut rng, + SYMMETRIC_KEY_ALGORITHM, + AeadAlgorithm::Ocb, + ChunkSize::C8KiB, + ); + msg.encrypt_with_password(&mut rng, s2k, &shared_secret)?; - if let Some(private_key_for_signing) = private_key_for_signing.as_deref() { - let hash_algorithm = private_key_for_signing.hash_alg(); - msg.sign(private_key_for_signing, Password::empty(), hash_algorithm); - } - if compress { - msg.compression(CompressionAlgorithm::ZLIB); - } + if let Some(private_key_for_signing) = private_key_for_signing.as_deref() { + let hash_algorithm = private_key_for_signing.hash_alg(); + msg.sign(private_key_for_signing, Password::empty(), hash_algorithm); + } + if compress { + msg.compression(CompressionAlgorithm::ZLIB); + } - let encoded_msg = msg.to_armored_string(&mut rng, Default::default())?; + let encoded_msg = msg.to_armored_string(&mut rng, Default::default())?; - Ok(encoded_msg) - }) - .await? + Ok(encoded_msg) } /// Merges and minimizes OpenPGP certificates.