1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
|
/*
This code is written by kerukuro and released into public domain.
*/
#ifndef DIGESTPP_MIXINS_K12M14_HPP
#define DIGESTPP_MIXINS_K12M14_HPP
namespace digestpp
{
namespace mixin
{
/**
* \brief Defines additional public functions for KangarooTwelve and MarsupilamiFourteen.
* \sa hasher, k12, m14
*/
template<typename T>
class k12m14_mixin
{
public:
/**
* \brief Set customization from std::string
*
* \param[in] customization Customization string
* \return Reference to hasher
*/
inline hasher<T, mixin::k12m14_mixin>& set_customization(const std::string& customization)
{
auto& k12m14 = static_cast<hasher<T, mixin::k12m14_mixin>&>(*this);
k12m14.provider.set_customization(customization);
k12m14.provider.init();
return k12m14;
}
/**
* \brief Set customization from raw buffer
*
* \param[in] customization Pointer to customization bytes
* \param[in] customization_len Customization length (in bytes)
* \return Reference to hasher
*/
template<typename C, typename std::enable_if<detail::is_byte<C>::value>::type* = nullptr>
inline hasher<T, mixin::k12m14_mixin>& set_customization(const C* customization, size_t customization_len)
{
return set_customization(std::string(reinterpret_cast<const char*>(customization), customization_len));
}
};
} // namespace mixin
} // namespace digestpp
#endif // DIGESTPP_MIXINS_K12M14_HPP
|