24#ifndef MYSQLROUTER_DIGEST_INCLUDED
25#define MYSQLROUTER_DIGEST_INCLUDED
34#include <openssl/evp.h>
62#
if defined(OPENSSL_VERSION_NUMBER) && \
64 EVP_MD_CTX_new(), &EVP_MD_CTX_free
66 EVP_MD_CTX_create(), &EVP_MD_CTX_destroy
77#if defined(OPENSSL_VERSION_NUMBER) && \
78 (OPENSSL_VERSION_NUMBER >= ROUTER_OPENSSL_VERSION(1, 1, 0))
79 EVP_MD_CTX_reset(
ctx_.get());
81 EVP_MD_CTX_cleanup(
ctx_.get());
91 void update(
const std::string &data) {
92 EVP_DigestUpdate(
ctx_.get(), data.data(), data.size());
100 void update(
const std::vector<uint8_t> &data) {
101 EVP_DigestUpdate(
ctx_.get(), data.data(), data.size());
126 return EVP_MD_size(dg);
129 throw std::invalid_argument(
"type wasn't part of Type");
134 template <
typename Container>
138 unsigned int out_len{
static_cast<unsigned int>(std::min(
140 static_cast<size_t>(std::numeric_limits<unsigned int>::max())))};
142 EVP_DigestFinal_ex(
ctx_.get(),
reinterpret_cast<uint8_t *
>(&out[0]),
167#if defined(OPENSSL_VERSION_NUMBER) && \
168 (OPENSSL_VERSION_NUMBER >= ROUTER_OPENSSL_VERSION(1, 1, 0))
message digest.
Definition: digest.h:52
void finalize(std::vector< uint8_t > &out)
finalize the digest and get digest value.
Definition: digest.h:109
static size_t digest_size(Type type)
get size of the digest value.
Definition: digest.h:124
Type type_
Definition: digest.h:165
void finalize(std::string &out)
finalize the digest and get digest value.
Definition: digest.h:116
void update(const std::vector< uint8_t > &data)
update Digest.
Definition: digest.h:100
void update(const std::string &data)
update Digest.
Definition: digest.h:91
static const EVP_MD * get_evp_md(Type type) noexcept
Definition: digest.h:147
void finalize_impl(Container &out)
Definition: digest.h:135
Type
Definition: digest.h:54
void reinit()
initialize or reinitialize the message digest functions.
Definition: digest.h:76
std::unique_ptr< EVP_MD_CTX, decltype(&EVP_MD_CTX_destroy)> ctx_
Definition: digest.h:174
Digest(Type type)
constructor.
Definition: digest.h:61
if(!(yy_init))
Definition: lexyy.cc:1144
std::conditional_t< !std::is_array< T >::value, std::unique_ptr< T, detail::Deleter< T > >, std::conditional_t< detail::is_unbounded_array_v< T >, std::unique_ptr< T, detail::Array_deleter< std::remove_extent_t< T > > >, void > > unique_ptr
The following is a common type that is returned by all the ut::make_unique (non-aligned) specializati...
Definition: ut0new.h:2437
#define ROUTER_OPENSSL_VERSION(MAJOR, MINOR, FIX)
build openssl version (pre-releases and stable).
Definition: openssl_version.h:59
required string type
Definition: replication_group_member_actions.proto:33