Do not include "prefer-encrypt=nopreference;" in Autocrypt header

Specification
https://autocrypt.org/level1.html#the-autocrypt-header
says that prefer-encrypt attribute can only occur with the value `mutual`.
This commit is contained in:
Alexander Krotov
2019-12-06 17:09:33 +03:00
parent 91f1d793e9
commit 6c275c30a7

View File

@@ -100,11 +100,11 @@ impl fmt::Display for Aheader {
// wrap the lines according to RFC 5322 // wrap the lines according to RFC 5322
// (which may insert a linebreak before every whitespace) // (which may insert a linebreak before every whitespace)
let keydata = self.public_key.to_base64(78); let keydata = self.public_key.to_base64(78);
write!( write!(fmt, "addr={};", self.addr)?;
fmt, if self.prefer_encrypt == EncryptPreference::Mutual {
"addr={}; prefer-encrypt={}; keydata={}", write!(fmt, " prefer-encrypt=mutual;")?;
self.addr, self.prefer_encrypt, keydata }
) write!(fmt, " keydata={}", keydata)
} }
} }
@@ -229,6 +229,7 @@ mod tests {
let ah = Aheader::from_str(fixed_header).expect("failed to parse"); let ah = Aheader::from_str(fixed_header).expect("failed to parse");
assert_eq!(ah.addr, "a@b.example.org"); assert_eq!(ah.addr, "a@b.example.org");
assert_eq!(ah.prefer_encrypt, EncryptPreference::Mutual); assert_eq!(ah.prefer_encrypt, EncryptPreference::Mutual);
assert_eq!(format!("{}", ah), fixed_header);
let rendered = ah.to_string(); let rendered = ah.to_string();
assert_eq!(rendered, fixed_header); assert_eq!(rendered, fixed_header);
@@ -255,4 +256,30 @@ mod tests {
assert!(Aheader::from_str(" ;;").is_err()); assert!(Aheader::from_str(" ;;").is_err());
assert!(Aheader::from_str("addr=a@t.de; unknwon=1; keydata=jau").is_err()); assert!(Aheader::from_str("addr=a@t.de; unknwon=1; keydata=jau").is_err());
} }
#[test]
fn test_display_aheader() {
assert!(format!(
"{}",
Aheader::new(
"test@example.com".to_string(),
Key::from_base64(RAWKEY, KeyType::Public).unwrap(),
EncryptPreference::Mutual
)
)
.contains("prefer-encrypt=mutual;"));
// According to Autocrypt Level 1 specification,
// only "prefer-encrypt=mutual;" can be used.
// If the setting is nopreference, the whole attribute is omitted.
assert!(!format!(
"{}",
Aheader::new(
"test@example.com".to_string(),
Key::from_base64(RAWKEY, KeyType::Public).unwrap(),
EncryptPreference::NoPreference
)
)
.contains("prefer-encrypt"));
}
} }