mirror of
https://github.com/dashpay/dash.git
synced 2024-12-27 04:52:59 +01:00
Move verifymessage
from rpcwallet to rpcmisc
Enables it in --disable-wallet compiles.
This commit is contained in:
parent
723a03d2de
commit
c3a7f516e7
@ -272,4 +272,55 @@ Value createmultisig(const Array& params, bool fHelp)
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Value verifymessage(const Array& params, bool fHelp)
|
||||||
|
{
|
||||||
|
if (fHelp || params.size() != 3)
|
||||||
|
throw runtime_error(
|
||||||
|
"verifymessage \"bitcoinaddress\" \"signature\" \"message\"\n"
|
||||||
|
"\nVerify a signed message\n"
|
||||||
|
"\nArguments:\n"
|
||||||
|
"1. \"bitcoinaddress\" (string, required) The bitcoin address to use for the signature.\n"
|
||||||
|
"2. \"signature\" (string, required) The signature provided by the signer in base 64 encoding (see signmessage).\n"
|
||||||
|
"3. \"message\" (string, required) The message that was signed.\n"
|
||||||
|
"\nResult:\n"
|
||||||
|
"true|false (boolean) If the signature is verified or not.\n"
|
||||||
|
"\nExamples:\n"
|
||||||
|
"\nUnlock the wallet for 30 seconds\n"
|
||||||
|
+ HelpExampleCli("walletpassphrase", "\"mypassphrase\" 30") +
|
||||||
|
"\nCreate the signature\n"
|
||||||
|
+ HelpExampleCli("signmessage", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\" \"my message\"") +
|
||||||
|
"\nVerify the signature\n"
|
||||||
|
+ HelpExampleCli("verifymessage", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\" \"signature\" \"my message\"") +
|
||||||
|
"\nAs json rpc\n"
|
||||||
|
+ HelpExampleRpc("verifymessage", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\", \"signature\", \"my message\"")
|
||||||
|
);
|
||||||
|
|
||||||
|
string strAddress = params[0].get_str();
|
||||||
|
string strSign = params[1].get_str();
|
||||||
|
string strMessage = params[2].get_str();
|
||||||
|
|
||||||
|
CBitcoinAddress addr(strAddress);
|
||||||
|
if (!addr.IsValid())
|
||||||
|
throw JSONRPCError(RPC_TYPE_ERROR, "Invalid address");
|
||||||
|
|
||||||
|
CKeyID keyID;
|
||||||
|
if (!addr.GetKeyID(keyID))
|
||||||
|
throw JSONRPCError(RPC_TYPE_ERROR, "Address does not refer to key");
|
||||||
|
|
||||||
|
bool fInvalid = false;
|
||||||
|
vector<unsigned char> vchSig = DecodeBase64(strSign.c_str(), &fInvalid);
|
||||||
|
|
||||||
|
if (fInvalid)
|
||||||
|
throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Malformed base64 encoding");
|
||||||
|
|
||||||
|
CHashWriter ss(SER_GETHASH, 0);
|
||||||
|
ss << strMessageMagic;
|
||||||
|
ss << strMessage;
|
||||||
|
|
||||||
|
CPubKey pubkey;
|
||||||
|
if (!pubkey.RecoverCompact(ss.GetHash(), vchSig))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return (pubkey.GetID() == keyID);
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -254,6 +254,7 @@ static const CRPCCommand vRPCCommands[] =
|
|||||||
{ "submitblock", &submitblock, false, false, false },
|
{ "submitblock", &submitblock, false, false, false },
|
||||||
{ "validateaddress", &validateaddress, true, false, false },
|
{ "validateaddress", &validateaddress, true, false, false },
|
||||||
{ "createmultisig", &createmultisig, true, true , false },
|
{ "createmultisig", &createmultisig, true, true , false },
|
||||||
|
{ "verifymessage", &verifymessage, false, false, false },
|
||||||
|
|
||||||
#ifdef ENABLE_WALLET
|
#ifdef ENABLE_WALLET
|
||||||
/* Wallet */
|
/* Wallet */
|
||||||
@ -283,7 +284,6 @@ static const CRPCCommand vRPCCommands[] =
|
|||||||
{ "listtransactions", &listtransactions, false, false, true },
|
{ "listtransactions", &listtransactions, false, false, true },
|
||||||
{ "listaddressgroupings", &listaddressgroupings, false, false, true },
|
{ "listaddressgroupings", &listaddressgroupings, false, false, true },
|
||||||
{ "signmessage", &signmessage, false, false, true },
|
{ "signmessage", &signmessage, false, false, true },
|
||||||
{ "verifymessage", &verifymessage, false, false, false },
|
|
||||||
{ "listaccounts", &listaccounts, false, false, true },
|
{ "listaccounts", &listaccounts, false, false, true },
|
||||||
{ "listsinceblock", &listsinceblock, false, false, true },
|
{ "listsinceblock", &listsinceblock, false, false, true },
|
||||||
{ "dumpprivkey", &dumpprivkey, true, false, true },
|
{ "dumpprivkey", &dumpprivkey, true, false, true },
|
||||||
|
@ -441,59 +441,6 @@ Value signmessage(const Array& params, bool fHelp)
|
|||||||
return EncodeBase64(&vchSig[0], vchSig.size());
|
return EncodeBase64(&vchSig[0], vchSig.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
Value verifymessage(const Array& params, bool fHelp)
|
|
||||||
{
|
|
||||||
if (fHelp || params.size() != 3)
|
|
||||||
throw runtime_error(
|
|
||||||
"verifymessage \"bitcoinaddress\" \"signature\" \"message\"\n"
|
|
||||||
"\nVerify a signed message\n"
|
|
||||||
"\nArguments:\n"
|
|
||||||
"1. \"bitcoinaddress\" (string, required) The bitcoin address to use for the signature.\n"
|
|
||||||
"2. \"signature\" (string, required) The signature provided by the signer in base 64 encoding (see signmessage).\n"
|
|
||||||
"3. \"message\" (string, required) The message that was signed.\n"
|
|
||||||
"\nResult:\n"
|
|
||||||
"true|false (boolean) If the signature is verified or not.\n"
|
|
||||||
"\nExamples:\n"
|
|
||||||
"\nUnlock the wallet for 30 seconds\n"
|
|
||||||
+ HelpExampleCli("walletpassphrase", "\"mypassphrase\" 30") +
|
|
||||||
"\nCreate the signature\n"
|
|
||||||
+ HelpExampleCli("signmessage", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\" \"my message\"") +
|
|
||||||
"\nVerify the signature\n"
|
|
||||||
+ HelpExampleCli("verifymessage", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\" \"signature\" \"my message\"") +
|
|
||||||
"\nAs json rpc\n"
|
|
||||||
+ HelpExampleRpc("verifymessage", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\", \"signature\", \"my message\"")
|
|
||||||
);
|
|
||||||
|
|
||||||
string strAddress = params[0].get_str();
|
|
||||||
string strSign = params[1].get_str();
|
|
||||||
string strMessage = params[2].get_str();
|
|
||||||
|
|
||||||
CBitcoinAddress addr(strAddress);
|
|
||||||
if (!addr.IsValid())
|
|
||||||
throw JSONRPCError(RPC_TYPE_ERROR, "Invalid address");
|
|
||||||
|
|
||||||
CKeyID keyID;
|
|
||||||
if (!addr.GetKeyID(keyID))
|
|
||||||
throw JSONRPCError(RPC_TYPE_ERROR, "Address does not refer to key");
|
|
||||||
|
|
||||||
bool fInvalid = false;
|
|
||||||
vector<unsigned char> vchSig = DecodeBase64(strSign.c_str(), &fInvalid);
|
|
||||||
|
|
||||||
if (fInvalid)
|
|
||||||
throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Malformed base64 encoding");
|
|
||||||
|
|
||||||
CHashWriter ss(SER_GETHASH, 0);
|
|
||||||
ss << strMessageMagic;
|
|
||||||
ss << strMessage;
|
|
||||||
|
|
||||||
CPubKey pubkey;
|
|
||||||
if (!pubkey.RecoverCompact(ss.GetHash(), vchSig))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
return (pubkey.GetID() == keyID);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Value getreceivedbyaddress(const Array& params, bool fHelp)
|
Value getreceivedbyaddress(const Array& params, bool fHelp)
|
||||||
{
|
{
|
||||||
if (fHelp || params.size() < 1 || params.size() > 2)
|
if (fHelp || params.size() < 1 || params.size() > 2)
|
||||||
|
Loading…
Reference in New Issue
Block a user