6#include <qt/forms/ui_signverifymessagedialog.h>
14#include <bitcoin-build-config.h>
27 platformStyle(_platformStyle)
43 ui->addressIn_SM->installEventFilter(
this);
44 ui->messageIn_SM->installEventFilter(
this);
45 ui->signatureOut_SM->installEventFilter(
this);
46 ui->addressIn_VM->installEventFilter(
this);
47 ui->messageIn_VM->installEventFilter(
this);
48 ui->signatureIn_VM->installEventFilter(
this);
68 ui->addressIn_SM->setText(address);
69 ui->messageIn_SM->setFocus();
74 ui->addressIn_VM->setText(address);
75 ui->messageIn_VM->setFocus();
80 ui->tabWidget->setCurrentIndex(0);
87 ui->tabWidget->setCurrentIndex(1);
117 ui->signatureOut_SM->clear();
121 ui->statusLabel_SM->setStyleSheet(
"QLabel { color: red; }");
122 ui->statusLabel_SM->setText(tr(
"The entered address is invalid.") + QString(
" ") + tr(
"Please check the address and try again."));
125 const PKHash* pkhash = std::get_if<PKHash>(&destination);
127 ui->addressIn_SM->setValid(
false);
128 ui->statusLabel_SM->setStyleSheet(
"QLabel { color: red; }");
129 ui->statusLabel_SM->setText(tr(
"The entered address does not refer to a legacy (P2PKH) key. Message signing for SegWit and other non-P2PKH address types is not supported in this version of %1. Please check the address and try again.").arg(CLIENT_NAME));
136 ui->statusLabel_SM->setStyleSheet(
"QLabel { color: red; }");
137 ui->statusLabel_SM->setText(tr(
"Wallet unlock was cancelled."));
141 const std::string& message =
ui->messageIn_SM->document()->toPlainText().toStdString();
142 std::string signature;
148 error = tr(
"No error");
151 error = tr(
"Private key for the entered address is not available.");
154 error = tr(
"Message signing failed.");
160 ui->statusLabel_SM->setStyleSheet(
"QLabel { color: red; }");
161 ui->statusLabel_SM->setText(QString(
"<nobr>") + error + QString(
"</nobr>"));
165 ui->statusLabel_SM->setStyleSheet(
"QLabel { color: green; }");
166 ui->statusLabel_SM->setText(QString(
"<nobr>") + tr(
"Message signed.") + QString(
"</nobr>"));
168 ui->signatureOut_SM->setText(QString::fromStdString(signature));
178 ui->addressIn_SM->clear();
179 ui->messageIn_SM->clear();
180 ui->signatureOut_SM->clear();
181 ui->statusLabel_SM->clear();
183 ui->addressIn_SM->setFocus();
201 const std::string& address =
ui->addressIn_VM->text().toStdString();
202 const std::string& signature =
ui->signatureIn_VM->text().toStdString();
203 const std::string& message =
ui->messageIn_VM->document()->toPlainText().toStdString();
205 const auto result =
MessageVerify(address, signature, message);
208 ui->statusLabel_VM->setStyleSheet(
"QLabel { color: green; }");
210 ui->statusLabel_VM->setStyleSheet(
"QLabel { color: red; }");
215 ui->statusLabel_VM->setText(
216 QString(
"<nobr>") + tr(
"Message verified.") + QString(
"</nobr>")
220 ui->statusLabel_VM->setText(
221 tr(
"The entered address is invalid.") + QString(
" ") +
222 tr(
"Please check the address and try again.")
226 ui->addressIn_VM->setValid(
false);
227 ui->statusLabel_VM->setText(tr(
"The entered address does not refer to a legacy (P2PKH) key. Message signing for SegWit and other non-P2PKH address types is not supported in this version of %1. Please check the address and try again.").arg(CLIENT_NAME));
230 ui->signatureIn_VM->setValid(
false);
231 ui->statusLabel_VM->setText(
232 tr(
"The signature could not be decoded.") + QString(
" ") +
233 tr(
"Please check the signature and try again.")
237 ui->signatureIn_VM->setValid(
false);
238 ui->statusLabel_VM->setText(
239 tr(
"The signature did not match the message digest.") + QString(
" ") +
240 tr(
"Please check the signature and try again.")
244 ui->statusLabel_VM->setText(
245 QString(
"<nobr>") + tr(
"Message verification failed.") + QString(
"</nobr>")
253 ui->addressIn_VM->clear();
254 ui->signatureIn_VM->clear();
255 ui->messageIn_VM->clear();
256 ui->statusLabel_VM->clear();
258 ui->addressIn_VM->setFocus();
263 if (event->type() == QEvent::MouseButtonPress || event->type() == QEvent::FocusIn)
265 if (
ui->tabWidget->currentIndex() == 0)
268 ui->statusLabel_SM->clear();
271 if (
object ==
ui->signatureOut_SM)
273 ui->signatureOut_SM->selectAll();
277 else if (
ui->tabWidget->currentIndex() == 1)
280 ui->statusLabel_VM->clear();
283 return QDialog::eventFilter(
object, event);
288 if (e->type() == QEvent::PaletteChange) {
299 QDialog::changeEvent(e);
bool IsValidDestination(const CTxDestination &dest)
Check whether a CTxDestination corresponds to one with an address.
std::variant< CNoDestination, PubKeyDestination, PKHash, ScriptHash, WitnessV0ScriptHash, WitnessV0KeyHash, WitnessV1Taproot, PayToAnchor, WitnessUnknown > CTxDestination
A txout script categorized into standard templates.
Widget that shows a list of sending or receiving addresses.
@ ForSelection
Open address book to pick address.
void setModel(AddressTableModel *model)
const QString & getReturnValue() const
void on_clearButton_VM_clicked()
void on_signMessageButton_SM_clicked()
void showTab_SM(bool fShow)
~SignVerifyMessageDialog()
bool eventFilter(QObject *object, QEvent *event) override
void on_pasteButton_SM_clicked()
void on_copySignatureButton_SM_clicked()
void setAddress_SM(const QString &address)
void showTab_VM(bool fShow)
void on_addressBookButton_SM_clicked()
void changeEvent(QEvent *e) override
SignVerifyMessageDialog(const PlatformStyle *platformStyle, QWidget *parent)
void on_addressBookButton_VM_clicked()
const PlatformStyle * platformStyle
void setModel(WalletModel *model)
Ui::SignVerifyMessageDialog * ui
void on_clearButton_SM_clicked()
void on_verifyMessageButton_VM_clicked()
void setAddress_VM(const QString &address)
Interface to Bitcoin wallet from Qt view code.
void refresh(bool pk_hash_only=false)
AddressTableModel * getAddressTableModel() const
interfaces::Wallet & wallet() const
UnlockContext requestUnlock()
virtual SigningResult signMessage(const std::string &message, const PKHash &pkhash, std::string &str_sig)=0
Sign message.
MessageVerificationResult MessageVerify(const std::string &address, const std::string &signature, const std::string &message)
Verify a signed message.
CTxDestination DecodeDestination(const std::string &str, std::string &error_msg, std::vector< int > *error_locations)
Utility functions used by the Bitcoin Qt UI.
QFont fixedPitchFont(bool use_embedded_font)
void handleCloseWindowShortcut(QWidget *w)
constexpr auto dialog_flags
void setupAddressWidget(QValidatedLineEdit *widget, QWidget *parent)
void setClipboard(const QString &str)
@ PRIVATE_KEY_NOT_AVAILABLE
@ ERR_MALFORMED_SIGNATURE
The provided signature couldn't be parsed (maybe invalid base64).
@ ERR_INVALID_ADDRESS
The provided address is invalid.
@ ERR_ADDRESS_NO_KEY
The provided address is valid but does not refer to a public key.
@ ERR_NOT_SIGNED
The message was not signed with the private key of the provided address.
@ OK
The message verification was successful.
@ ERR_PUBKEY_NOT_RECOVERED
A public key could not be recovered from the provided signature and message.