From 5644c189176ac01dbf6ad7072ca934dd40b22f23 Mon Sep 17 00:00:00 2001 From: sowle Date: Wed, 8 Mar 2023 21:19:36 +0100 Subject: [PATCH] crypto tests: clsag_ggx_basics improved and also coverage of binary and boost serialization added --- tests/functional_tests/crypto_tests_clsag.h | 42 +++++++++++++-------- 1 file changed, 26 insertions(+), 16 deletions(-) diff --git a/tests/functional_tests/crypto_tests_clsag.h b/tests/functional_tests/crypto_tests_clsag.h index eb0b130a..92623ad5 100644 --- a/tests/functional_tests/crypto_tests_clsag.h +++ b/tests/functional_tests/crypto_tests_clsag.h @@ -265,7 +265,7 @@ struct clsag_ggx_sig_check_t scalar_t secret_1_f; // = f - f' = amount_blinding_mask - pseudo_commitment_blinding_mask scalar_t secret_2_t; // = -r' = -pseudo_asset_id_blinding_mask size_t secret_index; - CLSAG_GGX_signature sig; + CLSAG_GGX_signature_serialized sig; clsag_ggx_sig_check_t() {} @@ -288,7 +288,7 @@ struct clsag_ggx_sig_check_t rebuild_ring(); pseudo_output_commitment = rhs.pseudo_output_commitment; pseudo_out_asset_id = rhs.pseudo_out_asset_id; - pseudo_out_asset_id = rhs.pseudo_out_asset_id; + secret_0_xp = rhs.secret_0_xp; secret_1_f = rhs.secret_1_f; secret_2_t = rhs.secret_2_t; secret_index = rhs.secret_index; @@ -300,7 +300,6 @@ struct clsag_ggx_sig_check_t stealth_addresses.clear(); amount_commitments.clear(); blinded_asset_ids.clear(); - ring.clear(); crypto::generate_random_bytes(sizeof prefix_hash, &prefix_hash); @@ -312,7 +311,6 @@ struct clsag_ggx_sig_check_t stealth_addresses.push_back(hash_helper_t::hp(scalar_t::random()).to_public_key()); amount_commitments.push_back(hash_helper_t::hp(scalar_t::random()).to_public_key()); // div 8 blinded_asset_ids.push_back(hash_helper_t::hp(scalar_t::random()).to_public_key()); // div 8 - ring.emplace_back(stealth_addresses.back(), amount_commitments.back(), blinded_asset_ids.back()); } secret_0_xp = scalar_t::random(); @@ -326,6 +324,8 @@ struct clsag_ggx_sig_check_t pseudo_output_commitment = (point_t(amount_commitments[secret_index]) - c_scalar_1div8 * secret_1_f * c_point_G).to_public_key(); pseudo_out_asset_id = (point_t(blinded_asset_ids[secret_index]) - c_scalar_1div8 * secret_2_t * c_point_X).to_public_key(); + + rebuild_ring(); } bool generate() @@ -366,21 +366,31 @@ TEST(clsag_ggx, basics) clsag_ggx_sig_check_t cc; - cc.prepare_random_data(1); - ASSERT_TRUE(cc.generate()); - ASSERT_TRUE(cc.verify()); + size_t ring_sizes[] = { 1, 2, 8, 123 }; + for(size_t i = 0; i < sizeof ring_sizes / sizeof ring_sizes[0]; ++i) + { + std::cout << "ring size: " << ring_sizes[i] << std::endl; - cc.prepare_random_data(2); - ASSERT_TRUE(cc.generate()); - ASSERT_TRUE(cc.verify()); + cc.prepare_random_data(ring_sizes[i]); + ASSERT_TRUE(cc.generate()); + ASSERT_TRUE(cc.verify()); - cc.prepare_random_data(8); - ASSERT_TRUE(cc.generate()); - ASSERT_TRUE(cc.verify()); + // binary serialization + std::string blob = t_serializable_object_to_blob(cc.sig); + generate_random_bytes(sizeof cc.sig, &cc.sig); + new (&cc.sig.r_g) scalar_vec_t{scalar_t::random()}; + new (&cc.sig.r_x) scalar_vec_t{scalar_t::random(), scalar_t::random()}; + ASSERT_TRUE(t_unserializable_object_from_blob(cc.sig, blob)); + ASSERT_TRUE(cc.verify()); - cc.prepare_random_data(123); - ASSERT_TRUE(cc.generate()); - ASSERT_TRUE(cc.verify()); + // boost serialization + ASSERT_TRUE(tools::serialize_obj_to_buff(cc.sig, blob)); + generate_random_bytes(sizeof cc.sig, &cc.sig); + new (&cc.sig.r_g) scalar_vec_t{scalar_t::random(), scalar_t::random()}; + new (&cc.sig.r_x) scalar_vec_t{scalar_t::random(), scalar_t::random()}; + ASSERT_TRUE(tools::unserialize_obj_from_buff(cc.sig, blob)); + ASSERT_TRUE(cc.verify()); + } return true; }