Skip to content

Commit

Permalink
Merge pull request #4729
Browse files Browse the repository at this point in the history
e86af52 wallet2: rewrite keys file in a safer manner (Nathan Dorfman)
  • Loading branch information
fluffypony committed Nov 6, 2018
2 parents 1667d41 + e86af52 commit b789f7e
Showing 1 changed file with 12 additions and 3 deletions.
15 changes: 12 additions & 3 deletions src/wallet/wallet2.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3151,13 +3151,22 @@ bool wallet2::store_keys(const std::string& keys_file_name, const epee::wipeable
crypto::chacha20(account_data.data(), account_data.size(), key, keys_file_data.iv, &cipher[0]);
keys_file_data.account_data = cipher;

unlock_keys_file();
std::string tmp_file_name = keys_file_name + ".new";
std::string buf;
r = ::serialization::dump_binary(keys_file_data, buf);
r = r && epee::file_io_utils::save_string_to_file(keys_file_name, buf); //and never touch wallet_keys_file again, only read
CHECK_AND_ASSERT_MES(r, false, "failed to generate wallet keys file " << keys_file_name);
r = r && epee::file_io_utils::save_string_to_file(tmp_file_name, buf);
CHECK_AND_ASSERT_MES(r, false, "failed to generate wallet keys file " << tmp_file_name);

unlock_keys_file();
std::error_code e = tools::replace_file(tmp_file_name, keys_file_name);
lock_keys_file();

if (e) {
boost::filesystem::remove(tmp_file_name);
LOG_ERROR("failed to update wallet keys file " << keys_file_name);
return false;
}

return true;
}
//----------------------------------------------------------------------------------------------------
Expand Down

0 comments on commit b789f7e

Please sign in to comment.