xrpld
Toggle main menu visibility
Loading...
Searching...
No Matches
include
xrpl
protocol
digest.h
1
#pragma once
2
3
#include <xrpl/basics/base_uint.h>
4
#include <xrpl/crypto/secure_erase.h>
5
6
#include <boost/endian/conversion.hpp>
7
8
#include <
array
>
9
#include <
cstddef
>
10
#include <
cstdint
>
11
#include <
type_traits
>
12
13
namespace
xrpl
{
14
24
25
//------------------------------------------------------------------------------
26
32
struct
OpensslRipemd160Hasher
33
{
34
public
:
35
static
constexpr
auto
kEndian
= boost::endian::order::native;
36
37
using
result_type
=
std::array<std::uint8_t, 20>
;
38
39
OpensslRipemd160Hasher
();
40
41
void
42
operator()
(
void
const
* data,
std::size_t
size)
noexcept
;
43
44
explicit
45
operator
result_type
() noexcept;
46
47
private:
48
char
ctx_
[96]{};
49
};
50
56
struct
OpensslSha512Hasher
57
{
58
public
:
59
static
constexpr
auto
kEndian
= boost::endian::order::native;
60
61
using
result_type
=
std::array<std::uint8_t, 64>
;
62
63
OpensslSha512Hasher
();
64
65
void
66
operator()
(
void
const
* data,
std::size_t
size)
noexcept
;
67
68
explicit
69
operator
result_type
() noexcept;
70
71
private:
72
char
ctx_
[216]{};
73
};
74
80
struct
OpensslSha256Hasher
81
{
82
public
:
83
static
constexpr
auto
kEndian
= boost::endian::order::native;
84
85
using
result_type
=
std::array<std::uint8_t, 32>
;
86
87
OpensslSha256Hasher
();
88
89
void
90
operator()
(
void
const
* data,
std::size_t
size)
noexcept
;
91
92
explicit
93
operator
result_type
() noexcept;
94
95
private:
96
char
ctx_
[112]{};
97
};
98
99
//------------------------------------------------------------------------------
100
101
using
Ripemd160Hasher
=
OpensslRipemd160Hasher
;
102
using
Sha256Hasher
=
OpensslSha256Hasher
;
103
using
Sha512Hasher
=
OpensslSha512Hasher
;
104
105
//------------------------------------------------------------------------------
106
123
struct
RipeshaHasher
124
{
125
private
:
126
Sha256Hasher
h_
;
127
128
public
:
129
static
constexpr
auto
kEndian
= boost::endian::order::native;
130
131
using
result_type
=
std::array<std::uint8_t, 20>
;
132
133
void
134
operator()
(
void
const
* data,
std::size_t
size)
noexcept
135
{
136
h_
(data, size);
137
}
138
139
explicit
140
operator
result_type
() noexcept
141
{
142
auto
const
d0 =
Sha256Hasher::result_type
(
h_
);
143
Ripemd160Hasher
rh;
144
rh(d0.data(), d0.size());
145
return
Ripemd160Hasher::result_type
(rh);
146
}
147
};
148
149
//------------------------------------------------------------------------------
150
151
namespace
detail {
152
159
template
<
bool
Secure>
160
struct
BasicSha512HalfHasher
161
{
162
private
:
163
Sha512Hasher
h_
;
164
165
public
:
166
static
constexpr
auto
kEndian
= boost::endian::order::big;
167
168
using
result_type
=
UInt256
;
169
170
~BasicSha512HalfHasher
()
171
{
172
erase
(
std::integral_constant<bool, Secure>
{});
173
}
174
175
void
176
operator()
(
void
const
* data,
std::size_t
size)
noexcept
177
{
178
h_
(data, size);
179
}
180
181
explicit
182
operator
result_type
() noexcept
183
{
184
auto
const
digest
=
Sha512Hasher::result_type
(
h_
);
185
return
result_type::fromVoid
(
digest
.data());
186
}
187
188
private
:
189
void
190
erase
(
std::false_type
)
191
{
192
}
193
194
void
195
erase
(
std::true_type
)
196
{
197
secureErase
(&
h_
,
sizeof
(
h_
));
198
}
199
};
200
201
}
// namespace detail
202
203
using
Sha512HalfHasher
=
detail::BasicSha512HalfHasher<false>
;
204
205
// secure version
206
using
Sha512HalfHasherS
=
detail::BasicSha512HalfHasher<true>
;
207
208
//------------------------------------------------------------------------------
209
213
template
<
class
... Args>
214
Sha512HalfHasher::result_type
215
sha512Half
(Args
const
&... args)
216
{
217
Sha512HalfHasher
h;
218
using
beast::hash_append
;
219
hash_append
(h, args...);
220
return
static_cast<
Sha512HalfHasher::result_type
>
(h);
221
}
222
230
template
<
class
... Args>
231
Sha512HalfHasherS::result_type
232
sha512HalfS
(Args
const
&... args)
233
{
234
Sha512HalfHasherS
h;
235
using
beast::hash_append
;
236
hash_append
(h, args...);
237
return
static_cast<
Sha512HalfHasherS::result_type
>
(h);
238
}
239
240
}
// namespace xrpl
array
xrpl::BaseUInt< 256 >::fromVoid
static BaseUInt fromVoid(void const *data)
Definition
base_uint.h:339
cstddef
cstdint
std::integral_constant
beast::hash_append
void hash_append(Hasher &h, T const &t) noexcept
Logically concatenate input data to a Hasher.
Definition
hash_append.h:206
xrpl
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition
algorithm.h:5
xrpl::digest
static Hasher::result_type digest(void const *data, std::size_t size) noexcept
Definition
tokens.cpp:140
xrpl::secureErase
void secureErase(void *dest, std::size_t bytes)
Attempts to clear the given blob of memory.
Definition
secure_erase.cpp:10
xrpl::Sha256Hasher
OpensslSha256Hasher Sha256Hasher
Definition
digest.h:102
xrpl::UInt256
BaseUInt< 256 > UInt256
Definition
base_uint.h:580
xrpl::Sha512Hasher
OpensslSha512Hasher Sha512Hasher
Definition
digest.h:103
xrpl::Sha512HalfHasher
detail::BasicSha512HalfHasher< false > Sha512HalfHasher
Definition
digest.h:203
xrpl::Ripemd160Hasher
OpensslRipemd160Hasher Ripemd160Hasher
Definition
digest.h:101
xrpl::sha512HalfS
Sha512HalfHasherS::result_type sha512HalfS(Args const &... args)
Returns the SHA512-Half of a series of objects.
Definition
digest.h:232
xrpl::hash_append
void hash_append(Hasher &h, Slice const &v)
Definition
Slice.h:194
xrpl::Sha512HalfHasherS
detail::BasicSha512HalfHasher< true > Sha512HalfHasherS
Definition
digest.h:206
xrpl::sha512Half
Sha512HalfHasher::result_type sha512Half(Args const &... args)
Returns the SHA512-Half of a series of objects.
Definition
digest.h:215
std::size_t
xrpl::OpensslRipemd160Hasher
Message digest functions used in the codebase.
Definition
digest.h:33
xrpl::OpensslRipemd160Hasher::operator()
void operator()(void const *data, std::size_t size) noexcept
Definition
digest.cpp:18
xrpl::OpensslRipemd160Hasher::OpensslRipemd160Hasher
OpensslRipemd160Hasher()
Definition
digest.cpp:10
xrpl::OpensslRipemd160Hasher::ctx_
char ctx_[96]
Definition
digest.h:48
xrpl::OpensslRipemd160Hasher::kEndian
static constexpr auto kEndian
Definition
digest.h:35
xrpl::OpensslRipemd160Hasher::result_type
std::array< std::uint8_t, 20 > result_type
Definition
digest.h:37
xrpl::OpensslSha256Hasher
SHA-256 digest.
Definition
digest.h:81
xrpl::OpensslSha256Hasher::OpensslSha256Hasher
OpensslSha256Hasher()
Definition
digest.cpp:60
xrpl::OpensslSha256Hasher::operator()
void operator()(void const *data, std::size_t size) noexcept
Definition
digest.cpp:68
xrpl::OpensslSha256Hasher::ctx_
char ctx_[112]
Definition
digest.h:96
xrpl::OpensslSha256Hasher::kEndian
static constexpr auto kEndian
Definition
digest.h:83
xrpl::OpensslSha256Hasher::result_type
std::array< std::uint8_t, 32 > result_type
Definition
digest.h:85
xrpl::OpensslSha512Hasher
SHA-512 digest.
Definition
digest.h:57
xrpl::OpensslSha512Hasher::result_type
std::array< std::uint8_t, 64 > result_type
Definition
digest.h:61
xrpl::OpensslSha512Hasher::kEndian
static constexpr auto kEndian
Definition
digest.h:59
xrpl::OpensslSha512Hasher::OpensslSha512Hasher
OpensslSha512Hasher()
Definition
digest.cpp:35
xrpl::OpensslSha512Hasher::ctx_
char ctx_[216]
Definition
digest.h:72
xrpl::OpensslSha512Hasher::operator()
void operator()(void const *data, std::size_t size) noexcept
Definition
digest.cpp:43
xrpl::RipeshaHasher
Returns the RIPEMD-160 digest of the SHA256 hash of the message.
Definition
digest.h:124
xrpl::RipeshaHasher::result_type
std::array< std::uint8_t, 20 > result_type
Definition
digest.h:131
xrpl::RipeshaHasher::operator()
void operator()(void const *data, std::size_t size) noexcept
Definition
digest.h:134
xrpl::RipeshaHasher::h_
Sha256Hasher h_
Definition
digest.h:126
xrpl::RipeshaHasher::kEndian
static constexpr auto kEndian
Definition
digest.h:129
xrpl::detail::BasicSha512HalfHasher
Returns the SHA512-Half digest of a message.
Definition
digest.h:161
xrpl::detail::BasicSha512HalfHasher< false >::kEndian
static constexpr auto kEndian
Definition
digest.h:166
xrpl::detail::BasicSha512HalfHasher::operator()
void operator()(void const *data, std::size_t size) noexcept
Definition
digest.h:176
xrpl::detail::BasicSha512HalfHasher::erase
void erase(std::false_type)
Definition
digest.h:190
xrpl::detail::BasicSha512HalfHasher::~BasicSha512HalfHasher
~BasicSha512HalfHasher()
Definition
digest.h:170
xrpl::detail::BasicSha512HalfHasher< false >::h_
Sha512Hasher h_
Definition
digest.h:163
xrpl::detail::BasicSha512HalfHasher::erase
void erase(std::true_type)
Definition
digest.h:195
xrpl::detail::BasicSha512HalfHasher::result_type
UInt256 result_type
Definition
digest.h:168
type_traits
Generated by
1.17.0