Go to the documentation of this file.
30 #ifndef MONERO_PROTOCOL_H
31 #define MONERO_PROTOCOL_H
52 template<
class sub_t,
class InputIterator>
53 void assign_to_repeatable(::google::protobuf::RepeatedField<sub_t> * dst,
const InputIterator begin,
const InputIterator end){
54 for (InputIterator it = begin; it != end; it++) {
60 template<
class sub_t,
class InputIterator>
62 for (InputIterator it = begin; it != end; it++) {
70 ss.write(
static_cast<const char *
>(buff), len);
83 std::ostringstream oss;
102 void decrypt(
const void* ciphertext,
size_t length,
const uint8_t* key,
const uint8_t*
iv,
char* plaintext,
size_t *plaintext_len=
nullptr);
120 const std::vector<tools::wallet2::transfer_details> & transfers,
121 std::vector<MoneroTransferDetails> & res,
122 bool need_all_additionals=
false);
133 const std::vector<tools::wallet2::transfer_details> & transfers,
134 std::shared_ptr<messages::monero::MoneroKeyImageExportInitRequest> & req,
135 bool need_subaddr_indices=
false);
142 const std::shared_ptr<messages::monero::MoneroLiveRefreshStepAck> & ack,
149 using TsxData = messages::monero::MoneroTransactionInitRequest_MoneroTransactionData;
155 using MoneroRctKey = messages::monero::MoneroTransactionSourceEntry_MoneroOutputEntry_MoneroRctKeyPublic;
166 std::string
hash_addr(
const std::string & spend_key,
const std::string & view_key, boost::optional<uint64_t> amount = boost::none, boost::optional<bool> is_subaddr = boost::none);
169 std::string
compute_sealing_key(
const std::string & master_key,
size_t idx,
bool is_iv=
false);
171 typedef boost::variant<rct::rangeSig, rct::Bulletproof>
rsig_v;
210 std::shared_ptr<rct::rctSig>
rv;
228 CHECK_AND_ASSERT_THROW_MES(m_tx_idx < m_unsigned_tx->txes.size(),
"Invalid transaction index");
251 void compute_bproof(messages::monero::MoneroTransactionRsigData & rsig_data);
258 std::shared_ptr<messages::monero::MoneroTransactionInitRequest>
step_init();
259 void step_init_ack(std::shared_ptr<const messages::monero::MoneroTransactionInitAck> ack);
261 std::shared_ptr<messages::monero::MoneroTransactionSetInputRequest>
step_set_input(
size_t idx);
262 void step_set_input_ack(std::shared_ptr<const messages::monero::MoneroTransactionSetInputAck> ack);
265 std::shared_ptr<messages::monero::MoneroTransactionInputsPermutationRequest>
step_permutation();
266 void step_permutation_ack(std::shared_ptr<const messages::monero::MoneroTransactionInputsPermutationAck> ack);
268 std::shared_ptr<messages::monero::MoneroTransactionInputViniRequest>
step_set_vini_input(
size_t idx);
271 std::shared_ptr<messages::monero::MoneroTransactionAllInputsSetRequest>
step_all_inputs_set();
274 std::shared_ptr<messages::monero::MoneroTransactionSetOutputRequest>
step_set_output(
size_t idx);
275 void step_set_output_ack(std::shared_ptr<const messages::monero::MoneroTransactionSetOutputAck> ack);
277 std::shared_ptr<messages::monero::MoneroTransactionSetOutputRequest>
step_rsig(
size_t idx);
278 void step_set_rsig_ack(std::shared_ptr<const messages::monero::MoneroTransactionSetOutputAck> ack);
280 std::shared_ptr<messages::monero::MoneroTransactionAllOutSetRequest>
step_all_outs_set();
283 std::shared_ptr<messages::monero::MoneroTransactionSignInputRequest>
step_sign_input(
size_t idx);
284 void step_sign_input_ack(std::shared_ptr<const messages::monero::MoneroTransactionSignInputAck> ack);
286 std::shared_ptr<messages::monero::MoneroTransactionFinalRequest>
step_final();
287 void step_final_ack(std::shared_ptr<const messages::monero::MoneroTransactionFinalAck> ack);
297 throw std::invalid_argument(
"RV not initialized");
309 throw std::invalid_argument(
"RV not initialized");
335 std::shared_ptr<messages::monero::MoneroGetTxKeyRequest>
get_tx_key(
339 std::vector<::crypto::secret_key> & tx_keys,
340 const std::string & tx_prefix_hash,
342 std::shared_ptr<const messages::monero::MoneroGetTxKeyAck> ack
351 #endif //MONERO_PROTOCOL_H
hw::tx_aux_data * m_aux_data
Definition: protocol.hpp:222
void step_set_rsig_ack(std::shared_ptr< const messages::monero::MoneroTransactionSetOutputAck > ack)
Definition: protocol.cpp:847
void extract_payment_id()
Definition: protocol.cpp:406
void step_init_ack(std::shared_ptr< const messages::monero::MoneroTransactionInitAck > ack)
Definition: protocol.cpp:609
std::shared_ptr< messages::monero::MoneroTransactionSignInputRequest > step_sign_input(size_t idx)
Definition: protocol.cpp:926
void generate_commitment(std::vector< MoneroTransferDetails > &mtds, const std::vector< tools::wallet2::transfer_details > &transfers, std::shared_ptr< messages::monero::MoneroKeyImageExportInitRequest > &req, bool need_subaddr_indices)
Definition: protocol.cpp:196
wallet_shim * m_wallet2
Definition: protocol.hpp:218
std::shared_ptr< messages::monero::MoneroTransactionSetInputRequest > step_set_input(size_t idx)
Definition: protocol.cpp:617
void step_set_output_ack(std::shared_ptr< const messages::monero::MoneroTransactionSetOutputAck > ack)
Definition: protocol.cpp:727
TData m_ct
Definition: protocol.hpp:217
Definition: cryptonote_tx_utils.h:75
void get_tx_key_ack(std::vector<::crypto::secret_key > &tx_keys, const std::string &tx_prefix_hash, const ::crypto::secret_key &view_key_priv, std::shared_ptr< const messages::monero::MoneroGetTxKeyAck > ack)
Definition: protocol.cpp:1111
POD_CLASS ec_point
Definition: crypto.h:55
messages::monero::MoneroKeyImageSyncStepRequest_MoneroTransferDetails MoneroTransferDetails
Definition: protocol.hpp:111
messages::monero::MoneroTransactionSourceEntry_MoneroMultisigKLRki MoneroMultisigKLRki
Definition: protocol.hpp:153
const uint32_t T[512]
Definition: groestl_tables.h:36
std::string compute_hash(const MoneroTransferDetails &rr)
Definition: protocol.cpp:175
std::vector< std::string > tx_in_hmacs
Definition: protocol.hpp:190
std::shared_ptr< messages::monero::MoneroTransactionInputsPermutationRequest > step_permutation()
Definition: protocol.cpp:669
Definition: device_cold.hpp:40
size_t m_tx_idx
Definition: protocol.hpp:220
@ RangeProofBorromean
Definition: rctTypes.h:261
boost::variant< rct::rangeSig, rct::Bulletproof > rsig_v
Definition: protocol.hpp:171
Definition: device_cold.hpp:98
Definition: rctTypes.h:79
const unsigned_tx_set * m_unsigned_tx
Definition: protocol.hpp:221
std::vector< std::string > alphas
Definition: protocol.hpp:197
void process_bproof(rct::Bulletproof &bproof)
Definition: protocol.cpp:814
std::vector< std::string > couts
Definition: protocol.hpp:201
const tx_construction_data & cur_src_tx() const
Definition: protocol.hpp:227
std::vector< rsig_v > tx_out_rsigs
Definition: protocol.hpp:193
Definition: binary_archive.h:99
std::vector< std::string > pseudo_outs_hmac
Definition: protocol.hpp:200
Definition: rctTypes.h:97
messages::monero::MoneroTransactionDestinationEntry MoneroTransactionDestinationEntry
Definition: protocol.hpp:150
void step_final_ack(std::shared_ptr< const messages::monero::MoneroTransactionFinalAck > ack)
Definition: protocol.cpp:971
crypto namespace.
Definition: crypto.cpp:60
tools::wallet2::unsigned_tx_set unsigned_tx_set
Definition: protocol.hpp:159
void step_sign_input_ack(std::shared_ptr< const messages::monero::MoneroTransactionSignInputAck > ack)
Definition: protocol.cpp:950
bool m_multisig
Definition: protocol.hpp:225
::crypto::secret_key compute_enc_key(const ::crypto::secret_key &private_view_key, const std::string &aux, const std::string &salt)
Definition: protocol.cpp:342
tx_construction_data tx_data
Definition: protocol.hpp:179
messages::monero::MoneroTransactionSourceEntry MoneroTransactionSourceEntry
Definition: protocol.hpp:152
const tools::wallet2::transfer_details & get_source_transfer(size_t idx) const
Definition: protocol.hpp:241
size_t cur_input_idx
Definition: protocol.hpp:185
std::shared_ptr< messages::monero::MoneroTransactionAllInputsSetRequest > step_all_inputs_set()
Definition: protocol.cpp:705
std::string store_tx_aux_info()
Definition: protocol.cpp:1038
std::vector< std::string > pseudo_outs
Definition: protocol.hpp:199
const unsigned TAG_SIZE
Definition: protocol.hpp:97
epee::mlocked< tools::scrubbed< ec_scalar > > secret_key
Definition: crypto.h:67
void set_tx_input(MoneroTransactionSourceEntry *dst, size_t idx, bool need_ring_keys=false, bool need_ring_indices=false)
Definition: protocol.cpp:469
bool is_offloading() const
Definition: protocol.hpp:315
std::shared_ptr< messages::monero::MoneroTransactionAllOutSetRequest > step_all_outs_set()
Definition: protocol.cpp:852
bool is_req_bulletproof() const
Definition: protocol.hpp:303
void step_set_input_ack(std::shared_ptr< const messages::monero::MoneroTransactionSetInputAck > ack)
Definition: protocol.cpp:625
void translate_dst_entry(MoneroTransactionDestinationEntry *dst, const cryptonote::tx_destination_entry *src)
Definition: protocol.cpp:288
void translate_klrki(MoneroMultisigKLRki *dst, const rct::multisig_kLRki *src)
Definition: protocol.cpp:296
messages::monero::MoneroTransactionSourceEntry_MoneroOutputEntry MoneroOutputEntry
Definition: protocol.hpp:154
const TData & tdata() const
Definition: protocol.hpp:327
#define s(x, c)
Definition: aesb.c:47
std::vector< rct::ecdhTuple > tx_out_ecdh
Definition: protocol.hpp:195
std::vector< std::pair< crypto::key_image, crypto::signature > > exported_key_image
Definition: device_cold.hpp:56
void step_all_outs_set_ack(std::shared_ptr< const messages::monero::MoneroTransactionAllOutSetAck > ack, hw::device &hwdev)
Definition: protocol.cpp:856
void live_refresh_ack(const ::crypto::secret_key &view_key_priv, const ::crypto::public_key &out_key, const std::shared_ptr< messages::monero::MoneroLiveRefreshStepAck > &ack, ::cryptonote::keypair &in_ephemeral, ::crypto::key_image &ki)
Definition: protocol.cpp:235
cryptonote::transaction tx
Definition: protocol.hpp:180
Definition: rctTypes.h:205
messages::monero::MoneroKeyImageSyncStepAck_MoneroExportedKeyImage MoneroExportedKeyImage
Definition: protocol.hpp:113
size_t num_inputs() const
Definition: protocol.hpp:323
POD_CLASS ec_scalar
Definition: crypto.h:59
@ RCTTypeBulletproof
Definition: rctTypes.h:257
std::string enc_salt1
Definition: protocol.hpp:206
void assign_from_repeatable(std::vector< sub_t > *dst, const InputIterator begin, const InputIterator end)
Definition: protocol.hpp:61
void step_set_vini_input_ack(std::shared_ptr< const messages::monero::MoneroTransactionInputViniAck > ack)
Definition: protocol.cpp:701
unsigned rsig_type
Definition: protocol.hpp:181
void translate_rct_key(MoneroRctKey *dst, const rct::ctkey *src)
Definition: protocol.cpp:303
Definition: cryptonote_basic.h:528
std::string hash_addr(const MoneroAccountPublicAddress *addr, boost::optional< uint64_t > amount, boost::optional< bool > is_subaddr)
Definition: protocol.cpp:308
@ RCTTypeSimple
Definition: rctTypes.h:256
size_t cur_output_in_batch_idx
Definition: protocol.hpp:188
Definition: protocol.hpp:215
void string_to_key(::crypto::ec_scalar &key, const std::string &str)
Definition: protocol.cpp:97
expect< void > success() noexcept
Definition: expect.h:397
std::vector< rct::key > rsig_gamma
Definition: protocol.hpp:204
std::string key_to_string(const ::crypto::ec_point &key)
Definition: protocol.cpp:81
std::shared_ptr< messages::monero::MoneroTransactionInputViniRequest > step_set_vini_input(size_t idx)
Definition: protocol.cpp:685
bool is_bulletproof() const
Definition: protocol.hpp:307
std::shared_ptr< messages::monero::MoneroTransactionFinalRequest > step_final()
Definition: protocol.cpp:967
messages::monero::MoneroTransactionInitRequest_MoneroTransactionData TsxData
Definition: protocol.hpp:149
Definition: device.hpp:87
std::vector< std::string > tx_out_entr_hmacs
Definition: protocol.hpp:191
void load_tx_key_data(hw::device_cold::tx_key_data_t &res, const std::string &data)
Definition: protocol.cpp:1067
void serialize(Archive &a, std::unordered_map< h_key, hval > &x, const boost::serialization::version_type ver)
Definition: unordered_containers_boost_serialization.h:126
void decrypt(const void *ciphertext, size_t length, const uint8_t *key, const uint8_t *iv, char *plaintext, size_t *plaintext_len)
Definition: protocol.cpp:121
void compute_bproof(messages::monero::MoneroTransactionRsigData &rsig_data)
Definition: protocol.cpp:793
void compute_integrated_indices(TsxData *tsx_data)
Definition: protocol.cpp:504
std::vector< uint64_t > grouping_vct
Definition: protocol.hpp:183
messages::monero::MoneroKeyImageExportInitRequest_MoneroSubAddressIndicesList MoneroSubAddressIndicesList
Definition: protocol.hpp:112
RangeProofType range_proof_type
Definition: rctTypes.h:263
TData()
Definition: protocol.cpp:387
std::shared_ptr< messages::monero::MoneroTransactionSetOutputRequest > step_rsig(size_t idx)
Definition: protocol.cpp:832
std::string enc_salt2
Definition: protocol.hpp:207
std::shared_ptr< messages::monero::MoneroTransactionSetOutputRequest > step_set_output(size_t idx)
Definition: protocol.cpp:712
std::string cn_serialize(T &obj)
Definition: protocol.hpp:82
std::vector< std::string > signatures
Definition: protocol.hpp:203
POD_CLASS public_key
Definition: crypto.h:61
const tools::wallet2::transfer_details & get_transfer(size_t idx) const
Definition: protocol.hpp:236
Definition: device.cpp:38
std::string enc_keys
Definition: protocol.hpp:208
Definition: rctTypes.h:105
unsigned client_version() const
Definition: protocol.hpp:291
Definition: protocol.hpp:176
std::vector< std::string > couts_dec
Definition: protocol.hpp:202
bool cn_deserialize(const void *buff, size_t len, T &dst)
Definition: protocol.hpp:68
Signer(wallet_shim *wallet2, const unsigned_tx_set *unsigned_tx, size_t tx_idx=0, hw::tx_aux_data *aux_data=nullptr)
Definition: protocol.cpp:396
Definition: cryptonote_basic.h:501
std::vector< size_t > source_permutation
Definition: protocol.hpp:196
size_t num_outputs() const
Definition: protocol.hpp:319
std::vector< std::string > tx_out_hmacs
Definition: protocol.hpp:192
bool key_image_data(wallet_shim *wallet, const std::vector< tools::wallet2::transfer_details > &transfers, std::vector< MoneroTransferDetails > &res, bool need_all_additionals)
Definition: protocol.cpp:146
static void chacha(unsigned rounds, const void *data, size_t length, const uint8_t *key, const uint8_t *iv, char *cipher)
Definition: chacha.c:45
std::vector< rct::ctkey > tx_out_pk
Definition: protocol.hpp:194
std::shared_ptr< messages::monero::MoneroTransactionInitRequest > step_init()
Definition: protocol.cpp:541
size_t cur_batch_idx
Definition: protocol.hpp:187
static const unsigned char iv[64]
Definition: sha512-hash.c:13
void step_all_inputs_set_ack(std::shared_ptr< const messages::monero::MoneroTransactionAllInputsSetAck > ack)
Definition: protocol.cpp:709
Definition: binary_archive.h:182
void assign_to_repeatable(::google::protobuf::RepeatedField< sub_t > *dst, const InputIterator begin, const InputIterator end)
Definition: protocol.hpp:53
Definition: cryptonote_basic.h:194
Definition: exceptions.hpp:79
messages::monero::MoneroTransactionRsigData MoneroRsigData
Definition: protocol.hpp:156
messages::monero::MoneroTransactionSourceEntry_MoneroOutputEntry_MoneroRctKeyPublic MoneroRctKey
Definition: protocol.hpp:155
std::shared_ptr< messages::monero::MoneroGetTxKeyRequest > get_tx_key(const hw::device_cold::tx_key_data_t &tx_data)
Definition: protocol.cpp:1098
void step_permutation_ack(std::shared_ptr< const messages::monero::MoneroTransactionInputsPermutationAck > ack)
Definition: protocol.cpp:681
bool is_simple() const
Definition: protocol.hpp:295
std::string tx_prefix_hash
Definition: protocol.hpp:205
TsxData tsx_data
Definition: protocol.hpp:178
void sort_ki()
Definition: protocol.cpp:641
tools::wallet2::tx_construction_data tx_construction_data
Definition: protocol.hpp:158
const tx_construction_data & cur_tx() const
Definition: protocol.hpp:232
void translate_address(MoneroAccountPublicAddress *dst, const cryptonote::account_public_address *src)
Definition: protocol.cpp:283
int bp_version
Definition: protocol.hpp:182
@ RCTTypeCLSAG
Definition: rctTypes.h:259
std::shared_ptr< MoneroRsigData > rsig_param
Definition: protocol.hpp:184
POD_CLASS key_image
Definition: crypto.h:87
messages::monero::MoneroTransactionDestinationEntry_MoneroAccountPublicAddress MoneroAccountPublicAddress
Definition: protocol.hpp:151
std::string compute_sealing_key(const std::string &master_key, size_t idx, bool is_iv)
Definition: protocol.cpp:362
const unsigned IV_SIZE
Definition: protocol.hpp:96
bool should_compute_bp_now() const
Definition: protocol.cpp:788
hw::device_cold::exported_key_image exported_key_image
Definition: protocol.hpp:114
Definition: device_cold.hpp:44
@ RCTTypeBulletproof2
Definition: rctTypes.h:258
std::shared_ptr< rct::rctSig > rv
Definition: protocol.hpp:210
POD_CLASS hash
Definition: hash.h:48
size_t cur_output_idx
Definition: protocol.hpp:186
unsigned m_client_version
Definition: protocol.hpp:224
std::vector< std::string > spend_encs
Definition: protocol.hpp:198