use failure::Fail;
#[derive(Eq, PartialEq, Debug, Fail, Clone)]
pub enum ZeiError {
#[fail(display = "Proof verification failed.")]
VerificationError,
#[fail(display = "Can't have more than 32 Outputs.")]
OutputOverflowError,
#[fail(display = "Can't leave coins behind.")]
CoinsLeftBehind,
#[fail(display = "Internal error during proof creation: {}", _0)]
ProofError(ProofError),
#[fail(display = "Decryption failed.")]
LockboxDecrypt
}
#[derive(Fail, Clone, Debug, Eq, PartialEq)]
pub enum ProofError {
#[fail(display = "Proof verification failed.")]
VerificationError,
#[fail(display = "Proof data could not be parsed.")]
FormatError,
#[fail(display = "Wrong number of blinding factors supplied.")]
WrongNumBlindingFactors,
#[fail(display = "Invalid bitsize, must have n = 8,16,32,64.")]
InvalidBitsize,
#[fail(display = "Invalid aggregation size, m must be a power of 2.")]
InvalidAggregation,
#[fail(display = "Invalid generators size, too few generators for proof")]
InvalidGeneratorsLength,
#[fail(display = "Internal error during proof creation: {}", _0)]
ProvingError(MPCError)
}
impl From<ProofError> for ZeiError {
fn from(e: ProofError) -> ZeiError {
ZeiError::ProofError(e)
}
}
impl From<MPCError> for ZeiError {
fn from(e: MPCError) -> ZeiError {
match e {
MPCError::InvalidBitsize => ZeiError::from(ProofError::InvalidBitsize),
MPCError::InvalidAggregation => ZeiError::from(ProofError::InvalidAggregation),
MPCError::InvalidGeneratorsLength => ZeiError::from(ProofError::InvalidGeneratorsLength),
_ => ZeiError::from(ProofError::ProvingError(e)),
}
}
}
impl From<MPCError> for ProofError {
fn from(e: MPCError) -> ProofError {
match e {
MPCError::InvalidBitsize => ProofError::InvalidBitsize,
MPCError::InvalidAggregation => ProofError::InvalidAggregation,
MPCError::InvalidGeneratorsLength => ProofError::InvalidGeneratorsLength,
_ => ProofError::ProvingError(e),
}
}
}
#[derive(Fail, Clone, Debug, Eq, PartialEq)]
pub enum MPCError {
#[fail(display = "Dealer gave a malicious challenge value.")]
MaliciousDealer,
#[fail(display = "Invalid bitsize, must have n = 8,16,32,64")]
InvalidBitsize,
#[fail(display = "Invalid aggregation size, m must be a power of 2")]
InvalidAggregation,
#[fail(display = "Invalid generators size, too few generators for proof")]
InvalidGeneratorsLength,
#[fail(display = "Wrong number of value commitments")]
WrongNumBitCommitments,
#[fail(display = "Wrong number of value commitments")]
WrongNumPolyCommitments,
#[fail(display = "Wrong number of proof shares")]
WrongNumProofShares,
#[fail(display = "Malformed proof shares from parties {:?}", bad_shares)]
MalformedProofShares {
bad_shares: Vec<usize>,
},
}