use thiserror::Error;
#[derive(Debug, Clone, PartialEq, Eq, Error)]
#[error("{code}: {message}")]
pub struct EciesSealedPoeError {
pub code: EciesSealedPoeErrorCode,
pub message: String,
}
impl EciesSealedPoeError {
pub(crate) fn new(code: EciesSealedPoeErrorCode, message: impl Into<String>) -> Self {
Self {
code,
message: message.into(),
}
}
#[must_use]
pub fn code(&self) -> &'static str {
self.code.as_str()
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum EciesSealedPoeErrorCode {
EncSlotsEmpty,
EncSlotsRequired,
EncSlotsMacRequired,
EncSlotsMacInvalidLength,
KemEpkLengthMismatch,
KemCtLengthMismatch,
InvalidCekLength,
NonceLengthMismatch,
InvalidEphemeralSecretLength,
EphemeralSecretsCountMismatch,
UnsupportedEncVersion,
UnsupportedAeadAlg,
UnsupportedKemAlg,
InvalidEnvelopeShape,
InvalidRecipientKey,
WrapLengthMismatch,
RngUnavailable,
}
impl EciesSealedPoeErrorCode {
#[must_use]
pub const fn as_str(self) -> &'static str {
match self {
Self::EncSlotsEmpty => "ENC_SLOTS_EMPTY",
Self::EncSlotsRequired => "ENC_SLOTS_REQUIRED",
Self::EncSlotsMacRequired => "ENC_SLOTS_MAC_REQUIRED",
Self::EncSlotsMacInvalidLength => "ENC_SLOTS_MAC_INVALID_LENGTH",
Self::KemEpkLengthMismatch => "KEM_EPK_LENGTH_MISMATCH",
Self::KemCtLengthMismatch => "KEM_CT_LENGTH_MISMATCH",
Self::InvalidCekLength => "INVALID_CEK_LENGTH",
Self::NonceLengthMismatch => "NONCE_LENGTH_MISMATCH",
Self::InvalidEphemeralSecretLength => "INVALID_EPHEMERAL_SECRET_LENGTH",
Self::EphemeralSecretsCountMismatch => "EPHEMERAL_SECRETS_COUNT_MISMATCH",
Self::UnsupportedEncVersion => "UNSUPPORTED_ENC_VERSION",
Self::UnsupportedAeadAlg => "UNSUPPORTED_AEAD_ALG",
Self::UnsupportedKemAlg => "UNSUPPORTED_KEM_ALG",
Self::InvalidEnvelopeShape => "INVALID_ENVELOPE_SHAPE",
Self::InvalidRecipientKey => "INVALID_RECIPIENT_KEY",
Self::WrapLengthMismatch => "WRAP_LENGTH_MISMATCH",
Self::RngUnavailable => "RNG_UNAVAILABLE",
}
}
}
impl std::fmt::Display for EciesSealedPoeErrorCode {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.write_str(self.as_str())
}
}