From 7ff3cf4af05cde786772acd81a09f84c2a1c4dc5 Mon Sep 17 00:00:00 2001 From: link2xt Date: Sun, 5 Dec 2021 07:30:47 +0000 Subject: [PATCH] Accept keyring by reference in pk_decrypt --- src/e2ee.rs | 2 +- src/pgp.rs | 32 ++++++++++++++------------------ 2 files changed, 15 insertions(+), 19 deletions(-) diff --git a/src/e2ee.rs b/src/e2ee.rs index b776cb717..c624615e6 100644 --- a/src/e2ee.rs +++ b/src/e2ee.rs @@ -305,7 +305,7 @@ async fn decrypt_part( if has_decrypted_pgp_armor(&data) { let (plain, ret_valid_signatures) = - pgp::pk_decrypt(data, private_keyring, public_keyring_for_validate).await?; + pgp::pk_decrypt(data, private_keyring, &public_keyring_for_validate).await?; // If the message was wrongly or not signed, still return the plain text. // The caller has to check the signatures then. diff --git a/src/pgp.rs b/src/pgp.rs index c5ac98862..e09f5bd39 100644 --- a/src/pgp.rs +++ b/src/pgp.rs @@ -284,7 +284,7 @@ pub async fn pk_encrypt( pub async fn pk_decrypt( ctext: Vec, private_keys_for_decryption: Keyring, - public_keys_for_validation: Keyring, + public_keys_for_validation: &Keyring, ) -> Result<(Vec, HashSet)> { let mut ret_signature_fingerprints: HashSet = Default::default(); @@ -310,21 +310,17 @@ pub async fn pk_decrypt( }; if !public_keys_for_validation.is_empty() { - let fingerprints = async_std::task::spawn_blocking(move || { - let pkeys = public_keys_for_validation.keys(); + let pkeys = public_keys_for_validation.keys(); - let mut fingerprints: Vec = Vec::new(); - if let signed_msg @ pgp::composed::Message::Signed { .. } = msg { - for pkey in pkeys { - if signed_msg.verify(&pkey.primary_key).is_ok() { - let fp = DcKey::fingerprint(pkey); - fingerprints.push(fp); - } + let mut fingerprints: Vec = Vec::new(); + if let signed_msg @ pgp::composed::Message::Signed { .. } = msg { + for pkey in pkeys { + if signed_msg.verify(&pkey.primary_key).is_ok() { + let fp = DcKey::fingerprint(pkey); + fingerprints.push(fp); } } - fingerprints - }) - .await; + } ret_signature_fingerprints.extend(fingerprints); } @@ -494,7 +490,7 @@ mod tests { let (plain, valid_signatures) = pk_decrypt( CTEXT_SIGNED.as_bytes().to_vec(), decrypt_keyring, - sig_check_keyring + &sig_check_keyring, ) .await .map_err(|err| println!("{:?}", err)) @@ -510,7 +506,7 @@ mod tests { let (plain, valid_signatures) = pk_decrypt( CTEXT_SIGNED.as_bytes().to_vec(), decrypt_keyring, - sig_check_keyring + &sig_check_keyring, ) .await .map_err(|err| println!("{:?}", err)) @@ -525,7 +521,7 @@ mod tests { keyring.add(KEYS.alice_secret.clone()); let empty_keyring = Keyring::new(); let (plain, valid_signatures) = - pk_decrypt(CTEXT_SIGNED.as_bytes().to_vec(), keyring, empty_keyring) + pk_decrypt(CTEXT_SIGNED.as_bytes().to_vec(), keyring, &empty_keyring) .await .unwrap(); assert_eq!(plain, CLEARTEXT); @@ -542,7 +538,7 @@ mod tests { let (plain, valid_signatures) = pk_decrypt( CTEXT_SIGNED.as_bytes().to_vec(), decrypt_keyring, - sig_check_keyring, + &sig_check_keyring, ) .await .unwrap(); @@ -558,7 +554,7 @@ mod tests { let (plain, valid_signatures) = pk_decrypt( CTEXT_UNSIGNED.as_bytes().to_vec(), decrypt_keyring, - sig_check_keyring, + &sig_check_keyring, ) .await .unwrap();