#![allow(clippy::default_trait_access)]
use snafu::{Backtrace, Snafu};
pub type Result<T> = std::result::Result<T, Error>;
#[derive(Debug, Snafu)]
#[snafu(visibility(pub(crate)))]
#[non_exhaustive]
#[allow(missing_docs)]
pub enum Error {
#[snafu(display("Unable to create tokio runtime: {}", source))]
RuntimeCreation {
source: std::io::Error,
backtrace: Backtrace,
},
#[snafu(display("Unable to join tokio thread used to offload async workloads"))]
ThreadJoin,
#[snafu(display(
"Failed to get public key for aws-kms://{}/{} : {}",
profile.as_deref().unwrap_or(""),
key_id,
source,
))]
KmsGetPublicKey {
profile: Option<String>,
key_id: String,
source: aws_sdk_kms::types::SdkError<aws_sdk_kms::error::GetPublicKeyError>,
backtrace: Backtrace,
},
#[snafu(display("Public key does not exist"))]
PublicKeyNone,
#[snafu(display("Failed to parse public key: {}", source))]
PublicKeyParse { source: tough::schema::Error },
#[snafu(display("Error while signing message for aws-kms://{}/{} : {}", profile.as_deref().unwrap_or(""), key_id, source))]
KmsSignMessage {
key_id: String,
profile: Option<String>,
source: aws_sdk_kms::types::SdkError<aws_sdk_kms::error::SignError>,
backtrace: Backtrace,
},
#[snafu(display("Empty signature returned by AWS KMS"))]
SignatureNotFound,
#[snafu(display("Please provide valid signing algorithm"))]
ValidSignAlgorithm,
#[snafu(display(
"Found public key from AWS KMS, but list of supported signing algorithm is missing"
))]
MissingSignAlgorithm,
#[snafu(display("Found public key from AWS KMS, but the KeySpec field is missing"))]
MissingKeySpec,
#[snafu(display("Unable to parse the KeySpec: {}", spec))]
BadKeySpec { spec: String },
#[snafu(display("Unable to parse the integer in KeySpec: {}", spec))]
BadKeySpecInt {
spec: String,
source: std::num::ParseIntError,
},
#[snafu(display(
"Signature is too long, modulus_size_bytes: {}, signature_size_bytes: {}",
modulus_size_bytes,
signature_size_bytes
))]
SignatureTooLong {
modulus_size_bytes: usize,
signature_size_bytes: usize,
},
#[snafu(display(
"The modulus bit size is {}, but should be divisible by 8. KeySpec is {}.",
modulus_size_bits,
spec
))]
UnsupportedModulusSize {
modulus_size_bits: usize,
spec: String,
},
}