crypto tests: clsag_ggx_basics improved and also coverage of binary and boost serialization added

This commit is contained in:
sowle 2023-03-08 21:19:36 +01:00
parent f980bdadf5
commit 5644c18917
No known key found for this signature in database
GPG key ID: C07A24B2D89D49FC

View file

@ -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;
}