digestpp 1.0
C++11 header-only message digest library
Loading...
Searching...
No Matches
blake2_mixin.hpp
Go to the documentation of this file.
1/*
2This code is written by kerukuro and released into public domain.
3*/
4
5#ifndef DIGESTPP_MIXINS_BLAKE2_HPP
6#define DIGESTPP_MIXINS_BLAKE2_HPP
7
8namespace digestpp
9{
10
11namespace mixin
12{
13
18template<typename T>
20{
21public:
31 inline hasher<T, mixin::blake2_mixin>& set_salt(const std::string& salt)
32 {
33 return set_salt(salt.c_str(), salt.size());
34 }
35
46 template<typename C, typename std::enable_if<detail::is_byte<C>::value>::type* = nullptr>
47 inline hasher<T, mixin::blake2_mixin>& set_salt(const C* salt, size_t salt_len)
48 {
49 auto& blake = static_cast<hasher<T, mixin::blake2_mixin>&>(*this);
50 blake.provider.set_salt(reinterpret_cast<const unsigned char*>(salt), salt_len);
51 blake.provider.init();
52 return blake;
53 }
54
64 inline hasher<T, mixin::blake2_mixin>& set_personalization(const std::string& personalization)
65 {
66 return set_personalization(personalization.c_str(), personalization.size());
67 }
68
79 template<typename C, typename std::enable_if<detail::is_byte<C>::value>::type* = nullptr>
80 inline hasher<T, mixin::blake2_mixin>& set_personalization(const C* personalization, size_t personalization_len)
81 {
82 auto& blake = static_cast<hasher<T, mixin::blake2_mixin>&>(*this);
83 blake.provider.set_personalization(reinterpret_cast<const unsigned char*>(personalization), personalization_len);
84 blake.provider.init();
85 return blake;
86 }
87
97 inline hasher<T, mixin::blake2_mixin>& set_key(const std::string& key)
98 {
99 auto& blake = static_cast<hasher<T, mixin::blake2_mixin>&>(*this);
100 blake.provider.set_key(key);
101 blake.provider.init();
102 return blake;
103 }
104
115 template<typename C, typename std::enable_if<detail::is_byte<C>::value>::type* = nullptr>
116 inline hasher<T, mixin::blake2_mixin>& set_key(const C* key, size_t key_len)
117 {
118 return set_key(std::string(reinterpret_cast<const char*>(key), key_len));
119 }
120};
121
122
123} // namespace mixin
124
125} // namespace digestpp
126
127#endif
Main class template implementing the public API for hashing.
Definition hasher.hpp:38
Defines additional public functions for BLAKE2 family of algorithms.
Definition blake2_mixin.hpp:20
hasher< T, mixin::blake2_mixin > & set_key(const std::string &key)
Set key from std::string.
Definition blake2_mixin.hpp:97
hasher< T, mixin::blake2_mixin > & set_salt(const C *salt, size_t salt_len)
Set salt from raw buffer.
Definition blake2_mixin.hpp:47
hasher< T, mixin::blake2_mixin > & set_salt(const std::string &salt)
Set salt from std::string.
Definition blake2_mixin.hpp:31
hasher< T, mixin::blake2_mixin > & set_key(const C *key, size_t key_len)
Set key from raw buffer.
Definition blake2_mixin.hpp:116
hasher< T, mixin::blake2_mixin > & set_personalization(const C *personalization, size_t personalization_len)
Set personalization from raw buffer.
Definition blake2_mixin.hpp:80
hasher< T, mixin::blake2_mixin > & set_personalization(const std::string &personalization)
Set personalization from std::string.
Definition blake2_mixin.hpp:64
hasher< detail::blake_provider<>, mixin::blake_mixin > blake
BLAKE hash function (SHA-3 finalist)
Definition blake.hpp:58
digestpp namespace
Definition ascon.hpp:14