Skip to content

Commit d470497

Browse files
committed
api!: remove e2ee_enabled preference
The setting is already removed from the UIs, but users who had it disabled previously have no way to enable it. After this change encryption is effectively always preferred.
1 parent 838eed9 commit d470497

File tree

10 files changed

+23
-86
lines changed

10 files changed

+23
-86
lines changed

deltachat-ffi/deltachat.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -415,7 +415,6 @@ char* dc_get_blobdir (const dc_context_t* context);
415415
* As for `displayname` and `selfstatus`, also the avatar is sent to the recipients.
416416
* To save traffic, however, the avatar is attached only as needed
417417
* and also recoded to a reasonable size.
418-
* - `e2ee_enabled` = 0=no end-to-end-encryption, 1=prefer end-to-end-encryption (default)
419418
* - `mdns_enabled` = 0=do not send or request read receipts,
420419
* 1=send and request read receipts
421420
* default=send and request read receipts, only send but not request if `bot` is set

src/config.rs

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -151,10 +151,6 @@ pub enum Config {
151151
/// setting up a second device, or receiving a sync message.
152152
BccSelf,
153153

154-
/// True if encryption is preferred according to Autocrypt standard.
155-
#[strum(props(default = "1"))]
156-
E2eeEnabled,
157-
158154
/// True if Message Delivery Notifications (read receipts) should
159155
/// be sent and requested.
160156
#[strum(props(default = "1"))]
@@ -705,7 +701,6 @@ impl Context {
705701
Config::Socks5Enabled
706702
| Config::ProxyEnabled
707703
| Config::BccSelf
708-
| Config::E2eeEnabled
709704
| Config::MdnsEnabled
710705
| Config::SentboxWatch
711706
| Config::MvboxMove

src/context.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -833,7 +833,6 @@ impl Context {
833833
.query_get_value("PRAGMA journal_mode;", ())
834834
.await?
835835
.unwrap_or_else(|| "unknown".to_string());
836-
let e2ee_enabled = self.get_config_int(Config::E2eeEnabled).await?;
837836
let mdns_enabled = self.get_config_int(Config::MdnsEnabled).await?;
838837
let bcc_self = self.get_config_int(Config::BccSelf).await?;
839838
let sync_msgs = self.get_config_int(Config::SyncMsgs).await?;
@@ -967,7 +966,6 @@ impl Context {
967966
res.insert("configured_mvbox_folder", configured_mvbox_folder);
968967
res.insert("configured_trash_folder", configured_trash_folder);
969968
res.insert("mdns_enabled", mdns_enabled.to_string());
970-
res.insert("e2ee_enabled", e2ee_enabled.to_string());
971969
res.insert("bcc_self", bcc_self.to_string());
972970
res.insert("sync_msgs", sync_msgs.to_string());
973971
res.insert("disable_idle", disable_idle.to_string());

src/e2ee.rs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,8 @@ use std::io::Cursor;
44

55
use anyhow::Result;
66
use mail_builder::mime::MimePart;
7-
use num_traits::FromPrimitive;
87

98
use crate::aheader::{Aheader, EncryptPreference};
10-
use crate::config::Config;
119
use crate::context::Context;
1210
use crate::key::{SignedPublicKey, load_self_public_key, load_self_secret_key};
1311
use crate::pgp;
@@ -21,9 +19,7 @@ pub struct EncryptHelper {
2119

2220
impl EncryptHelper {
2321
pub async fn new(context: &Context) -> Result<EncryptHelper> {
24-
let prefer_encrypt =
25-
EncryptPreference::from_i32(context.get_config_int(Config::E2eeEnabled).await?)
26-
.unwrap_or_default();
22+
let prefer_encrypt = EncryptPreference::Mutual;
2723
let addr = context.get_primary_self_addr().await?;
2824
let public_key = load_self_public_key(context).await?;
2925

src/imex.rs

Lines changed: 1 addition & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -140,32 +140,8 @@ pub async fn has_backup(_context: &Context, dir_name: &Path) -> Result<String> {
140140
}
141141

142142
async fn set_self_key(context: &Context, armored: &str) -> Result<()> {
143-
// try hard to only modify key-state
144-
let (private_key, header) = SignedSecretKey::from_asc(armored)?;
143+
let private_key = SignedSecretKey::from_asc(armored)?;
145144
let public_key = private_key.split_public_key()?;
146-
if let Some(preferencrypt) = header.get("Autocrypt-Prefer-Encrypt") {
147-
let e2ee_enabled = match preferencrypt.as_str() {
148-
"nopreference" => 0,
149-
"mutual" => 1,
150-
_ => {
151-
bail!("invalid Autocrypt-Prefer-Encrypt header: {:?}", header);
152-
}
153-
};
154-
context
155-
.sql
156-
.set_raw_config_int("e2ee_enabled", e2ee_enabled)
157-
.await?;
158-
} else {
159-
// `Autocrypt-Prefer-Encrypt` is not included
160-
// in keys exported to file.
161-
//
162-
// `Autocrypt-Prefer-Encrypt` also SHOULD be sent
163-
// in Autocrypt Setup Message according to Autocrypt specification,
164-
// but K-9 6.802 does not include this header.
165-
//
166-
// We keep current setting in this case.
167-
info!(context, "No Autocrypt-Prefer-Encrypt header.");
168-
};
169145

170146
let keypair = pgp::KeyPair {
171147
public: public_key,

src/imex/key_transfer.rs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -93,10 +93,7 @@ pub async fn render_setup_file(context: &Context, passphrase: &str) -> Result<St
9393
bail!("Passphrase must be at least 2 chars long.");
9494
};
9595
let private_key = load_self_secret_key(context).await?;
96-
let ac_headers = match context.get_config_bool(Config::E2eeEnabled).await? {
97-
false => None,
98-
true => Some(("Autocrypt-Prefer-Encrypt", "mutual")),
99-
};
96+
let ac_headers = Some(("Autocrypt-Prefer-Encrypt", "mutual"));
10097
let private_key_asc = private_key.to_asc(ac_headers);
10198
let encr = pgp::symm_encrypt(passphrase, private_key_asc.into_bytes())
10299
.await?

src/key.rs

Lines changed: 7 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -71,31 +71,17 @@ pub(crate) trait DcKey: Serialize + Deserializable + Clone {
7171
}
7272

7373
/// Create a key from an ASCII-armored string.
74-
///
75-
/// Returns the key and a map of any headers which might have been set in
76-
/// the ASCII-armored representation.
77-
fn from_asc(data: &str) -> Result<(Self, BTreeMap<String, String>)> {
74+
fn from_asc(data: &str) -> Result<Self> {
7875
let bytes = data.as_bytes();
7976
let res = Self::from_armor_single(Cursor::new(bytes));
80-
let (key, headers) = match res {
77+
let (key, _headers) = match res {
8178
Err(pgp::errors::Error::NoMatchingPacket { .. }) => match Self::is_private() {
8279
true => bail!("No private key packet found"),
8380
false => bail!("No public key packet found"),
8481
},
8582
_ => res.context("rPGP error")?,
8683
};
87-
let headers = headers
88-
.into_iter()
89-
.map(|(key, values)| {
90-
(
91-
key.trim().to_lowercase(),
92-
values
93-
.last()
94-
.map_or_else(String::new, |s| s.trim().to_string()),
95-
)
96-
})
97-
.collect();
98-
Ok((key, headers))
84+
Ok(key)
9985
}
10086

10187
/// Serialise the key as bytes.
@@ -446,7 +432,7 @@ pub(crate) async fn store_self_keypair(context: &Context, keypair: &KeyPair) ->
446432
/// to avoid generating the key in tests.
447433
/// Use import/export APIs instead.
448434
pub async fn preconfigure_keypair(context: &Context, secret_data: &str) -> Result<()> {
449-
let secret = SignedSecretKey::from_asc(secret_data)?.0;
435+
let secret = SignedSecretKey::from_asc(secret_data)?;
450436
let public = secret.split_public_key()?;
451437
let keypair = KeyPair { public, secret };
452438
store_self_keypair(context, &keypair).await?;
@@ -532,7 +518,7 @@ mod tests {
532518

533519
#[test]
534520
fn test_from_armored_string() {
535-
let (private_key, _) = SignedSecretKey::from_asc(
521+
let private_key = SignedSecretKey::from_asc(
536522
"-----BEGIN PGP PRIVATE KEY BLOCK-----
537523
538524
xcLYBF0fgz4BCADnRUV52V4xhSsU56ZaAn3+3oG86MZhXy4X8w14WZZDf0VJGeTh
@@ -600,17 +586,13 @@ i8pcjGO+IZffvyZJVRWfVooBJmWWbPB1pueo3tx8w3+fcuzpxz+RLFKaPyqXO+dD
600586
fn test_asc_roundtrip() {
601587
let key = KEYPAIR.public.clone();
602588
let asc = key.to_asc(Some(("spam", "ham")));
603-
let (key2, hdrs) = SignedPublicKey::from_asc(&asc).unwrap();
589+
let key2 = SignedPublicKey::from_asc(&asc).unwrap();
604590
assert_eq!(key, key2);
605-
assert_eq!(hdrs.len(), 1);
606-
assert_eq!(hdrs.get("spam"), Some(&String::from("ham")));
607591

608592
let key = KEYPAIR.secret.clone();
609593
let asc = key.to_asc(Some(("spam", "ham")));
610-
let (key2, hdrs) = SignedSecretKey::from_asc(&asc).unwrap();
594+
let key2 = SignedSecretKey::from_asc(&asc).unwrap();
611595
assert_eq!(key, key2);
612-
assert_eq!(hdrs.len(), 1);
613-
assert_eq!(hdrs.get("spam"), Some(&String::from("ham")));
614596
}
615597

616598
#[test]

src/mimeparser.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1519,7 +1519,7 @@ impl MimeMessage {
15191519
);
15201520
return Ok(false);
15211521
}
1522-
Ok((key, _)) => key,
1522+
Ok(key) => key,
15231523
};
15241524
if let Err(err) = key.verify() {
15251525
warn!(context, "Attached PGP key verification failed: {err:#}.");

src/push.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ fn pad_device_token(s: &str) -> String {
7474
///
7575
/// The result is base64-encoded and not ASCII armored to avoid dealing with newlines.
7676
pub(crate) fn encrypt_device_token(device_token: &str) -> Result<String> {
77-
let public_key = pgp::composed::SignedPublicKey::from_asc(NOTIFIERS_PUBLIC_KEY)?.0;
77+
let public_key = pgp::composed::SignedPublicKey::from_asc(NOTIFIERS_PUBLIC_KEY)?;
7878
let encryption_subkey = public_key
7979
.public_subkeys
8080
.first()

src/test_utils.rs

Lines changed: 11 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1245,9 +1245,8 @@ impl SentMessage<'_> {
12451245
///
12461246
/// The keypair was created using the crate::key::tests::gen_key test.
12471247
pub fn alice_keypair() -> KeyPair {
1248-
let secret = key::SignedSecretKey::from_asc(include_str!("../test-data/key/alice-secret.asc"))
1249-
.unwrap()
1250-
.0;
1248+
let secret =
1249+
key::SignedSecretKey::from_asc(include_str!("../test-data/key/alice-secret.asc")).unwrap();
12511250
let public = secret.split_public_key().unwrap();
12521251
KeyPair { public, secret }
12531252
}
@@ -1256,9 +1255,8 @@ pub fn alice_keypair() -> KeyPair {
12561255
///
12571256
/// Like [alice_keypair] but a different key and identity.
12581257
pub fn bob_keypair() -> KeyPair {
1259-
let secret = key::SignedSecretKey::from_asc(include_str!("../test-data/key/bob-secret.asc"))
1260-
.unwrap()
1261-
.0;
1258+
let secret =
1259+
key::SignedSecretKey::from_asc(include_str!("../test-data/key/bob-secret.asc")).unwrap();
12621260
let public = secret.split_public_key().unwrap();
12631261
KeyPair { public, secret }
12641262
}
@@ -1269,8 +1267,7 @@ pub fn bob_keypair() -> KeyPair {
12691267
pub fn charlie_keypair() -> KeyPair {
12701268
let secret =
12711269
key::SignedSecretKey::from_asc(include_str!("../test-data/key/charlie-secret.asc"))
1272-
.unwrap()
1273-
.0;
1270+
.unwrap();
12741271
let public = secret.split_public_key().unwrap();
12751272
KeyPair { public, secret }
12761273
}
@@ -1279,9 +1276,8 @@ pub fn charlie_keypair() -> KeyPair {
12791276
///
12801277
/// Like [alice_keypair] but a different key and identity.
12811278
pub fn dom_keypair() -> KeyPair {
1282-
let secret = key::SignedSecretKey::from_asc(include_str!("../test-data/key/dom-secret.asc"))
1283-
.unwrap()
1284-
.0;
1279+
let secret =
1280+
key::SignedSecretKey::from_asc(include_str!("../test-data/key/dom-secret.asc")).unwrap();
12851281
let public = secret.split_public_key().unwrap();
12861282
KeyPair { public, secret }
12871283
}
@@ -1290,9 +1286,8 @@ pub fn dom_keypair() -> KeyPair {
12901286
///
12911287
/// Like [alice_keypair] but a different key and identity.
12921288
pub fn elena_keypair() -> KeyPair {
1293-
let secret = key::SignedSecretKey::from_asc(include_str!("../test-data/key/elena-secret.asc"))
1294-
.unwrap()
1295-
.0;
1289+
let secret =
1290+
key::SignedSecretKey::from_asc(include_str!("../test-data/key/elena-secret.asc")).unwrap();
12961291
let public = secret.split_public_key().unwrap();
12971292
KeyPair { public, secret }
12981293
}
@@ -1301,9 +1296,8 @@ pub fn elena_keypair() -> KeyPair {
13011296
///
13021297
/// Like [alice_keypair] but a different key and identity.
13031298
pub fn fiona_keypair() -> KeyPair {
1304-
let secret = key::SignedSecretKey::from_asc(include_str!("../test-data/key/fiona-secret.asc"))
1305-
.unwrap()
1306-
.0;
1299+
let secret =
1300+
key::SignedSecretKey::from_asc(include_str!("../test-data/key/fiona-secret.asc")).unwrap();
13071301
let public = secret.split_public_key().unwrap();
13081302
KeyPair { public, secret }
13091303
}

0 commit comments

Comments
 (0)