solana_zk_sdk/sigma_proofs/
errors.rs

1//! Errors related to proving and verifying sigma proofs.
2use {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);