Skip to content

Commit f034e2a

Browse files
authored
chore: SmallSubgroupIPA tests (#11106)
This PR is a follow-up to #10773
1 parent 1775e53 commit f034e2a

File tree

7 files changed

+628
-106
lines changed

7 files changed

+628
-106
lines changed

barretenberg/cpp/src/barretenberg/commitment_schemes/commitment_key.test.hpp

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -14,44 +14,54 @@ namespace bb {
1414
constexpr size_t COMMITMENT_TEST_NUM_BN254_POINTS = 4096;
1515
constexpr size_t COMMITMENT_TEST_NUM_GRUMPKIN_POINTS = 1 << CONST_ECCVM_LOG_N;
1616

17-
template <class CK> inline std::shared_ptr<CK> CreateCommitmentKey();
17+
template <class CK> inline std::shared_ptr<CK> create_commitment_key(const size_t num_points = 0);
1818

19-
template <> inline std::shared_ptr<CommitmentKey<curve::BN254>> CreateCommitmentKey<CommitmentKey<curve::BN254>>()
19+
template <>
20+
inline std::shared_ptr<CommitmentKey<curve::BN254>> create_commitment_key<CommitmentKey<curve::BN254>>(
21+
const size_t num_points)
2022
{
2123
srs::init_crs_factory(bb::srs::get_ignition_crs_path());
24+
if (num_points != 0) {
25+
return std::make_shared<CommitmentKey<curve::BN254>>(num_points);
26+
};
2227
return std::make_shared<CommitmentKey<curve::BN254>>(COMMITMENT_TEST_NUM_BN254_POINTS);
2328
}
2429
// For IPA
25-
template <> inline std::shared_ptr<CommitmentKey<curve::Grumpkin>> CreateCommitmentKey<CommitmentKey<curve::Grumpkin>>()
30+
template <>
31+
inline std::shared_ptr<CommitmentKey<curve::Grumpkin>> create_commitment_key<CommitmentKey<curve::Grumpkin>>(
32+
const size_t num_points)
2633
{
2734
srs::init_grumpkin_crs_factory(bb::srs::get_grumpkin_crs_path());
35+
if (num_points != 0) {
36+
return std::make_shared<CommitmentKey<curve::Grumpkin>>(num_points);
37+
}
2838
return std::make_shared<CommitmentKey<curve::Grumpkin>>(COMMITMENT_TEST_NUM_GRUMPKIN_POINTS);
2939
}
3040

31-
template <typename CK> inline std::shared_ptr<CK> CreateCommitmentKey()
41+
template <typename CK> inline std::shared_ptr<CK> create_commitment_key(size_t num_points)
3242
// requires std::default_initializable<CK>
3343
{
34-
return std::make_shared<CK>();
44+
return std::make_shared<CK>(num_points);
3545
}
3646

37-
template <class VK> inline std::shared_ptr<VK> CreateVerifierCommitmentKey();
47+
template <class VK> inline std::shared_ptr<VK> create_verifier_commitment_key();
3848

3949
template <>
40-
inline std::shared_ptr<VerifierCommitmentKey<curve::BN254>> CreateVerifierCommitmentKey<
50+
inline std::shared_ptr<VerifierCommitmentKey<curve::BN254>> create_verifier_commitment_key<
4151
VerifierCommitmentKey<curve::BN254>>()
4252
{
4353
return std::make_shared<VerifierCommitmentKey<curve::BN254>>();
4454
}
4555
// For IPA
4656
template <>
47-
inline std::shared_ptr<VerifierCommitmentKey<curve::Grumpkin>> CreateVerifierCommitmentKey<
57+
inline std::shared_ptr<VerifierCommitmentKey<curve::Grumpkin>> create_verifier_commitment_key<
4858
VerifierCommitmentKey<curve::Grumpkin>>()
4959
{
5060
auto crs_factory = std::make_shared<srs::factories::FileCrsFactory<curve::Grumpkin>>(
5161
bb::srs::get_grumpkin_crs_path(), COMMITMENT_TEST_NUM_GRUMPKIN_POINTS);
5262
return std::make_shared<VerifierCommitmentKey<curve::Grumpkin>>(COMMITMENT_TEST_NUM_GRUMPKIN_POINTS, crs_factory);
5363
}
54-
template <typename VK> inline std::shared_ptr<VK> CreateVerifierCommitmentKey()
64+
template <typename VK> inline std::shared_ptr<VK> create_verifier_commitment_key()
5565
// requires std::default_initializable<VK>
5666
{
5767
return std::make_shared<VK>();
@@ -149,10 +159,10 @@ template <typename Curve> class CommitmentTest : public ::testing::Test {
149159
{
150160
// Avoid reallocating static objects if called in subclasses of FooTest.
151161
if (commitment_key == nullptr) {
152-
commitment_key = CreateCommitmentKey<CK>();
162+
commitment_key = create_commitment_key<CK>();
153163
}
154164
if (verification_key == nullptr) {
155-
verification_key = CreateVerifierCommitmentKey<VK>();
165+
verification_key = create_verifier_commitment_key<VK>();
156166
}
157167
}
158168

barretenberg/cpp/src/barretenberg/commitment_schemes/gemini/gemini_impl.hpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,15 @@ std::vector<typename GeminiProver_<Curve>::Claim> GeminiProver_<Curve>::prove(
124124
}
125125
const Fr r_challenge = transcript->template get_challenge<Fr>("Gemini:r");
126126

127+
const bool gemini_challenge_in_small_subgroup = (has_zk) && (r_challenge.pow(Curve::SUBGROUP_SIZE) == Fr(1));
128+
129+
// If Gemini evaluation challenge lands in the multiplicative subgroup used by SmallSubgroupIPA protocol, the
130+
// evaluations of prover polynomials at this challenge would leak witness data.
131+
// TODO(https://github.com/AztecProtocol/barretenberg/issues/1194). Handle edge cases in PCS
132+
if (gemini_challenge_in_small_subgroup) {
133+
throw_or_abort("Gemini evaluation challenge is in the SmallSubgroup.");
134+
}
135+
127136
std::vector<Claim> claims =
128137
compute_fold_polynomial_evaluations(log_n, std::move(fold_polynomials), r_challenge, std::move(batched_group));
129138

0 commit comments

Comments
 (0)