feat: add a separate TranscriptError
This commit is contained in:
		@@ -10,3 +10,9 @@ pub enum ProofError {
 | 
			
		||||
    )]
 | 
			
		||||
    InconsistentCTData,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Error, Clone, Debug, Eq, PartialEq)]
 | 
			
		||||
pub enum TranscriptError {
 | 
			
		||||
    #[error("point is the identity")]
 | 
			
		||||
    ValidationError,
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,9 @@
 | 
			
		||||
//! Errors related to proving and verifying proofs.
 | 
			
		||||
use thiserror::Error;
 | 
			
		||||
use crate::errors::TranscriptError;
 | 
			
		||||
 | 
			
		||||
#[derive(Error, Clone, Debug, Eq, PartialEq)]
 | 
			
		||||
pub enum ProofError {
 | 
			
		||||
pub enum RangeProofError {
 | 
			
		||||
    #[error("the required algebraic relation does not hold")]
 | 
			
		||||
    AlgebraicRelationError,
 | 
			
		||||
    #[error("malformed proof")]
 | 
			
		||||
@@ -11,6 +12,14 @@ pub enum ProofError {
 | 
			
		||||
    InvalidBitsize,
 | 
			
		||||
    #[error("insufficient generators for the proof")]
 | 
			
		||||
    InvalidGeneratorsLength,
 | 
			
		||||
    #[error("transcript failed to produce a challenge")]
 | 
			
		||||
    TranscriptError,
 | 
			
		||||
    #[error("number of blinding factors do not match the number of values")]
 | 
			
		||||
    WrongNumBlindingFactors,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl From<TranscriptError> for RangeProofError {
 | 
			
		||||
    fn from(err: TranscriptError) -> Self {
 | 
			
		||||
        Self::TranscriptError
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -8,8 +8,7 @@ use {
 | 
			
		||||
use {
 | 
			
		||||
    crate::{
 | 
			
		||||
        encryption::pedersen::PedersenBase,
 | 
			
		||||
        errors::ProofError,
 | 
			
		||||
        range_proof::{generators::BulletproofGens, inner_product::InnerProductProof},
 | 
			
		||||
        range_proof::{errors::RangeProofError, generators::BulletproofGens, inner_product::InnerProductProof},
 | 
			
		||||
        transcript::TranscriptProtocol,
 | 
			
		||||
    },
 | 
			
		||||
    core::iter,
 | 
			
		||||
@@ -222,7 +221,7 @@ impl RangeProof {
 | 
			
		||||
        comms: Vec<&CompressedRistretto>,
 | 
			
		||||
        bit_lengths: Vec<usize>,
 | 
			
		||||
        transcript: &mut Transcript,
 | 
			
		||||
    ) -> Result<(), ProofError> {
 | 
			
		||||
    ) -> Result<(), RangeProofError> {
 | 
			
		||||
        let G = PedersenBase::default().G;
 | 
			
		||||
        let H = PedersenBase::default().H;
 | 
			
		||||
 | 
			
		||||
@@ -231,11 +230,7 @@ impl RangeProof {
 | 
			
		||||
        let bp_gens = BulletproofGens::new(nm);
 | 
			
		||||
 | 
			
		||||
        if !nm.is_power_of_two() {
 | 
			
		||||
            return Err(ProofError::InvalidBitsize);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if !(nm == 8 || nm == 16 || nm == 32 || nm == 64 || nm == 128) {
 | 
			
		||||
            return Err(ProofError::InvalidBitsize);
 | 
			
		||||
            return Err(RangeProofError::InvalidBitsize);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        transcript.validate_and_append_point(b"A", &self.A)?;
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
use {
 | 
			
		||||
    crate::errors::ProofError,
 | 
			
		||||
    crate::errors::TranscriptError,
 | 
			
		||||
    curve25519_dalek::{ristretto::CompressedRistretto, scalar::Scalar, traits::IsIdentity},
 | 
			
		||||
    merlin::Transcript,
 | 
			
		||||
};
 | 
			
		||||
@@ -40,7 +40,7 @@ pub trait TranscriptProtocol {
 | 
			
		||||
        &mut self,
 | 
			
		||||
        label: &'static [u8],
 | 
			
		||||
        point: &CompressedRistretto,
 | 
			
		||||
    ) -> Result<(), ProofError>;
 | 
			
		||||
    ) -> Result<(), TranscriptError>;
 | 
			
		||||
 | 
			
		||||
    /// Compute a `label`ed challenge variable.
 | 
			
		||||
    fn challenge_scalar(&mut self, label: &'static [u8]) -> Scalar;
 | 
			
		||||
@@ -90,9 +90,9 @@ impl TranscriptProtocol for Transcript {
 | 
			
		||||
        &mut self,
 | 
			
		||||
        label: &'static [u8],
 | 
			
		||||
        point: &CompressedRistretto,
 | 
			
		||||
    ) -> Result<(), ProofError> {
 | 
			
		||||
    ) -> Result<(), TranscriptError> {
 | 
			
		||||
        if point.is_identity() {
 | 
			
		||||
            Err(ProofError::VerificationError)
 | 
			
		||||
            Err(TranscriptError::ValidationError)
 | 
			
		||||
        } else {
 | 
			
		||||
            self.append_message(label, point.as_bytes());
 | 
			
		||||
            Ok(())
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user