use core::fmt;
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
#[non_exhaustive]
pub enum BlockModeInitError<E> {
InvalidIvLength(usize),
InvalidFeedbackSize(usize),
UnsupportedBlockSize {
actual: usize,
required: usize,
},
Cipher(E),
}
impl<E: core::error::Error> fmt::Display for BlockModeInitError<E> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::InvalidIvLength(bytes) => {
write!(f, "invalid block cipher mode IV length: {bytes} bytes")
}
Self::InvalidFeedbackSize(bits) => {
write!(f, "invalid block cipher mode feedback size: {bits} bits")
}
Self::UnsupportedBlockSize { actual, required } => write!(
f,
"unsupported block size: {actual} bytes; mode requires {required} bytes"
),
Self::Cipher(error) => {
write!(f, "underlying block cipher initialization error: {error}")
}
}
}
}
impl<E: core::error::Error> core::error::Error for BlockModeInitError<E> {}