Skip to content

Commit

Permalink
Small Fixes.
Browse files Browse the repository at this point in the history
  • Loading branch information
martun committed Aug 16, 2023
1 parent 2cc05a5 commit 5ab29e8
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 25 deletions.
42 changes: 24 additions & 18 deletions include/nil/crypto3/zk/commitments/polynomial/kzg.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -87,14 +87,18 @@ namespace nil {

params_type() = default;

params_type(std::size_t d, const scalar_value_type& alpha = algebra::random_element<field_type>()) {
verification_key = alpha.data;
commitment_key.reserve(d);
// Do not call this code in production, this must be used only for testing.
static params_type generate(
std::size_t d, const scalar_value_type& alpha = algebra::random_element<field_type>()) {
params_type result;
result.verification_key = alpha.data;
result.commitment_key.reserve(d);
auto alpha_com = commitment_type::one(); // Maybe here must not be one()?
for (std::size_t i = 0; i < d; i++) {
commitment_key.push_back(alpha_com);
result.commitment_key.push_back(alpha_com);
alpha_com *= alpha.data;
}
return result;
}

params_type(const commitment_key_type& ck, const verification_key_type& vk)
Expand Down Expand Up @@ -195,7 +199,7 @@ namespace nil {
typename KZG::gt_value_type gt3 = algebra::double_miller_loop<typename KZG::curve_type>(A_1, A_2, B_1, B_2);
typename KZG::gt_value_type gt_4 = algebra::final_exponentiation<typename KZG::curve_type>(gt3);

return gt_4.is_one();
return gt_4 == KZG::gt_value_type::one();;
}
} // namespace algorithms

Expand Down Expand Up @@ -239,29 +243,31 @@ namespace nil {

params_type() = default;

params_type(std::size_t d, std::size_t t,
params_type(const std::vector<commitment_type>& commitment_key,
const std::vector<verification_type>& verification_key)
: commitment_key(commitment_key)
, verification_key(verification_key)
{};

static params_type generate(std::size_t d, std::size_t t,
const scalar_value_type& alpha = algebra::random_element<typename curve_type::scalar_field_type>()) {
commitment_key.resize(d);
verification_key.resize(t + 1);
params_type result;
result.commitment_key.resize(d);
result.verification_key.resize(t + 1);
auto alpha_comm = commitment_type::one();
for (std::size_t i = 0; i < d; ++i) {
commitment_key[i] = alpha_comm;
alpha_comm *= alpha;
result.commitment_key[i] = alpha_comm;
alpha_comm *= alpha.data;
}

auto alpha_ver = verification_type::one();
for (std::size_t i = 0; i <= t; ++i) {
verification_key[i] = alpha_ver;
alpha_ver *= alpha;
result.verification_key[i] = alpha_ver;
alpha_ver *= alpha.data;
}
return result;
}

params_type(const std::vector<commitment_type>& commitment_key,
const std::vector<verification_type>& verification_key)
: commitment_key(commitment_key)
, verification_key(verification_key)
{};

params_type& operator=(const params_type &other) = default;
};

Expand Down
14 changes: 7 additions & 7 deletions test/commitment/kzg.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ BOOST_AUTO_TEST_CASE(kzg_basic_test) {
scalar_value_type z = 2;
const polynomial<scalar_value_type> f = {-1, 1, 2, 3};

auto params = typename kzg_type::params_type(n, alpha);
auto params = kzg_type::params_type::generate(n, alpha);
BOOST_CHECK(curve_type::template g1_type<>::value_type::one() == params.commitment_key[0]);
BOOST_CHECK(alpha * curve_type::template g1_type<>::value_type::one() == params.commitment_key[1]);
BOOST_CHECK(alpha * alpha * curve_type::template g1_type<>::value_type::one() == params.commitment_key[2]);
Expand Down Expand Up @@ -98,7 +98,7 @@ BOOST_AUTO_TEST_CASE(kzg_random_test) {
scalar_value_type z = algebra::random_element<scalar_field_type>();
const polynomial<scalar_value_type> f = {-1, 1, 2, 3, 5, -15};

auto params = typename kzg_type::params_type(n);
auto params = kzg_type::params_type::generate(n);
auto commit = zk::algorithms::commit<kzg_type>(params, f);

typename kzg_type::public_key_type pk = {commit, z, f.evaluate(z)};
Expand All @@ -122,7 +122,7 @@ BOOST_AUTO_TEST_CASE(kzg_false_test) {
scalar_value_type z = 5;
const polynomial<scalar_value_type> f = {100, 1, 2, 3};

auto params = typename kzg_type::params_type(n, alpha);
auto params = kzg_type::params_type::generate(n, alpha);

auto commit = zk::algorithms::commit<kzg_type>(params, f);

Expand All @@ -134,7 +134,7 @@ BOOST_AUTO_TEST_CASE(kzg_false_test) {
// wrong params
auto ck2 = params.commitment_key;
ck2[0] = ck2[0] * 2;
auto params2 = kzg_type::params_type(ck2, params.verification_key * 2);
kzg_type::params_type params2(ck2, params.verification_key * 2);
BOOST_CHECK(!zk::algorithms::verify_eval<kzg_type>(params2, proof, pk));

// wrong commit
Expand Down Expand Up @@ -432,7 +432,7 @@ BOOST_AUTO_TEST_CASE(batched_kzg_basic_test) {
scalar_value_type alpha = 7;
std::size_t d = 8;
std::size_t t = 8;
auto params = typename kzg_type::params_type(d, t, alpha);
auto params = kzg_type::params_type::generate(d, t, alpha);

std::array<std::vector<scalar_value_type>, batch_size> S = {{{101, 2, 3},}};
std::vector<scalar_value_type> T = zk::algorithms::merge_eval_points<kzg_type>(S);
Expand Down Expand Up @@ -474,7 +474,7 @@ BOOST_AUTO_TEST_CASE(batched_kzg_bigger_basic_test) {
{{21, 22, 23, 24, 25, 26, 27, 28}},
{{31, 32, 33, 34, 35, 36, 37, 38}},}};

auto params = typename kzg_type::params_type(8, 8, alpha);
auto params = kzg_type::params_type::generate(8, 8, alpha);

std::array<std::vector<scalar_value_type>, batch_size> S = {{{101, 2, 3}, {102, 2, 3}, {1, 3}, {101, 4}}};
std::vector<scalar_value_type> T = zk::algorithms::merge_eval_points<kzg_type>(S);
Expand All @@ -501,4 +501,4 @@ BOOST_AUTO_TEST_CASE(batched_kzg_bigger_basic_test) {
BOOST_CHECK(zk::algorithms::verify_eval<kzg_type>(params, proof, pk, transcript_verification));
}

BOOST_AUTO_TEST_SUITE_END()
BOOST_AUTO_TEST_SUITE_END()

0 comments on commit 5ab29e8

Please sign in to comment.