aboutsummaryrefslogtreecommitdiff
path: root/contrib
diff options
context:
space:
mode:
authorRiccardo Spagni <ric@spagni.net>2018-02-16 14:23:08 +0100
committerRiccardo Spagni <ric@spagni.net>2018-02-16 14:23:08 +0100
commit0c711978922ed346f435ddd41147c962acae6ccd (patch)
tree0505231e018b5fe20d27e6ea708e815c58c37881 /contrib
parentMerge pull request #3216 (diff)
parentwipeable_string: call memwipe directly (diff)
downloadmonero-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.h3
-rw-r--r--contrib/epee/src/wipeable_string.cpp16
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)