diff options
author | Justus Winter <justus@sequoia-pgp.org> | 2020-08-17 16:23:59 +0200 |
---|---|---|
committer | Justus Winter <justus@sequoia-pgp.org> | 2020-08-17 16:41:44 +0200 |
commit | 303057988fe6dde9aacaaa827806de1f7426984a (patch) | |
tree | 45e3a30cfc8855517b972b7d9682007d6dc2a428 | |
parent | 3d6e450c38fc3c19d8afb8d00a052edd1f2fe4b8 (diff) |
openpgp: Rename PublicKey::keygrip to Keygrip::of.
- This allows us to move Keygrip to a different crate.
-rw-r--r-- | ipc/src/gnupg.rs | 9 | ||||
-rw-r--r-- | openpgp/src/crypto/keygrip.rs | 55 | ||||
-rw-r--r-- | tool/src/commands/inspect.rs | 3 |
3 files changed, 39 insertions, 28 deletions
diff --git a/ipc/src/gnupg.rs b/ipc/src/gnupg.rs index b81e0927..ddb82aa4 100644 --- a/ipc/src/gnupg.rs +++ b/ipc/src/gnupg.rs @@ -14,6 +14,7 @@ use sequoia_openpgp as openpgp; use openpgp::types::HashAlgorithm; use openpgp::fmt::hex; use openpgp::crypto; +use openpgp::crypto::Keygrip; use openpgp::packet::prelude::*; use openpgp::parse::Parse; use openpgp::serialize::Serialize; @@ -417,7 +418,7 @@ impl<'a, 'b, 'c, R> Future for SigningRequest<'a, 'b, 'c, R> Start => { if self.options.is_empty() { self.c.send(format!("SIGKEY {}", - self.key.mpis().keygrip()?))?; + Keygrip::of(self.key.mpis())?))?; self.state = SigKey; } else { self.c.send(self.options.pop().unwrap())?; @@ -441,7 +442,7 @@ impl<'a, 'b, 'c, R> Future for SigningRequest<'a, 'b, 'c, R> self.c.send(option)?; } else { self.c.send(format!("SIGKEY {}", - self.key.mpis().keygrip()?))?; + Keygrip::of(self.key.mpis())?))?; self.state = SigKey; } }, @@ -565,7 +566,7 @@ impl<'a, 'b, 'c, R> Future for DecryptionRequest<'a, 'b, 'c, R> Start => { if self.options.is_empty() { self.c.send(format!("SETKEY {}", - self.key.mpis().keygrip()?))?; + Keygrip::of(self.key.mpis())?))?; self.state = SetKey; } else { self.c.send(self.options.pop().unwrap())?; @@ -589,7 +590,7 @@ impl<'a, 'b, 'c, R> Future for DecryptionRequest<'a, 'b, 'c, R> self.c.send(option)?; } else { self.c.send(format!("SETKEY {}", - self.key.mpis().keygrip()?))?; + Keygrip::of(self.key.mpis())?))?; self.state = SetKey; } }, diff --git a/openpgp/src/crypto/keygrip.rs b/openpgp/src/crypto/keygrip.rs index 3722ea0c..c3f25627 100644 --- a/openpgp/src/crypto/keygrip.rs +++ b/openpgp/src/crypto/keygrip.rs @@ -18,23 +18,6 @@ use crate::crypto::mpi::{MPI, PublicKey}; /// /// let k: Keygrip = "DD143ABA8D1D7D09875D6209E01BCF020788FF77".parse()?; /// assert_eq!(&k.to_string(), "DD143ABA8D1D7D09875D6209E01BCF020788FF77"); -/// -/// let cert: openpgp::Cert = // ... -/// # "-----BEGIN PGP PUBLIC KEY BLOCK----- -/// # -/// # xjMEWlNvABYJKwYBBAHaRw8BAQdA+EC2pvebpEbzPA9YplVgVXzkIG5eK+7wEAez -/// # lcBgLJrNMVRlc3R5IE1jVGVzdGZhY2UgKG15IG5ldyBrZXkpIDx0ZXN0eUBleGFt -/// # cGxlLm9yZz7CkAQTFggAOBYhBDnRAKtn1b2MBAECBfs3UfFYfa7xBQJaU28AAhsD -/// # BQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEPs3UfFYfa7xJHQBAO4/GABMWUcJ -/// # 5D/DZ9b+6YiFnysSjCT/gILJgxMgl7uoAPwJherI1pAAh49RnPHBR1IkWDtwzX65 -/// # CJG8sDyO2FhzDs44BFpTbwASCisGAQQBl1UBBQEBB0B+A0GRHuBgdDX50T1nePjb -/// # mKQ5PeqXJbWEtVrUtVJaPwMBCAfCeAQYFggAIBYhBDnRAKtn1b2MBAECBfs3UfFY -/// # fa7xBQJaU28AAhsMAAoJEPs3UfFYfa7xzjIBANX2/FgDX3WkmvwpEHg/sn40zACM -/// # W2hrBY5x0sZ8H7JlAP47mCfCuRVBqyaePuzKbxLJeLe2BpDdc0n2izMVj8t9Cg== -/// # =QetZ -/// # -----END PGP PUBLIC KEY BLOCK-----".parse()?; -/// assert_eq!(&cert.primary_key().mpis().keygrip()?.to_string(), -/// "DD143ABA8D1D7D09875D6209E01BCF020788FF77"); /// # Ok(()) } /// ``` #[derive(Clone, PartialEq, Eq, Hash)] @@ -74,9 +57,35 @@ impl std::str::FromStr for Keygrip { } } -impl PublicKey { - /// Computes the keygrip. - pub fn keygrip(&self) -> Result<Keygrip> { +impl Keygrip { + /// Computes the keygrip of the given public key. + /// + /// # Examples + /// + /// ``` + /// # fn main() -> sequoia_openpgp::Result<()> { + /// use sequoia_openpgp as openpgp; + /// use openpgp::crypto::Keygrip; + /// + /// let cert: openpgp::Cert = // ... + /// # "-----BEGIN PGP PUBLIC KEY BLOCK----- + /// # + /// # xjMEWlNvABYJKwYBBAHaRw8BAQdA+EC2pvebpEbzPA9YplVgVXzkIG5eK+7wEAez + /// # lcBgLJrNMVRlc3R5IE1jVGVzdGZhY2UgKG15IG5ldyBrZXkpIDx0ZXN0eUBleGFt + /// # cGxlLm9yZz7CkAQTFggAOBYhBDnRAKtn1b2MBAECBfs3UfFYfa7xBQJaU28AAhsD + /// # BQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEPs3UfFYfa7xJHQBAO4/GABMWUcJ + /// # 5D/DZ9b+6YiFnysSjCT/gILJgxMgl7uoAPwJherI1pAAh49RnPHBR1IkWDtwzX65 + /// # CJG8sDyO2FhzDs44BFpTbwASCisGAQQBl1UBBQEBB0B+A0GRHuBgdDX50T1nePjb + /// # mKQ5PeqXJbWEtVrUtVJaPwMBCAfCeAQYFggAIBYhBDnRAKtn1b2MBAECBfs3UfFY + /// # fa7xBQJaU28AAhsMAAoJEPs3UfFYfa7xzjIBANX2/FgDX3WkmvwpEHg/sn40zACM + /// # W2hrBY5x0sZ8H7JlAP47mCfCuRVBqyaePuzKbxLJeLe2BpDdc0n2izMVj8t9Cg== + /// # =QetZ + /// # -----END PGP PUBLIC KEY BLOCK-----".parse()?; + /// assert_eq!(Keygrip::of(cert.primary_key().mpis())?.to_string(), + /// "DD143ABA8D1D7D09875D6209E01BCF020788FF77"); + /// # Ok(()) } + /// ``` + pub fn of(key: &PublicKey) -> Result<Keygrip> { use crate::crypto::hash; use std::io::Write; use self::PublicKey::*; @@ -123,7 +132,7 @@ impl PublicKey { } } - match self { + match key { // From libgcrypt/cipher/rsa.c: // // PKCS-15 says that for RSA only the modulus should be @@ -309,7 +318,7 @@ mod tests { ]; for (key, keygrip) in tests { - assert_eq!(key.keygrip().unwrap(), keygrip); + assert_eq!(Keygrip::of(&key).unwrap(), keygrip); } } @@ -382,7 +391,7 @@ mod tests { for key in cert.keys().map(|a| a.key()) { let fp = key.fingerprint(); eprintln!("(sub)key: {}", fp); - assert_eq!(&key.mpis().keygrip().unwrap(), + assert_eq!(&Keygrip::of(key.mpis()).unwrap(), keygrips.get(&fp).unwrap()); } } diff --git a/tool/src/commands/inspect.rs b/tool/src/commands/inspect.rs index c1f12120..8e475bbf 100644 --- a/tool/src/commands/inspect.rs +++ b/tool/src/commands/inspect.rs @@ -246,8 +246,9 @@ fn inspect_key(policy: &dyn Policy, }; if print_keygrips { + use openpgp::crypto::Keygrip; writeln!(output, "{} Keygrip: {}", indent, - key.mpis().keygrip()?)?; + Keygrip::of(key.mpis())?)?; } writeln!(output, "{}Public-key algo: {}", indent, key.pk_algo())?; if let Some(bits) = key.mpis().bits() { |