xrpld
Loading...
Searching...
No Matches
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
13namespace xrpl {
14
24
25//------------------------------------------------------------------------------
26
33{
34public:
35 static constexpr auto kEndian = boost::endian::order::native;
36
38
40
41 void
42 operator()(void const* data, std::size_t size) noexcept;
43
44 explicit
45 operator result_type() noexcept;
46
47private:
48 char ctx_[96]{};
49};
50
57{
58public:
59 static constexpr auto kEndian = boost::endian::order::native;
60
62
64
65 void
66 operator()(void const* data, std::size_t size) noexcept;
67
68 explicit
69 operator result_type() noexcept;
70
71private:
72 char ctx_[216]{};
73};
74
81{
82public:
83 static constexpr auto kEndian = boost::endian::order::native;
84
86
88
89 void
90 operator()(void const* data, std::size_t size) noexcept;
91
92 explicit
93 operator result_type() noexcept;
94
95private:
96 char ctx_[112]{};
97};
98
99//------------------------------------------------------------------------------
100
104
105//------------------------------------------------------------------------------
106
124{
125private:
127
128public:
129 static constexpr auto kEndian = boost::endian::order::native;
130
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 = sha256_hasher::result_type(h_);
144 rh(d0.data(), d0.size());
146 }
147};
148
149//------------------------------------------------------------------------------
150
151namespace detail {
152
159template <bool Secure>
161{
162private:
164
165public:
166 static constexpr auto kEndian = boost::endian::order::big;
167
169
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 {
185 return result_type::fromVoid(digest.data());
186 }
187
188private:
189 void
191 {
192 }
193
194 void
196 {
197 secureErase(&h_, sizeof(h_));
198 }
199};
200
201} // namespace detail
202
204
205// secure version
207
208//------------------------------------------------------------------------------
209
213template <class... Args>
215sha512Half(Args const&... args)
216{
218 using beast::hash_append;
219 hash_append(h, args...);
220 return static_cast<sha512_half_hasher::result_type>(h);
221}
222
230template <class... Args>
232sha512HalfS(Args const&... args)
233{
235 using beast::hash_append;
236 hash_append(h, args...);
237 return static_cast<sha512_half_hasher_s::result_type>(h);
238}
239
240} // namespace xrpl
static BaseUInt fromVoid(void const *data)
Definition base_uint.h:339
void hash_append(Hasher &h, T const &t) noexcept
Logically concatenate input data to a Hasher.
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:5
detail::BasicSha512HalfHasher< false > sha512_half_hasher
Definition digest.h:203
static Hasher::result_type digest(void const *data, std::size_t size) noexcept
Definition tokens.cpp:140
void secureErase(void *dest, std::size_t bytes)
Attempts to clear the given blob of memory.
sha512_half_hasher::result_type sha512Half(Args const &... args)
Returns the SHA512-Half of a series of objects.
Definition digest.h:215
sha512_half_hasher_s::result_type sha512HalfS(Args const &... args)
Returns the SHA512-Half of a series of objects.
Definition digest.h:232
detail::BasicSha512HalfHasher< true > sha512_half_hasher_s
Definition digest.h:206
OpensslSha512Hasher sha512_hasher
Definition digest.h:103
OpensslRipemd160Hasher ripemd160_hasher
Definition digest.h:101
void hash_append(Hasher &h, Slice const &v)
Definition Slice.h:194
OpensslSha256Hasher sha256_hasher
Definition digest.h:102
BaseUInt< 256 > uint256
Definition base_uint.h:580
Message digest functions used in the codebase.
Definition digest.h:33
void operator()(void const *data, std::size_t size) noexcept
Definition digest.cpp:18
static constexpr auto kEndian
Definition digest.h:35
std::array< std::uint8_t, 20 > result_type
Definition digest.h:37
SHA-256 digest.
Definition digest.h:81
void operator()(void const *data, std::size_t size) noexcept
Definition digest.cpp:68
static constexpr auto kEndian
Definition digest.h:83
std::array< std::uint8_t, 32 > result_type
Definition digest.h:85
SHA-512 digest.
Definition digest.h:57
std::array< std::uint8_t, 64 > result_type
Definition digest.h:61
static constexpr auto kEndian
Definition digest.h:59
void operator()(void const *data, std::size_t size) noexcept
Definition digest.cpp:43
Returns the RIPEMD-160 digest of the SHA256 hash of the message.
Definition digest.h:124
sha256_hasher h_
Definition digest.h:126
std::array< std::uint8_t, 20 > result_type
Definition digest.h:131
void operator()(void const *data, std::size_t size) noexcept
Definition digest.h:134
static constexpr auto kEndian
Definition digest.h:129
Returns the SHA512-Half digest of a message.
Definition digest.h:161
void operator()(void const *data, std::size_t size) noexcept
Definition digest.h:176
void erase(std::false_type)
Definition digest.h:190
void erase(std::true_type)
Definition digest.h:195