25 using ClaimBatch = ClaimBatcher::Batch;
34 transcript->add_to_hash_buffer(
"vk_hash", vk_hash);
35 vinfo(
"ECCVM vk hash in verifier: ", vk_hash);
40 for (
auto [comm, label] :
zip_view(
commitments.get_wires(), commitment_labels.get_wires())) {
41 comm =
transcript->template receive_from_prover<Commitment>(label);
45 auto [beta, gamma] =
transcript->template get_challenges<FF>(
"beta",
"gamma");
47 auto beta_sqr = beta * beta;
48 relation_parameters.
gamma = gamma;
49 relation_parameters.
beta = beta;
50 relation_parameters.
beta_sqr = beta * beta;
51 relation_parameters.
beta_cube = beta_sqr * beta;
53 gamma * (gamma + beta_sqr) * (gamma + beta_sqr + beta_sqr) * (gamma + beta_sqr + beta_sqr + beta_sqr);
58 transcript->template receive_from_prover<Commitment>(commitment_labels.lookup_inverses);
63 const FF alpha =
transcript->template get_challenge<FF>(
"Sumcheck:alpha");
68 std::vector<FF> gate_challenges(CONST_ECCVM_LOG_N);
69 for (
size_t idx = 0; idx < gate_challenges.size(); idx++) {
76 libra_commitments[0] =
transcript->template receive_from_prover<Commitment>(
"Libra:concatenation_commitment");
78 auto sumcheck_output = sumcheck.
verify(relation_parameters, gate_challenges);
80 libra_commitments[1] =
transcript->template receive_from_prover<Commitment>(
"Libra:grand_sum_commitment");
81 libra_commitments[2] =
transcript->template receive_from_prover<Commitment>(
"Libra:quotient_commitment");
85 bool consistency_checked =
true;
86 ClaimBatcher claim_batcher{
87 .unshifted = ClaimBatch{
commitments.get_unshifted(), sumcheck_output.claimed_evaluations.get_unshifted() },
88 .shifted = ClaimBatch{
commitments.get_to_be_shifted(), sumcheck_output.claimed_evaluations.get_shifted() }
92 std::ranges::fill(padding_indicator_array,
FF{ 1 });
95 Shplemini::compute_batch_opening_claim(padding_indicator_array,
97 sumcheck_output.challenge,
98 key->pcs_verification_key.get_g1_identity(),
102 &consistency_checked,
104 sumcheck_output.claimed_libra_evaluation,
105 sumcheck_output.round_univariate_commitments,
106 sumcheck_output.round_univariate_evaluations);
110 PCS::reduce_batch_opening_claim(sumcheck_batch_opening_claims);
127 const bool batched_opening_verified =
128 PCS::reduce_verify(
key->pcs_verification_key, batch_opening_claim,
ipa_transcript);
129 vinfo(
"eccvm sumcheck verified?: ", sumcheck_output.verified);
130 vinfo(
"batch opening verified?: ", batched_opening_verified);
131 vinfo(
"eccvm consistency check verified?: ", consistency_checked);
133 return sumcheck_output.verified && batched_opening_verified && consistency_checked &&
160 transcript->template receive_from_prover<Commitment>(
"Translation:concatenated_masking_term_commitment");
167 eval =
transcript->template receive_from_prover<FF>(label);
178 transcript->template receive_from_prover<Commitment>(
"Translation:grand_sum_commitment");
180 transcript->template receive_from_prover<Commitment>(
"Translation:quotient_commitment");
184 const FF small_ipa_evaluation_challenge =
185 transcript->template get_challenge<FF>(
"Translation:small_ipa_evaluation_challenge");
189 SmallIPA::evaluation_points(small_ipa_evaluation_challenge);
192 for (
size_t idx = 0; idx < NUM_SMALL_IPA_EVALUATIONS; idx++) {
193 small_ipa_evaluations[idx] =
transcript->template receive_from_prover<FF>(labels[idx]);
194 opening_claims[idx] = { { evaluation_points[idx], small_ipa_evaluations[idx] },
195 small_ipa_commitments.
get_all()[idx] };
200 SmallIPA::check_eccvm_evaluations_consistency(small_ipa_evaluations,
201 small_ipa_evaluation_challenge,
207 Commitment batched_commitment = translation_commitments[0];
210 for (
size_t idx = 1; idx < NUM_TRANSLATION_EVALUATIONS; ++idx) {
211 batched_commitment = batched_commitment + translation_commitments[idx] * batching_scalar;
218 batched_commitment };
void compute_translation_opening_claims(const std::array< Commitment, NUM_TRANSLATION_EVALUATIONS > &translation_commitments)
To link the ECCVM Transcript wires op, Px, Py, z1, and z2 to the accumulator computed by the translat...
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.....