git / moonbite-core / src/util/message.h · raw
// Copyright (c) 2009-2010 Satoshi Nakamoto// Copyright (c) 2009-2020 The Bitcoin Core developers// Distributed under the MIT software license, see the accompanying// file COPYING or http://www.opensource.org/licenses/mit-license.php.#ifndef BITCOIN_UTIL_MESSAGE_H#define BITCOIN_UTIL_MESSAGE_H#include <key.h> // For CKey#include <uint256.h>#include <string>extern const std::string MESSAGE_MAGIC;/** The result of a signed message verification. * Message verification takes as an input: * - address (with whose private key the message is supposed to have been signed) * - signature * - message */enum class MessageVerificationResult { //! The provided address is invalid. ERR_INVALID_ADDRESS, //! The provided address is valid but does not refer to a public key. ERR_ADDRESS_NO_KEY, //! The provided signature couldn't be parsed (maybe invalid base64). ERR_MALFORMED_SIGNATURE, //! A public key could not be recovered from the provided signature and message. ERR_PUBKEY_NOT_RECOVERED, //! The message was not signed with the private key of the provided address. ERR_NOT_SIGNED, //! The message verification was successful. OK};enum class SigningResult { OK, //!< No error PRIVATE_KEY_NOT_AVAILABLE, SIGNING_FAILED,};/** Verify a signed message. * @param[in] address Signer's bitcoin address, it must refer to a public key. * @param[in] signature The signature in base64 format. * @param[in] message The message that was signed. * @return result code */MessageVerificationResult MessageVerify( const std::string& address, const std::string& signature, const std::string& message);/** Sign a message. * @param[in] privkey Private key to sign with. * @param[in] message The message to sign. * @param[out] signature Signature, base64 encoded, only set if true is returned. * @return true if signing was successful. */bool MessageSign( const CKey& privkey, const std::string& message, std::string& signature);/** * Hashes a message for signing and verification in a manner that prevents * inadvertently signing a transaction. */uint256 MessageHash(const std::string& message);std::string SigningResultString(const SigningResult res);#endif // BITCOIN_UTIL_MESSAGE_H