summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJustus Winter <justus@sequoia-pgp.org>2020-04-15 14:08:09 +0200
committerJustus Winter <justus@sequoia-pgp.org>2020-04-15 15:48:23 +0200
commitf227657e17d1fdc5ff18e5cff224ebed3476416e (patch)
treee6e57d9d923d6371f7751e398b274323f48dc1fe
parent896c71864a67231c6587fed066fbb2fbbac3165f (diff)
openpgp: Drop Cert::primary_userid.
- Fixes #484.
-rw-r--r--openpgp-ffi/src/cert.rs4
-rw-r--r--openpgp/src/cert/amalgamation.rs2
-rw-r--r--openpgp/src/cert/builder.rs2
-rw-r--r--openpgp/src/cert/mod.rs88
-rw-r--r--tool/src/commands/decrypt.rs4
-rw-r--r--tool/src/sq.rs3
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(