mirror of
https://github.com/chatmail/core.git
synced 2026-05-04 22:06:29 +03:00
fix: require that Autocrypt Setup Message is self-sent
This commit is contained in:
24
src/imex.rs
24
src/imex.rs
@@ -827,7 +827,7 @@ mod tests {
|
|||||||
use crate::key;
|
use crate::key;
|
||||||
use crate::pgp::{split_armored_data, HEADER_AUTOCRYPT, HEADER_SETUPCODE};
|
use crate::pgp::{split_armored_data, HEADER_AUTOCRYPT, HEADER_SETUPCODE};
|
||||||
use crate::stock_str::StockMessage;
|
use crate::stock_str::StockMessage;
|
||||||
use crate::test_utils::{alice_keypair, TestContext};
|
use crate::test_utils::{alice_keypair, TestContext, TestContextManager};
|
||||||
|
|
||||||
#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
|
#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
|
||||||
async fn test_render_setup_file() {
|
async fn test_render_setup_file() {
|
||||||
@@ -1133,6 +1133,7 @@ mod tests {
|
|||||||
alice2.configure_addr("alice@example.org").await;
|
alice2.configure_addr("alice@example.org").await;
|
||||||
alice2.recv_msg(&sent).await;
|
alice2.recv_msg(&sent).await;
|
||||||
let msg = alice2.get_last_msg().await;
|
let msg = alice2.get_last_msg().await;
|
||||||
|
assert!(msg.is_setupmessage());
|
||||||
|
|
||||||
// Send a message that cannot be decrypted because the keys are
|
// Send a message that cannot be decrypted because the keys are
|
||||||
// not synchronized yet.
|
// not synchronized yet.
|
||||||
@@ -1150,4 +1151,25 @@ mod tests {
|
|||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Tests that Autocrypt Setup Messages is only clickable if it is self-sent.
|
||||||
|
/// This prevents Bob from tricking Alice into changing the key
|
||||||
|
/// by sending her an Autocrypt Setup Message as long as Alice's server
|
||||||
|
/// does not allow to forge the `From:` header.
|
||||||
|
#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
|
||||||
|
async fn test_key_transfer_non_self_sent() -> Result<()> {
|
||||||
|
let mut tcm = TestContextManager::new();
|
||||||
|
let alice = tcm.alice().await;
|
||||||
|
let bob = tcm.bob().await;
|
||||||
|
|
||||||
|
let _setup_code = initiate_key_transfer(&alice).await?;
|
||||||
|
|
||||||
|
// Get Autocrypt Setup Message.
|
||||||
|
let sent = alice.pop_sent_msg().await;
|
||||||
|
|
||||||
|
let rcvd = bob.recv_msg(&sent).await;
|
||||||
|
assert!(!rcvd.is_setupmessage());
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -510,7 +510,7 @@ impl MimeMessage {
|
|||||||
|
|
||||||
/// Parses system messages.
|
/// Parses system messages.
|
||||||
fn parse_system_message_headers(&mut self, context: &Context) {
|
fn parse_system_message_headers(&mut self, context: &Context) {
|
||||||
if self.get_header(HeaderDef::AutocryptSetupMessage).is_some() {
|
if self.get_header(HeaderDef::AutocryptSetupMessage).is_some() && !self.incoming {
|
||||||
self.parts.retain(|part| {
|
self.parts.retain(|part| {
|
||||||
part.mimetype.is_none()
|
part.mimetype.is_none()
|
||||||
|| part.mimetype.as_ref().unwrap().as_ref() == MIME_AC_SETUP_FILE
|
|| part.mimetype.as_ref().unwrap().as_ref() == MIME_AC_SETUP_FILE
|
||||||
|
|||||||
Reference in New Issue
Block a user