///|
/// A trusted public key could not be decoded.
///
/// Every variant describes a defect in configuration, not in a signature.
/// Signature verification itself never raises: it answers with a boolean, so
/// that no caller can mistake an error path for a successful check.
pub(all) suberror KeyError {
UnknownAlgorithm(tag~ : String)
Malformed(detail~ : String)
NonCanonicalModulus
ModulusTooSmall(bits~ : Int, minimum~ : Int)
InvalidExponent(detail~ : String)
} derive(Debug, Eq)
///|
pub fn KeyError::message(self : KeyError) -> String {
match self {
UnknownAlgorithm(tag~) => "unknown public key algorithm: \{tag}"
Malformed(detail~) => "malformed public key: \{detail}"
NonCanonicalModulus =>
"public key modulus must not have a leading zero byte"
ModulusTooSmall(bits~, minimum~) =>
"public key modulus is \{bits} bits, minimum is \{minimum}"
InvalidExponent(detail~) => "invalid public exponent: \{detail}"
}
}
///|
impl Show for KeyError with fn output(self, logger) {
logger.write_string(self.message())
}