LCOV - code coverage report
Current view: top level - src/wallet/rpc - signmessage.cpp (source / functions) Hit Total Coverage
Test: coverage.lcov Lines: 43 48 89.6 %
Date: 2022-04-21 14:51:19 Functions: 2 2 100.0 %
Legend: Modified by patch:
Lines: hit not hit | Branches: + taken - not taken # not executed

Not modified by patch:
Lines: hit not hit | Branches: + taken - not taken # not executed
Branches: 6 10 60.0 %

           Branch data     Line data    Source code
#       1                 :            : // Copyright (c) 2011-2021 The Bitcoin Core developers
#       2                 :            : // Distributed under the MIT software license, see the accompanying
#       3                 :            : // file COPYING or http://www.opensource.org/licenses/mit-license.php.
#       4                 :            : 
#       5                 :            : #include <key_io.h>
#       6                 :            : #include <rpc/util.h>
#       7                 :            : #include <util/message.h>
#       8                 :            : #include <wallet/rpc/util.h>
#       9                 :            : #include <wallet/wallet.h>
#      10                 :            : 
#      11                 :            : #include <univalue.h>
#      12                 :            : 
#      13                 :            : namespace wallet {
#      14                 :            : RPCHelpMan signmessage()
#      15                 :       1615 : {
#      16                 :       1615 :     return RPCHelpMan{"signmessage",
#      17                 :       1615 :         "\nSign a message with the private key of an address" +
#      18                 :       1615 :           HELP_REQUIRING_PASSPHRASE,
#      19                 :       1615 :         {
#      20                 :       1615 :             {"address", RPCArg::Type::STR, RPCArg::Optional::NO, "The bitcoin address to use for the private key."},
#      21                 :       1615 :             {"message", RPCArg::Type::STR, RPCArg::Optional::NO, "The message to create a signature of."},
#      22                 :       1615 :         },
#      23                 :       1615 :         RPCResult{
#      24                 :       1615 :             RPCResult::Type::STR, "signature", "The signature of the message encoded in base 64"
#      25                 :       1615 :         },
#      26                 :       1615 :         RPCExamples{
#      27                 :       1615 :             "\nUnlock the wallet for 30 seconds\n"
#      28                 :       1615 :             + HelpExampleCli("walletpassphrase", "\"mypassphrase\" 30") +
#      29                 :       1615 :             "\nCreate the signature\n"
#      30                 :       1615 :             + HelpExampleCli("signmessage", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX\" \"my message\"") +
#      31                 :       1615 :             "\nVerify the signature\n"
#      32                 :       1615 :             + HelpExampleCli("verifymessage", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX\" \"signature\" \"my message\"") +
#      33                 :       1615 :             "\nAs a JSON-RPC call\n"
#      34                 :       1615 :             + HelpExampleRpc("signmessage", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX\", \"my message\"")
#      35                 :       1615 :         },
#      36                 :       1615 :         [&](const RPCHelpMan& self, const JSONRPCRequest& request) -> UniValue
#      37                 :       1615 :         {
#      38                 :         26 :             const std::shared_ptr<const CWallet> pwallet = GetWalletForJSONRPCRequest(request);
#      39         [ -  + ]:         26 :             if (!pwallet) return NullUniValue;
#      40                 :            : 
#      41                 :         26 :             LOCK(pwallet->cs_wallet);
#      42                 :            : 
#      43                 :         26 :             EnsureWalletIsUnlocked(*pwallet);
#      44                 :            : 
#      45                 :         26 :             std::string strAddress = request.params[0].get_str();
#      46                 :         26 :             std::string strMessage = request.params[1].get_str();
#      47                 :            : 
#      48                 :         26 :             CTxDestination dest = DecodeDestination(strAddress);
#      49         [ +  + ]:         26 :             if (!IsValidDestination(dest)) {
#      50                 :          1 :                 throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid address");
#      51                 :          1 :             }
#      52                 :            : 
#      53                 :         25 :             const PKHash* pkhash = std::get_if<PKHash>(&dest);
#      54         [ -  + ]:         25 :             if (!pkhash) {
#      55                 :          0 :                 throw JSONRPCError(RPC_TYPE_ERROR, "Address does not refer to key");
#      56                 :          0 :             }
#      57                 :            : 
#      58                 :         25 :             std::string signature;
#      59                 :         25 :             SigningResult err = pwallet->SignMessage(strMessage, *pkhash, signature);
#      60         [ -  + ]:         25 :             if (err == SigningResult::SIGNING_FAILED) {
#      61                 :          0 :                 throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, SigningResultString(err));
#      62         [ -  + ]:         25 :             } else if (err != SigningResult::OK) {
#      63                 :          0 :                 throw JSONRPCError(RPC_WALLET_ERROR, SigningResultString(err));
#      64                 :          0 :             }
#      65                 :            : 
#      66                 :         25 :             return signature;
#      67                 :         25 :         },
#      68                 :       1615 :     };
#      69                 :       1615 : }
#      70                 :            : } // namespace wallet

Generated by: LCOV version 0-eol-96201-ge66f56f4af6a