solana_zk_sdk/sigma_proofs/
errors.rs1use {crate::errors::TranscriptError, thiserror::Error};
3
4#[derive(Error, Clone, Debug, Eq, PartialEq)]
5pub enum SigmaProofVerificationError {
6 #[error("required algebraic relation does not hold")]
7 AlgebraicRelation,
8 #[error("malformed proof")]
9 Deserialization,
10 #[error("multiscalar multiplication failed")]
11 MultiscalarMul,
12 #[error("transcript failed to produce a challenge")]
13 Transcript(#[from] TranscriptError),
14 #[error("public key is the identity")]
15 PubkeyIsIdentity,
16}
17
18macro_rules! impl_from_transcript_error {
19 ($sigma_error_type:ty) => {
20 impl From<TranscriptError> for $sigma_error_type {
21 fn from(err: TranscriptError) -> Self {
22 SigmaProofVerificationError::Transcript(err).into()
23 }
24 }
25 };
26}
27
28#[derive(Error, Clone, Debug, Eq, PartialEq)]
29#[error("equality proof verification failed: {0}")]
30pub struct EqualityProofVerificationError(#[from] pub(crate) SigmaProofVerificationError);
31impl_from_transcript_error!(EqualityProofVerificationError);
32
33#[derive(Error, Clone, Debug, Eq, PartialEq)]
34#[error("validity proof verification failed: {0}")]
35pub struct ValidityProofVerificationError(#[from] pub(crate) SigmaProofVerificationError);
36impl_from_transcript_error!(ValidityProofVerificationError);
37
38#[derive(Error, Clone, Debug, Eq, PartialEq)]
39#[error("zero-ciphertext proof verification failed: {0}")]
40pub struct ZeroCiphertextProofVerificationError(#[from] pub(crate) SigmaProofVerificationError);
41impl_from_transcript_error!(ZeroCiphertextProofVerificationError);
42
43#[derive(Error, Clone, Debug, Eq, PartialEq)]
44#[error("percentage-with-cap proof verification failed: {0}")]
45pub struct PercentageWithCapProofVerificationError(#[from] pub(crate) SigmaProofVerificationError);
46impl_from_transcript_error!(PercentageWithCapProofVerificationError);
47
48#[derive(Error, Clone, Debug, Eq, PartialEq)]
49#[error("public key validity proof verification failed: {0}")]
50pub struct PubkeyValidityProofVerificationError(#[from] pub(crate) SigmaProofVerificationError);
51impl_from_transcript_error!(PubkeyValidityProofVerificationError);