34 using NativeCurve =
typename Curve::NativeCurve;
36 using NativeCurve =
typename Curve::NativeCurve;
45 using ClaimBatch = ClaimBatcher::Batch;
50 auto run_shplemini = [](
size_t log_circuit_size) {
51 size_t N = 1 << log_circuit_size;
52 const std::vector<Fr> padding_indicator_array(CONST_PROOF_SIZE_LOG_N, 1);
53 constexpr size_t NUM_POLYS = 5;
54 constexpr size_t NUM_SHIFTED = 2;
55 constexpr size_t NUM_RIGHT_SHIFTED_BY_K = 0;
60 u_challenge.reserve(CONST_PROOF_SIZE_LOG_N);
61 for (
size_t idx = 0; idx < CONST_PROOF_SIZE_LOG_N; idx++) {
66 MockClaimGen mock_claims(N, NUM_POLYS, NUM_SHIFTED, NUM_RIGHT_SHIFTED_BY_K, u_challenge, commitment_key);
70 auto prover_opening_claims =
71 ShpleminiProver::prove(N, mock_claims.polynomial_batcher, u_challenge, commitment_key, prover_transcript);
74 StdlibProof stdlib_proof(
builder, prover_transcript->export_proof());
76 stdlib_verifier_transcript->load_proof(stdlib_proof);
77 [[maybe_unused]]
auto _ = stdlib_verifier_transcript->template receive_from_prover<Fr>(
"Init");
80 const auto commitments_to_witnesses = [&
builder](
const auto& commitments) {
81 std::vector<Commitment> commitments_in_biggroup(commitments.size());
82 std::transform(commitments.begin(),
84 commitments_in_biggroup.begin(),
85 [&
builder](
const auto& native_commitment) {
86 return Commitment::from_witness(&builder, native_commitment);
88 return commitments_in_biggroup;
90 const auto elements_to_witness = [&](
const auto& elements) {
91 std::vector<Fr> elements_in_circuit(elements.size());
93 elements.begin(), elements.end(), elements_in_circuit.begin(), [&
builder](
const auto& native_element) {
94 return Fr::from_witness(&builder, native_element);
96 return elements_in_circuit;
98 auto stdlib_unshifted_commitments =
99 commitments_to_witnesses(mock_claims.claim_batcher.get_unshifted().commitments);
100 auto stdlib_to_be_shifted_commitments =
101 commitments_to_witnesses(mock_claims.claim_batcher.get_shifted().commitments);
102 auto stdlib_to_be_right_shifted_commitments =
103 commitments_to_witnesses(mock_claims.claim_batcher.get_right_shifted_by_k().commitments);
104 auto stdlib_unshifted_evaluations = elements_to_witness(mock_claims.claim_batcher.get_unshifted().evaluations);
105 auto stdlib_shifted_evaluations = elements_to_witness(mock_claims.claim_batcher.get_shifted().evaluations);
106 auto stdlib_right_shifted_evaluations =
107 elements_to_witness(mock_claims.claim_batcher.get_right_shifted_by_k().evaluations);
109 std::vector<Fr> u_challenge_in_circuit;
110 u_challenge_in_circuit.reserve(CONST_PROOF_SIZE_LOG_N);
112 for (
auto u : u_challenge) {
113 u_challenge_in_circuit.emplace_back(Fr::from_witness(&
builder, u));
116 ClaimBatcher claim_batcher{
117 .unshifted = ClaimBatch{
RefVector(stdlib_unshifted_commitments),
RefVector(stdlib_unshifted_evaluations) },
118 .shifted = ClaimBatch{
RefVector(stdlib_to_be_shifted_commitments),
RefVector(stdlib_shifted_evaluations) },
119 .right_shifted_by_k = ClaimBatch{
RefVector(stdlib_to_be_right_shifted_commitments),
120 RefVector(stdlib_right_shifted_evaluations) },
121 .k_shift_magnitude = MockClaimGen::k_magnitude
124 const auto opening_claim = ShpleminiVerifier::compute_batch_opening_claim(padding_indicator_array,
126 u_challenge_in_circuit,
128 stdlib_verifier_transcript);
133 EXPECT_EQ(
vk.pairing_check(pairing_points[0].get_value(), pairing_points[1].get_value()),
true);
139 size_t num_gates_6 = run_shplemini(6);
140 size_t num_gates_13 = run_shplemini(13);
141 EXPECT_EQ(num_gates_6, num_gates_13);