diff options
-rw-r--r-- | src/build-data/os/darwin.txt | 1 | ||||
-rw-r--r-- | src/build-data/os/windows.txt | 1 | ||||
-rw-r--r-- | src/lib/utils/zero_mem.cpp | 13 |
3 files changed, 15 insertions, 0 deletions
diff --git a/src/build-data/os/darwin.txt b/src/build-data/os/darwin.txt index d2e5df062..d22b78b91 100644 --- a/src/build-data/os/darwin.txt +++ b/src/build-data/os/darwin.txt @@ -12,6 +12,7 @@ doc_dir doc dlopen gettimeofday gmtime_r +memset_s </target_features> <aliases> diff --git a/src/build-data/os/windows.txt b/src/build-data/os/windows.txt index 5afd2596b..3ac33a6ae 100644 --- a/src/build-data/os/windows.txt +++ b/src/build-data/os/windows.txt @@ -16,6 +16,7 @@ gmtime_s loadlibrary query_perf_counter virtual_lock +rtlsecurezeromemory </target_features> <aliases> 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 } } |