]> Git Repo - VerusCoin.git/blob - src/qt/verifymessagedialog.cpp
Merge branch 'master' into async-ipv6-rpc
[VerusCoin.git] / src / qt / verifymessagedialog.cpp
1 #include "verifymessagedialog.h"
2 #include "ui_verifymessagedialog.h"
3
4 #include <string>
5 #include <vector>
6
7 #include <QDialog>
8 #include <QLabel>
9 #include <QLineEdit>
10 #include <QPlainTextEdit>
11 #include <QPushButton>
12
13 #include "main.h"
14 #include "wallet.h"
15 #include "walletmodel.h"
16 #include "guiutil.h"
17 #include "base58.h"
18
19 VerifyMessageDialog::VerifyMessageDialog(QWidget *parent) :
20     QDialog(parent),
21     ui(new Ui::VerifyMessageDialog)
22 {
23     ui->setupUi(this);
24
25 #if (QT_VERSION >= 0x040700)
26     /* Do not move this to the XML file, Qt before 4.7 will choke on it */
27     ui->lnAddress->setPlaceholderText(tr("Enter a Bitcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)"));
28     ui->lnSig->setPlaceholderText(tr("Enter Bitcoin signature"));
29 #endif
30
31     GUIUtil::setupAddressWidget(ui->lnAddress, this);
32     ui->lnAddress->installEventFilter(this);
33
34     ui->lnSig->setFont(GUIUtil::bitcoinAddressFont());
35
36     ui->lnAddress->setFocus();
37 }
38
39 VerifyMessageDialog::~VerifyMessageDialog()
40 {
41     delete ui;
42 }
43
44 void VerifyMessageDialog::on_verifyMessage_clicked()
45 {
46     CBitcoinAddress addr(ui->lnAddress->text().toStdString());
47     if (!addr.IsValid())
48     {
49         ui->lnAddress->setValid(false);
50         ui->lblStatus->setStyleSheet("QLabel { color: red; }");
51         ui->lblStatus->setText(tr("\"%1\" is not a valid address.").arg(ui->lnAddress->text()) + QString(" ") + tr("Please check the address and try again."));
52         return;
53     }
54     CKeyID keyID;
55     if (!addr.GetKeyID(keyID))
56     {
57         ui->lnAddress->setValid(false);
58         ui->lblStatus->setStyleSheet("QLabel { color: red; }");
59         ui->lblStatus->setText(tr("\"%1\" does not refer to a key.").arg(ui->lnAddress->text()) + QString(" ") + tr("Please check the address and try again."));
60         return;
61     }
62
63     bool fInvalid = false;
64     std::vector<unsigned char> vchSig = DecodeBase64(ui->lnSig->text().toStdString().c_str(), &fInvalid);
65
66     if (fInvalid)
67     {
68         ui->lnSig->setValid(false);
69         ui->lblStatus->setStyleSheet("QLabel { color: red; }");
70         ui->lblStatus->setText(tr("The signature could not be decoded.") + QString(" ") + tr("Please check the signature and try again."));
71         return;
72     }
73
74     CDataStream ss(SER_GETHASH, 0);
75     ss << strMessageMagic;
76     ss << ui->edMessage->document()->toPlainText().toStdString();
77
78     CKey key;
79     if (!key.SetCompactSignature(Hash(ss.begin(), ss.end()), vchSig))
80     {
81         ui->lnSig->setValid(false);
82         ui->lblStatus->setStyleSheet("QLabel { color: red; }");
83         ui->lblStatus->setText(tr("The signature did not match the message digest.")+ QString(" ") + tr("Please check the signature and try again."));
84         return;
85     }
86
87     if (!(CBitcoinAddress(key.GetPubKey().GetID()) == addr))
88     {
89         ui->lblStatus->setStyleSheet("QLabel { color: red; }");
90         ui->lblStatus->setText(QString("<nobr>") + tr("Message verification failed.") + QString("</nobr>"));
91         return;
92     }
93
94     ui->lblStatus->setStyleSheet("QLabel { color: green; }");
95     ui->lblStatus->setText(QString("<nobr>") + tr("Message verified.") + QString("</nobr>"));
96 }
97
98 void VerifyMessageDialog::on_clearButton_clicked()
99 {
100     ui->lnAddress->clear();
101     ui->lnSig->clear();
102     ui->edMessage->clear();
103     ui->lblStatus->clear();
104
105     ui->edMessage->setFocus();
106 }
107
108 bool VerifyMessageDialog::eventFilter(QObject *object, QEvent *event)
109 {
110     if (object == ui->lnAddress && (event->type() == QEvent::MouseButtonPress ||
111                                    event->type() == QEvent::FocusIn))
112     {
113         // set lnAddress to valid, as QEvent::FocusIn would not reach QValidatedLineEdit::focusInEvent
114         ui->lnAddress->setValid(true);
115         ui->lnAddress->selectAll();
116         return true;
117     }
118     return QDialog::eventFilter(object, event);
119 }
This page took 0.0306340000000001 seconds and 4 git commands to generate.