10#include <botan/internal/kyber_round3_impl.h>
12#include <botan/internal/ct_utils.h>
13#include <botan/internal/kyber_constants.h>
14#include <botan/internal/kyber_symmetric_primitives.h>
15#include <botan/internal/kyber_types.h>
25 const auto& sym = m_public_key->mode().symmetric_primitives();
30 const auto m = sym.H(seed_m);
31 const auto [K_bar, r] = sym.G(m, m_public_key->H_public_key_bits_raw());
34 sym.KDF(out_shared_key, K_bar, sym.H(out_encapsulated_key));
45 const auto& sym = m_public_key->mode().symmetric_primitives();
47 const auto& h = m_public_key->H_public_key_bits_raw();
48 const auto& z = m_private_key->z();
50 const auto m_prime = m_private_key->indcpa_decrypt(encapsulated_key);
51 const auto [K_bar_prime, r_prime] = sym.G(m_prime, h);
58 const auto reencrypt_success =
CT::is_equal(encapsulated_key.
data(), c_prime.data(), encapsulated_key.
size());
61 sym.KDF(out_shared_key, K, sym.H(encapsulated_key));
#define BOTAN_ASSERT_NOMSG(expr)
static constexpr size_t SEED_BYTES
void decapsulate(StrongSpan< KyberSharedSecret > out_shared_key, StrongSpan< const KyberCompressedCiphertext > encapsulated_key) override
void encapsulate(StrongSpan< KyberCompressedCiphertext > out_encapsulated_key, StrongSpan< KyberSharedSecret > out_shared_key, RandomNumberGenerator &rng) override
const KyberPolyMat & precomputed_matrix_At() const
void random_vec(std::span< uint8_t > v)
decltype(auto) data() noexcept(noexcept(this->m_span.data()))
decltype(auto) size() const noexcept(noexcept(this->m_span.size()))
size_type size() const noexcept(noexcept(this->get().size()))
decltype(auto) data() noexcept(noexcept(this->get().data()))
constexpr Mask< T > conditional_copy_mem(Mask< T > mask, T *dest, const T *if_set, const T *if_unset, size_t elems)
constexpr auto scoped_poison(const Ts &... xs)
constexpr void unpoison_all(const Ts &... ts)
constexpr CT::Mask< T > is_equal(const T x[], const T y[], size_t len)
constexpr void unpoison(const T *p, size_t n)
constexpr void poison(const T *p, size_t n)
Strong< secure_vector< uint8_t >, struct KyberMessage_ > KyberMessage
Random message value to be encrypted by the CPA-secure Kyber encryption scheme.
Strong< secure_vector< uint8_t >, struct KyberSharedSecret_ > KyberSharedSecret
Shared secret value generated during encapsulation and recovered during decapsulation.