34 using ClaimBatch = ClaimBatcher::Batch;
36 transcript->load_proof(proof);
41 const size_t log_circuit_size =
static_cast<size_t>(verifier_instance->vk->log_circuit_size);
43 verifier_instance->gate_challenges =
44 transcript->template get_dyadic_powers_of_challenge<FF>(
"Sumcheck:gate_challenge", log_n);
47 VerifierCommitments commitments{ verifier_instance->vk, verifier_instance->witness_commitments };
50 commitments.gemini_masking_poly = verifier_instance->gemini_masking_commitment;
54 std::vector<FF> padding_indicator_array(log_n, 1);
56 for (
size_t idx = 0; idx < log_n; idx++) {
57 padding_indicator_array[idx] = (idx < log_circuit_size) ?
FF{ 1 } :
FF{ 0 };
67 libra_commitments[0] = transcript->template receive_from_prover<Commitment>(
"Libra:concatenation_commitment");
71 verifier_instance->relation_parameters, verifier_instance->gate_challenges, padding_indicator_array);
74 libra_commitments[1] = transcript->template receive_from_prover<Commitment>(
"Libra:grand_sum_commitment");
75 libra_commitments[2] = transcript->template receive_from_prover<Commitment>(
"Libra:quotient_commitment");
78 bool consistency_checked =
true;
79 ClaimBatcher claim_batcher{
80 .unshifted = ClaimBatch{ commitments.get_unshifted(), sumcheck_output.
claimed_evaluations.get_unshifted() },
81 .shifted = ClaimBatch{ commitments.get_to_be_shifted(), sumcheck_output.
claimed_evaluations.get_shifted() }
84 auto opening_claim = Shplemini::compute_batch_opening_claim(padding_indicator_array,
96 PCS::reduce_verify_batch_opening_claim(
std::move(opening_claim), transcript, Flavor::FINAL_PCS_MSM_SIZE(log_n));
99 inputs.reconstruct_from_public(verifier_instance->public_inputs);
102 pairing_points.aggregate(
inputs.pairing_inputs);
108 bool pairing_check_verified = pairing_points.check();
110 vinfo(
"libra_evals_verified: ", consistency_checked);
111 vinfo(
"pairing_check_verified: ", pairing_check_verified);
114 output.
result = sumcheck_output.
verified && consistency_checked && pairing_check_verified;
118 ipa_transcript->load_proof(ipa_proof);
123 info(
"IPA verification failed!");
127 output.
result &= ipa_result;
SumcheckOutput< Flavor > verify(const bb::RelationParameters< FF > &relation_parameters, const std::vector< FF > &gate_challenges, const std::vector< FF > &padding_indicator_array)
The Sumcheck verification method. First it extracts round univariate, checks sum (the sumcheck univar...