mirror of
https://github.com/chatmail/core.git
synced 2026-05-21 07:46:31 +03:00
fix: do not fail if Autocrypt Setup Message has no encryption preference
According to Autocrypt specification Autocrypt Setup Message SHOULD contain Autocrypt-Prefer-Encrypt header, but K-9 6.802 does not include it.
This commit is contained in:
70
src/imex.rs
70
src/imex.rs
@@ -284,7 +284,7 @@ pub async fn continue_key_transfer(
|
|||||||
let file = open_file_std(context, filename)?;
|
let file = open_file_std(context, filename)?;
|
||||||
let sc = normalize_setup_code(setup_code);
|
let sc = normalize_setup_code(setup_code);
|
||||||
let armored_key = decrypt_setup_file(&sc, file).await?;
|
let armored_key = decrypt_setup_file(&sc, file).await?;
|
||||||
set_self_key(context, &armored_key, true, true).await?;
|
set_self_key(context, &armored_key, true).await?;
|
||||||
maybe_add_bcc_self_device_msg(context).await?;
|
maybe_add_bcc_self_device_msg(context).await?;
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
@@ -293,35 +293,32 @@ pub async fn continue_key_transfer(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn set_self_key(
|
async fn set_self_key(context: &Context, armored: &str, set_default: bool) -> Result<()> {
|
||||||
context: &Context,
|
|
||||||
armored: &str,
|
|
||||||
set_default: bool,
|
|
||||||
prefer_encrypt_required: bool,
|
|
||||||
) -> Result<()> {
|
|
||||||
// try hard to only modify key-state
|
// try hard to only modify key-state
|
||||||
let (private_key, header) = SignedSecretKey::from_asc(armored)?;
|
let (private_key, header) = SignedSecretKey::from_asc(armored)?;
|
||||||
let public_key = private_key.split_public_key()?;
|
let public_key = private_key.split_public_key()?;
|
||||||
let preferencrypt = header.get("Autocrypt-Prefer-Encrypt");
|
if let Some(preferencrypt) = header.get("Autocrypt-Prefer-Encrypt") {
|
||||||
match preferencrypt.map(|s| s.as_str()) {
|
let e2ee_enabled = match preferencrypt.as_str() {
|
||||||
Some(headerval) => {
|
"nopreference" => 0,
|
||||||
let e2ee_enabled = match headerval {
|
"mutual" => 1,
|
||||||
"nopreference" => 0,
|
_ => {
|
||||||
"mutual" => 1,
|
bail!("invalid Autocrypt-Prefer-Encrypt header: {:?}", header);
|
||||||
_ => {
|
|
||||||
bail!("invalid Autocrypt-Prefer-Encrypt header: {:?}", header);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
context
|
|
||||||
.sql
|
|
||||||
.set_raw_config_int("e2ee_enabled", e2ee_enabled)
|
|
||||||
.await?;
|
|
||||||
}
|
|
||||||
None => {
|
|
||||||
if prefer_encrypt_required {
|
|
||||||
bail!("missing Autocrypt-Prefer-Encrypt header");
|
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
context
|
||||||
|
.sql
|
||||||
|
.set_raw_config_int("e2ee_enabled", e2ee_enabled)
|
||||||
|
.await?;
|
||||||
|
} else {
|
||||||
|
// `Autocrypt-Prefer-Encrypt` is not included
|
||||||
|
// in keys exported to file.
|
||||||
|
//
|
||||||
|
// `Autocrypt-Prefer-Encrypt` also SHOULD be sent
|
||||||
|
// in Autocrypt Setup Message according to Autocrypt specification,
|
||||||
|
// but K-9 6.802 does not include this header.
|
||||||
|
//
|
||||||
|
// We keep current setting in this case.
|
||||||
|
info!(context, "No Autocrypt-Prefer-Encrypt header.");
|
||||||
};
|
};
|
||||||
|
|
||||||
let self_addr = context.get_primary_self_addr().await?;
|
let self_addr = context.get_primary_self_addr().await?;
|
||||||
@@ -604,7 +601,7 @@ async fn export_backup_inner(
|
|||||||
async fn import_secret_key(context: &Context, path: &Path, set_default: bool) -> Result<()> {
|
async fn import_secret_key(context: &Context, path: &Path, set_default: bool) -> Result<()> {
|
||||||
let buf = read_file(context, &path).await?;
|
let buf = read_file(context, &path).await?;
|
||||||
let armored = std::string::String::from_utf8_lossy(&buf);
|
let armored = std::string::String::from_utf8_lossy(&buf);
|
||||||
set_self_key(context, &armored, set_default, false).await?;
|
set_self_key(context, &armored, set_default).await?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -825,6 +822,7 @@ mod tests {
|
|||||||
|
|
||||||
use super::*;
|
use super::*;
|
||||||
use crate::pgp::{split_armored_data, HEADER_AUTOCRYPT, HEADER_SETUPCODE};
|
use crate::pgp::{split_armored_data, HEADER_AUTOCRYPT, HEADER_SETUPCODE};
|
||||||
|
use crate::receive_imf::receive_imf;
|
||||||
use crate::stock_str::StockMessage;
|
use crate::stock_str::StockMessage;
|
||||||
use crate::test_utils::{alice_keypair, TestContext, TestContextManager};
|
use crate::test_utils::{alice_keypair, TestContext, TestContextManager};
|
||||||
|
|
||||||
@@ -1193,4 +1191,22 @@ mod tests {
|
|||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Tests reception of Autocrypt Setup Message from K-9 6.802.
|
||||||
|
///
|
||||||
|
/// Unlike Autocrypt Setup Message sent by Delta Chat,
|
||||||
|
/// this message does not contain `Autocrypt-Prefer-Encrypt` header.
|
||||||
|
#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
|
||||||
|
async fn test_key_transfer_k_9() -> Result<()> {
|
||||||
|
let t = &TestContext::new().await;
|
||||||
|
t.configure_addr("autocrypt@nine.testrun.org").await;
|
||||||
|
|
||||||
|
let raw = include_bytes!("../test-data/message/k-9-autocrypt-setup-message.eml");
|
||||||
|
let received = receive_imf(t, raw, false).await?.unwrap();
|
||||||
|
|
||||||
|
let setup_code = "0655-9868-8252-5455-4232-5158-1237-5333-2638";
|
||||||
|
continue_key_transfer(t, *received.msg_ids.last().unwrap(), setup_code).await?;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
65
test-data/message/k-9-autocrypt-setup-message.eml
Normal file
65
test-data/message/k-9-autocrypt-setup-message.eml
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
Return-Path: <autocrypt@nine.testrun.org>
|
||||||
|
Delivered-To: autocrypt@nine.testrun.org
|
||||||
|
Received: from nine.testrun.org
|
||||||
|
by nine with LMTP
|
||||||
|
id wNinAKX2J2YWDwEAPdT8mA
|
||||||
|
(envelope-from <autocrypt@nine.testrun.org>)
|
||||||
|
for <autocrypt@nine.testrun.org>; Tue, 23 Apr 2024 19:57:57 +0200
|
||||||
|
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=nine.testrun.org;
|
||||||
|
s=opendkim; t=1713895076;
|
||||||
|
bh=yuHuHSbYX5hE/xr8aU2fy/SlqfTL7XjfV2m1eEePTz4=;
|
||||||
|
h=Subject:Date:From:To:From;
|
||||||
|
b=ZbVNpJ8zjHmgrCqiRnqzENcR/PwR/G182hL18U5bp5CZmkyWcuhQU0EkhkJpCCv1n
|
||||||
|
8bZ9WlOT0cmzBHpWU43t7HufuUM56NwwuVqEuz2agpVzQV8zKIPhthrBzbYIeR4Prg
|
||||||
|
1DgwWr8EhotoV6yPgzxi9sMyO3l4spJeaREisB5MPOIdKeIxtRPLR+Woo5hQWNTFoh
|
||||||
|
ZQtCcY7w5vxXGhBMVPXOjbrrzOCsE5gGB5QYSAR8Bv3ZdJn/mHvIRCEJG5hJGSxXjQ
|
||||||
|
fD0UGJ5m5RVrF0tWnZ7U5tpoRD/UVV1+Us9Woq733R97ZchpoE4hNpMG9zYW90z4QU
|
||||||
|
kBajbsH81Nm0A==
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: multipart/mixed;
|
||||||
|
boundary=----X2OJUZLGILKJEHMTO29ZMST9701ZDH
|
||||||
|
Content-Transfer-Encoding: 7bit
|
||||||
|
Subject: Autocrypt Setup Message
|
||||||
|
Autocrypt-Setup-Message: v1
|
||||||
|
Date: Tue, 23 Apr 2024 19:57:57 +0200
|
||||||
|
From: autocrypt@nine.testrun.org
|
||||||
|
To: autocrypt@nine.testrun.org
|
||||||
|
Message-Id: <20240423175756.F19EB17C214A@nine.testrun.org>
|
||||||
|
|
||||||
|
------X2OJUZLGILKJEHMTO29ZMST9701ZDH
|
||||||
|
Content-Type: text/plain;
|
||||||
|
charset=utf-8
|
||||||
|
Content-Transfer-Encoding: quoted-printable
|
||||||
|
|
||||||
|
This message contains all information to transfer your Autocrypt settings a=
|
||||||
|
long with your secret key securely from your original device=2E To set up y=
|
||||||
|
our new device for Autocrypt, please follow the instructions that should be=
|
||||||
|
presented by your new device=2E You can keep this message and use it as a =
|
||||||
|
backup for your secret key=2E If you want to do this, you should write down=
|
||||||
|
the password and store it securely=2E
|
||||||
|
------X2OJUZLGILKJEHMTO29ZMST9701ZDH
|
||||||
|
Content-Transfer-Encoding: 7bit
|
||||||
|
Content-Type: application/autocrypt-setup
|
||||||
|
Content-Disposition: attachment; filename="autocrypt-setup-message"
|
||||||
|
|
||||||
|
-----BEGIN PGP MESSAGE-----
|
||||||
|
Passphrase-Format: numeric9x4
|
||||||
|
Passphrase-Begin: 06
|
||||||
|
|
||||||
|
ww0ECQMCAhlJ+TRwb2Fg0sGXAUc+92rmg4k57Sd4D3O/SPQNzShbVdlKsoFzyH+B
|
||||||
|
YhimOr/8C5ZHyg/WjRGlk4pD+t57WfVdE7LYnv8qsK86h2kffZAGlj+B9Lh9+qbV
|
||||||
|
KgJLpHUKg7ZGa/9aMq7KuFoNSNTbcHtzJ/Ml9GVe+opimER87mpFCjmaEHCcCp0a
|
||||||
|
ZeS5VU8gTV7AKuPW40BBipyEmKpUvE/ZWfz3KSI4RZyIwM8v8kXBMojT4WLqWm93
|
||||||
|
JoEKUyeh+3JKMvsfyRbmHXrHprG9f2e8PLvNkAiie68YJniFnwA8nmNSnPv9S9rf
|
||||||
|
7oUHtnTDKJ4FIpmfPgj1v/KIWWW9KaZWHi7K5mFUCTb4pBoCRIGaFh+JzbSlNL9i
|
||||||
|
fz7HIiN95bFJ4xXXL4gcU9wO5//npkVDUncaeHhUy1VBLu0NFYvze+s+eAIesqec
|
||||||
|
X3x++U9d+Slbpa1G2Z5Knj50mBY+k9aNwVMZGu50hzhPvdwesqmbr+GTSh0O1bxI
|
||||||
|
gw/cDq5s58Ewze3WvYaLxJz/RcwOCGSV8k21FM4WTnEahs4yfLbzNuusYvvciU6l
|
||||||
|
w0eZC+vEmh+bINSSRX/mcvkQcIkkCsqvfWyxdSNIBCwmR86oalWnxZniBLbbbZHD
|
||||||
|
0KAsv0w7t00Y715gyyFWyiEiT5Lyl4TA+cUIHKmmpKOaVubz50UD1z5rqT7joJ7G
|
||||||
|
KRmWtQW8MScgcmK7+tyavLQOxwe8i8i9JkUy+d9jhj17XZil/If26Q3V3epqCXq3
|
||||||
|
FdvEvvNGJF0DyJ4YAe9QMBumf22sMmX/XVock9/k0pB46mciMhPL3VA=
|
||||||
|
=LYx9
|
||||||
|
-----END PGP MESSAGE-----
|
||||||
|
|
||||||
|
------X2OJUZLGILKJEHMTO29ZMST9701ZDH--
|
||||||
Reference in New Issue
Block a user