From 1677bf53112d8819f87aa95d1dd898259c835002 Mon Sep 17 00:00:00 2001 From: sowle Date: Wed, 19 Oct 2022 04:43:14 +0200 Subject: [PATCH] crypto tests: bppe_power_128 test added --- .../crypto_tests_range_proofs.h | 93 +++++++++++++++++++ 1 file changed, 93 insertions(+) diff --git a/tests/functional_tests/crypto_tests_range_proofs.h b/tests/functional_tests/crypto_tests_range_proofs.h index 5332ef54..6be87120 100644 --- a/tests/functional_tests/crypto_tests_range_proofs.h +++ b/tests/functional_tests/crypto_tests_range_proofs.h @@ -288,5 +288,98 @@ TEST(bppe, two) ASSERT_TRUE(r); + return true; +} + +TEST(bppe, power_128) +{ + std::vector signatures_vector; + signatures_vector.reserve(200); + std::vector> commitments_vector; + commitments_vector.reserve(200); + + std::vector sigs; + uint8_t err = 0; + bool r = false; + + auto gen_rp_for_vec = [&](const scalar_vec_t& values) + { + signatures_vector.resize(signatures_vector.size() + 1); + bppe_signature &bppe_sig = signatures_vector.back(); + commitments_vector.resize(commitments_vector.size() + 1); + std::vector& commitments = commitments_vector.back(); + + scalar_vec_t masks, masks2; + for(auto& el: values) + { + masks.emplace_back(scalar_t::random()); + masks2.emplace_back(scalar_t::random()); + } + + r = bppe_gen>(values, masks, masks2, bppe_sig, commitments, &err); + ASSERT_TRUE(r); + sigs.emplace_back(bppe_sig, commitments); + return true; + }; + + auto gen_rp_for_value = [&](const scalar_t& v) { return gen_rp_for_vec(scalar_vec_t{ v }); }; + + const scalar_t s_128_max = scalar_t(UINT64_MAX, UINT64_MAX, 0, 0); + + LOG_PRINT_L0("1"); + ASSERT_TRUE(gen_rp_for_value(s_128_max)); + ASSERT_TRUE(bppe_verify>(sigs, &err)); + signatures_vector.clear(), commitments_vector.clear(), sigs.clear(); + + LOG_PRINT_L0("2"); + ASSERT_TRUE(gen_rp_for_value(scalar_t(crypto::rand(), crypto::rand(), 0, 0))); + ASSERT_TRUE(bppe_verify>(sigs, &err)); + signatures_vector.clear(), commitments_vector.clear(), sigs.clear(); + + LOG_PRINT_L0("3"); + ASSERT_TRUE(gen_rp_for_value(scalar_t(0, 0, 1, 0))); + ASSERT_FALSE(bppe_verify>(sigs, &err)); + signatures_vector.clear(), commitments_vector.clear(), sigs.clear(); + + LOG_PRINT_L0("4"); + ASSERT_TRUE(gen_rp_for_value(scalar_t(0, 0, crypto::rand(), 0))); + ASSERT_FALSE(bppe_verify>(sigs, &err)); + signatures_vector.clear(), commitments_vector.clear(), sigs.clear(); + + LOG_PRINT_L0("5"); + ASSERT_TRUE(gen_rp_for_value(scalar_t(0, 0, 0, crypto::rand()))); + ASSERT_FALSE(bppe_verify>(sigs, &err)); + signatures_vector.clear(), commitments_vector.clear(), sigs.clear(); + + LOG_PRINT_L0("6"); + ASSERT_TRUE(gen_rp_for_value(scalar_t(0, 0, 0, UINT64_MAX))); + ASSERT_FALSE(bppe_verify>(sigs, &err)); + signatures_vector.clear(), commitments_vector.clear(), sigs.clear(); + + LOG_PRINT_L0("7"); + ASSERT_TRUE(gen_rp_for_vec(scalar_vec_t{s_128_max, s_128_max, s_128_max, s_128_max})); + LOG_PRINT_L0("simple generated"); + ASSERT_TRUE(bppe_verify>(sigs, &err)); + LOG_PRINT_L0("simple verified"); + for(size_t i = 0; i < 16; ++i) + { + LOG_PRINT_L0(" #" << i << " simple generated"); + scalar_vec_t vec; + for(size_t j = 0, n = crypto::rand() % 4 + 1; j < n; ++j) + vec.emplace_back(scalar_t(crypto::rand(), crypto::rand(), 0, 0)); + ASSERT_TRUE(gen_rp_for_vec(vec)); + } + LOG_PRINT_L0("verification started"); + ASSERT_TRUE(bppe_verify>(sigs, &err)); + signatures_vector.clear(), commitments_vector.clear(), sigs.clear(); + LOG_PRINT_L0("verification finished" << ENDL); + + LOG_PRINT_L0("8"); + ASSERT_TRUE(gen_rp_for_value(s_128_max)); + ASSERT_TRUE(gen_rp_for_value(scalar_t(0, 0, 0, UINT64_MAX))); + ASSERT_TRUE(gen_rp_for_value(s_128_max)); + ASSERT_FALSE(bppe_verify>(sigs, &err)); + signatures_vector.clear(), commitments_vector.clear(), sigs.clear(); + return true; }