5#ifndef DIGESTPP_PROVIDERS_KMAC_HPP
6#define DIGESTPP_PROVIDERS_KMAC_HPP
16namespace kmac_functions
19 inline std::string
bytepad(
const std::string& str)
21 const size_t pad = B == 128 ? 168 : 136;
22 unsigned char buf[32];
24 std::string res(
reinterpret_cast<const char*
>(buf), len);
26 res.append(
reinterpret_cast<const char*
>(buf), len);
28 size_t delta = pad - res.size() % pad;
29 if (delta && delta != pad)
30 res.append(delta,
'\x00');
37template<
size_t B,
bool XOF,
size_t HS = 0>
43 template<bool xof=XOF, size_t hss=HS, typename std::enable_if<!xof && hss == 0>::type* =
nullptr>
46 static_assert(B == 128 || B == 256,
"KMAC only supports 128 and 256 bits");
51 template<bool xof=XOF, size_t hss=HS, typename std::enable_if<!xof && hss != 0>::type* =
nullptr>
54 static_assert(B == 128 || B == 256,
"KMAC only supports 128 and 256 bits");
55 static_assert(hss % 8 == 0);
59 template<bool xof=XOF, typename std::enable_if<xof>::type* =
nullptr>
62 static_assert(B == 128 || B == 256,
"KMAC only supports 128 and 256 bits");
71 inline void set_key(
const std::string& key)
86 update(
reinterpret_cast<const unsigned char*
>(K.data()), K.length());
89 inline void update(
const unsigned char* data,
size_t len)
98 unsigned char buf[32];
106 inline void final(
unsigned char*
hash)
Definition kmac_provider.hpp:39
void clear()
Definition kmac_provider.hpp:111
size_t hash_size() const
Definition kmac_provider.hpp:118
void update(const unsigned char *data, size_t len)
Definition kmac_provider.hpp:89
void init()
Definition kmac_provider.hpp:81
kmac_provider()
Definition kmac_provider.hpp:60
~kmac_provider()
Definition kmac_provider.hpp:66
kmac_provider(size_t hashsize)
Definition kmac_provider.hpp:44
void set_key(const std::string &key)
Definition kmac_provider.hpp:71
void set_customization(const std::string &customization)
Definition kmac_provider.hpp:76
void squeeze(unsigned char *hash, size_t hs)
Definition kmac_provider.hpp:94
kmac_provider()
Definition kmac_provider.hpp:52
Definition shake_provider.hpp:56
void update(const unsigned char *data, size_t len)
Definition shake_provider.hpp:113
void squeeze(unsigned char *hash, size_t hs)
Definition shake_provider.hpp:124
void clear()
Definition shake_provider.hpp:158
void set_function_name(const std::string &function_name)
Definition shake_provider.hpp:70
void set_customization(const std::string &customization)
Definition shake_provider.hpp:75
void init()
Definition shake_provider.hpp:80
std::string bytepad(const std::string &str)
Definition kmac_provider.hpp:19
static size_t left_encode(size_t num, unsigned char *buf)
Definition shake_provider.hpp:21
static size_t right_encode(size_t num, unsigned char *buf, bool k12)
Definition shake_provider.hpp:36
void validate_hash_size(size_t hs, std::initializer_list< size_t > set)
Definition validate_hash_size.hpp:14
void zero_memory(void *v, size_t n)
Definition functions.hpp:85
digestpp namespace
Definition ascon.hpp:14