use thiserror::Error;
#[derive(Error, Clone, Debug, Eq, PartialEq)]
pub enum BlsError {
#[error("invalid signing operation: {0}")]
SigningError(String),
#[error("invalid inputs: {0}")]
InvalidInputs(String),
#[error("invalid signature")]
InvalidSignature,
#[error("invalid proof")]
InvalidProof,
#[error("invalid signature scheme")]
InvalidSignatureScheme,
#[error("invalid signcryption share")]
InvalidDecryptionShare,
#[error("secret sharing error: {0}")]
VsssError(vsss_rs::Error),
#[error("serialization error: {0}")]
SerializationError(String),
#[error("deserialization error: {0}")]
DeserializationError(String),
}
pub type BlsResult<T> = Result<T, BlsError>;
impl From<vsss_rs::Error> for BlsError {
fn from(error: vsss_rs::Error) -> Self {
Self::VsssError(error)
}
}
impl From<serde_bare::error::Error> for BlsError {
fn from(e: serde_bare::error::Error) -> Self {
Self::DeserializationError(e.to_string())
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn preserves_secret_sharing_error_details() {
let error = BlsError::from(vsss_rs::Error::SharingLimitLessThanThreshold);
assert_eq!(
error,
BlsError::VsssError(vsss_rs::Error::SharingLimitLessThanThreshold)
);
assert_eq!(
error.to_string(),
"secret sharing error: Limit is less than threshold"
);
}
}