diff options
author | Riccardo Spagni <ric@spagni.net> | 2018-02-16 14:23:08 +0100 |
---|---|---|
committer | Riccardo Spagni <ric@spagni.net> | 2018-02-16 14:23:08 +0100 |
commit | 0c711978922ed346f435ddd41147c962acae6ccd (patch) | |
tree | 0505231e018b5fe20d27e6ea708e815c58c37881 /contrib | |
parent | Merge pull request #3216 (diff) | |
parent | wipeable_string: call memwipe directly (diff) | |
download | monero-0c711978922ed346f435ddd41147c962acae6ccd.tar.xz |
Merge pull request #3217
fde4489e wipeable_string: call memwipe directly (moneromooo-monero)
Diffstat (limited to 'contrib')
-rw-r--r-- | contrib/epee/include/wipeable_string.h | 3 | ||||
-rw-r--r-- | contrib/epee/src/wipeable_string.cpp | 16 |
2 files changed, 6 insertions, 13 deletions
diff --git a/contrib/epee/include/wipeable_string.h b/contrib/epee/include/wipeable_string.h index d120112a6..70d1a9586 100644 --- a/contrib/epee/include/wipeable_string.h +++ b/contrib/epee/include/wipeable_string.h @@ -58,13 +58,10 @@ namespace epee wipeable_string &operator=(wipeable_string &&other); wipeable_string &operator=(const wipeable_string &other); - static void set_wipe(void *(*f)(void*, size_t)) { wipefunc = f; } - private: void grow(size_t sz, size_t reserved = 0); private: std::vector<char> buffer; - static void *(*wipefunc)(void*, size_t); }; } diff --git a/contrib/epee/src/wipeable_string.cpp b/contrib/epee/src/wipeable_string.cpp index 5671ed9d9..cc43b8988 100644 --- a/contrib/epee/src/wipeable_string.cpp +++ b/contrib/epee/src/wipeable_string.cpp @@ -27,14 +27,13 @@ // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include <string.h> +#include "memwipe.h" #include "misc_log_ex.h" #include "wipeable_string.h" namespace epee { -void *(*wipeable_string::wipefunc)(void*, size_t) = NULL; - wipeable_string::wipeable_string(const wipeable_string &other): buffer(other.buffer) { @@ -55,12 +54,11 @@ wipeable_string::wipeable_string(const std::string &other) wipeable_string::wipeable_string(std::string &&other) { - CHECK_AND_ASSERT_THROW_MES(wipefunc, "wipefunc is not set"); grow(other.size()); memcpy(buffer.data(), other.c_str(), size()); if (!other.empty()) { - wipefunc(&other[0], other.size()); // we're kinda left with this again aren't we + memwipe(&other[0], other.size()); // we're kinda left with this again aren't we other = std::string(); } } @@ -78,30 +76,28 @@ wipeable_string::~wipeable_string() void wipeable_string::wipe() { - CHECK_AND_ASSERT_THROW_MES(wipefunc, "wipefunc is not set"); - wipefunc(buffer.data(), buffer.size() * sizeof(char)); + memwipe(buffer.data(), buffer.size() * sizeof(char)); } void wipeable_string::grow(size_t sz, size_t reserved) { - CHECK_AND_ASSERT_THROW_MES(wipefunc, "wipefunc is not set"); if (reserved < sz) reserved = sz; if (reserved <= buffer.capacity()) { if (sz < buffer.size()) - wipefunc(buffer.data() + sz, buffer.size() - sz); + memwipe(buffer.data() + sz, buffer.size() - sz); buffer.resize(sz); return; } size_t old_sz = buffer.size(); std::unique_ptr<char[]> tmp{new char[old_sz]}; memcpy(tmp.get(), buffer.data(), old_sz * sizeof(char)); - wipefunc(buffer.data(), old_sz * sizeof(char)); + memwipe(buffer.data(), old_sz * sizeof(char)); buffer.reserve(reserved); buffer.resize(sz); memcpy(buffer.data(), tmp.get(), old_sz * sizeof(char)); - wipefunc(tmp.get(), old_sz * sizeof(char)); + memwipe(tmp.get(), old_sz * sizeof(char)); } void wipeable_string::push_back(char c) |