48 const size_t shift_idx = 0;
49 const size_t m_commitment_idx = 1;
50 const size_t l_eval_idx = 34;
52 switch (tampering_mode) {
55 merge_proof[shift_idx] += 1;
60 bb::field_conversion::convert_from_bn254_frs<Commitment>(std::span{ merge_proof }.subspan(
61 m_commitment_idx, bb::field_conversion::calc_num_bn254_frs<Commitment>()));
62 m_commitment = m_commitment + Commitment::one();
63 auto m_commitment_frs = bb::field_conversion::convert_to_bn254_frs<Commitment>(m_commitment);
64 for (
size_t idx = 0; idx < 4; ++idx) {
65 merge_proof[m_commitment_idx + idx] = m_commitment_frs[idx];
71 merge_proof[l_eval_idx] -=
FF(1);
82 const bool expected =
true)
84 RecursiveBuilder outer_circuit;
93 auto t_current = op_queue->construct_current_ultra_ops_subtable_columns();
94 auto T_prev = op_queue->construct_previous_ultra_ops_table_columns();
96 merge_commitments.
t_commitments[idx] = merge_prover.pcs_commitment_key.commit(t_current[idx]);
97 merge_commitments.
T_prev_commitments[idx] = merge_prover.pcs_commitment_key.commit(T_prev[idx]);
99 RecursiveMergeVerifier::Commitment::from_witness(&outer_circuit, merge_commitments.
t_commitments[idx]);
100 recursive_merge_commitments.
T_prev_commitments[idx] = RecursiveMergeVerifier::Commitment::from_witness(
108 auto [pairing_points, recursive_merged_table_commitments] =
109 verifier.verify_proof(stdlib_merge_proof, recursive_merge_commitments);
112 EXPECT_EQ(outer_circuit.failed(), !expected) << outer_circuit.err();
117 native_verifier.
transcript->enable_manifest();
118 auto [verified_native, merged_table_commitments] = native_verifier.verify_proof(merge_proof, merge_commitments);
120 bool verified_recursive =
121 pcs_verification_key.
pairing_check(pairing_points.P0.get_value(), pairing_points.P1.get_value());
122 EXPECT_EQ(verified_native, verified_recursive);
123 EXPECT_EQ(verified_recursive, expected);
127 auto recursive_manifest = verifier.transcript->get_manifest();
128 auto native_manifest = native_verifier.transcript->get_manifest();
129 for (
size_t i = 0; i < recursive_manifest.size(); ++i) {
130 EXPECT_EQ(recursive_manifest[i], native_manifest[i]);