Luke Dashjr
13 years ago
committed by
Wladimir J. van der Laan
12 changed files with 418 additions and 2 deletions
@ -0,0 +1,170 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||||
|
<ui version="4.0"> |
||||||
|
<class>MessagePage</class> |
||||||
|
<widget class="QWidget" name="MessagePage"> |
||||||
|
<property name="geometry"> |
||||||
|
<rect> |
||||||
|
<x>0</x> |
||||||
|
<y>0</y> |
||||||
|
<width>627</width> |
||||||
|
<height>380</height> |
||||||
|
</rect> |
||||||
|
</property> |
||||||
|
<property name="windowTitle"> |
||||||
|
<string>Message</string> |
||||||
|
</property> |
||||||
|
<layout class="QVBoxLayout" name="verticalLayout"> |
||||||
|
<item> |
||||||
|
<widget class="QLabel" name="labelExplanation"> |
||||||
|
<property name="text"> |
||||||
|
<string>You can sign messages with your addresses to prove you own them. Be careful to only sign statement you agree to with full details, as phishing attacks may try to trick you into signing access to them.</string> |
||||||
|
</property> |
||||||
|
<property name="textFormat"> |
||||||
|
<enum>Qt::AutoText</enum> |
||||||
|
</property> |
||||||
|
<property name="wordWrap"> |
||||||
|
<bool>true</bool> |
||||||
|
</property> |
||||||
|
</widget> |
||||||
|
</item> |
||||||
|
<item> |
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_3"> |
||||||
|
<property name="spacing"> |
||||||
|
<number>0</number> |
||||||
|
</property> |
||||||
|
<item> |
||||||
|
<widget class="QValidatedLineEdit" name="signFrom"> |
||||||
|
<property name="toolTip"> |
||||||
|
<string>The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</string> |
||||||
|
</property> |
||||||
|
<property name="maxLength"> |
||||||
|
<number>34</number> |
||||||
|
</property> |
||||||
|
</widget> |
||||||
|
</item> |
||||||
|
<item> |
||||||
|
<widget class="QPushButton" name="addressBookButton"> |
||||||
|
<property name="toolTip"> |
||||||
|
<string>Choose adress from address book</string> |
||||||
|
</property> |
||||||
|
<property name="text"> |
||||||
|
<string/> |
||||||
|
</property> |
||||||
|
<property name="icon"> |
||||||
|
<iconset resource="../bitcoin.qrc"> |
||||||
|
<normaloff>:/icons/address-book</normaloff>:/icons/address-book</iconset> |
||||||
|
</property> |
||||||
|
<property name="shortcut"> |
||||||
|
<string>Alt+A</string> |
||||||
|
</property> |
||||||
|
<property name="autoDefault"> |
||||||
|
<bool>false</bool> |
||||||
|
</property> |
||||||
|
<property name="flat"> |
||||||
|
<bool>false</bool> |
||||||
|
</property> |
||||||
|
</widget> |
||||||
|
</item> |
||||||
|
<item> |
||||||
|
<widget class="QPushButton" name="pasteButton"> |
||||||
|
<property name="toolTip"> |
||||||
|
<string>Paste address from clipboard</string> |
||||||
|
</property> |
||||||
|
<property name="text"> |
||||||
|
<string/> |
||||||
|
</property> |
||||||
|
<property name="icon"> |
||||||
|
<iconset resource="../bitcoin.qrc"> |
||||||
|
<normaloff>:/icons/editpaste</normaloff>:/icons/editpaste</iconset> |
||||||
|
</property> |
||||||
|
<property name="shortcut"> |
||||||
|
<string>Alt+P</string> |
||||||
|
</property> |
||||||
|
<property name="autoDefault"> |
||||||
|
<bool>false</bool> |
||||||
|
</property> |
||||||
|
</widget> |
||||||
|
</item> |
||||||
|
</layout> |
||||||
|
</item> |
||||||
|
<item> |
||||||
|
<widget class="QPlainTextEdit" name="message"> |
||||||
|
<property name="toolTip"> |
||||||
|
<string>Enter the message you want to sign here</string> |
||||||
|
</property> |
||||||
|
</widget> |
||||||
|
</item> |
||||||
|
<item> |
||||||
|
<widget class="QLineEdit" name="signature"> |
||||||
|
<property name="font"> |
||||||
|
<font> |
||||||
|
<italic>true</italic> |
||||||
|
</font> |
||||||
|
</property> |
||||||
|
<property name="text"> |
||||||
|
<string>Click "Sign Message" to get signature</string> |
||||||
|
</property> |
||||||
|
<property name="readOnly"> |
||||||
|
<bool>true</bool> |
||||||
|
</property> |
||||||
|
</widget> |
||||||
|
</item> |
||||||
|
<item> |
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout"> |
||||||
|
<item> |
||||||
|
<widget class="QPushButton" name="signMessage"> |
||||||
|
<property name="toolTip"> |
||||||
|
<string>Sign a message to prove you own this address</string> |
||||||
|
</property> |
||||||
|
<property name="text"> |
||||||
|
<string>&Sign Message</string> |
||||||
|
</property> |
||||||
|
<property name="icon"> |
||||||
|
<iconset resource="../bitcoin.qrc"> |
||||||
|
<normaloff>:/icons/edit</normaloff>:/icons/edit</iconset> |
||||||
|
</property> |
||||||
|
</widget> |
||||||
|
</item> |
||||||
|
<item> |
||||||
|
<widget class="QPushButton" name="copyToClipboard"> |
||||||
|
<property name="toolTip"> |
||||||
|
<string>Copy the currently selected address to the system clipboard</string> |
||||||
|
</property> |
||||||
|
<property name="text"> |
||||||
|
<string>&Copy to Clipboard</string> |
||||||
|
</property> |
||||||
|
<property name="icon"> |
||||||
|
<iconset resource="../bitcoin.qrc"> |
||||||
|
<normaloff>:/icons/editcopy</normaloff>:/icons/editcopy</iconset> |
||||||
|
</property> |
||||||
|
</widget> |
||||||
|
</item> |
||||||
|
<item> |
||||||
|
<spacer name="horizontalSpacer"> |
||||||
|
<property name="orientation"> |
||||||
|
<enum>Qt::Horizontal</enum> |
||||||
|
</property> |
||||||
|
<property name="sizeHint" stdset="0"> |
||||||
|
<size> |
||||||
|
<width>40</width> |
||||||
|
<height>20</height> |
||||||
|
</size> |
||||||
|
</property> |
||||||
|
</spacer> |
||||||
|
</item> |
||||||
|
</layout> |
||||||
|
</item> |
||||||
|
</layout> |
||||||
|
</widget> |
||||||
|
<customwidgets> |
||||||
|
<customwidget> |
||||||
|
<class>QValidatedLineEdit</class> |
||||||
|
<extends>QLineEdit</extends> |
||||||
|
<header>qvalidatedlineedit.h</header> |
||||||
|
</customwidget> |
||||||
|
</customwidgets> |
||||||
|
<resources> |
||||||
|
<include location="../bitcoin.qrc"/> |
||||||
|
</resources> |
||||||
|
<connections/> |
||||||
|
</ui> |
@ -0,0 +1,107 @@ |
|||||||
|
#include <string> |
||||||
|
#include <vector> |
||||||
|
|
||||||
|
#include "main.h" |
||||||
|
#include "wallet.h" |
||||||
|
#include "init.h" |
||||||
|
#include "util.h" |
||||||
|
|
||||||
|
#include "messagepage.h" |
||||||
|
#include "ui_messagepage.h" |
||||||
|
|
||||||
|
#include "addressbookpage.h" |
||||||
|
#include "guiutil.h" |
||||||
|
#include "walletmodel.h" |
||||||
|
|
||||||
|
#include <QClipboard> |
||||||
|
#include <QInputDialog> |
||||||
|
#include <QList> |
||||||
|
#include <QListWidgetItem> |
||||||
|
#include <QMessageBox> |
||||||
|
|
||||||
|
MessagePage::MessagePage(QWidget *parent) : |
||||||
|
QDialog(parent), |
||||||
|
ui(new Ui::MessagePage) |
||||||
|
{ |
||||||
|
ui->setupUi(this); |
||||||
|
|
||||||
|
GUIUtil::setupAddressWidget(ui->signFrom, this); |
||||||
|
} |
||||||
|
|
||||||
|
MessagePage::~MessagePage() |
||||||
|
{ |
||||||
|
delete ui; |
||||||
|
} |
||||||
|
|
||||||
|
void MessagePage::setModel(WalletModel *model) |
||||||
|
{ |
||||||
|
this->model = model; |
||||||
|
} |
||||||
|
|
||||||
|
void MessagePage::setAddress(QString addr) |
||||||
|
{ |
||||||
|
ui->signFrom->setText(addr); |
||||||
|
ui->message->setFocus(); |
||||||
|
} |
||||||
|
|
||||||
|
void MessagePage::on_pasteButton_clicked() |
||||||
|
{ |
||||||
|
setAddress(QApplication::clipboard()->text()); |
||||||
|
} |
||||||
|
|
||||||
|
void MessagePage::on_addressBookButton_clicked() |
||||||
|
{ |
||||||
|
AddressBookPage dlg(AddressBookPage::ForSending, AddressBookPage::ReceivingTab, this); |
||||||
|
dlg.setModel(model->getAddressTableModel()); |
||||||
|
if(dlg.exec()) |
||||||
|
{ |
||||||
|
setAddress(dlg.getReturnValue()); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
void MessagePage::on_copyToClipboard_clicked() |
||||||
|
{ |
||||||
|
QApplication::clipboard()->setText(ui->signature->text()); |
||||||
|
} |
||||||
|
|
||||||
|
void MessagePage::on_signMessage_clicked() |
||||||
|
{ |
||||||
|
QString address = ui->signFrom->text(); |
||||||
|
|
||||||
|
CBitcoinAddress addr(address.toStdString()); |
||||||
|
if (!addr.IsValid()) |
||||||
|
{ |
||||||
|
QMessageBox::critical(this, tr("Error signing"), tr("%1 is not a valid address.").arg(address), |
||||||
|
QMessageBox::Abort, QMessageBox::Abort); |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
WalletModel::UnlockContext ctx(model->requestUnlock()); |
||||||
|
if(!ctx.isValid()) |
||||||
|
{ |
||||||
|
// Unlock wallet was cancelled
|
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
CKey key; |
||||||
|
if (!pwalletMain->GetKey(addr, key)) |
||||||
|
{ |
||||||
|
QMessageBox::critical(this, tr("Error signing"), tr("Private key for %1 is not available.").arg(address), |
||||||
|
QMessageBox::Abort, QMessageBox::Abort); |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
CDataStream ss(SER_GETHASH); |
||||||
|
ss << strMessageMagic; |
||||||
|
ss << ui->message->document()->toPlainText().toStdString(); |
||||||
|
|
||||||
|
std::vector<unsigned char> vchSig; |
||||||
|
if (!key.SignCompact(Hash(ss.begin(), ss.end()), vchSig)) |
||||||
|
{ |
||||||
|
QMessageBox::critical(this, tr("Error signing"), tr("Sign failed"), |
||||||
|
QMessageBox::Abort, QMessageBox::Abort); |
||||||
|
} |
||||||
|
|
||||||
|
ui->signature->setText(QString::fromStdString(EncodeBase64(&vchSig[0], vchSig.size()))); |
||||||
|
ui->signature->setFont(GUIUtil::bitcoinAddressFont()); |
||||||
|
} |
@ -0,0 +1,38 @@ |
|||||||
|
#ifndef MESSAGEPAGE_H |
||||||
|
#define MESSAGEPAGE_H |
||||||
|
|
||||||
|
#include <QDialog> |
||||||
|
|
||||||
|
namespace Ui { |
||||||
|
class MessagePage; |
||||||
|
} |
||||||
|
class WalletModel; |
||||||
|
|
||||||
|
QT_BEGIN_NAMESPACE |
||||||
|
QT_END_NAMESPACE |
||||||
|
|
||||||
|
class MessagePage : public QDialog |
||||||
|
{ |
||||||
|
Q_OBJECT |
||||||
|
|
||||||
|
public: |
||||||
|
explicit MessagePage(QWidget *parent = 0); |
||||||
|
~MessagePage(); |
||||||
|
|
||||||
|
void setModel(WalletModel *model); |
||||||
|
|
||||||
|
void setAddress(QString); |
||||||
|
|
||||||
|
private: |
||||||
|
Ui::MessagePage *ui; |
||||||
|
WalletModel *model; |
||||||
|
|
||||||
|
private slots: |
||||||
|
void on_pasteButton_clicked(); |
||||||
|
void on_addressBookButton_clicked(); |
||||||
|
|
||||||
|
void on_signMessage_clicked(); |
||||||
|
void on_copyToClipboard_clicked(); |
||||||
|
}; |
||||||
|
|
||||||
|
#endif // MESSAGEPAGE_H
|
Loading…
Reference in new issue