9#include <botan/internal/kdf1.h>
11#include <botan/exceptn.h>
12#include <botan/internal/fmt.h>
17 return fmt(
"KDF1({})", m_hash->name());
21 return std::make_unique<KDF1>(m_hash->new_object());
24void KDF1::perform_kdf(std::span<uint8_t> key,
25 std::span<const uint8_t> secret,
26 std::span<const uint8_t> salt,
27 std::span<const uint8_t> label)
const {
32 const size_t hash_output_len = m_hash->output_length();
33 BOTAN_ARG_CHECK(key.size() <= hash_output_len,
"KDF1 maximum output length exceeeded");
35 m_hash->update(secret);
36 m_hash->update(label);
39 if(key.size() == hash_output_len) {
44 const auto v = m_hash->final();
45 copy_mem(key, std::span{v}.first(key.size()));
#define BOTAN_ARG_CHECK(expr, msg)
std::unique_ptr< KDF > new_object() const override
std::string name() const override
std::string fmt(std::string_view format, const T &... args)
constexpr void copy_mem(T *out, const T *in, size_t n)