From c441a61ef6caeedd133b3d4ca979ff0e47e671d0 Mon Sep 17 00:00:00 2001 From: moneromooo-monero Date: Tue, 8 Nov 2016 09:58:46 +0000 Subject: [PATCH] wallet2_api: API to sign and verify a message --- src/wallet/api/wallet.cpp | 17 +++++++++++++++++ src/wallet/api/wallet.h | 3 +++ src/wallet/wallet2_api.h | 15 +++++++++++++++ 3 files changed, 35 insertions(+) diff --git a/src/wallet/api/wallet.cpp b/src/wallet/api/wallet.cpp index 3768a7998..4af7ac6f8 100644 --- a/src/wallet/api/wallet.cpp +++ b/src/wallet/api/wallet.cpp @@ -752,6 +752,23 @@ std::string WalletImpl::getTxKey(const std::string &txid) const } } +std::string WalletImpl::signMessage(const std::string &message) +{ + return m_wallet->sign(message); +} + +bool WalletImpl::verifySignedMessage(const std::string &message, const std::string &address, const std::string &signature) const +{ + cryptonote::account_public_address addr; + bool has_payment_id; + crypto::hash8 payment_id; + + if (!cryptonote::get_account_integrated_address_from_str(addr, has_payment_id, payment_id, m_wallet->testnet(), address)) + return false; + + return m_wallet->verify(message, addr, signature); +} + bool WalletImpl::connectToDaemon() { bool result = m_wallet->check_connection(); diff --git a/src/wallet/api/wallet.h b/src/wallet/api/wallet.h index 3f6d2ac7b..08bd0adbb 100644 --- a/src/wallet/api/wallet.h +++ b/src/wallet/api/wallet.h @@ -101,6 +101,9 @@ public: virtual std::string getUserNote(const std::string &txid) const; virtual std::string getTxKey(const std::string &txid) const; + virtual std::string signMessage(const std::string &message); + virtual bool verifySignedMessage(const std::string &message, const std::string &address, const std::string &signature) const; + private: void clearStatus(); void refreshThreadFunc(); diff --git a/src/wallet/wallet2_api.h b/src/wallet/wallet2_api.h index da1dbd6e1..bb0862387 100644 --- a/src/wallet/wallet2_api.h +++ b/src/wallet/wallet2_api.h @@ -362,6 +362,21 @@ struct Wallet */ virtual std::string getUserNote(const std::string &txid) const = 0; virtual std::string getTxKey(const std::string &txid) const = 0; + + /* + * \brief signMessage - sign a message with the spend private key + * \param message - the message to sign (arbitrary byte data) + * \return the signature + */ + virtual std::string signMessage(const std::string &message) = 0; + /*! + * \brief verifySignedMessage - verify a signature matches a given message + * \param message - the message (arbitrary byte data) + * \param address - the address the signature claims to be made with + * \param signature - the signature + * \return true if the signature verified, false otherwise + */ + virtual bool verifySignedMessage(const std::string &message, const std::string &addres, const std::string &signature) const = 0; }; /**