Electroneum
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

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

Macros

#define GET_FIELD_STRING(name, type, jtype)   field_##name = std::string(json[#name].GetString(), json[#name].GetStringLength())
 
#define GET_FIELD_OTHER(name, type, jtype)   field_##name = static_cast<type>(json[#name].Get##jtype())
 
#define GET_STRING_FROM_JSON(json, name, type, mandatory, def)   GET_FIELD_FROM_JSON_EX(json, name, type, String, mandatory, def, GET_FIELD_STRING)
 
#define GET_FIELD_FROM_JSON(json, name, type, jtype, mandatory, def)   GET_FIELD_FROM_JSON_EX(json, name, type, jtype, mandatory, def, GET_FIELD_OTHER)
 
#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 
)    GET_FIELD_FROM_JSON_EX(json, name, type, jtype, mandatory, def, GET_FIELD_OTHER)

Definition at line 51 of file protocol.cpp.

◆ 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)
const char * name
rapidjson::Document json
Definition: transport.cpp:49

Definition at line 54 of file protocol.cpp.

◆ GET_FIELD_OTHER

#define GET_FIELD_OTHER (   name,
  type,
  jtype 
)    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 
)    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 
)    GET_FIELD_FROM_JSON_EX(json, name, type, String, mandatory, def, GET_FIELD_STRING)

Definition at line 48 of file protocol.cpp.