19 Flavor_>::verify_proof()
22 auto non_shifted_accumulator_commitment =
23 transcript->template receive_from_prover<Commitment>(
"non_shifted_accumulator_commitment");
24 auto shifted_accumulator_commitment =
25 transcript->template receive_from_prover<Commitment>(
"shifted_accumulator_commitment");
26 auto non_shifted_instance_commitment =
27 transcript->template receive_from_prover<Commitment>(
"non_shifted_instance_commitment");
28 auto shifted_instance_commitment =
29 transcript->template receive_from_prover<Commitment>(
"shifted_instance_commitment");
32 std::vector<FF> accumulator_evaluations(2);
33 std::vector<FF> instance_evaluations(2);
36 accumulator_challenges[i] =
37 transcript->template receive_from_prover<FF>(
"accumulator_challenge_" +
std::to_string(i));
38 instance_challenges[i] =
39 transcript->template receive_from_prover<FF>(
"instance_challenge_" +
std::to_string(i));
41 for (
size_t i = 0; i < 2; i++) {
42 accumulator_evaluations[i] =
43 transcript->template receive_from_prover<FF>(
"accumulator_evaluation_" +
std::to_string(i));
44 instance_evaluations[i] =
45 transcript->template receive_from_prover<FF>(
"instance_evaluation_" +
std::to_string(i));
48 auto accumulator_non_shifted_evaluation = accumulator_evaluations[0];
49 auto accumulator_shifted_evaluation = accumulator_evaluations[1];
50 auto instance_non_shifted_evaluation = instance_evaluations[0];
51 auto instance_shifted_evaluation = instance_evaluations[1];
53 const FF alpha = transcript->template get_challenge<FF>(
"Sumcheck:alpha");
55 for (
size_t idx = 0; idx < gate_challenges.size(); idx++) {
56 gate_challenges[idx] =
FF(1);
61 auto target_sum = (((instance_shifted_evaluation * alpha + instance_non_shifted_evaluation) * alpha +
62 accumulator_shifted_evaluation) *
64 accumulator_non_shifted_evaluation);
66 const auto sumcheck_result = sumcheck.
verify(relation_parameters, gate_challenges, padding_indicator);
69 auto claim_batching_challenge = transcript->template get_challenge<FF>(
"claim_batching_challenge");
72 non_shifted_accumulator_commitment + non_shifted_instance_commitment * claim_batching_challenge;
74 shifted_accumulator_commitment + shifted_instance_commitment * claim_batching_challenge;
76 sumcheck_result.claimed_evaluations.w_shifted_accumulator +
77 sumcheck_result.claimed_evaluations.w_shifted_instance * claim_batching_challenge;
79 sumcheck_result.claimed_evaluations.w_non_shifted_accumulator +
80 sumcheck_result.claimed_evaluations.w_non_shifted_instance * claim_batching_challenge;
81 verifier_claim.
challenge = sumcheck_result.challenge;
85 auto equality_verified = sumcheck_result.claimed_evaluations.w_evaluations_accumulator ==
87 sumcheck_result.claimed_evaluations.w_evaluations_instance ==
91 equality_verified.assert_equal(
stdlib::bool_t(equality_verified.get_context(),
true));
92 verified = sumcheck_result.verified && equality_verified.get_value();
94 verified = sumcheck_result.verified && equality_verified;
97 return { verified, verifier_claim };
SumcheckOutput< Flavor > verify(const bb::RelationParameters< FF > &relation_parameters, std::vector< FF > &gate_challenges, const std::vector< FF > &padding_indicator_array)
Extract round univariate, check sum, generate challenge, compute next target sum.....