diff options
| author | Dylan Noblesmith <[email protected]> | 2011-11-26 06:02:04 +0000 |
|---|---|---|
| committer | Dylan Noblesmith <[email protected]> | 2011-11-26 06:02:04 +0000 |
| commit | 94f778bdebe1438fbe0206621ce44b4e25196e59 (patch) | |
| tree | 5e8add3e2a97bf32f59bc94a7b250dbae728783f /src/qt/askpassphrasedialog.cpp | |
| parent | allow for filtering addresses and labels by searching for the typed string an... (diff) | |
| download | discoin-94f778bdebe1438fbe0206621ce44b4e25196e59.tar.xz discoin-94f778bdebe1438fbe0206621ce44b4e25196e59.zip | |
Implement an mlock()'d string class for storing passphrases
SecureString is identical to std::string except with secure_allocator
substituting for std::allocator. This makes casting between them
impossible, so converting between the two at API boundaries requires
calling ::c_str() for now.
Diffstat (limited to 'src/qt/askpassphrasedialog.cpp')
| -rw-r--r-- | src/qt/askpassphrasedialog.cpp | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/src/qt/askpassphrasedialog.cpp b/src/qt/askpassphrasedialog.cpp index a574ef925..24f622d63 100644 --- a/src/qt/askpassphrasedialog.cpp +++ b/src/qt/askpassphrasedialog.cpp @@ -71,16 +71,17 @@ void AskPassphraseDialog::setModel(WalletModel *model) void AskPassphraseDialog::accept() { - std::string oldpass, newpass1, newpass2; + SecureString oldpass, newpass1, newpass2; if(!model) return; - // TODO: mlock memory / munlock on return so they will not be swapped out, really need "mlockedstring" wrapper class to do this safely oldpass.reserve(MAX_PASSPHRASE_SIZE); newpass1.reserve(MAX_PASSPHRASE_SIZE); newpass2.reserve(MAX_PASSPHRASE_SIZE); - oldpass.assign(ui->passEdit1->text().toStdString()); - newpass1.assign(ui->passEdit2->text().toStdString()); - newpass2.assign(ui->passEdit3->text().toStdString()); + // TODO: get rid of this .c_str() by implementing SecureString::operator=(std::string) + // Alternately, find a way to make this input mlock()'d to begin with. + oldpass.assign(ui->passEdit1->text().toStdString().c_str()); + newpass1.assign(ui->passEdit2->text().toStdString().c_str()); + newpass2.assign(ui->passEdit3->text().toStdString().c_str()); switch(mode) { |