use std::fmt;
use midnight_proofs::plonk;
#[derive(Debug)]
pub enum IvcError {
ProofGeneration(plonk::Error),
InvalidInstance,
InvalidWitness(String),
VkMismatch,
InvalidProof,
TranscriptNotEmpty,
DeciderFailed,
}
impl From<plonk::Error> for IvcError {
fn from(e: plonk::Error) -> Self {
IvcError::ProofGeneration(e)
}
}
impl fmt::Display for IvcError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
IvcError::ProofGeneration(e) => write!(f, "proof generation failed: {e}"),
IvcError::InvalidInstance => write!(f, "invalid instance"),
IvcError::InvalidWitness(msg) => write!(f, "invalid witness: {msg}"),
IvcError::VkMismatch => write!(f, "verifying-key mismatch"),
IvcError::InvalidProof => write!(f, "invalid proof"),
IvcError::TranscriptNotEmpty => write!(f, "proof transcript not empty"),
IvcError::DeciderFailed => write!(f, "decider check failed"),
}
}
}
impl std::error::Error for IvcError {
fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
match self {
IvcError::ProofGeneration(e) => Some(e),
_ => None,
}
}
}