diff options
author | Justus Winter <justus@sequoia-pgp.org> | 2020-04-15 14:08:09 +0200 |
---|---|---|
committer | Justus Winter <justus@sequoia-pgp.org> | 2020-04-15 15:48:23 +0200 |
commit | f227657e17d1fdc5ff18e5cff224ebed3476416e (patch) | |
tree | e6e57d9d923d6371f7751e398b274323f48dc1fe | |
parent | 896c71864a67231c6587fed066fbb2fbbac3165f (diff) |
openpgp: Drop Cert::primary_userid.
- Fixes #484.
-rw-r--r-- | openpgp-ffi/src/cert.rs | 4 | ||||
-rw-r--r-- | openpgp/src/cert/amalgamation.rs | 2 | ||||
-rw-r--r-- | openpgp/src/cert/builder.rs | 2 | ||||
-rw-r--r-- | openpgp/src/cert/mod.rs | 88 | ||||
-rw-r--r-- | tool/src/commands/decrypt.rs | 4 | ||||
-rw-r--r-- | tool/src/sq.rs | 3 |
6 files changed, 62 insertions, 41 deletions
diff --git a/openpgp-ffi/src/cert.rs b/openpgp-ffi/src/cert.rs index 562f863c..31872d90 100644 --- a/openpgp-ffi/src/cert.rs +++ b/openpgp-ffi/src/cert.rs @@ -368,7 +368,9 @@ fn pgp_cert_primary_user_id(cert: *const Cert, policy: *const Policy, { let cert = cert.ref_raw(); let policy = &**policy.ref_raw(); - if let Ok(binding) = cert.primary_userid(policy, maybe_time(when)) { + if let Ok(binding) = cert.with_policy(policy, maybe_time(when)) + .and_then(|valid_cert| valid_cert.primary_userid()) + { ffi_return_string!(binding.userid().value()) } else { ptr::null_mut() diff --git a/openpgp/src/cert/amalgamation.rs b/openpgp/src/cert/amalgamation.rs index 8539965b..2e0ddbaf 100644 --- a/openpgp/src/cert/amalgamation.rs +++ b/openpgp/src/cert/amalgamation.rs @@ -863,7 +863,7 @@ impl<'a, C> ComponentAmalgamation<'a, C> { /// /// // Make sure Alice is listed as a designated revoker for Bob /// // on a component. - /// assert_eq!(bob.primary_userid(p, None)?.revocation_keys(p) + /// assert_eq!(bob.with_policy(p, None)?.primary_userid()?.revocation_keys(p) /// .collect::<Vec<&RevocationKey>>(), /// vec![ &(&alice).into() ]); /// # Ok(()) } diff --git a/openpgp/src/cert/builder.rs b/openpgp/src/cert/builder.rs index 84603d18..47ec00b6 100644 --- a/openpgp/src/cert/builder.rs +++ b/openpgp/src/cert/builder.rs @@ -530,7 +530,7 @@ mod tests { assert_eq!(cert1.primary_key().pk_algo(), PublicKeyAlgorithm::EdDSA); assert!(cert1.subkeys().next().is_none()); - assert!(cert1.primary_userid(p, None).unwrap() + assert!(cert1.with_policy(p, None).unwrap().primary_userid().unwrap() .binding_signature().features().unwrap().supports_mdc()); } diff --git a/openpgp/src/cert/mod.rs b/openpgp/src/cert/mod.rs index 0491ef05..0519a2fa 100644 --- a/openpgp/src/cert/mod.rs +++ b/openpgp/src/cert/mod.rs @@ -412,7 +412,7 @@ type UnknownBindings = ComponentBundles<Unknown>; /// # let (cert, _) = /// # CertBuilder::general_purpose(None, Some("alice@example.org")) /// # .generate()?; -/// match cert.primary_userid(p, None)?.preferred_symmetric_algorithms() { +/// match cert.with_policy(p, None)?.primary_userid()?.preferred_symmetric_algorithms() { /// Some(algos) => { /// println!("Certificate Holder's preferred symmetric algorithms:"); /// for (i, algo) in algos.iter().enumerate() { @@ -817,14 +817,6 @@ impl Cert { policy, t, valid_cert) } - /// Returns the amalgamated primary userid at `t`, if any. - pub fn primary_userid<'a, T>(&'a self, policy: &'a dyn Policy, t: T) - -> Result<ValidUserIDAmalgamation<'a>> - where T: Into<Option<std::time::SystemTime>> - { - self.primary_userid_relaxed(policy, t, true) - } - /// Returns an iterator over the Cert's userids. pub fn userids(&self) -> UserIDAmalgamationIter { ComponentAmalgamationIter::new(self, self.userids.iter()) @@ -1665,7 +1657,7 @@ impl<'a> ValidCert<'a> { /// Returns the amalgamated primary userid, if any. pub fn primary_userid(&self) -> Result<ValidUserIDAmalgamation<'a>> { - self.cert.primary_userid(self.policy, self.time) + self.cert.primary_userid_relaxed(self.policy(), self.time(), true) } /// Returns an iterator over the Cert's userids. @@ -2301,7 +2293,7 @@ mod test { None, Some(UserID::arbitrary(&mut gen))) .add_userid(UserID::arbitrary(&mut gen)) .generate()?; - let primary_uid = cert.primary_userid(p, None)?.userid().clone(); + let primary_uid = cert.with_policy(p, None)?.primary_userid()?.userid().clone(); assert_eq!(cert.clone().into_packet_pile().children().count(), 1 // primary key + 1 // direct key signature @@ -2326,7 +2318,7 @@ mod test { + 1 // subkey + 1 // binding signature ); - assert_eq!(&primary_uid, cert.primary_userid(p, None)?.userid()); + assert_eq!(&primary_uid, cert.with_policy(p, None)?.primary_userid()?.userid()); Ok(()) } @@ -3155,9 +3147,11 @@ Pu1xwz57O4zo1VYf6TqHJzVC3OMvMUM2hhdecMUe5x6GorNaj6g= // // Slim Shady: 2019-09-14T14:21 // Eminem: 2019-09-14T14:22 - assert_eq!(cert.primary_userid(p, selfsig0).unwrap().userid().value(), + assert_eq!(cert.with_policy(p, selfsig0).unwrap() + .primary_userid().unwrap().userid().value(), b"Eminem"); - assert_eq!(cert.primary_userid(p, now).unwrap().userid().value(), + assert_eq!(cert.with_policy(p, now).unwrap() + .primary_userid().unwrap().userid().value(), b"Eminem"); // A soft-revocation for "Slim Shady". @@ -3166,9 +3160,11 @@ Pu1xwz57O4zo1VYf6TqHJzVC3OMvMUM2hhdecMUe5x6GorNaj6g= crate::tests::key("really-revoked-userid-1-soft-revocation.pgp") ).unwrap()).unwrap(); - assert_eq!(cert.primary_userid(p, selfsig0).unwrap().userid().value(), + assert_eq!(cert.with_policy(p, selfsig0).unwrap() + .primary_userid().unwrap().userid().value(), b"Eminem"); - assert_eq!(cert.primary_userid(p, now).unwrap().userid().value(), + assert_eq!(cert.with_policy(p, now).unwrap() + .primary_userid().unwrap().userid().value(), b"Eminem"); // A new self signature for "Slim Shady". This should @@ -3178,9 +3174,11 @@ Pu1xwz57O4zo1VYf6TqHJzVC3OMvMUM2hhdecMUe5x6GorNaj6g= crate::tests::key("really-revoked-userid-2-new-self-sig.pgp") ).unwrap()).unwrap(); - assert_eq!(cert.primary_userid(p, selfsig0).unwrap().userid().value(), + assert_eq!(cert.with_policy(p, selfsig0).unwrap() + .primary_userid().unwrap().userid().value(), b"Eminem"); - assert_eq!(cert.primary_userid(p, now).unwrap().userid().value(), + assert_eq!(cert.with_policy(p, now).unwrap() + .primary_userid().unwrap().userid().value(), b"Slim Shady"); // A hard revocation for "Slim Shady". @@ -3189,9 +3187,11 @@ Pu1xwz57O4zo1VYf6TqHJzVC3OMvMUM2hhdecMUe5x6GorNaj6g= crate::tests::key("really-revoked-userid-3-hard-revocation.pgp") ).unwrap()).unwrap(); - assert_eq!(cert.primary_userid(p, selfsig0).unwrap().userid().value(), + assert_eq!(cert.with_policy(p, selfsig0).unwrap() + .primary_userid().unwrap().userid().value(), b"Eminem"); - assert_eq!(cert.primary_userid(p, now).unwrap().userid().value(), + assert_eq!(cert.with_policy(p, now).unwrap() + .primary_userid().unwrap().userid().value(), b"Eminem"); // A newer self siganture for "Slim Shady". Unlike for Certs, this @@ -3201,9 +3201,11 @@ Pu1xwz57O4zo1VYf6TqHJzVC3OMvMUM2hhdecMUe5x6GorNaj6g= crate::tests::key("really-revoked-userid-4-new-self-sig.pgp") ).unwrap()).unwrap(); - assert_eq!(cert.primary_userid(p, selfsig0).unwrap().userid().value(), + assert_eq!(cert.with_policy(p, selfsig0).unwrap() + .primary_userid().unwrap().userid().value(), b"Eminem"); - assert_eq!(cert.primary_userid(p, now).unwrap().userid().value(), + assert_eq!(cert.with_policy(p, now).unwrap() + .primary_userid().unwrap().userid().value(), b"Slim Shady"); // Play with the primary user id flag. @@ -3217,9 +3219,11 @@ Pu1xwz57O4zo1VYf6TqHJzVC3OMvMUM2hhdecMUe5x6GorNaj6g= .max().unwrap(); // There is only a single User ID. - assert_eq!(cert.primary_userid(p, selfsig0).unwrap().userid().value(), + assert_eq!(cert.with_policy(p, selfsig0).unwrap() + .primary_userid().unwrap().userid().value(), b"aaaaa"); - assert_eq!(cert.primary_userid(p, now).unwrap().userid().value(), + assert_eq!(cert.with_policy(p, now).unwrap() + .primary_userid().unwrap().userid().value(), b"aaaaa"); @@ -3230,9 +3234,11 @@ Pu1xwz57O4zo1VYf6TqHJzVC3OMvMUM2hhdecMUe5x6GorNaj6g= crate::tests::key("primary-key-1-add-userid-bbbbb.pgp") ).unwrap()).unwrap(); - assert_eq!(cert.primary_userid(p, selfsig0).unwrap().userid().value(), + assert_eq!(cert.with_policy(p, selfsig0).unwrap() + .primary_userid().unwrap().userid().value(), b"aaaaa"); - assert_eq!(cert.primary_userid(p, now).unwrap().userid().value(), + assert_eq!(cert.with_policy(p, now).unwrap() + .primary_userid().unwrap().userid().value(), b"bbbbb"); // Mark aaaaa as primary. It is now primary and the newest one. @@ -3241,9 +3247,11 @@ Pu1xwz57O4zo1VYf6TqHJzVC3OMvMUM2hhdecMUe5x6GorNaj6g= crate::tests::key("primary-key-2-make-aaaaa-primary.pgp") ).unwrap()).unwrap(); - assert_eq!(cert.primary_userid(p, selfsig0).unwrap().userid().value(), + assert_eq!(cert.with_policy(p, selfsig0).unwrap() + .primary_userid().unwrap().userid().value(), b"aaaaa"); - assert_eq!(cert.primary_userid(p, now).unwrap().userid().value(), + assert_eq!(cert.with_policy(p, now).unwrap() + .primary_userid().unwrap().userid().value(), b"aaaaa"); // Update the preferences on bbbbb. It is now the newest, but @@ -3253,9 +3261,11 @@ Pu1xwz57O4zo1VYf6TqHJzVC3OMvMUM2hhdecMUe5x6GorNaj6g= crate::tests::key("primary-key-3-make-bbbbb-new-self-sig.pgp") ).unwrap()).unwrap(); - assert_eq!(cert.primary_userid(p, selfsig0).unwrap().userid().value(), + assert_eq!(cert.with_policy(p, selfsig0).unwrap() + .primary_userid().unwrap().userid().value(), b"aaaaa"); - assert_eq!(cert.primary_userid(p, now).unwrap().userid().value(), + assert_eq!(cert.with_policy(p, now).unwrap() + .primary_userid().unwrap().userid().value(), b"aaaaa"); // Mark bbbbb as primary. It is now the newest and marked as @@ -3265,9 +3275,11 @@ Pu1xwz57O4zo1VYf6TqHJzVC3OMvMUM2hhdecMUe5x6GorNaj6g= crate::tests::key("primary-key-4-make-bbbbb-primary.pgp") ).unwrap()).unwrap(); - assert_eq!(cert.primary_userid(p, selfsig0).unwrap().userid().value(), + assert_eq!(cert.with_policy(p, selfsig0).unwrap() + .primary_userid().unwrap().userid().value(), b"aaaaa"); - assert_eq!(cert.primary_userid(p, now).unwrap().userid().value(), + assert_eq!(cert.with_policy(p, now).unwrap() + .primary_userid().unwrap().userid().value(), b"bbbbb"); // Update the preferences on aaaaa. It is now has the newest @@ -3278,9 +3290,11 @@ Pu1xwz57O4zo1VYf6TqHJzVC3OMvMUM2hhdecMUe5x6GorNaj6g= crate::tests::key("primary-key-5-make-aaaaa-self-sig.pgp") ).unwrap()).unwrap(); - assert_eq!(cert.primary_userid(p, selfsig0).unwrap().userid().value(), + assert_eq!(cert.with_policy(p, selfsig0).unwrap() + .primary_userid().unwrap().userid().value(), b"aaaaa"); - assert_eq!(cert.primary_userid(p, now).unwrap().userid().value(), + assert_eq!(cert.with_policy(p, now).unwrap() + .primary_userid().unwrap().userid().value(), b"bbbbb"); // Hard revoke aaaaa. Unlike with Certs, a hard revocation is @@ -3290,9 +3304,11 @@ Pu1xwz57O4zo1VYf6TqHJzVC3OMvMUM2hhdecMUe5x6GorNaj6g= crate::tests::key("primary-key-6-revoked-aaaaa.pgp") ).unwrap()).unwrap(); - assert_eq!(cert.primary_userid(p, selfsig0).unwrap().userid().value(), + assert_eq!(cert.with_policy(p, selfsig0).unwrap() + .primary_userid().unwrap().userid().value(), b"aaaaa"); - assert_eq!(cert.primary_userid(p, now).unwrap().userid().value(), + assert_eq!(cert.with_policy(p, now).unwrap() + .primary_userid().unwrap().userid().value(), b"bbbbb"); } diff --git a/tool/src/commands/decrypt.rs b/tool/src/commands/decrypt.rs index b6d27aa2..52778cdb 100644 --- a/tool/src/commands/decrypt.rs +++ b/tool/src/commands/decrypt.rs @@ -46,7 +46,9 @@ impl<'a> Helper<'a> { let mut identities: HashMap<KeyID, Fingerprint> = HashMap::new(); let mut hints: HashMap<KeyID, String> = HashMap::new(); for tsk in secrets { - let hint = match tsk.primary_userid(policy, None).ok() { + let hint = match tsk.with_policy(policy, None) + .and_then(|valid_cert| valid_cert.primary_userid()).ok() + { Some(uid) => format!("{} ({})", uid.userid(), KeyID::from(tsk.fingerprint())), None => format!("{}", KeyID::from(tsk.fingerprint())), diff --git a/tool/src/sq.rs b/tool/src/sq.rs index 3e3df364..1d6c0a92 100644 --- a/tool/src/sq.rs +++ b/tool/src/sq.rs @@ -389,7 +389,8 @@ fn main() -> Result<()> { let cert = Cert::from_reader(input)?; let addr = m.value_of("address").map(|a| a.to_string()) .or_else(|| { - cert.primary_userid(policy, None).ok() + cert.with_policy(policy, None) + .and_then(|vcert| vcert.primary_userid()).ok() .map(|ca| ca.userid().to_string()) }); let ac = autocrypt::AutocryptHeader::new_sender( |