aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/utils/zero_mem.cpp
diff options
context:
space:
mode:
authorlloyd <[email protected]>2015-01-07 12:59:33 +0000
committerlloyd <[email protected]>2015-01-07 12:59:33 +0000
commit5fd3c7adffa9fe705e493f81def04d9d57db4442 (patch)
tree85c7c6056b0d6c2b3dd77678f36e4ed9911ccfa9 /src/lib/utils/zero_mem.cpp
parent4903ac8b8724718c5b8aa96a10ec0c83277df016 (diff)
Use RtlSecureZeroMemory or memset_s if available
Diffstat (limited to 'src/lib/utils/zero_mem.cpp')
-rw-r--r--src/lib/utils/zero_mem.cpp13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/lib/utils/zero_mem.cpp b/src/lib/utils/zero_mem.cpp
index e812ced0c..833b54aca 100644
--- a/src/lib/utils/zero_mem.cpp
+++ b/src/lib/utils/zero_mem.cpp
@@ -7,14 +7,27 @@
#include <botan/mem_ops.h>
+#if defined(BOTAN_TARGET_OS_HAS_RTLSECUREZEROMEMORY)
+ #include <windows.h>
+#elif defined(BOTAN_TARGET_OS_HAS_MEMSET_S)
+ #define __STDC_WANT_LIB_EXT1__ 1
+ #include <string.h>
+#endif
+
namespace Botan {
void zero_mem(void* ptr, size_t n)
{
+#if defined(BOTAN_TARGET_OS_HAS_RTLSECUREZEROMEMORY)
+ ::RtlSecureZeroMemory(ptr, n);
+#elif defined(BOTAN_TARGET_OS_HAS_MEMSET_S)
+ ::memset_s(ptr, n, 0, n);
+#else
volatile byte* p = reinterpret_cast<volatile byte*>(ptr);
for(size_t i = 0; i != n; ++i)
p[i] = 0;
+#endif
}
}