aboutsummaryrefslogtreecommitdiff
path: root/src/qt/verifymessagedialog.cpp
diff options
context:
space:
mode:
authorsje397 <sje397@gmail.com>2012-02-27 22:55:04 +1100
committersje397 <sje397@gmail.com>2012-05-12 00:13:13 +1000
commit0c587936c7f0bbab83c54f877f720dbf3387ef73 (patch)
tree506f436c3e13fefb83197c83e8e0debaa74e6b74 /src/qt/verifymessagedialog.cpp
parent97521b5257046d62fee367ee79ef4b4133db3601 (diff)
Add a menu option to verify a signed message
(Also move 'setAttribute(Qt::WA_DeleteOnClose)' out of QRCodeDialog)
Diffstat (limited to 'src/qt/verifymessagedialog.cpp')
-rw-r--r--src/qt/verifymessagedialog.cpp75
1 files changed, 75 insertions, 0 deletions
diff --git a/src/qt/verifymessagedialog.cpp b/src/qt/verifymessagedialog.cpp
new file mode 100644
index 0000000000..8842908718
--- /dev/null
+++ b/src/qt/verifymessagedialog.cpp
@@ -0,0 +1,75 @@
+#include "verifymessagedialog.h"
+#include "ui_verifymessagedialog.h"
+
+#include <string>
+#include <vector>
+
+#include <QDialogButtonBox>
+#include <QAbstractButton>
+#include <QClipboard>
+#include <QMessageBox>
+
+#include "main.h"
+#include "wallet.h"
+#include "walletmodel.h"
+#include "addresstablemodel.h"
+#include "guiutil.h"
+
+VerifyMessageDialog::VerifyMessageDialog(AddressTableModel *addressModel, QWidget *parent) :
+ QDialog(parent),
+ ui(new Ui::VerifyMessageDialog),
+ model(addressModel)
+{
+ ui->setupUi(this);
+
+ GUIUtil::setupAddressWidget(ui->lnAddress, this);
+}
+
+VerifyMessageDialog::~VerifyMessageDialog()
+{
+ delete ui;
+}
+
+bool VerifyMessageDialog::checkAddress()
+{
+ CDataStream ss(SER_GETHASH, 0);
+ ss << strMessageMagic;
+ ss << ui->edMessage->document()->toPlainText().toStdString();
+ uint256 hash = Hash(ss.begin(), ss.end());
+
+ bool invalid = true;
+ std::vector<unsigned char> vchSig = DecodeBase64(ui->lnSig->text().toStdString().c_str(), &invalid);
+
+ if(invalid)
+ {
+ QMessageBox::warning(this, tr("Invalid Signature"), tr("The signature could not be decoded. Please check the signature and try again."));
+ return false;
+ }
+
+ CKey key;
+ if(!key.SetCompactSignature(hash, vchSig))
+ {
+ QMessageBox::warning(this, tr("Invalid Signature"), tr("The signature did not match the message digest. Please check the signature and try again."));
+ return false;
+ }
+
+ CBitcoinAddress address(key.GetPubKey());
+ QString qStringAddress = QString::fromStdString(address.ToString());
+ ui->lnAddress->setText(qStringAddress);
+ ui->copyToClipboard->setEnabled(true);
+
+ QString label = model->labelForAddress(qStringAddress);
+ ui->lblStatus->setText(label.isEmpty() ? tr("Address not found in address book.") : tr("Address found in address book: %1").arg(label));
+ return true;
+}
+
+void VerifyMessageDialog::on_buttonBox_clicked(QAbstractButton *button)
+{
+ if(ui->buttonBox->buttonRole(button) == QDialogButtonBox::ApplyRole)
+ checkAddress();
+}
+
+void VerifyMessageDialog::on_copyToClipboard_clicked()
+{
+ QApplication::clipboard()->setText(ui->lnAddress->text());
+}