summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJustus Winter <justus@sequoia-pgp.org>2020-08-17 16:23:59 +0200
committerJustus Winter <justus@sequoia-pgp.org>2020-08-17 16:41:44 +0200
commit303057988fe6dde9aacaaa827806de1f7426984a (patch)
tree45e3a30cfc8855517b972b7d9682007d6dc2a428
parent3d6e450c38fc3c19d8afb8d00a052edd1f2fe4b8 (diff)
openpgp: Rename PublicKey::keygrip to Keygrip::of.
- This allows us to move Keygrip to a different crate.
-rw-r--r--ipc/src/gnupg.rs9
-rw-r--r--openpgp/src/crypto/keygrip.rs55
-rw-r--r--tool/src/commands/inspect.rs3
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() {