Electroneum
Loading...
Searching...
No Matches
protocol.cpp File Reference
#include "protocol.hpp"
#include <unordered_map>
#include <set>
#include <utility>
#include <boost/endian/conversion.hpp>
#include <common/apply_permutation.h>
#include <common/json_util.h>
#include <crypto/hmac-keccak.h>
#include <ringct/rctSigs.h>
#include <ringct/bulletproofs.h>
#include "cryptonote_config.h"
#include <sodium.h>
#include <sodium/crypto_verify_32.h>
#include <sodium/crypto_aead_chacha20poly1305.h>
Include dependency graph for protocol.cpp:

Go to the source code of this file.

Namespaces

namespace  hw
namespace  hw::trezor
namespace  hw::trezor::protocol
namespace  hw::trezor::protocol::crypto
namespace  hw::trezor::protocol::crypto::chacha
namespace  hw::trezor::protocol::ki
namespace  hw::trezor::protocol::tx

Macros

#define GET_FIELD_STRING(name, type, jtype)
#define GET_FIELD_OTHER(name, type, jtype)
#define GET_STRING_FROM_JSON(json, name, type, mandatory, def)
#define GET_FIELD_FROM_JSON(json, name, type, jtype, mandatory, def)
#define GET_FIELD_FROM_JSON_EX(json, name, type, jtype, mandatory, def, VAL)

Functions

std::string hw::trezor::protocol::key_to_string (const ::crypto::ec_point &key)
std::string hw::trezor::protocol::key_to_string (const ::crypto::ec_scalar &key)
std::string hw::trezor::protocol::key_to_string (const ::crypto::hash &key)
std::string hw::trezor::protocol::key_to_string (const ::rct::key &key)
void hw::trezor::protocol::string_to_key (::crypto::ec_scalar &key, const std::string &str)
void hw::trezor::protocol::string_to_key (::crypto::ec_point &key, const std::string &str)
void hw::trezor::protocol::string_to_key (::rct::key &key, const std::string &str)
void hw::trezor::protocol::crypto::chacha::decrypt (const void *ciphertext, size_t length, const uint8_t *key, const uint8_t *iv, char *plaintext, size_t *plaintext_len)
bool hw::trezor::protocol::ki::key_image_data (wallet_shim *wallet, const std::vector< tools::wallet2::transfer_details > &transfers, std::vector< ElectroneumTransferDetails > &res)
std::string hw::trezor::protocol::ki::compute_hash (const ElectroneumTransferDetails &rr)
void hw::trezor::protocol::ki::generate_commitment (std::vector< ElectroneumTransferDetails > &mtds, const std::vector< tools::wallet2::transfer_details > &transfers, std::shared_ptr< messages::Electroneum::ElectroneumKeyImageExportInitRequest > &req)
void hw::trezor::protocol::ki::live_refresh_ack (const ::crypto::secret_key &view_key_priv, const ::crypto::public_key &out_key, const std::shared_ptr< messages::Electroneum::ElectroneumLiveRefreshStepAck > &ack, ::cryptonote::keypair &in_ephemeral, ::crypto::key_image &ki)
void hw::trezor::protocol::tx::translate_address (ElectroneumAccountPublicAddress *dst, const cryptonote::account_public_address *src)
void hw::trezor::protocol::tx::translate_dst_entry (ElectroneumTransactionDestinationEntry *dst, const cryptonote::tx_destination_entry *src)
void hw::trezor::protocol::tx::translate_src_entry (ElectroneumTransactionSourceEntry *dst, const cryptonote::tx_source_entry *src)
void hw::trezor::protocol::tx::translate_klrki (ElectroneumMultisigKLRki *dst, const rct::multisig_kLRki *src)
void hw::trezor::protocol::tx::translate_rct_key (ElectroneumRctKey *dst, const rct::ctkey *src)
std::string hw::trezor::protocol::tx::hash_addr (const ElectroneumAccountPublicAddress *addr, boost::optional< uint64_t > amount, boost::optional< bool > is_subaddr)
std::string hw::trezor::protocol::tx::hash_addr (const std::string &spend_key, const std::string &view_key, boost::optional< uint64_t > amount, boost::optional< bool > is_subaddr)
std::string hw::trezor::protocol::tx::hash_addr (const ::crypto::public_key *spend_key, const ::crypto::public_key *view_key, boost::optional< uint64_t > amount, boost::optional< bool > is_subaddr)
::crypto::secret_key hw::trezor::protocol::tx::compute_enc_key (const ::crypto::secret_key &private_view_key, const std::string &aux, const std::string &salt)
void hw::trezor::protocol::tx::load_tx_key_data (hw::device_cold::tx_key_data_t &res, const std::string &data)
std::shared_ptr< messages::Electroneum::ElectroneumGetTxKeyRequest > hw::trezor::protocol::tx::get_tx_key (const hw::device_cold::tx_key_data_t &tx_data)
void hw::trezor::protocol::tx::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::Electroneum::ElectroneumGetTxKeyAck > ack)

Macro Definition Documentation

◆ GET_FIELD_FROM_JSON

#define GET_FIELD_FROM_JSON ( json,
name,
type,
jtype,
mandatory,
def )
Value:
GET_FIELD_FROM_JSON_EX(json, name, type, jtype, mandatory, def, GET_FIELD_OTHER)
#define GET_FIELD_OTHER(name, type, jtype)
Definition protocol.cpp:46
#define GET_FIELD_FROM_JSON_EX(json, name, type, jtype, mandatory, def, VAL)
Definition protocol.cpp:54
rapidjson::Document json
Definition transport.cpp:49

Definition at line 51 of file protocol.cpp.

51#define GET_FIELD_FROM_JSON(json, name, type, jtype, mandatory, def) \
52 GET_FIELD_FROM_JSON_EX(json, name, type, jtype, mandatory, def, GET_FIELD_OTHER)

◆ GET_FIELD_FROM_JSON_EX

#define GET_FIELD_FROM_JSON_EX ( json,
name,
type,
jtype,
mandatory,
def,
VAL )
Value:
type field_##name = static_cast<type>(def); \
bool field_##name##_found = false; \
(void)field_##name##_found; \
do if (json.HasMember(#name)) \
{ \
if (json[#name].Is##jtype()) \
{ \
VAL(name, type, jtype); \
field_##name##_found = true; \
} \
else \
{ \
throw std::invalid_argument("Field " #name " found in JSON, but not " #jtype); \
} \
} \
else if (mandatory) \
{ \
throw std::invalid_argument("Field " #name " not found in JSON");\
} while(0)

Definition at line 54 of file protocol.cpp.

54#define GET_FIELD_FROM_JSON_EX(json, name, type, jtype, mandatory, def, VAL) \
55 type field_##name = static_cast<type>(def); \
56 bool field_##name##_found = false; \
57 (void)field_##name##_found; \
58 do if (json.HasMember(#name)) \
59 { \
60 if (json[#name].Is##jtype()) \
61 { \
62 VAL(name, type, jtype); \
63 field_##name##_found = true; \
64 } \
65 else \
66 { \
67 throw std::invalid_argument("Field " #name " found in JSON, but not " #jtype); \
68 } \
69 } \
70 else if (mandatory) \
71 { \
72 throw std::invalid_argument("Field " #name " not found in JSON");\
73 } while(0)

◆ GET_FIELD_OTHER

#define GET_FIELD_OTHER ( name,
type,
jtype )
Value:
field_##name = static_cast<type>(json[#name].Get##jtype())

Definition at line 46 of file protocol.cpp.

◆ GET_FIELD_STRING

#define GET_FIELD_STRING ( name,
type,
jtype )
Value:
field_##name = std::string(json[#name].GetString(), json[#name].GetStringLength())

Definition at line 45 of file protocol.cpp.

◆ GET_STRING_FROM_JSON

#define GET_STRING_FROM_JSON ( json,
name,
type,
mandatory,
def )
Value:
GET_FIELD_FROM_JSON_EX(json, name, type, String, mandatory, def, GET_FIELD_STRING)
#define GET_FIELD_STRING(name, type, jtype)
Definition protocol.cpp:45

Definition at line 48 of file protocol.cpp.

48#define GET_STRING_FROM_JSON(json, name, type, mandatory, def) \
49 GET_FIELD_FROM_JSON_EX(json, name, type, String, mandatory, def, GET_FIELD_STRING)