MCPcopy Create free account
hub / github.com/ElementsProject/elements / CreateAssetSurjectionProof

Function CreateAssetSurjectionProof

src/blindpsbt.cpp:39–67  ·  view source on GitHub ↗

Create surjection proof

Source from the content-addressed store, hash-verified

37
38// Create surjection proof
39bool CreateAssetSurjectionProof(std::vector<unsigned char>& output_proof, const std::vector<secp256k1_fixed_asset_tag>& fixed_input_tags, const std::vector<secp256k1_generator>& ephemeral_input_tags, const std::vector<uint256>& input_asset_blinders, const uint256& output_asset_blinder, const secp256k1_generator& output_asset_tag, const CAsset& asset, size_t num_targets)
40{
41 int ret;
42 // 1 to 3 targets
43 size_t inputs_to_select = std::min(num_targets, fixed_input_tags.size());
44 unsigned char randseed[32];
45 GetStrongRandBytes(randseed, 32);
46 size_t input_index;
47 secp256k1_surjectionproof proof;
48 secp256k1_fixed_asset_tag fixed_output_tag;
49 memcpy(&fixed_output_tag, asset.begin(), 32);
50 // Find correlation between asset tag and listed input tags
51 if (secp256k1_surjectionproof_initialize(secp256k1_blind_context, &proof, &input_index, &fixed_input_tags[0], fixed_input_tags.size(), inputs_to_select, &fixed_output_tag, 100, randseed) == 0) {
52 return false;
53 }
54 // Using the input chosen, build proof
55 ret = secp256k1_surjectionproof_generate(secp256k1_blind_context, &proof, &ephemeral_input_tags[0], ephemeral_input_tags.size(), &output_asset_tag, input_index, input_asset_blinders[input_index].begin(), output_asset_blinder.begin());
56 assert(ret == 1);
57 // Double-check answer
58 ret = secp256k1_surjectionproof_verify(secp256k1_blind_context, &proof, &ephemeral_input_tags[0], ephemeral_input_tags.size(), &output_asset_tag);
59 assert(ret == 1);
60
61 // Serialize into output witness structure
62 size_t output_len = secp256k1_surjectionproof_serialized_size(secp256k1_blind_context, &proof);
63 output_proof.resize(output_len);
64 secp256k1_surjectionproof_serialize(secp256k1_blind_context, &output_proof[0], &output_len, &proof);
65 assert(output_len == output_proof.size());
66 return true;
67}
68
69bool VerifyBlindAssetProof(const uint256& asset, const std::vector<unsigned char>& proof, const CConfidentialAsset& conf_asset)
70{

Callers 1

BlindPSBTFunction · 0.85

Calls 9

GetStrongRandBytesFunction · 0.85
sizeMethod · 0.45
beginMethod · 0.45
resizeMethod · 0.45

Tested by

no test coverage detected