From 128b7f46c52506c8511576792c1482ba48e29ddd Mon Sep 17 00:00:00 2001 From: Tony Arcieri Date: Sun, 14 Nov 2021 13:28:31 -0700 Subject: [PATCH] spki: error improvements (#212) - Renames `spki::Error::UnknownOid` => `OidUnknown` for consistency with `der::ErrorKind::OidUnknown` - Adds `pkcs8::Error::PublicKey` as a wrapper for `spki::Error` --- pkcs8/src/error.rs | 10 ++++++++++ spki/src/algorithm.rs | 4 ++-- spki/src/error.rs | 10 +++++++--- 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/pkcs8/src/error.rs b/pkcs8/src/error.rs index 4e400cdc2..3fdf9df3d 100644 --- a/pkcs8/src/error.rs +++ b/pkcs8/src/error.rs @@ -28,6 +28,9 @@ pub enum Error { /// [`AlgorithmIdentifier::parameters`][`crate::AlgorithmIdentifier::parameters`] /// is malformed or otherwise encoded in an unexpected manner. ParametersMalformed, + + /// Public key errors propagated from the [`spki::Error`] type. + PublicKey(spki::Error), } impl fmt::Display for Error { @@ -37,6 +40,7 @@ impl fmt::Display for Error { Error::Crypto => f.write_str("PKCS#8 cryptographic error"), Error::KeyMalformed => f.write_str("PKCS#8 cryptographic key data malformed"), Error::ParametersMalformed => f.write_str("PKCS#8 algorithm parameters malformed"), + Error::PublicKey(err) => write!(f, "public key error: {}", err), } } } @@ -55,3 +59,9 @@ impl From for Error { Error::Asn1(err.into()) } } + +impl From for Error { + fn from(err: spki::Error) -> Error { + Error::PublicKey(err) + } +} diff --git a/spki/src/algorithm.rs b/spki/src/algorithm.rs index c8e565aa9..f17bd15b6 100644 --- a/spki/src/algorithm.rs +++ b/spki/src/algorithm.rs @@ -31,7 +31,7 @@ impl<'a> AlgorithmIdentifier<'a> { if self.oid == expected_oid { Ok(expected_oid) } else { - Err(Error::UnknownOid { oid: expected_oid }) + Err(Error::OidUnknown { oid: expected_oid }) } } @@ -45,7 +45,7 @@ impl<'a> AlgorithmIdentifier<'a> { if actual_oid == expected_oid { Ok(actual_oid) } else { - Err(Error::UnknownOid { oid: expected_oid }) + Err(Error::OidUnknown { oid: expected_oid }) } } diff --git a/spki/src/error.rs b/spki/src/error.rs index fd628976a..9a14dfb56 100644 --- a/spki/src/error.rs +++ b/spki/src/error.rs @@ -17,7 +17,7 @@ pub enum Error { Asn1(der::Error), /// Unknown algorithm OID. - UnknownOid { + OidUnknown { /// Unrecognized OID value found in e.g. a SPKI `AlgorithmIdentifier`. oid: ObjectIdentifier, }, @@ -30,7 +30,7 @@ impl fmt::Display for Error { f.write_str("AlgorithmIdentifier parameters missing") } Error::Asn1(err) => write!(f, "ASN.1 error: {}", err), - Error::UnknownOid { oid } => { + Error::OidUnknown { oid } => { write!(f, "unknown/unsupported algorithm OID: {}", oid) } } @@ -39,7 +39,11 @@ impl fmt::Display for Error { impl From for Error { fn from(err: der::Error) -> Error { - Error::Asn1(err) + if let der::ErrorKind::OidUnknown { oid } = err.kind() { + Error::OidUnknown { oid } + } else { + Error::Asn1(err) + } } }