Skip to content

Commit

Permalink
Optionally allow AskPassphraseDialog to output the passphrase
Browse files Browse the repository at this point in the history
  • Loading branch information
achow101 committed Sep 6, 2019
1 parent bc6d8a3 commit 60adb21
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 20 deletions.
48 changes: 29 additions & 19 deletions src/qt/askpassphrasedialog.cpp
Expand Up @@ -18,12 +18,13 @@
#include <QMessageBox>
#include <QPushButton>

AskPassphraseDialog::AskPassphraseDialog(Mode _mode, QWidget *parent) :
AskPassphraseDialog::AskPassphraseDialog(Mode _mode, QWidget *parent, SecureString* passphrase_out) :
QDialog(parent),
ui(new Ui::AskPassphraseDialog),
mode(_mode),
model(nullptr),
fCapsLock(false)
fCapsLock(false),
m_passphrase_out(passphrase_out)
{
ui->setupUi(this);

Expand Down Expand Up @@ -90,7 +91,7 @@ void AskPassphraseDialog::setModel(WalletModel *_model)
void AskPassphraseDialog::accept()
{
SecureString oldpass, newpass1, newpass2;
if(!model)
if (!model && mode != Encrypt)
return;
oldpass.reserve(MAX_PASSPHRASE_SIZE);
newpass1.reserve(MAX_PASSPHRASE_SIZE);
Expand Down Expand Up @@ -119,24 +120,33 @@ void AskPassphraseDialog::accept()
{
if(newpass1 == newpass2)
{
if(model->setWalletEncrypted(true, newpass1))
{
QMessageBox::warning(this, tr("Wallet encrypted"),
QString encryption_reminder = tr("Remember that encrypting your wallet cannot fully protect "
"your bitcoins from being stolen by malware infecting your computer.");
if (m_passphrase_out) {
m_passphrase_out->assign(newpass1);
QMessageBox::warning(this, tr("Wallet to be encrypted"),
"<qt>" +
tr("Your wallet is now encrypted. "
"Remember that encrypting your wallet cannot fully protect "
"your bitcoins from being stolen by malware infecting your computer.") +
"<br><br><b>" +
tr("IMPORTANT: Any previous backups you have made of your wallet file "
"should be replaced with the newly generated, encrypted wallet file. "
"For security reasons, previous backups of the unencrypted wallet file "
"will become useless as soon as you start using the new, encrypted wallet.") +
tr("Your wallet is about to be encrypted. ") + encryption_reminder +
"</b></qt>");
}
else
{
QMessageBox::critical(this, tr("Wallet encryption failed"),
tr("Wallet encryption failed due to an internal error. Your wallet was not encrypted."));
} else {
assert(model != nullptr);
if(model->setWalletEncrypted(true, newpass1))
{
QMessageBox::warning(this, tr("Wallet encrypted"),
"<qt>" +
tr("Your wallet is now encrypted. ") + encryption_reminder +
"<br><br><b>" +
tr("IMPORTANT: Any previous backups you have made of your wallet file "
"should be replaced with the newly generated, encrypted wallet file. "
"For security reasons, previous backups of the unencrypted wallet file "
"will become useless as soon as you start using the new, encrypted wallet.") +
"</b></qt>");
}
else
{
QMessageBox::critical(this, tr("Wallet encryption failed"),
tr("Wallet encryption failed due to an internal error. Your wallet was not encrypted."));
}
}
QDialog::accept(); // Success
}
Expand Down
5 changes: 4 additions & 1 deletion src/qt/askpassphrasedialog.h
Expand Up @@ -7,6 +7,8 @@

#include <QDialog>

#include <support/allocators/secure.h>

class WalletModel;

namespace Ui {
Expand All @@ -27,7 +29,7 @@ class AskPassphraseDialog : public QDialog
Decrypt /**< Ask passphrase and decrypt wallet */
};

explicit AskPassphraseDialog(Mode mode, QWidget *parent);
explicit AskPassphraseDialog(Mode mode, QWidget *parent, SecureString* passphrase_out = nullptr);
~AskPassphraseDialog();

void accept();
Expand All @@ -39,6 +41,7 @@ class AskPassphraseDialog : public QDialog
Mode mode;
WalletModel *model;
bool fCapsLock;
SecureString* m_passphrase_out;

private Q_SLOTS:
void textChanged();
Expand Down

0 comments on commit 60adb21

Please sign in to comment.