rippled
Loading...
Searching...
No Matches
digest.cpp
1#include <xrpl/protocol/digest.h>
2
3#include <openssl/ripemd.h>
4#include <openssl/sha.h>
5
6#include <cstddef>
7
8namespace ripple {
9
11{
12 static_assert(
13 sizeof(decltype(openssl_ripemd160_hasher::ctx_)) ==
14 sizeof(RIPEMD160_CTX),
15 "");
16 auto const ctx = reinterpret_cast<RIPEMD160_CTX*>(ctx_);
17 RIPEMD160_Init(ctx);
18}
19
20void
22 void const* data,
23 std::size_t size) noexcept
24{
25 auto const ctx = reinterpret_cast<RIPEMD160_CTX*>(ctx_);
26 RIPEMD160_Update(ctx, data, size);
27}
28
29openssl_ripemd160_hasher::operator result_type() noexcept
30{
31 auto const ctx = reinterpret_cast<RIPEMD160_CTX*>(ctx_);
33 RIPEMD160_Final(digest.data(), ctx);
34 return digest;
35}
36
37//------------------------------------------------------------------------------
38
40{
41 static_assert(
42 sizeof(decltype(openssl_sha512_hasher::ctx_)) == sizeof(SHA512_CTX),
43 "");
44 auto const ctx = reinterpret_cast<SHA512_CTX*>(ctx_);
45 SHA512_Init(ctx);
46}
47
48void
49openssl_sha512_hasher::operator()(void const* data, std::size_t size) noexcept
50{
51 auto const ctx = reinterpret_cast<SHA512_CTX*>(ctx_);
52 SHA512_Update(ctx, data, size);
53}
54
55openssl_sha512_hasher::operator result_type() noexcept
56{
57 auto const ctx = reinterpret_cast<SHA512_CTX*>(ctx_);
59 SHA512_Final(digest.data(), ctx);
60 return digest;
61}
62
63//------------------------------------------------------------------------------
64
66{
67 static_assert(
68 sizeof(decltype(openssl_sha256_hasher::ctx_)) == sizeof(SHA256_CTX),
69 "");
70 auto const ctx = reinterpret_cast<SHA256_CTX*>(ctx_);
71 SHA256_Init(ctx);
72}
73
74void
75openssl_sha256_hasher::operator()(void const* data, std::size_t size) noexcept
76{
77 auto const ctx = reinterpret_cast<SHA256_CTX*>(ctx_);
78 SHA256_Update(ctx, data, size);
79}
80
81openssl_sha256_hasher::operator result_type() noexcept
82{
83 auto const ctx = reinterpret_cast<SHA256_CTX*>(ctx_);
85 SHA256_Final(digest.data(), ctx);
86 return digest;
87}
88
89} // namespace ripple
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:6
static Hasher::result_type digest(void const *data, std::size_t size) noexcept
Definition tokens.cpp:138
void operator()(void const *data, std::size_t size) noexcept
Definition digest.cpp:21
void operator()(void const *data, std::size_t size) noexcept
Definition digest.cpp:75
void operator()(void const *data, std::size_t size) noexcept
Definition digest.cpp:49