diff --git a/crates/jagged/src/jagged_eval/sumcheck_eval.rs b/crates/jagged/src/jagged_eval/sumcheck_eval.rs index 19edf5f..9c8ebb6 100644 --- a/crates/jagged/src/jagged_eval/sumcheck_eval.rs +++ b/crates/jagged/src/jagged_eval/sumcheck_eval.rs @@ -20,10 +20,13 @@ pub struct JaggedSumcheckEvalProof { #[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq, PartialOrd, Ord)] pub struct JaggedEvalSumcheckConfig(PhantomData); +//added a new error variant to JaggedEvalSumcheckError to handle the case where the claimedSum doesn't match #[derive(Debug, Error)] pub enum JaggedEvalSumcheckError { #[error("sumcheck error: {0}")] SumcheckError(SumcheckError), + #[error("claimed sum mismatch, expected: {0}, got: {1}")] + ClaimedSumMismatch(F, F), #[error("jagged evaluation proof verification failed, expected: {0}, got: {1}")] JaggedEvaluationFailed(F, F), } @@ -59,6 +62,14 @@ where *partial_lagrange * *branching_program_eval }) .sum::(); +// added this missing piece to ensure that the jagged eval matches the claimed sum. as a malicious prover could +// claim a sum that is different from the actual sum, this check ensures that the sum is correct. + if jagged_eval != partial_sumcheck_proof.claimed_sum { + return Err(JaggedEvalSumcheckError::ClaimedSumMismatch( + jagged_eval, + partial_sumcheck_proof.claimed_sum, + )); + } // Verify the jagged eval proof. let result = partially_verify_sumcheck_proof(partial_sumcheck_proof, challenger);