Skip to content

Commit 26c0194

Browse files
authored
Merge pull request #1620 from evoskuil/master
Add zeroize funclet and tests.
2 parents d48848b + 64f1ea6 commit 26c0194

File tree

2 files changed

+24
-0
lines changed

2 files changed

+24
-0
lines changed

include/bitcoin/system/funclets.hpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,12 @@ constexpr bool is_nonzero(Type value) noexcept
4444
return !is_zero(value);
4545
}
4646

47+
template <typename Type>
48+
constexpr Type zeroize(Type& value) noexcept
49+
{
50+
return value ^= value;
51+
}
52+
4753
template <typename Type>
4854
constexpr bool is_one(Type value) noexcept
4955
{

test/funclets.cpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,24 @@ static_assert(is_nonzero(1u));
3030
static_assert(is_nonzero(0xff));
3131
static_assert(is_same_type<decltype(is_nonzero<int16_t>(0)), bool>);
3232

33+
const auto zeroize_helper = [](auto value)
34+
{
35+
using type = decltype(value);
36+
return zeroize(value);
37+
static_assert(is_same_type<decltype(zeroize<type>(value)), type>);
38+
};
39+
static_assert(zeroize_helper(0_u8) == 0u);
40+
static_assert(zeroize_helper(1_u8) == 0u);
41+
static_assert(zeroize_helper(3_u16) == 0u);
42+
static_assert(zeroize_helper(4_u16) == 0u);
43+
static_assert(zeroize_helper(max_uint32) == 0u);
44+
static_assert(zeroize_helper(0_i8) == 0);
45+
static_assert(zeroize_helper(1_i8) == 0);
46+
static_assert(zeroize_helper(3_i16) == 0);
47+
static_assert(zeroize_helper(4_i16) == 0);
48+
static_assert(zeroize_helper(max_int32) == 0);
49+
static_assert(zeroize_helper(min_int32) == 0);
50+
3351
static_assert(is_one(1));
3452
static_assert(!is_one(0u));
3553
static_assert(!is_one(0xff));

0 commit comments

Comments
 (0)