Bitcoin ABC
0.26.3
P2P Digital Currency
Loading...
Searching...
No Matches
src
support
cleanse.cpp
Go to the documentation of this file.
1
// Copyright (c) 2009-2010 Satoshi Nakamoto
2
// Copyright (c) 2009-2015 The Bitcoin Core developers
3
// Distributed under the MIT software license, see the accompanying
4
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
5
6
#include <
support/cleanse.h
>
7
8
#include <cstring>
9
10
#if defined(_MSC_VER)
11
#include <Windows.h>
// For SecureZeroMemory.
12
#endif
13
14
void
memory_cleanse
(
void
*ptr,
size_t
len
) {
15
#if defined(_MSC_VER)
16
/* SecureZeroMemory is guaranteed not to be optimized out by MSVC. */
17
SecureZeroMemory
(ptr,
len
);
18
#else
19
std::memset(ptr, 0,
len
);
20
21
/*
22
* Memory barrier that scares the compiler away from optimizing out the
23
* memset.
24
*
25
* Quoting Adam Langley <agl@google.com> in commit
26
* ad1907fe73334d6c696c8539646c21b11178f20f in BoringSSL (ISC License):
27
* As best as we can tell, this is sufficient to break any optimisations
28
* that might try to eliminate "superfluous" memsets.
29
* This method is used in memzero_explicit() the Linux kernel, too. Its
30
* advantage is that it is pretty efficient because the compiler can still
31
* implement the memset() efficiently, just not remove it entirely. See
32
* "Dead Store Elimination (Still) Considered Harmful" by Yang et al.
33
* (USENIX Security 2017) for more background.
34
*/
35
__asm__
__volatile__
(
""
: :
"r"
(ptr) :
"memory"
);
36
#endif
37
}
memory_cleanse
void memory_cleanse(void *ptr, size_t len)
Secure overwrite a buffer (possibly containing secret data) with zero-bytes.
Definition
cleanse.cpp:14
cleanse.h
GetRand
T GetRand(T nMax=std::numeric_limits< T >::max()) noexcept
Generate a uniform random integer of type T in the range [0..nMax) nMax defaults to std::numeric_limi...
Definition
random.h:85
Generated on Fri Nov 22 2024 02:38:24 for Bitcoin ABC by
1.9.8