1use ark_std::{format, string::String};
10use displaydoc::Display;
11use jf_pcs::errors::PCSError;
12use jf_relation::CircuitError;
13
14#[derive(Display, Debug)]
16pub enum PlonkError {
17 IndexTooLarge,
19 DomainCreationError,
21 IndexError,
23 DivisionError,
25 SnarkError(SnarkError),
27 PCSError(PCSError),
29 CircuitError(CircuitError),
31 IoError(ark_std::io::Error),
33 SerializationError(ark_serialize::SerializationError),
35 WrongProof,
37 RescueError(jf_rescue::RescueError),
39 InvalidParameters(String),
41 NonNativeFieldOverflow,
43 IteratorOutOfRange,
45 PublicInputsDoNotMatch,
47}
48
49impl ark_std::error::Error for PlonkError {}
50
51impl From<PCSError> for PlonkError {
52 fn from(e: PCSError) -> Self {
53 Self::PCSError(e)
54 }
55}
56
57impl From<ark_std::io::Error> for PlonkError {
58 fn from(e: ark_std::io::Error) -> Self {
59 Self::IoError(e)
60 }
61}
62
63impl From<ark_serialize::SerializationError> for PlonkError {
64 fn from(e: ark_serialize::SerializationError) -> Self {
65 Self::SerializationError(e)
66 }
67}
68
69impl From<jf_rescue::RescueError> for PlonkError {
70 fn from(e: jf_rescue::RescueError) -> Self {
71 Self::RescueError(e)
72 }
73}
74
75#[derive(Display, Debug)]
77pub enum SnarkError {
78 #[rustfmt::skip]
79 WrongQuotientPolyDegree(usize, usize),
81 ParameterError(String),
83 SnarkLookupUnsupported,
85}
86
87#[cfg(feature = "std")]
88impl std::error::Error for SnarkError {}
89
90impl From<SnarkError> for PlonkError {
91 fn from(e: SnarkError) -> Self {
92 Self::SnarkError(e)
93 }
94}
95
96impl From<CircuitError> for PlonkError {
97 fn from(e: CircuitError) -> Self {
98 Self::CircuitError(e)
99 }
100}
101
102impl From<PlonkError> for CircuitError {
103 fn from(e: PlonkError) -> Self {
106 Self::ParameterError(format!("Plonk proof system err: {e:?}"))
107 }
108}