Botan 3.10.0
Crypto and TLS for C&
Botan::PK_Ops::KEM_Decryption_with_KDF Class Referenceabstract

#include <pk_ops_impl.h>

Inheritance diagram for Botan::PK_Ops::KEM_Decryption_with_KDF:
Botan::PK_Ops::KEM_Decryption Botan::Classic_McEliece_Decryptor Botan::Kyber_KEM_Decryptor_Base Botan::Kyber_KEM_Decryptor Botan::ML_KEM_Decryptor

Public Member Functions

virtual size_t encapsulated_key_length () const =0
void kem_decrypt (std::span< uint8_t > out_shared_key, std::span< const uint8_t > encapsulated_key, size_t desired_shared_key_len, std::span< const uint8_t > salt) final
size_t shared_key_length (size_t desired_shared_key_len) const final
 ~KEM_Decryption_with_KDF () override

Protected Member Functions

 KEM_Decryption_with_KDF (std::string_view kdf)
virtual void raw_kem_decrypt (std::span< uint8_t > out_raw_shared_key, std::span< const uint8_t > encapsulated_key)=0
virtual size_t raw_kem_shared_key_length () const =0

Detailed Description

Definition at line 149 of file pk_ops_impl.h.

Constructor & Destructor Documentation

◆ ~KEM_Decryption_with_KDF()

Botan::PK_Ops::KEM_Decryption_with_KDF::~KEM_Decryption_with_KDF ( )
overridedefault

◆ KEM_Decryption_with_KDF()

Botan::PK_Ops::KEM_Decryption_with_KDF::KEM_Decryption_with_KDF ( std::string_view kdf)
explicitprotected

Definition at line 266 of file pk_ops.cpp.

266 {
267 if(kdf != "Raw") {
268 m_kdf = KDF::create_or_throw(kdf);
269 }
270}
static std::unique_ptr< KDF > create_or_throw(std::string_view algo_spec, std::string_view provider="")
Definition kdf.cpp:204

References Botan::KDF::create_or_throw().

Referenced by Botan::Classic_McEliece_Decryptor::Classic_McEliece_Decryptor(), Botan::Kyber_KEM_Decryptor_Base::Kyber_KEM_Decryptor_Base(), and raw_kem_shared_key_length().

Member Function Documentation

◆ encapsulated_key_length()

virtual size_t Botan::PK_Ops::KEM_Decryption::encapsulated_key_length ( ) const
pure virtualinherited

◆ kem_decrypt()

void Botan::PK_Ops::KEM_Decryption_with_KDF::kem_decrypt ( std::span< uint8_t > out_shared_key,
std::span< const uint8_t > encapsulated_key,
size_t desired_shared_key_len,
std::span< const uint8_t > salt )
finalvirtual

Implements Botan::PK_Ops::KEM_Decryption.

Definition at line 247 of file pk_ops.cpp.

250 {
251 BOTAN_ARG_CHECK(salt.empty() || m_kdf, "PK_KEM_Decryptor::decrypt requires a KDF to use a salt");
252
253 if(m_kdf) {
255 out_shared_key.size(), desired_shared_key_len, "KDF output length and shared key length match");
256
258 this->raw_kem_decrypt(raw_shared, encapsulated_key);
259 m_kdf->derive_key(out_shared_key, raw_shared, salt, {});
260 } else {
261 BOTAN_ASSERT_EQUAL(out_shared_key.size(), raw_kem_shared_key_length(), "Shared key has raw KEM output length");
262 this->raw_kem_decrypt(out_shared_key, encapsulated_key);
263 }
264}
#define BOTAN_ASSERT_EQUAL(expr1, expr2, assertion_made)
Definition assert.h:88
#define BOTAN_ARG_CHECK(expr, msg)
Definition assert.h:33
virtual void raw_kem_decrypt(std::span< uint8_t > out_raw_shared_key, std::span< const uint8_t > encapsulated_key)=0
virtual size_t raw_kem_shared_key_length() const =0
std::vector< T, secure_allocator< T > > secure_vector
Definition secmem.h:69

References BOTAN_ARG_CHECK, BOTAN_ASSERT_EQUAL, raw_kem_decrypt(), and raw_kem_shared_key_length().

◆ raw_kem_decrypt()

virtual void Botan::PK_Ops::KEM_Decryption_with_KDF::raw_kem_decrypt ( std::span< uint8_t > out_raw_shared_key,
std::span< const uint8_t > encapsulated_key )
protectedpure virtual

◆ raw_kem_shared_key_length()

virtual size_t Botan::PK_Ops::KEM_Decryption_with_KDF::raw_kem_shared_key_length ( ) const
protectedpure virtual

◆ shared_key_length()

size_t Botan::PK_Ops::KEM_Decryption_with_KDF::shared_key_length ( size_t desired_shared_key_len) const
finalvirtual

Implements Botan::PK_Ops::KEM_Decryption.

Definition at line 239 of file pk_ops.cpp.

239 {
240 if(m_kdf) {
241 return desired_shared_key_len;
242 } else {
243 return this->raw_kem_shared_key_length();
244 }
245}

References raw_kem_shared_key_length().


The documentation for this class was generated from the following files: