38 #ifndef USE_DEVICE_LEDGER
39 #define USE_DEVICE_LEDGER 1
42 #if !defined(HAVE_HIDAPI)
43 #undef USE_DEVICE_LEDGER
44 #define USE_DEVICE_LEDGER 0
48 #define WITH_DEVICE_LEDGER
54 struct account_public_address;
56 struct subaddress_index;
57 struct tx_destination_entry;
59 class transaction_prefix;
66 throw std::runtime_error(std::string("device function not supported: ")+ std::string(__FUNCTION__) + \
67 std::string(" (device.hpp line ")+std::to_string(__LINE__)+std::string(").")); \
81 virtual boost::optional<epee::wipeable_string>
on_pin_request() {
return boost::none; }
97 explicit virtual operator bool()
const = 0;
139 virtual void set_pin(
const epee::wipeable_string & pin) {}
221 const bool &need_additional_txkeys,
const std::vector<crypto::secret_key> &additional_tx_keys,
222 std::vector<crypto::public_key> &additional_tx_public_keys,
223 std::vector<rct::key> &amount_keys,
235 const std::vector<const crypto::public_key *> &pubs,
259 std::map<std::string, std::unique_ptr<device>>
registry;
Definition: cryptonote_basic.h:171
Definition: device.hpp:71
virtual bool indeterminate() const
Definition: device.hpp:74
virtual double progress() const
Definition: device.hpp:73
Definition: device.hpp:257
device & get_device(const std::string &device_descriptor)
Definition: device.cpp:76
device_registry()
Definition: device.cpp:58
std::map< std::string, std::unique_ptr< device > > registry
Definition: device.hpp:259
bool register_device(const std::string &device_name, device *hw_device)
Definition: device.cpp:66
Definition: device.hpp:87
virtual ~device()
Definition: device.hpp:95
virtual bool has_tx_cold_sign(void) const
Definition: device.hpp:241
virtual void set_pin(const epee::wipeable_string &pin)
Definition: device.hpp:139
virtual bool connect(void)=0
virtual void generate_tx_proof(const crypto::hash &prefix_hash, const crypto::public_key &R, const crypto::public_key &A, const boost::optional< crypto::public_key > &B, const crypto::public_key &D, const crypto::secret_key &r, crypto::signature &sig)=0
virtual bool disconnect(void)=0
virtual bool sc_secret_add(crypto::secret_key &r, const crypto::secret_key &a, const crypto::secret_key &b)=0
virtual const std::string get_name() const =0
virtual bool ecdhDecode(rct::ecdhTuple &masked, const rct::key &sharedSec, bool short_amount)=0
virtual bool conceal_derivation(crypto::key_derivation &derivation, const crypto::public_key &tx_pub_key, const std::vector< crypto::public_key > &additional_tx_pub_keys, const crypto::key_derivation &main_derivation, const std::vector< crypto::key_derivation > &additional_derivations)=0
virtual bool init(void)=0
virtual bool try_lock(void)=0
device(const device &hwdev)
Definition: device.hpp:94
virtual void set_network_type(cryptonote::network_type network_type)
Definition: device.hpp:245
virtual void lock(void)=0
std::string name
Definition: device.hpp:89
virtual bool generate_key_image(const crypto::public_key &pub, const crypto::secret_key &sec, crypto::key_image &image)=0
virtual bool mlsag_prepare(rct::key &a, rct::key &aG)=0
virtual device_type get_type() const =0
virtual bool derivation_to_scalar(const crypto::key_derivation &derivation, const size_t output_index, crypto::ec_scalar &res)=0
virtual bool get_secret_keys(crypto::secret_key &viewkey, crypto::secret_key &spendkey)=0
virtual bool ecdhEncode(rct::ecdhTuple &unmasked, const rct::key &sharedSec, bool short_amount)=0
virtual bool has_ki_cold_sync(void) const
Definition: device.hpp:240
device_mode
Definition: device.hpp:98
@ TRANSACTION_CREATE_FAKE
Definition: device.hpp:101
@ NONE
Definition: device.hpp:99
@ TRANSACTION_CREATE_REAL
Definition: device.hpp:100
@ TRANSACTION_PARSE
Definition: device.hpp:102
virtual crypto::public_key get_subaddress_spend_public_key(const cryptonote::account_keys &keys, const cryptonote::subaddress_index &index)=0
virtual bool set_mode(device_mode mode)
Definition: device.hpp:130
virtual bool encrypt_payment_id(crypto::hash8 &payment_id, const crypto::public_key &public_key, const crypto::secret_key &secret_key)=0
virtual bool generate_output_ephemeral_keys(const size_t tx_version, const cryptonote::account_keys &sender_account_keys, const crypto::public_key &txkey_pub, const crypto::secret_key &tx_key, const cryptonote::tx_destination_entry &dst_entr, const boost::optional< cryptonote::account_public_address > &change_addr, const size_t output_index, const bool &need_additional_txkeys, const std::vector< crypto::secret_key > &additional_tx_keys, std::vector< crypto::public_key > &additional_tx_public_keys, std::vector< rct::key > &amount_keys, crypto::public_key &out_eph_public_key)=0
device_mode mode
Definition: device.hpp:248
virtual bool mlsag_sign(const rct::key &c, const rct::keyV &xx, const rct::keyV &alpha, const size_t rows, const size_t dsRows, rct::keyV &ss)=0
virtual void set_callback(i_device_callback *callback)
Definition: device.hpp:136
virtual bool generate_key_derivation(const crypto::public_key &pub, const crypto::secret_key &sec, crypto::key_derivation &derivation)=0
virtual bool derive_public_key(const crypto::key_derivation &derivation, const std::size_t output_index, const crypto::public_key &pub, crypto::public_key &derived_pub)=0
virtual bool get_transaction_prefix_hash(const cryptonote::transaction_prefix &tx, crypto::hash &tx_prefix_hash)=0
virtual bool set_name(const std::string &name)=0
virtual device_mode get_mode() const
Definition: device.hpp:131
virtual void set_passphrase(const epee::wipeable_string &passphrase)
Definition: device.hpp:140
device_type
Definition: device.hpp:105
@ TREZOR
Definition: device.hpp:108
@ SOFTWARE
Definition: device.hpp:106
@ LEDGER
Definition: device.hpp:107
virtual bool scalarmultBase(rct::key &aG, const rct::key &a)=0
virtual void set_derivation_path(const std::string &derivation_path)
Definition: device.hpp:137
virtual crypto::secret_key get_subaddress_secret_key(const crypto::secret_key &sec, const cryptonote::subaddress_index &index)=0
virtual bool secret_key_to_public_key(const crypto::secret_key &sec, crypto::public_key &pub)=0
virtual bool derive_secret_key(const crypto::key_derivation &derivation, const std::size_t output_index, const crypto::secret_key &sec, crypto::secret_key &derived_sec)=0
virtual bool open_tx(crypto::secret_key &tx_key)=0
virtual crypto::secret_key generate_keys(crypto::public_key &pub, crypto::secret_key &sec, const crypto::secret_key &recovery_key=crypto::secret_key(), bool recover=false)=0
bool decrypt_payment_id(crypto::hash8 &payment_id, const crypto::public_key &public_key, const crypto::secret_key &secret_key)
Definition: device.hpp:208
virtual void unlock(void)=0
device()
Definition: device.hpp:93
virtual std::vector< crypto::public_key > get_subaddress_spend_public_keys(const cryptonote::account_keys &keys, uint32_t account, uint32_t begin, uint32_t end)=0
virtual bool mlsag_hash(const rct::keyV &long_message, rct::key &c)=0
device_protocol_t
Definition: device.hpp:112
@ PROTOCOL_PROXY
Definition: device.hpp:114
@ PROTOCOL_DEFAULT
Definition: device.hpp:113
@ PROTOCOL_COLD
Definition: device.hpp:115
virtual bool generate_chacha_key(const cryptonote::account_keys &keys, crypto::chacha_key &key, uint64_t kdf_rounds)=0
virtual bool generate_ring_signature(const crypto::hash &prefix_hash, const crypto::key_image &image, const std::vector< const crypto::public_key * > &pubs, const crypto::secret_key &sec, std::size_t sec_index, crypto::signature *sig)=0
virtual bool verify_keys(const crypto::secret_key &secret_key, const crypto::public_key &public_key)=0
virtual bool mlsag_prehash(const std::string &blob, size_t inputs_size, size_t outputs_size, const rct::keyV &hashes, const rct::ctkeyV &outPk, rct::key &prehash)=0
virtual void computing_key_images(bool started)
Definition: device.hpp:244
virtual bool compute_key_image(const cryptonote::account_keys &ack, const crypto::public_key &out_key, const crypto::key_derivation &recv_derivation, size_t real_output_index, const cryptonote::subaddress_index &received_index, cryptonote::keypair &in_ephemeral, crypto::key_image &ki)
Definition: device.hpp:243
virtual bool close_tx(void)=0
virtual bool derive_subaddress_public_key(const crypto::public_key &pub, const crypto::key_derivation &derivation, const std::size_t output_index, crypto::public_key &derived_pub)=0
rct::key scalarmultBase(const rct::key &a)
Definition: device.hpp:190
virtual bool hash_to_scalar(boost::shared_ptr< crypto::rs_comm > buf, size_t length, crypto::ec_scalar &res)=0
virtual device_protocol_t device_protocol() const
Definition: device.hpp:135
rct::key scalarmultKey(const rct::key &P, const rct::key &a)
Definition: device.hpp:183
virtual bool mlsag_prepare(const rct::key &H, const rct::key &xx, rct::key &a, rct::key &aG, rct::key &aHP, rct::key &rvII)=0
virtual rct::key genCommitmentMask(const rct::key &amount_key)=0
virtual cryptonote::account_public_address get_subaddress(const cryptonote::account_keys &keys, const cryptonote::subaddress_index &index)=0
virtual bool get_public_address(cryptonote::account_public_address &pubkey)=0
virtual bool has_ki_live_refresh(void) const
Definition: device.hpp:242
virtual bool scalarmultKey(rct::key &aP, const rct::key &P, const rct::key &a)=0
Definition: device.hpp:77
virtual void on_button_request(uint64_t code=0)
Definition: device.hpp:79
virtual void on_button_pressed()
Definition: device.hpp:80
virtual void on_progress(const device_progress &event)
Definition: device.hpp:83
virtual ~i_device_callback()=default
virtual boost::optional< epee::wipeable_string > on_pin_request()
Definition: device.hpp:81
virtual boost::optional< epee::wipeable_string > on_passphrase_request(bool on_device)
Definition: device.hpp:82
string a
Definition: MakeCryptoOps.py:15
list B
Definition: base.py:26
int b
Definition: base.py:1
POD_CLASS signature
Definition: crypto.h:108
epee::mlocked< tools::scrubbed< ec_scalar > > secret_key
Definition: crypto.h:82
POD_CLASS hash8
Definition: hash.h:53
POD_CLASS key_derivation
Definition: crypto.h:98
POD_CLASS public_key
Definition: crypto.h:76
POD_CLASS key_image
Definition: crypto.h:102
POD_CLASS ec_scalar
Definition: crypto.h:74
int rows
Definition: crypto.h:86
POD_CLASS hash
Definition: hash.h:50
Holds cryptonote related classes and helpers.
Definition: db_bdb.cpp:226
network_type
Definition: cryptonote_config.h:243
Definition: device.cpp:38
device & get_device(const std::string &device_descriptor)
Definition: device.cpp:95
bool register_device(const std::string &device_name, device *hw_device)
Definition: device.cpp:100
static const key H
Definition: rctTypes.h:451
std::vector< key > keyV
Definition: rctTypes.h:88
std::vector< ctkey > ctkeyV
Definition: rctTypes.h:100
int bool
Definition: stdbool.h:36
Definition: cryptonote_basic.h:453
Definition: cryptonote_basic.h:480
Definition: subaddress_index.h:39
Definition: cryptonote_tx_utils.h:76
Definition: device.hpp:251
device & hwref
Definition: device.hpp:252
~reset_mode()
Definition: device.hpp:254
reset_mode(hw::device &dev)
Definition: device.hpp:253
Definition: rctTypes.h:124
Definition: rctTypes.h:78