10#ifndef BOTAN_ML_KEM_IMPL_H_
11#define BOTAN_ML_KEM_IMPL_H_
13#include <botan/hash.h>
17#include <botan/internal/kyber_encaps_base.h>
18#include <botan/internal/kyber_keys.h>
19#include <botan/internal/kyber_symmetric_primitives.h>
20#include <botan/internal/kyber_types.h>
21#include <botan/internal/loadstor.h>
27 ML_KEM_Encryptor(std::shared_ptr<const Kyber_PublicKeyInternal> key, std::string_view kdf) :
36 std::shared_ptr<const Kyber_PublicKeyInternal> m_public_key;
42 std::shared_ptr<const Kyber_PublicKeyInternal> public_key,
43 std::string_view kdf) :
45 m_public_key(std::move(public_key)),
46 m_private_key(std::move(private_key)) {}
53 std::shared_ptr<const Kyber_PublicKeyInternal> m_public_key;
54 std::shared_ptr<const Kyber_PrivateKeyInternal> m_private_key;
64 return std::array{mode.
k()};
71 std::unique_ptr<HashFunction>
create_J()
const override {
75 std::unique_ptr<HashFunction>
create_KDF()
const override {
79 std::unique_ptr<Botan::XOF>
create_PRF(std::span<const uint8_t> seed,
const uint8_t nonce)
const override {
85 void init_PRF(
Botan::XOF& xof, std::span<const uint8_t> seed,
const uint8_t nonce)
const override {
91 std::unique_ptr<Botan::XOF>
create_XOF(std::span<const uint8_t> seed,
92 std::tuple<uint8_t, uint8_t> matrix_position)
const override {
94 init_XOF(*xof, seed, matrix_position);
99 std::span<const uint8_t> seed,
100 std::tuple<uint8_t, uint8_t> matrix_position)
const override {
static std::unique_ptr< HashFunction > create_or_throw(std::string_view algo_spec, std::string_view provider="")
Kyber_KEM_Decryptor_Base(std::string_view kdf, const Kyber_PublicKeyInternal &pk)
Kyber_KEM_Encryptor_Base(std::string_view kdf, const Kyber_PublicKeyInternal &pk)
void decapsulate(StrongSpan< KyberSharedSecret > out_shared_key, StrongSpan< const KyberCompressedCiphertext > encapsulated_key) override
ML_KEM_Decryptor(std::shared_ptr< const Kyber_PrivateKeyInternal > private_key, std::shared_ptr< const Kyber_PublicKeyInternal > public_key, std::string_view kdf)
void encapsulate(StrongSpan< KyberCompressedCiphertext > out_encapsulated_key, StrongSpan< KyberSharedSecret > out_shared_key, RandomNumberGenerator &rng) override
ML_KEM_Encryptor(std::shared_ptr< const Kyber_PublicKeyInternal > key, std::string_view kdf)
void init_XOF(Botan::XOF &xof, std::span< const uint8_t > seed, std::tuple< uint8_t, uint8_t > matrix_position) const override
std::unique_ptr< HashFunction > create_KDF() const override
std::unique_ptr< HashFunction > create_H() const override
std::optional< std::array< uint8_t, 1 > > seed_expansion_domain_separator(const KyberConstants &mode) const override
std::unique_ptr< HashFunction > create_J() const override
std::unique_ptr< Botan::XOF > create_PRF(std::span< const uint8_t > seed, const uint8_t nonce) const override
std::unique_ptr< HashFunction > create_G() const override
std::unique_ptr< Botan::XOF > create_XOF(std::span< const uint8_t > seed, std::tuple< uint8_t, uint8_t > matrix_position) const override
void init_PRF(Botan::XOF &xof, std::span< const uint8_t > seed, const uint8_t nonce) const override
static std::unique_ptr< XOF > create_or_throw(std::string_view algo_spec, std::string_view provider="")
void update(std::span< const uint8_t > input)
constexpr auto store_be(ParamTs &&... params)
constexpr uint16_t make_uint16(uint8_t i0, uint8_t i1)