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;
124 virtual bool init(
void) = 0;
127 virtual bool connect(
void) = 0;
145 virtual void lock(
void) = 0;
146 virtual void unlock(
void) = 0;
223 const bool &need_additional_txkeys,
const std::vector<crypto::secret_key> &additional_tx_keys,
224 std::vector<crypto::public_key> &additional_tx_public_keys,
225 std::vector<rct::key> &amount_keys,
238 const std::vector<const crypto::public_key *> &pubs,
262 std::map<std::string, std::unique_ptr<device>> registry;
virtual bool has_ki_cold_sync(void) const
virtual device_type get_type() const =0
virtual bool encrypt_payment_id(crypto::hash8 &payment_id, const crypto::public_key &public_key, const crypto::secret_key &secret_key)=0
virtual bool secret_key_to_public_key(const crypto::secret_key &sec, crypto::public_key &pub)=0
virtual device_protocol_t device_protocol() const
virtual bool scalarmultKey(rct::key &aP, const rct::key &P, const rct::key &a)=0
std::vector< std::string > keypair
virtual bool verify_keys(const crypto::secret_key &secret_key, const crypto::public_key &public_key)=0
virtual bool generate_chacha_key(const cryptonote::account_keys &keys, crypto::chacha_key &key, uint64_t kdf_rounds)=0
virtual bool sc_secret_add(crypto::secret_key &r, const crypto::secret_key &a, const crypto::secret_key &b)=0
virtual bool generate_input_signature(const crypto::hash &prefix_hash, const uint32_t input_index, const crypto::secret_key sec_view, const crypto::secret_key sec_spend, crypto::signature &signature)=0
virtual rct::key genCommitmentMask(const rct::key &amount_key)=0
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 bool indeterminate() const
virtual void on_progress(const device_progress &event)
virtual bool ecdhEncode(rct::ecdhTuple &unmasked, const rct::key &sharedSec, bool short_amount)=0
virtual bool set_mode(device_mode mode)
epee::mlocked< tools::scrubbed< ec_scalar > > secret_key
bool register_device(const std::string &device_name, device *hw_device)
virtual void lock(void)=0
virtual device_mode get_mode() const
bool register_device(const std::string &device_name, device *hw_device)
device & get_device(const std::string &device_descriptor)
virtual void unlock(void)=0
struct hash_func hashes[]
virtual bool set_name(const std::string &name)=0
virtual bool has_ki_live_refresh(void) const
virtual bool disconnect(void)=0
virtual void on_button_pressed()
virtual bool generate_key_derivation(const crypto::public_key &pub, const crypto::secret_key &sec, crypto::key_derivation &derivation)=0
Holds cryptonote related classes and helpers.
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 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
virtual crypto::secret_key get_subaddress_private_spendkey(const cryptonote::account_keys &keys, const cryptonote::subaddress_index &subaddr_index)=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_public_address(cryptonote::account_public_address &pubkey)=0
virtual void set_callback(i_device_callback *callback)
device & get_device(const std::string &device_descriptor)
std::vector< ctkey > ctkeyV
rct::key scalarmultKey(const rct::key &P, const rct::key &a)
unsigned __int64 uint64_t
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
virtual void set_pin(const epee::wipeable_string &pin)
bool decrypt_payment_id(crypto::hash8 &payment_id, const crypto::public_key &public_key, const crypto::secret_key &secret_key)
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
virtual bool generate_key_image(const crypto::public_key &pub, const crypto::secret_key &sec, crypto::key_image &image)=0
virtual bool open_tx(crypto::secret_key &tx_key)=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 cryptonote::account_public_address get_subaddress(const cryptonote::account_keys &keys, const cryptonote::subaddress_index &index)=0
virtual bool close_tx(void)=0
rct::key scalarmultBase(const rct::key &a)
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 mlsag_hash(const rct::keyV &long_message, rct::key &c)=0
const GenericPointer< typename T::ValueType > T2 T::AllocatorType & a
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 double progress() const
virtual void set_passphrase(const epee::wipeable_string &passphrase)
virtual bool get_secret_keys(crypto::secret_key &viewkey, crypto::secret_key &spendkey)=0
virtual bool scalarmultBase(rct::key &aG, const rct::key &a)=0
virtual bool derivation_to_scalar(const crypto::key_derivation &derivation, const size_t output_index, crypto::ec_scalar &res)=0
reset_mode(hw::device &dev)
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)
virtual boost::optional< epee::wipeable_string > on_pin_request()
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 get_transaction_prefix_hash(const cryptonote::transaction_prefix &tx, crypto::hash &tx_prefix_hash)=0
virtual crypto::secret_key get_subaddress_secret_key(const crypto::secret_key &sec, const cryptonote::subaddress_index &index)=0
virtual crypto::public_key get_subaddress_spend_public_key(const cryptonote::account_keys &keys, const cryptonote::subaddress_index &index)=0
virtual bool hash_to_scalar(boost::shared_ptr< crypto::rs_comm > buf, size_t length, crypto::ec_scalar &res)=0
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 bool connect(void)=0
virtual void set_derivation_path(const std::string &derivation_path)
virtual bool has_tx_cold_sign(void) const
device(const device &hwdev)
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 const std::string get_name() const =0
virtual ~i_device_callback()=default
virtual boost::optional< epee::wipeable_string > on_passphrase_request(bool on_device)
virtual void on_button_request(uint64_t code=0)
virtual crypto::secret_key get_subaddress_private_viewkey(const crypto::secret_key &main_wallet_sec_view, crypto::secret_key &subaddress_sec_spend)=0
virtual bool try_lock(void)=0
virtual bool init(void)=0
virtual void computing_key_images(bool started)
virtual void set_network_type(cryptonote::network_type network_type)
virtual bool ecdhDecode(rct::ecdhTuple &masked, const rct::key &sharedSec, bool short_amount)=0