mirror of
https://github.com/chatmail/core.git
synced 2026-04-17 21:46:35 +03:00
Make pk_decrypt synchronous
This commit is contained in:
@@ -215,7 +215,7 @@ async fn decrypt_part(
|
|||||||
|
|
||||||
if has_decrypted_pgp_armor(&data) {
|
if has_decrypted_pgp_armor(&data) {
|
||||||
let (plain, ret_valid_signatures) =
|
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)?;
|
||||||
|
|
||||||
// Check for detached signatures.
|
// Check for detached signatures.
|
||||||
// If decrypted part is a multipart/signed, then there is a detached signature.
|
// If decrypted part is a multipart/signed, then there is a detached signature.
|
||||||
|
|||||||
20
src/pgp.rs
20
src/pgp.rs
@@ -265,23 +265,20 @@ pub async fn pk_encrypt(
|
|||||||
/// of all keys from the `public_keys_for_validation` keyring that
|
/// of all keys from the `public_keys_for_validation` keyring that
|
||||||
/// have valid signatures there.
|
/// have valid signatures there.
|
||||||
#[allow(clippy::implicit_hasher)]
|
#[allow(clippy::implicit_hasher)]
|
||||||
pub async fn pk_decrypt(
|
pub fn pk_decrypt(
|
||||||
ctext: Vec<u8>,
|
ctext: Vec<u8>,
|
||||||
private_keys_for_decryption: Keyring<SignedSecretKey>,
|
private_keys_for_decryption: Keyring<SignedSecretKey>,
|
||||||
public_keys_for_validation: &Keyring<SignedPublicKey>,
|
public_keys_for_validation: &Keyring<SignedPublicKey>,
|
||||||
) -> Result<(Vec<u8>, HashSet<Fingerprint>)> {
|
) -> Result<(Vec<u8>, HashSet<Fingerprint>)> {
|
||||||
let mut ret_signature_fingerprints: HashSet<Fingerprint> = Default::default();
|
let mut ret_signature_fingerprints: HashSet<Fingerprint> = Default::default();
|
||||||
|
|
||||||
let msgs = tokio::task::spawn_blocking(move || {
|
let cursor = Cursor::new(ctext);
|
||||||
let cursor = Cursor::new(ctext);
|
let (msg, _) = Message::from_armor_single(cursor)?;
|
||||||
let (msg, _) = Message::from_armor_single(cursor)?;
|
|
||||||
|
|
||||||
let skeys: Vec<&SignedSecretKey> = private_keys_for_decryption.keys().iter().collect();
|
let skeys: Vec<&SignedSecretKey> = private_keys_for_decryption.keys().iter().collect();
|
||||||
|
|
||||||
let (decryptor, _) = msg.decrypt(|| "".into(), || "".into(), &skeys[..])?;
|
let (decryptor, _) = msg.decrypt(|| "".into(), || "".into(), &skeys[..])?;
|
||||||
decryptor.collect::<pgp::errors::Result<Vec<_>>>()
|
let msgs = decryptor.collect::<pgp::errors::Result<Vec<_>>>()?;
|
||||||
})
|
|
||||||
.await??;
|
|
||||||
|
|
||||||
if let Some(msg) = msgs.into_iter().next() {
|
if let Some(msg) = msgs.into_iter().next() {
|
||||||
// get_content() will decompress the message if needed,
|
// get_content() will decompress the message if needed,
|
||||||
@@ -517,7 +514,6 @@ mod tests {
|
|||||||
decrypt_keyring,
|
decrypt_keyring,
|
||||||
&sig_check_keyring,
|
&sig_check_keyring,
|
||||||
)
|
)
|
||||||
.await
|
|
||||||
.unwrap();
|
.unwrap();
|
||||||
assert_eq!(plain, CLEARTEXT);
|
assert_eq!(plain, CLEARTEXT);
|
||||||
assert_eq!(valid_signatures.len(), 1);
|
assert_eq!(valid_signatures.len(), 1);
|
||||||
@@ -532,7 +528,6 @@ mod tests {
|
|||||||
decrypt_keyring,
|
decrypt_keyring,
|
||||||
&sig_check_keyring,
|
&sig_check_keyring,
|
||||||
)
|
)
|
||||||
.await
|
|
||||||
.unwrap();
|
.unwrap();
|
||||||
assert_eq!(plain, CLEARTEXT);
|
assert_eq!(plain, CLEARTEXT);
|
||||||
assert_eq!(valid_signatures.len(), 1);
|
assert_eq!(valid_signatures.len(), 1);
|
||||||
@@ -548,7 +543,6 @@ mod tests {
|
|||||||
keyring,
|
keyring,
|
||||||
&empty_keyring,
|
&empty_keyring,
|
||||||
)
|
)
|
||||||
.await
|
|
||||||
.unwrap();
|
.unwrap();
|
||||||
assert_eq!(plain, CLEARTEXT);
|
assert_eq!(plain, CLEARTEXT);
|
||||||
assert_eq!(valid_signatures.len(), 0);
|
assert_eq!(valid_signatures.len(), 0);
|
||||||
@@ -566,7 +560,6 @@ mod tests {
|
|||||||
decrypt_keyring,
|
decrypt_keyring,
|
||||||
&sig_check_keyring,
|
&sig_check_keyring,
|
||||||
)
|
)
|
||||||
.await
|
|
||||||
.unwrap();
|
.unwrap();
|
||||||
assert_eq!(plain, CLEARTEXT);
|
assert_eq!(plain, CLEARTEXT);
|
||||||
assert_eq!(valid_signatures.len(), 0);
|
assert_eq!(valid_signatures.len(), 0);
|
||||||
@@ -582,7 +575,6 @@ mod tests {
|
|||||||
decrypt_keyring,
|
decrypt_keyring,
|
||||||
&sig_check_keyring,
|
&sig_check_keyring,
|
||||||
)
|
)
|
||||||
.await
|
|
||||||
.unwrap();
|
.unwrap();
|
||||||
assert_eq!(plain, CLEARTEXT);
|
assert_eq!(plain, CLEARTEXT);
|
||||||
assert_eq!(valid_signatures.len(), 0);
|
assert_eq!(valid_signatures.len(), 0);
|
||||||
|
|||||||
Reference in New Issue
Block a user