forked from lthn/blockchain
crypto tests: clsag_ggx_basics improved and also coverage of binary and boost serialization added
This commit is contained in:
parent
f980bdadf5
commit
5644c18917
1 changed files with 26 additions and 16 deletions
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue