45using digest_t = std::array< std::uint32_t, digest_array_size >;
51 return static_cast< std::uint8_t
>(
what );
58 return static_cast< std::uint32_t
>(
what );
65 return reinterpret_cast< const std::uint8_t *
>(
what );
68template<
unsigned int Shift >
75template<
unsigned int Shift >
79 return ::restinio::utils::impl::bitops::n_bits_from< std::uint8_t, Shift >(
x);
302 const auto v =
static_cast<std::uint32_t
>(
big_value);
356template<
unsigned int Shift >
360 return ::restinio::utils::impl::bitops::n_bits_from< unsigned int, Shift, 4 >(v);
363template<
unsigned int Shift >
367 return ::restinio::utils::impl::bitops::n_bits_from< unsigned int, Shift, 8 >(v);
375 using namespace details;
377 static const char digits[] =
"0123456789abcdef";
382 for(
const auto c :
what )
400 using namespace details;
405 for(
const auto c :
what )
426 const std::uint8_t *
const start =
as_uint8_ptr( begin );
427 const std::uint8_t *
const finish =
as_uint8_ptr( end );
428 const auto length =
static_cast< std::size_t
>( finish - start );
unsigned int halfbyte(digest_t::value_type v)
unsigned int byte(digest_t::value_type v)
constexpr std::uint8_t block_size
std::array< std::uint32_t, block_ints > int_block_t
std::uint8_t as_uint8(T what)
std::uint32_t as_uint32(T what)
void R4(int_block_t &block, const uint32_t v, uint32_t &w, const uint32_t x, const uint32_t y, uint32_t &z, const size_t i)
std::string to_string(const digest_t &what)
void R1(int_block_t &block, const uint32_t v, uint32_t &w, const uint32_t x, const uint32_t y, uint32_t &z, const size_t i)
void R2(int_block_t &block, const uint32_t v, uint32_t &w, const uint32_t x, const uint32_t y, uint32_t &z, const size_t i)
std::uint8_t octet_from(std::uint32_t x)
std::string to_hex_string(const digest_t &what)
constexpr std::uint8_t block_ints
constexpr std::size_t digest_array_size
std::array< std::uint32_t, digest_array_size > digest_t
void R0(const int_block_t &block, const uint32_t v, uint32_t &w, const uint32_t x, const uint32_t y, uint32_t &z, const size_t i)
digest_t make_digest(const std::uint8_t *what, std::size_t length)
const std::uint8_t * as_uint8_ptr(const T *what)
void transform(digest_t &digest, const byte_block_t &buf)
constexpr std::uint8_t digest_size
std::uint32_t rotate_left(const std::uint32_t x)
std::array< std::uint8_t, block_size > byte_block_t
constexpr std::uint8_t word_size
void R3(int_block_t &block, const uint32_t v, uint32_t &w, const uint32_t x, const uint32_t y, uint32_t &z, const size_t i)
run_on_this_thread_settings_t< Traits > on_this_thread()
A special marker for the case when http_server must be run on the context of the current thread.
std::string_view string_view_t
void store_total_bits_to_buffer()
size_t m_transforms_count
builder_t & update(const std::uint8_t *what, std::size_t length)
std::uint_fast64_t calculate_total_bits_count() const