11#ifndef BOTAN_SP800_56A_H_
12#define BOTAN_SP800_56A_H_
14#include <botan/hash.h>
26 std::string
name()
const override;
28 std::unique_ptr<KDF>
new_object()
const override;
47 void perform_kdf(std::span<uint8_t> key,
48 std::span<const uint8_t> secret,
49 std::span<const uint8_t> salt,
50 std::span<const uint8_t> label)
const override;
53 std::unique_ptr<HashFunction> m_hash;
61 std::string
name()
const override;
63 std::unique_ptr<KDF>
new_object()
const override;
81 void perform_kdf(std::span<uint8_t> key,
82 std::span<const uint8_t> secret,
83 std::span<const uint8_t> salt,
84 std::span<const uint8_t> label)
const override;
87 std::unique_ptr<MessageAuthenticationCode> m_mac;
105 void perform_kdf(std::span<uint8_t> key,
106 std::span<const uint8_t> secret,
107 std::span<const uint8_t> salt,
108 std::span<const uint8_t> label)
const final;
122 std::string
name()
const override {
return "SP800-56A(KMAC-128)"; }
124 std::unique_ptr<KDF>
new_object()
const override {
return std::make_unique<SP800_56C_One_Step_KMAC128>(); }
127 std::unique_ptr<MessageAuthenticationCode> create_kmac_instance(
size_t output_byte_len)
const override;
129 size_t default_salt_length()
const override {
return 164; }
137 std::string
name()
const override {
return "SP800-56A(KMAC-256)"; }
139 std::unique_ptr<KDF>
new_object()
const override {
return std::make_unique<SP800_56C_One_Step_KMAC256>(); }
142 std::unique_ptr<MessageAuthenticationCode> create_kmac_instance(
size_t output_byte_len)
const override;
144 size_t default_salt_length()
const override {
return 132; }
virtual std::unique_ptr< MessageAuthenticationCode > create_kmac_instance(size_t output_byte_len) const =0
virtual size_t default_salt_length() const =0
See SP800-56C Section 4.1 - Implementation-Dependent Parameters 3.
SP800_56C_One_Step_HMAC(std::unique_ptr< MessageAuthenticationCode > mac)
std::string name() const override
std::unique_ptr< KDF > new_object() const override
std::string name() const override
SP800_56C_One_Step_Hash(std::unique_ptr< HashFunction > hash)
std::unique_ptr< KDF > new_object() const override
std::unique_ptr< KDF > new_object() const override
std::string name() const override
std::string name() const override
std::unique_ptr< KDF > new_object() const override
int(* final)(unsigned char *, CTX *)