diff --git a/src/crypto/generators.cpp b/src/crypto/generators.cpp index 9ae3cddc91e..231d2faf9c7 100644 --- a/src/crypto/generators.cpp +++ b/src/crypto/generators.cpp @@ -76,8 +76,8 @@ constexpr public_key H = bytes_to({ 0x8b, 0x65, 0x59, 0x70, 0x15, 0x constexpr public_key X = bytes_to({ 0xa4, 0xfb, 0x43, 0xca, 0x69, 0x5e, 0x12, 0x99, 0x88, 0x02, 0xa2, 0x0a, 0x15, 0x8f, 0x12, 0xea, 0x79, 0x47, 0x4f, 0xb9, 0x01, 0x21, 0x16, 0x95, 0x6a, 0x69, 0x76, 0x7c, 0x4d, 0x41, 0x11, 0x0f }); //seraphis generator U: keccak_to_pt(keccak("Monero Generator T")) -constexpr public_key U = bytes_to({ 0x10, 0x94, 0x8b, 0x00, 0xd2, 0xde, 0x50, 0xb5, 0x76, 0x99, 0x8c, 0x11, 0xe8, - 0x3c, 0x59, 0xa7, 0x96, 0x84, 0xd2, 0x5c, 0x9f, 0x8a, 0x0d, 0xc6, 0x86, 0x45, 0x70, 0xd7, 0x97, 0xb9, 0xc1, 0x6e }); +constexpr public_key U = bytes_to({ 0x96, 0x6f, 0xc6, 0x6b, 0x82, 0xcd, 0x56, 0xcf, 0x85, 0xea, 0xec, 0x80, 0x1c, + 0x42, 0x84, 0x5f, 0x5f, 0x40, 0x88, 0x78, 0xd1, 0x56, 0x1e, 0x00, 0xd3, 0xd7, 0xde, 0xd2, 0x79, 0x4d, 0x09, 0x4f }); static ge_p3 G_p3; static ge_p3 H_p3; static ge_p3 X_p3; @@ -187,7 +187,7 @@ static void init_gens() static_assert(static_cast(G.data[0]) == 0x58, "compile-time constant sanity check"); static_assert(static_cast(H.data[0]) == 0x8b, "compile-time constant sanity check"); static_assert(static_cast(X.data[0]) == 0xa4, "compile-time constant sanity check"); - static_assert(static_cast(U.data[0]) == 0x10, "compile-time constant sanity check"); + static_assert(static_cast(U.data[0]) == 0x96, "compile-time constant sanity check"); // build ge_p3 representations of generators const int G_deserialize = ge_frombytes_vartime(&G_p3, to_bytes(G)); @@ -206,9 +206,6 @@ static void init_gens() ge_p3_to_cached(&X_cached, &X_p3); ge_p3_to_cached(&U_cached, &U_p3); - // @TODO: remove - std::cout << "U: " << epee::to_hex::string({(const unsigned char*)U.data, 32}) << std::endl; - // in debug mode, check that generators are reproducible (void)reproduce_generator_G; assert(reproduce_generator_G() == G); (void)reproduce_generator_H; assert(reproduce_generator_H() == H); diff --git a/src/seraphis_main/sp_knowledge_proof_utils.cpp b/src/seraphis_main/sp_knowledge_proof_utils.cpp index 64b8db678b7..81a42aa9fa3 100644 --- a/src/seraphis_main/sp_knowledge_proof_utils.cpp +++ b/src/seraphis_main/sp_knowledge_proof_utils.cpp @@ -150,24 +150,20 @@ void make_address_ownership_proof_v1(const rct::key &message, //------------------------------------------------------------------------------------------------------------------- void make_address_ownership_proof_v1(const rct::key &message, const crypto::secret_key &k_prove_spend, - const crypto::secret_key &s_view_balance, + const crypto::secret_key &k_generate_image, AddressOwnershipProofV1 &proof_out) { // for address ownership of K_s - // 1. make generate image key: k_gi + H_32[s_vb]() - crypto::secret_key k_generate_image; - jamtis::make_jamtis_generateimage_key(s_view_balance, k_generate_image); - - // 2. prepare K_s = k_gi X + k_ps U + // 1. prepare K_s = k_gi X + k_ps U rct::key jamtis_spend_pubkey; make_seraphis_spendkey(k_generate_image, k_prove_spend, jamtis_spend_pubkey); - // 3. finish the proof + // 2. finish the proof make_address_ownership_proof_v1(message, jamtis_spend_pubkey, rct::rct2sk(rct::zero()), - s_view_balance, + k_generate_image, k_prove_spend, proof_out); } @@ -195,15 +191,15 @@ void make_address_ownership_proof_v1(const rct::key &message, crypto::secret_key x; jamtis::make_jamtis_spendkey_extension_g(jamtis_spend_pubkey, s_generate_address, j, x); //k^j_g - // b. y = k^j_x + k_vb + // b. y = k^j_x + k_gi crypto::secret_key y; jamtis::make_jamtis_spendkey_extension_x(jamtis_spend_pubkey, s_generate_address, j, y); //k^j_x - sc_add(to_bytes(y), to_bytes(s_view_balance), to_bytes(y)); //+ k_vb + sc_add(to_bytes(y), to_bytes(k_generate_image), to_bytes(y)); //+ k_vb - // c. z = k^j_u + k_m + // c. z = k^j_u + k_ps crypto::secret_key z; jamtis::make_jamtis_spendkey_extension_u(jamtis_spend_pubkey, s_generate_address, j, z); //k^j_u - sc_add(to_bytes(z), to_bytes(k_generate_image), to_bytes(z)); //+ k_m + sc_add(to_bytes(z), to_bytes(k_prove_spend), to_bytes(z)); //+ k_m // 4. compute address // K^j_s = x G + y X + z U @@ -341,7 +337,7 @@ void make_enote_ownership_proof_v1_sender_plain(const crypto::x25519_secret_key crypto::x25519_scmul_key(enote_ephemeral_privkey, recipient_destination.addr_Dfa, x_fa); crypto::x25519_pubkey x_ir; - crypto::x25519_scmul_key(enote_ephemeral_privkey, recipient_destination.addr_Dfa, x_ir); + crypto::x25519_scmul_key(enote_ephemeral_privkey, recipient_destination.addr_Dir, x_ir); crypto::x25519_pubkey x_ur; crypto::x25519_scmul_base(enote_ephemeral_privkey, x_ur); @@ -544,14 +540,14 @@ void make_enote_key_image_proof_v1(const rct::key &onetime_address, //------------------------------------------------------------------------------------------------------------------- void make_enote_key_image_proof_v1(const SpEnoteRecordV1 &enote_record, const crypto::secret_key &sp_spend_privkey, - const crypto::secret_key &s_view_balance, + const crypto::secret_key &k_generate_image, EnoteKeyImageProofV1 &proof_out) { - // 1. y = k_x + k_vb + // 1. y = k_x + k_gi crypto::secret_key y; - sc_add(to_bytes(y), to_bytes(enote_record.enote_view_extension_x), to_bytes(s_view_balance)); + sc_add(to_bytes(y), to_bytes(enote_record.enote_view_extension_x), to_bytes(k_generate_image)); - // 2. z = k_u + k_m + // 2. z = k_u + k_ps crypto::secret_key z; sc_add(to_bytes(z), to_bytes(enote_record.enote_view_extension_u), to_bytes(sp_spend_privkey)); @@ -591,7 +587,7 @@ bool verify_enote_key_image_proof_v1(const EnoteKeyImageProofV1 &proof, //------------------------------------------------------------------------------------------------------------------- void make_enote_unspent_proof_v1(const SpEnoteRecordV1 &enote_record, const crypto::secret_key &sp_spend_privkey, - const crypto::secret_key &s_view_balance, + const crypto::secret_key &k_generate_image, const crypto::key_image &test_KI, EnoteUnspentProofV1 &proof_out) { @@ -600,11 +596,11 @@ void make_enote_unspent_proof_v1(const SpEnoteRecordV1 &enote_record, // a. ko_g = k_g const crypto::secret_key kog_skey{enote_record.enote_view_extension_g}; - // b. ko_x = (k_x + k_vb) + // b. ko_x = (k_x + k_gi) crypto::secret_key kox_skey; - sc_add(to_bytes(kox_skey), to_bytes(enote_record.enote_view_extension_x), to_bytes(s_view_balance)); + sc_add(to_bytes(kox_skey), to_bytes(enote_record.enote_view_extension_x), to_bytes(k_generate_image)); - // c. ko_u = (k_u + k_m) + // c. ko_u = (k_u + k_ps) crypto::secret_key kou_skey; sc_add(to_bytes(kou_skey), to_bytes(enote_record.enote_view_extension_u), to_bytes(sp_spend_privkey)); @@ -707,7 +703,7 @@ bool verify_enote_unspent_proof_v1(const EnoteUnspentProofV1 &proof, void make_tx_funded_proof_v1(const rct::key &message, const SpEnoteRecordV1 &enote_record, const crypto::secret_key &sp_spend_privkey, - const crypto::secret_key &s_view_balance, + const crypto::secret_key &k_generate_image, TxFundedProofV1 &proof_out) { // 1. prepare a masked version of our enote's onetime address @@ -721,9 +717,9 @@ void make_tx_funded_proof_v1(const rct::key &message, crypto::secret_key x; sc_add(to_bytes(x), to_bytes(t_k_new), to_bytes(enote_record.enote_view_extension_g)); - // b. y = k_x + k_vb + // b. y = k_x + k_gi crypto::secret_key y; - sc_add(to_bytes(y), to_bytes(enote_record.enote_view_extension_x), to_bytes(s_view_balance)); + sc_add(to_bytes(y), to_bytes(enote_record.enote_view_extension_x), to_bytes(k_generate_image)); // c. z = k_u + k_m crypto::secret_key z; @@ -822,14 +818,18 @@ void make_reserved_enote_proof_v1(const SpContextualEnoteRecordV1 &contextual_re amount_commitment_ref(contextual_record.record.enote), amount_proof); - // 3. make key image proof + // 3. generate-image + crypto::secret_key k_generate_image; + jamtis::make_jamtis_generateimage_key(s_view_balance, k_generate_image); + + // 4. make key image proof EnoteKeyImageProofV1 key_image_proof; make_enote_key_image_proof_v1(contextual_record.record, sp_spend_privkey, - s_view_balance, + k_generate_image, key_image_proof); - // 4. complete full proof + // 5. complete full proof make_reserved_enote_proof_v1(enote_ownership_proof, amount_proof, key_image_proof, diff --git a/src/seraphis_main/sp_knowledge_proof_utils.h b/src/seraphis_main/sp_knowledge_proof_utils.h index edb3db78366..58d96ebfb3e 100644 --- a/src/seraphis_main/sp_knowledge_proof_utils.h +++ b/src/seraphis_main/sp_knowledge_proof_utils.h @@ -71,7 +71,7 @@ void make_address_ownership_proof_v1(const rct::key &message, AddressOwnershipProofV1 &proof_out); void make_address_ownership_proof_v1(const rct::key &message, //for K_s const crypto::secret_key &k_prove_spend, - const crypto::secret_key &s_view_balance, + const crypto::secret_key &k_generate_image, AddressOwnershipProofV1 &proof_out); void make_address_ownership_proof_v1(const rct::key &message, //for K^j_s const crypto::secret_key &k_prove_spend, @@ -180,7 +180,7 @@ void make_enote_key_image_proof_v1(const rct::key &onetime_address, EnoteKeyImageProofV1 &proof_out); void make_enote_key_image_proof_v1(const SpEnoteRecordV1 &enote_record, const crypto::secret_key &sp_spend_privkey, - const crypto::secret_key &s_view_balance, + const crypto::secret_key &k_generate_image, EnoteKeyImageProofV1 &proof_out); /** * brief: verify enote key image proof @@ -196,13 +196,13 @@ bool verify_enote_key_image_proof_v1(const EnoteKeyImageProofV1 &proof, * brief: make an enote unspent proof * param: enote_record - record of the enote for this proof * param: sp_spend_privkey - k_ps -* param: s_view_balance - k_vb +* param: k_generate_image - k_gi * param: test_KI - key image this proof shows does NOT correspond to the proof enote * outparam: proof_out - proof created */ void make_enote_unspent_proof_v1(const SpEnoteRecordV1 &enote_record, const crypto::secret_key &sp_spend_privkey, - const crypto::secret_key &s_view_balance, + const crypto::secret_key &k_generate_image, const crypto::key_image &test_KI, EnoteUnspentProofV1 &proof_out); /** @@ -219,15 +219,14 @@ bool verify_enote_unspent_proof_v1(const EnoteUnspentProofV1 &proof, * brief: make a funded tx proof * param: message - message provided by verifier * param: enote_record - enote_record containing all the mask openings -* param: onetime_address - address which has the format xG + yX + zU. -* param: k_vb - view_balance secret key -* param: k_ps - prove spend key +* param: sp_spend_privkey - k_ps +* param: k_generate_image - k_gi * outparam: proof_out - proof created */ void make_tx_funded_proof_v1(const rct::key &message, const SpEnoteRecordV1 &enote_record, const crypto::secret_key &sp_spend_privkey, - const crypto::secret_key &s_view_balance, + const crypto::secret_key &k_generate_image, TxFundedProofV1 &proof_out); /** * brief: verify funded tx proof diff --git a/src/seraphis_main/tx_builder_types.cpp b/src/seraphis_main/tx_builder_types.cpp index 1c14ea3bc92..e90b98c3334 100644 --- a/src/seraphis_main/tx_builder_types.cpp +++ b/src/seraphis_main/tx_builder_types.cpp @@ -147,7 +147,7 @@ void get_coinbase_output_proposals_v1(const SpCoinbaseTxProposalV1 &tx_proposal, } //------------------------------------------------------------------------------------------------------------------- void get_output_proposals_v1(const SpTxProposalV1 &tx_proposal, - const crypto::secret_key &k_view_balance, + const crypto::secret_key &s_view_balance, std::vector &output_proposals_out) { CHECK_AND_ASSERT_THROW_MES(tx_proposal.normal_payment_proposals.size() + @@ -172,7 +172,7 @@ void get_output_proposals_v1(const SpTxProposalV1 &tx_proposal, tx_proposal.selfsend_payment_proposals) { make_v1_output_proposal_v1(selfsend_payment_proposal, - k_view_balance, + s_view_balance, input_context, tools::add_element(output_proposals_out)); } @@ -185,12 +185,12 @@ void get_output_proposals_v1(const SpTxProposalV1 &tx_proposal, //------------------------------------------------------------------------------------------------------------------- void get_tx_proposal_prefix_v1(const SpTxProposalV1 &tx_proposal, const tx_version_t &tx_version, - const crypto::secret_key &k_view_balance, + const crypto::secret_key &s_view_balance, rct::key &tx_proposal_prefix_out) { // get output proposals std::vector output_proposals; - get_output_proposals_v1(tx_proposal, k_view_balance, output_proposals); + get_output_proposals_v1(tx_proposal, s_view_balance, output_proposals); // sanity check semantics check_v1_output_proposal_set_semantics_v1(output_proposals); @@ -251,11 +251,11 @@ std::uint8_t get_shared_num_primary_view_tag_bits( } //------------------------------------------------------------------------------------------------------------------- SpInputProposalV1 gen_sp_input_proposal_v1(const crypto::secret_key &sp_spend_privkey, - const crypto::secret_key &k_view_balance, + const crypto::secret_key &k_generate_image, const rct::xmr_amount amount) { SpInputProposalV1 temp; - temp.core = gen_sp_input_proposal_core(sp_spend_privkey, k_view_balance, amount); + temp.core = gen_sp_input_proposal_core(sp_spend_privkey, k_generate_image, amount); return temp; } //------------------------------------------------------------------------------------------------------------------- diff --git a/src/seraphis_main/tx_builder_types.h b/src/seraphis_main/tx_builder_types.h index ad6ec5c2fb7..510752dd9b6 100644 --- a/src/seraphis_main/tx_builder_types.h +++ b/src/seraphis_main/tx_builder_types.h @@ -286,22 +286,22 @@ void get_coinbase_output_proposals_v1(const SpCoinbaseTxProposalV1 &tx_proposal, /** * brief: get_coinbase_output_proposals_v1 - convert the tx proposal's payment proposals into output proposals * param: tx_proposal - -* param: k_view_balance - +* param: s_view_balance - * outparam: output_proposals_out - */ void get_output_proposals_v1(const SpTxProposalV1 &tx_proposal, - const crypto::secret_key &k_view_balance, + const crypto::secret_key &s_view_balance, std::vector &output_proposals_out); /** * brief: get_tx_proposal_prefix_v1 - get the message to be signed by input spend proofs * param: tx_proposal - * param: tx_version - -* param: k_view_balance - +* param: s_view_balance - * outparam: tx_proposal_prefix_out - */ void get_tx_proposal_prefix_v1(const SpTxProposalV1 &tx_proposal, const tx_version_t &tx_version, - const crypto::secret_key &k_view_balance, + const crypto::secret_key &s_view_balance, rct::key &tx_proposal_prefix_out); /** * brief: get_shared_num_primary_view_tag_bits - get single shared value of npbits among payment/output proposals @@ -317,12 +317,12 @@ std::uint8_t get_shared_num_primary_view_tag_bits( /** * brief: gen_sp_input_proposal_v1 - generate an input proposal * param: sp_spend_privkey - -* param: k_view_balance - +* param: k_generate_image - * param: amount - * return: random input proposal */ SpInputProposalV1 gen_sp_input_proposal_v1(const crypto::secret_key &sp_spend_privkey, - const crypto::secret_key &k_view_balance, + const crypto::secret_key &k_generate_image, const rct::xmr_amount amount); /** * brief: gen_sp_coinbase_output_proposal_v1 - generate a coinbase output proposal diff --git a/src/seraphis_main/tx_builders_inputs.cpp b/src/seraphis_main/tx_builders_inputs.cpp index ea7f0bda8bb..a4cfde149f1 100644 --- a/src/seraphis_main/tx_builders_inputs.cpp +++ b/src/seraphis_main/tx_builders_inputs.cpp @@ -89,14 +89,14 @@ void make_input_images_prefix_v1(const std::vector &legacy_e //------------------------------------------------------------------------------------------------------------------- void check_v1_input_proposal_semantics_v1(const SpInputProposalCore &input_proposal, const rct::key &sp_core_spend_pubkey, - const crypto::secret_key &k_view_balance) + const crypto::secret_key &k_generate_image) { // 1. the onetime address must be reproducible rct::key extended_spendkey{sp_core_spend_pubkey}; extend_seraphis_spendkey_u(input_proposal.enote_view_extension_u, extended_spendkey); rct::key onetime_address_reproduced{extended_spendkey}; - extend_seraphis_spendkey_x(add_secrets(input_proposal.enote_view_extension_x, k_view_balance), + extend_seraphis_spendkey_x(add_secrets(input_proposal.enote_view_extension_x, k_generate_image), onetime_address_reproduced); mask_key(input_proposal.enote_view_extension_g, onetime_address_reproduced, onetime_address_reproduced); @@ -105,7 +105,7 @@ void check_v1_input_proposal_semantics_v1(const SpInputProposalCore &input_propo // 2. the key image must be reproducible and canonical crypto::key_image key_image_reproduced; - make_seraphis_key_image(add_secrets(input_proposal.enote_view_extension_x, k_view_balance), + make_seraphis_key_image(add_secrets(input_proposal.enote_view_extension_x, k_generate_image), rct::rct2pk(extended_spendkey), key_image_reproduced); @@ -140,9 +140,9 @@ void check_v1_input_proposal_semantics_v1(const SpInputProposalCore &input_propo //------------------------------------------------------------------------------------------------------------------- void check_v1_input_proposal_semantics_v1(const SpInputProposalV1 &input_proposal, const rct::key &sp_core_spend_pubkey, - const crypto::secret_key &k_view_balance) + const crypto::secret_key &k_generate_image) { - check_v1_input_proposal_semantics_v1(input_proposal.core, sp_core_spend_pubkey, k_view_balance); + check_v1_input_proposal_semantics_v1(input_proposal.core, sp_core_spend_pubkey, k_generate_image); } //------------------------------------------------------------------------------------------------------------------- void make_input_proposal(const SpEnoteCoreVariant &enote_core, @@ -191,7 +191,7 @@ bool try_make_v1_input_proposal_v1(const SpEnoteVariant &enote, const std::uint8_t num_primary_view_tag_bits, const rct::key &input_context, const rct::key &jamtis_spend_pubkey, - const crypto::secret_key &k_view_balance, + const crypto::secret_key &s_view_balance, const crypto::secret_key &address_mask, const crypto::secret_key &commitment_mask, SpInputProposalV1 &proposal_out) @@ -203,7 +203,7 @@ bool try_make_v1_input_proposal_v1(const SpEnoteVariant &enote, num_primary_view_tag_bits, input_context, jamtis_spend_pubkey, - k_view_balance, + s_view_balance, enote_record)) return false; @@ -263,7 +263,7 @@ void make_standard_input_context_v1(const std::vector &legac void make_v1_image_proof_v1(const SpInputProposalCore &input_proposal, const rct::key &message, const crypto::secret_key &sp_spend_privkey, - const crypto::secret_key &k_view_balance, + const crypto::secret_key &k_generate_image, SpImageProofV1 &image_proof_out) { // make image proof for an enote image in the squashed enote model @@ -289,7 +289,7 @@ void make_v1_image_proof_v1(const SpInputProposalCore &input_proposal, // c. y: H_n(Ko,C) (k_{x, sender} + k_{x, address} + k_vb) crypto::secret_key y; - sc_add(to_bytes(y), to_bytes(input_proposal.enote_view_extension_x), to_bytes(k_view_balance)); + sc_add(to_bytes(y), to_bytes(input_proposal.enote_view_extension_x), to_bytes(k_generate_image)); sc_mul(to_bytes(y), squash_prefix.bytes, to_bytes(y)); // d. z: H_n(Ko,C) (k_{u, sender} + k_{u, address} + k_m) @@ -309,7 +309,7 @@ void make_v1_image_proof_v1(const SpInputProposalCore &input_proposal, void make_v1_image_proofs_v1(const std::vector &input_proposals, const rct::key &message, const crypto::secret_key &sp_spend_privkey, - const crypto::secret_key &k_view_balance, + const crypto::secret_key &k_generate_image, std::vector &image_proofs_out) { // make multiple image proofs @@ -323,7 +323,7 @@ void make_v1_image_proofs_v1(const std::vector &input_proposa make_v1_image_proof_v1(input_proposal.core, message, sp_spend_privkey, - k_view_balance, + k_generate_image, tools::add_element(image_proofs_out)); } } @@ -365,11 +365,11 @@ void make_v1_partial_input_v1(const SpInputProposalV1 &input_proposal, const rct::key &tx_proposal_prefix, SpImageProofV1 sp_image_proof, const rct::key &sp_core_spend_pubkey, - const crypto::secret_key &k_view_balance, + const crypto::secret_key &k_generate_image, SpPartialInputV1 &partial_input_out) { // 1. check input proposal semantics - check_v1_input_proposal_semantics_v1(input_proposal, sp_core_spend_pubkey, k_view_balance); + check_v1_input_proposal_semantics_v1(input_proposal, sp_core_spend_pubkey, k_generate_image); // 2. prepare input image get_enote_image_v1(input_proposal, partial_input_out.input_image); @@ -387,7 +387,7 @@ void make_v1_partial_input_v1(const SpInputProposalV1 &input_proposal, void make_v1_partial_input_v1(const SpInputProposalV1 &input_proposal, const rct::key &tx_proposal_prefix, const crypto::secret_key &sp_spend_privkey, - const crypto::secret_key &k_view_balance, + const crypto::secret_key &k_generate_image, SpPartialInputV1 &partial_input_out) { // 1. initialization @@ -396,21 +396,21 @@ void make_v1_partial_input_v1(const SpInputProposalV1 &input_proposal, // 2. construct image proof SpImageProofV1 sp_image_proof; - make_v1_image_proof_v1(input_proposal.core, tx_proposal_prefix, sp_spend_privkey, k_view_balance, sp_image_proof); + make_v1_image_proof_v1(input_proposal.core, tx_proposal_prefix, sp_spend_privkey, k_generate_image, sp_image_proof); // 3. finalize the partial input make_v1_partial_input_v1(input_proposal, tx_proposal_prefix, std::move(sp_image_proof), sp_core_spend_pubkey, - k_view_balance, + k_generate_image, partial_input_out); } //------------------------------------------------------------------------------------------------------------------- void make_v1_partial_inputs_v1(const std::vector &input_proposals, const rct::key &tx_proposal_prefix, const crypto::secret_key &sp_spend_privkey, - const crypto::secret_key &k_view_balance, + const crypto::secret_key &k_generate_image, std::vector &partial_inputs_out) { partial_inputs_out.clear(); @@ -422,7 +422,7 @@ void make_v1_partial_inputs_v1(const std::vector &input_propo make_v1_partial_input_v1(input_proposal, tx_proposal_prefix, sp_spend_privkey, - k_view_balance, + k_generate_image, tools::add_element(partial_inputs_out)); } } diff --git a/src/seraphis_main/tx_builders_inputs.h b/src/seraphis_main/tx_builders_inputs.h index 888a2aaa4b8..9344d516f7c 100644 --- a/src/seraphis_main/tx_builders_inputs.h +++ b/src/seraphis_main/tx_builders_inputs.h @@ -67,14 +67,14 @@ void make_input_images_prefix_v1(const std::vector &legacy_e * - throws on failure * param: input_proposal - * param: sp_core_spend_pubkey - -* param: k_view_balance - +* param: k_generate_image - */ void check_v1_input_proposal_semantics_v1(const SpInputProposalCore &input_proposal, const rct::key &sp_core_spend_pubkey, - const crypto::secret_key &k_view_balance); + const crypto::secret_key &k_generate_image); void check_v1_input_proposal_semantics_v1(const SpInputProposalV1 &input_proposal, const rct::key &sp_core_spend_pubkey, - const crypto::secret_key &k_view_balance); + const crypto::secret_key &k_generate_image); /** * brief: make_input_proposal - make the core of a seraphis input proposal * param: enote_core - @@ -116,7 +116,7 @@ void make_v1_input_proposal_v1(const SpEnoteRecordV1 &enote_record, * param: num_primary_view_tag_bits - * param: input_context - * param: jamtis_spend_pubkey - -* param: k_view_balance - +* param: s_view_balance - * param: address_mask - * param: commitment_mask - * outparam: proposal_out - @@ -126,7 +126,7 @@ bool try_make_v1_input_proposal_v1(const SpEnoteVariant &enote, const std::uint8_t num_primary_view_tag_bits, const rct::key &input_context, const rct::key &jamtis_spend_pubkey, - const crypto::secret_key &k_view_balance, + const crypto::secret_key &s_view_balance, const crypto::secret_key &address_mask, const crypto::secret_key &commitment_mask, SpInputProposalV1 &proposal_out); @@ -147,26 +147,26 @@ void make_standard_input_context_v1(const std::vector &legac * param: input_proposal - * param: message - * param: sp_spend_privkey - -* param: k_view_balance - +* param: k_generate_image - * outparam: image_proof_out - */ void make_v1_image_proof_v1(const SpInputProposalCore &input_proposal, const rct::key &message, const crypto::secret_key &sp_spend_privkey, - const crypto::secret_key &k_view_balance, + const crypto::secret_key &k_generate_image, SpImageProofV1 &image_proof_out); /** * brief: make_v1_image_proofs_v1 - make a set of seraphis composition proofs for enote images in the squashed enote model * param: input_proposals - * param: message - * param: sp_spend_privkey - -* param: k_view_balance - +* param: k_generate_image - * outparam: image_proofs_out - */ void make_v1_image_proofs_v1(const std::vector &input_proposals, const rct::key &message, const crypto::secret_key &sp_spend_privkey, - const crypto::secret_key &k_view_balance, + const crypto::secret_key &k_generate_image, std::vector &image_proofs_out); /** * brief: check_v1_partial_input_semantics_v1 - check the semantics of a v1 partial seraphis input @@ -180,32 +180,32 @@ void check_v1_partial_input_semantics_v1(const SpPartialInputV1 &partial_input); * param: tx_proposal_prefix - * param: sp_image_proof - * param: sp_core_spend_pubkey - -* param: k_view_balance - +* param: k_generate_image - * outparam: partial_input_out - */ void make_v1_partial_input_v1(const SpInputProposalV1 &input_proposal, const rct::key &tx_proposal_prefix, SpImageProofV1 sp_image_proof, const rct::key &sp_core_spend_pubkey, - const crypto::secret_key &k_view_balance, + const crypto::secret_key &k_generate_image, SpPartialInputV1 &partial_input_out); void make_v1_partial_input_v1(const SpInputProposalV1 &input_proposal, const rct::key &tx_proposal_prefix, const crypto::secret_key &sp_spend_privkey, - const crypto::secret_key &k_view_balance, + const crypto::secret_key &k_generate_image, SpPartialInputV1 &partial_input_out); /** * brief: make_v1_partial_inputs_v1 - make a full set of v1 partial inputs * param: input_proposals - * param: tx_proposal_prefix - * param: sp_spend_privkey - -* param: k_view_balance - +* param: k_generate_image - * outparam: partial_inputs_out - */ void make_v1_partial_inputs_v1(const std::vector &input_proposals, const rct::key &tx_proposal_prefix, const crypto::secret_key &sp_spend_privkey, - const crypto::secret_key &k_view_balance, + const crypto::secret_key &k_generate_image, std::vector &partial_inputs_out); /** * brief: get_input_commitment_factors_v1 - collect input amounts and input image amount commitment blinding factors diff --git a/src/seraphis_main/tx_builders_mixed.cpp b/src/seraphis_main/tx_builders_mixed.cpp index 1e20c501d08..9482971fe9e 100644 --- a/src/seraphis_main/tx_builders_mixed.cpp +++ b/src/seraphis_main/tx_builders_mixed.cpp @@ -377,7 +377,7 @@ static void check_tx_proposal_semantics_inputs_v1(const std::vector &sp_input_proposals, const rct::key &legacy_spend_pubkey, const rct::key &jamtis_spend_pubkey, - const crypto::secret_key &k_view_balance, + const crypto::secret_key &k_generate_image, std::vector &in_amounts_out) { // 1. there should be at least one input @@ -396,10 +396,10 @@ static void check_tx_proposal_semantics_inputs_v1(const std::vector &selfsend_payment_proposals, const rct::key &input_context, const rct::key &jamtis_spend_pubkey, - const crypto::secret_key &k_view_balance) + const crypto::secret_key &s_view_balance) { // 1. there must be at least one self-send output CHECK_AND_ASSERT_THROW_MES(selfsend_payment_proposals.size() > 0, @@ -439,7 +439,7 @@ static void check_tx_proposal_semantics_selfsend_outputs_v1(const std::size_t nu check_jamtis_payment_proposal_selfsend_semantics_v1(selfsend_payment_proposal, input_context, jamtis_spend_pubkey, - k_view_balance); + s_view_balance); } // 4. assert that there is exactly 1 value & unique npbits value amongst the proposals @@ -805,15 +805,18 @@ void check_v1_coinbase_tx_proposal_semantics_v1(const SpCoinbaseTxProposalV1 &tx void check_v1_tx_proposal_semantics_v1(const SpTxProposalV1 &tx_proposal, const rct::key &legacy_spend_pubkey, const rct::key &jamtis_spend_pubkey, - const crypto::secret_key &k_view_balance) + const crypto::secret_key &s_view_balance) { // 1. check inputs + crypto::secret_key k_generate_image; + jamtis::make_jamtis_generateimage_key(s_view_balance, k_generate_image); + std::vector in_amounts; check_tx_proposal_semantics_inputs_v1(tx_proposal.legacy_input_proposals, tx_proposal.sp_input_proposals, legacy_spend_pubkey, jamtis_spend_pubkey, - k_view_balance, + k_generate_image, in_amounts); // 2. check self-send payment proposals @@ -824,11 +827,11 @@ void check_v1_tx_proposal_semantics_v1(const SpTxProposalV1 &tx_proposal, tx_proposal.selfsend_payment_proposals, input_context, jamtis_spend_pubkey, - k_view_balance); + s_view_balance); // 3. check output proposals std::vector output_proposals; - get_output_proposals_v1(tx_proposal, k_view_balance, output_proposals); + get_output_proposals_v1(tx_proposal, s_view_balance, output_proposals); std::vector output_amounts; check_tx_proposal_semantics_output_proposals_v1(output_proposals, tx_proposal.partial_memo, output_amounts); @@ -1208,11 +1211,11 @@ void make_v1_partial_tx_v1(const SpTxProposalV1 &tx_proposal, const tx_version_t &tx_version, const rct::key &legacy_spend_pubkey, const rct::key &jamtis_spend_pubkey, - const crypto::secret_key &k_view_balance, + const crypto::secret_key &s_view_balance, SpPartialTxV1 &partial_tx_out) { // 1. validate tx proposal - check_v1_tx_proposal_semantics_v1(tx_proposal, legacy_spend_pubkey, jamtis_spend_pubkey, k_view_balance); + check_v1_tx_proposal_semantics_v1(tx_proposal, legacy_spend_pubkey, jamtis_spend_pubkey, s_view_balance); // 2. sort the inputs by key image std::sort(legacy_inputs.begin(), legacy_inputs.end(), tools::compare_func(compare_KI)); @@ -1243,7 +1246,7 @@ void make_v1_partial_tx_v1(const SpTxProposalV1 &tx_proposal, // 5. extract output proposals from tx proposal std::vector output_proposals; - get_output_proposals_v1(tx_proposal, k_view_balance, output_proposals); + get_output_proposals_v1(tx_proposal, s_view_balance, output_proposals); // 6. construct partial tx make_v1_partial_tx_v1(std::move(legacy_inputs), diff --git a/src/seraphis_main/tx_builders_mixed.h b/src/seraphis_main/tx_builders_mixed.h index 81d199f9d51..3a9f8307450 100644 --- a/src/seraphis_main/tx_builders_mixed.h +++ b/src/seraphis_main/tx_builders_mixed.h @@ -144,12 +144,12 @@ void check_v1_coinbase_tx_proposal_semantics_v1(const SpCoinbaseTxProposalV1 &tx * param: tx_proposal - * param: legacy_spend_pubkey - * param: jamtis_spend_pubkey - -* param: k_view_balance - +* param: s_view_balance - */ void check_v1_tx_proposal_semantics_v1(const SpTxProposalV1 &tx_proposal, const rct::key &legacy_spend_pubkey, const rct::key &jamtis_spend_pubkey, - const crypto::secret_key &k_view_balance); + const crypto::secret_key &s_view_balance); /** * brief: make_v1_coinbase_tx_proposal_v1 - make v1 coinbase tx proposal * param: block_height - @@ -258,7 +258,7 @@ void make_v1_partial_tx_v1(const SpTxProposalV1 &tx_proposal, const tx_version_t &tx_version, const rct::key &legacy_spend_pubkey, const rct::key &jamtis_spend_pubkey, - const crypto::secret_key &k_view_balance, + const crypto::secret_key &s_view_balance, SpPartialTxV1 &partial_tx_out); } //namespace sp diff --git a/src/seraphis_main/tx_builders_outputs.cpp b/src/seraphis_main/tx_builders_outputs.cpp index edab2ab82ec..91368540c78 100644 --- a/src/seraphis_main/tx_builders_outputs.cpp +++ b/src/seraphis_main/tx_builders_outputs.cpp @@ -119,6 +119,7 @@ static void make_additional_output_normal_self_send_v1(const jamtis::JamtisSelfS // build payment proposal for a 'normal' self-send selfsend_proposal_out.destination = destination; selfsend_proposal_out.amount = amount; + selfsend_proposal_out.onetime_address_format = jamtis::JamtisOnetimeAddressFormat::SERAPHIS; selfsend_proposal_out.type = self_send_type; selfsend_proposal_out.enote_ephemeral_privkey = crypto::x25519_secret_key_gen(); selfsend_proposal_out.num_primary_view_tag_bits = num_primary_view_tag_bits; @@ -165,6 +166,7 @@ static void make_additional_output_special_self_send_v1(const jamtis::JamtisSelf // 2. complete the proposal selfsend_proposal_out.amount = amount; + selfsend_proposal_out.onetime_address_format = jamtis::JamtisOnetimeAddressFormat::SERAPHIS; selfsend_proposal_out.type = self_send_type; selfsend_proposal_out.enote_ephemeral_privkey = crypto::x25519_eight(); //r = 8 (can't do r = 1 for x25519) selfsend_proposal_out.num_primary_view_tag_bits = num_primary_view_tag_bits; diff --git a/src/seraphis_main/txtype_squashed_v1.cpp b/src/seraphis_main/txtype_squashed_v1.cpp index d977d260e9e..e2ab85b52bf 100644 --- a/src/seraphis_main/txtype_squashed_v1.cpp +++ b/src/seraphis_main/txtype_squashed_v1.cpp @@ -38,6 +38,7 @@ #include "seraphis_core/binned_reference_set.h" #include "seraphis_core/binned_reference_set_utils.h" #include "seraphis_core/discretized_fee.h" +#include "seraphis_core/jamtis_account_secrets.h" #include "seraphis_core/jamtis_payment_proposal.h" #include "seraphis_core/sp_core_enote_utils.h" #include "seraphis_core/sp_core_types.h" @@ -334,7 +335,7 @@ void make_seraphis_tx_squashed_v1(const SpTxSquashedV1::SemanticRulesVersion sem std::vector sp_membership_proof_preps, const rct::key &legacy_spend_pubkey, const rct::key &jamtis_spend_pubkey, - const crypto::secret_key &k_view_balance, + const crypto::secret_key &s_view_balance, SpTxSquashedV1 &tx_out) { // partial tx @@ -345,7 +346,7 @@ void make_seraphis_tx_squashed_v1(const SpTxSquashedV1::SemanticRulesVersion sem tx_version_from(semantic_rules_version), legacy_spend_pubkey, jamtis_spend_pubkey, - k_view_balance, + s_view_balance, partial_tx); // seraphis membership proofs (assumes the caller prepared to make a membership proof for each input) @@ -365,13 +366,13 @@ void make_seraphis_tx_squashed_v1(const SpTxSquashedV1::SemanticRulesVersion sem std::vector sp_membership_proof_preps, const crypto::secret_key &legacy_spend_privkey, const crypto::secret_key &sp_spend_privkey, - const crypto::secret_key &k_view_balance, + const crypto::secret_key &s_view_balance, hw::device &hwdev, SpTxSquashedV1 &tx_out) { // tx proposal prefix rct::key tx_proposal_prefix; - get_tx_proposal_prefix_v1(tx_proposal, tx_version_from(semantic_rules_version), k_view_balance, tx_proposal_prefix); + get_tx_proposal_prefix_v1(tx_proposal, tx_version_from(semantic_rules_version), s_view_balance, tx_proposal_prefix); // legacy inputs std::vector legacy_inputs; @@ -382,12 +383,16 @@ void make_seraphis_tx_squashed_v1(const SpTxSquashedV1::SemanticRulesVersion sem hwdev, legacy_inputs); + // generate-image key + crypto::secret_key k_generate_image; + jamtis::make_jamtis_generateimage_key(s_view_balance, k_generate_image); + // seraphis partial inputs std::vector sp_partial_inputs; make_v1_partial_inputs_v1(tx_proposal.sp_input_proposals, tx_proposal_prefix, sp_spend_privkey, - k_view_balance, + k_generate_image, sp_partial_inputs); // legacy spend pubkey @@ -395,7 +400,7 @@ void make_seraphis_tx_squashed_v1(const SpTxSquashedV1::SemanticRulesVersion sem // jamtis spend pubkey rct::key jamtis_spend_pubkey; - make_seraphis_spendkey(k_view_balance, sp_spend_privkey, jamtis_spend_pubkey); + make_seraphis_spendkey(k_generate_image, sp_spend_privkey, jamtis_spend_pubkey); // finish tx make_seraphis_tx_squashed_v1(semantic_rules_version, @@ -405,7 +410,7 @@ void make_seraphis_tx_squashed_v1(const SpTxSquashedV1::SemanticRulesVersion sem std::move(sp_membership_proof_preps), legacy_spend_pubkey, jamtis_spend_pubkey, - k_view_balance, + s_view_balance, tx_out); } //------------------------------------------------------------------------------------------------------------------- diff --git a/src/seraphis_main/txtype_squashed_v1.h b/src/seraphis_main/txtype_squashed_v1.h index 07f51dcc56d..22596212d96 100644 --- a/src/seraphis_main/txtype_squashed_v1.h +++ b/src/seraphis_main/txtype_squashed_v1.h @@ -161,7 +161,7 @@ void make_seraphis_tx_squashed_v1(const SpTxSquashedV1::SemanticRulesVersion sem std::vector sp_membership_proof_preps, const rct::key &legacy_spend_pubkey, const rct::key &jamtis_spend_pubkey, - const crypto::secret_key &k_view_balance, + const crypto::secret_key &s_view_balance, SpTxSquashedV1 &tx_out); void make_seraphis_tx_squashed_v1(const SpTxSquashedV1::SemanticRulesVersion semantic_rules_version, const SpTxProposalV1 &tx_proposal, @@ -169,7 +169,7 @@ void make_seraphis_tx_squashed_v1(const SpTxSquashedV1::SemanticRulesVersion sem std::vector sp_membership_proof_preps, const crypto::secret_key &legacy_spend_privkey, const crypto::secret_key &sp_spend_privkey, - const crypto::secret_key &k_view_balance, + const crypto::secret_key &s_view_balance, hw::device &hwdev, SpTxSquashedV1 &tx_out); void make_seraphis_tx_squashed_v1(const SpTxSquashedV1::SemanticRulesVersion semantic_rules_version, @@ -183,7 +183,7 @@ void make_seraphis_tx_squashed_v1(const SpTxSquashedV1::SemanticRulesVersion sem std::vector sp_membership_proof_preps, const crypto::secret_key &legacy_spend_privkey, const crypto::secret_key &sp_spend_privkey, - const crypto::secret_key &k_view_balance, + const crypto::secret_key &s_view_balance, hw::device &hwdev, SpTxSquashedV1 &tx_out); diff --git a/src/seraphis_mocks/mock_send_receive.cpp b/src/seraphis_mocks/mock_send_receive.cpp index 10e7fff1100..9f030e32cc5 100644 --- a/src/seraphis_mocks/mock_send_receive.cpp +++ b/src/seraphis_mocks/mock_send_receive.cpp @@ -79,6 +79,7 @@ namespace mocks //------------------------------------------------------------------------------------------------------------------- void convert_outlay_to_payment_proposal(const rct::xmr_amount outlay_amount, const jamtis::JamtisDestinationV1 &destination, + const jamtis::JamtisOnetimeAddressFormat onetime_address_format, const TxExtra &partial_memo_for_destination, const std::uint8_t num_primary_view_tag_bits, jamtis::JamtisPaymentProposalV1 &payment_proposal_out) @@ -86,6 +87,7 @@ void convert_outlay_to_payment_proposal(const rct::xmr_amount outlay_amount, payment_proposal_out = jamtis::JamtisPaymentProposalV1{ .destination = destination, .amount = outlay_amount, + .onetime_address_format = onetime_address_format, .enote_ephemeral_privkey = crypto::x25519_secret_key_gen(), .num_primary_view_tag_bits = num_primary_view_tag_bits, .partial_memo = partial_memo_for_destination @@ -148,6 +150,7 @@ void send_sp_coinbase_amounts_to_user(const std::vector &coinba // a. make payment proposal convert_outlay_to_payment_proposal(coinbase_amount, user_address, + jamtis::JamtisOnetimeAddressFormat::SERAPHIS, TxExtra{}, num_primary_view_tag_bits, tools::add_element(payment_proposals)); @@ -189,6 +192,7 @@ void send_sp_coinbase_amounts_to_users(const std::vector(outlay), std::get(outlay), + jamtis::JamtisOnetimeAddressFormat::SERAPHIS, std::get(outlay), num_primary_view_tag_bits, tools::add_element(normal_payment_proposals)); @@ -322,7 +327,7 @@ void construct_tx_for_mock_ledger_v1(const legacy_mock_keys &local_user_legacy_k std::move(legacy_ring_signature_preps), std::move(sp_membership_proof_preps), local_user_legacy_keys.k_s, - local_user_sp_keys.s_m, + local_user_sp_keys.k_ps, local_user_sp_keys.s_vb, hw::get_device("default"), tx_out); diff --git a/src/seraphis_mocks/mock_send_receive.h b/src/seraphis_mocks/mock_send_receive.h index ce13f1b352f..2e562c205c0 100644 --- a/src/seraphis_mocks/mock_send_receive.h +++ b/src/seraphis_mocks/mock_send_receive.h @@ -70,6 +70,7 @@ namespace mocks /// make a payment proposal void convert_outlay_to_payment_proposal(const rct::xmr_amount outlay_amount, const jamtis::JamtisDestinationV1 &destination, + const jamtis::JamtisOnetimeAddressFormat onetime_address_format, const TxExtra &partial_memo_for_destination, const std::uint8_t num_primary_view_tag_bits, jamtis::JamtisPaymentProposalV1 &payment_proposal_out); diff --git a/tests/unit_tests/seraphis_basic.cpp b/tests/unit_tests/seraphis_basic.cpp index 92daa5acde0..8987c8568de 100644 --- a/tests/unit_tests/seraphis_basic.cpp +++ b/tests/unit_tests/seraphis_basic.cpp @@ -209,7 +209,7 @@ static void check_is_owned(const SpEnoteVariant &enote, // check key image rct::key spendkey_U_component{keys.K_s_base}; - reduce_seraphis_spendkey_x(keys.s_vb, spendkey_U_component); + reduce_seraphis_spendkey_x(keys.k_gi, spendkey_U_component); extend_seraphis_spendkey_u(enote_record.enote_view_extension_u, spendkey_U_component); crypto::key_image reproduced_key_image; make_seraphis_key_image(add_secrets(enote_record.enote_view_extension_x, keys.k_gi), diff --git a/tests/unit_tests/seraphis_enote_scanning.cpp b/tests/unit_tests/seraphis_enote_scanning.cpp index b3591f4cbd5..dfe631096cc 100644 --- a/tests/unit_tests/seraphis_enote_scanning.cpp +++ b/tests/unit_tests/seraphis_enote_scanning.cpp @@ -267,6 +267,7 @@ TEST(seraphis_enote_scanning, trivial_ledger) const JamtisPaymentProposalV1 payment_proposal{ .destination = user_address, .amount = enote_amount, + .onetime_address_format = JamtisOnetimeAddressFormat::SERAPHIS, .enote_ephemeral_privkey = crypto::x25519_secret_key_gen(), .num_primary_view_tag_bits = num_primary_view_tag_bits, .partial_memo = mock_tx_supplement.tx_extra diff --git a/tests/unit_tests/seraphis_knowledge_proofs.cpp b/tests/unit_tests/seraphis_knowledge_proofs.cpp index 93b0f12d585..2375168ce06 100644 --- a/tests/unit_tests/seraphis_knowledge_proofs.cpp +++ b/tests/unit_tests/seraphis_knowledge_proofs.cpp @@ -112,7 +112,7 @@ static void enote_knowledge_proofs_helper(const jamtis_mock_keys &keys, // 4. RECIPIENT: enote key image proof EnoteKeyImageProofV1 enote_key_image_proof; - make_enote_key_image_proof_v1(enote_record, keys.k_ps, keys.s_vb, enote_key_image_proof); + make_enote_key_image_proof_v1(enote_record, keys.k_ps, keys.k_gi, enote_key_image_proof); ASSERT_TRUE(verify_enote_key_image_proof_v1(enote_key_image_proof, enote_core.onetime_address, @@ -122,7 +122,7 @@ static void enote_knowledge_proofs_helper(const jamtis_mock_keys &keys, const crypto::key_image random_key_image{rct::rct2ki(rct::pkGen())}; EnoteUnspentProofV1 enote_unspent_proof_valid; - make_enote_unspent_proof_v1(enote_record, keys.k_ps, keys.s_vb, random_key_image, enote_unspent_proof_valid); + make_enote_unspent_proof_v1(enote_record, keys.k_ps, keys.k_gi, random_key_image, enote_unspent_proof_valid); ASSERT_TRUE(verify_enote_unspent_proof_v1(enote_unspent_proof_valid, enote_core.onetime_address, @@ -132,7 +132,7 @@ static void enote_knowledge_proofs_helper(const jamtis_mock_keys &keys, EnoteUnspentProofV1 enote_unspent_proof_invalid; make_enote_unspent_proof_v1(enote_record, keys.k_ps, - keys.s_vb, + keys.k_gi, enote_record.key_image, enote_unspent_proof_invalid); @@ -142,7 +142,7 @@ static void enote_knowledge_proofs_helper(const jamtis_mock_keys &keys, // 7. SENDER: tx funded proof TxFundedProofV1 tx_funded_proof; - make_tx_funded_proof_v1(rct::zero(), enote_record, keys.k_ps, keys.s_vb, tx_funded_proof); //with mock message + make_tx_funded_proof_v1(rct::zero(), enote_record, keys.k_ps, keys.k_gi, tx_funded_proof); //with mock message ASSERT_TRUE(verify_tx_funded_proof_v1(tx_funded_proof, rct::zero(), enote_record.key_image)); @@ -193,7 +193,7 @@ TEST(seraphis_knowledge_proofs, address_ownership_proof_K_s) // 2. address ownership proof on K_s = k_gi X + k_ps U AddressOwnershipProofV1 proof; - make_address_ownership_proof_v1(rct::zero(), keys.k_ps, keys.s_vb, proof); //with mock message + make_address_ownership_proof_v1(rct::zero(), keys.k_ps, keys.k_gi, proof); //with mock message // 3. validate the address ownership proof ASSERT_TRUE(verify_address_ownership_proof_v1(proof, rct::zero(), keys.K_s_base)); @@ -214,7 +214,7 @@ TEST(seraphis_knowledge_proofs, address_ownership_and_index_proof_K_1) // 4. address ownership proof on K_1 AddressOwnershipProofV1 address_ownership_proof; - make_address_ownership_proof_v1(rct::zero(), keys.k_ps, keys.k_gi, j, address_ownership_proof); //with mock message + make_address_ownership_proof_v1(rct::zero(), keys.k_ps, keys.s_vb, j, address_ownership_proof); //with mock message // 5. validate the address ownership proof ASSERT_TRUE(verify_address_ownership_proof_v1(address_ownership_proof, rct::zero(), destination.addr_Ks)); diff --git a/tests/unit_tests/seraphis_multisig.cpp b/tests/unit_tests/seraphis_multisig.cpp index 333b0331167..a56803863f1 100644 --- a/tests/unit_tests/seraphis_multisig.cpp +++ b/tests/unit_tests/seraphis_multisig.cpp @@ -95,6 +95,7 @@ using namespace jamtis::mocks; static void make_multisig_jamtis_mock_keys(const multisig::multisig_account &account, jamtis_mock_keys &keys_out) { + keys_out.onetime_address_format = JamtisOnetimeAddressFormat::SERAPHIS; keys_out.s_m = rct::rct2sk(rct::Z); //master key is not known in multisig keys_out.k_ps = rct::rct2sk(rct::Z); //prove spend key is not known in multisig keys_out.s_vb = account.get_common_privkey();