Botan 3.4.0
Crypto and TLS for C&
Public Member Functions | Protected Member Functions | List of all members
Botan::PK_Ops::KEM_Encryption_with_KDF Class Referenceabstract

#include <pk_ops_impl.h>

Inheritance diagram for Botan::PK_Ops::KEM_Encryption_with_KDF:
Botan::PK_Ops::KEM_Encryption

Public Member Functions

virtual size_t encapsulated_key_length () const =0
 
void kem_encrypt (std::span< uint8_t > out_encapsulated_key, std::span< uint8_t > out_shared_key, RandomNumberGenerator &rng, 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_Encryption_with_KDF () override=default
 

Protected Member Functions

 KEM_Encryption_with_KDF (std::string_view kdf)
 
virtual void raw_kem_encrypt (std::span< uint8_t > out_encapsulated_key, std::span< uint8_t > out_raw_shared_key, RandomNumberGenerator &rng)=0
 
virtual size_t raw_kem_shared_key_length () const =0
 

Detailed Description

Definition at line 121 of file pk_ops_impl.h.

Constructor & Destructor Documentation

◆ ~KEM_Encryption_with_KDF()

Botan::PK_Ops::KEM_Encryption_with_KDF::~KEM_Encryption_with_KDF ( )
overridedefault

◆ KEM_Encryption_with_KDF()

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

Definition at line 190 of file pk_ops.cpp.

190 {
191 if(kdf != "Raw") {
192 m_kdf = KDF::create_or_throw(kdf);
193 }
194}
static std::unique_ptr< KDF > create_or_throw(std::string_view algo_spec, std::string_view provider="")
Definition kdf.cpp:193

References Botan::KDF::create_or_throw().

Member Function Documentation

◆ encapsulated_key_length()

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

◆ kem_encrypt()

void Botan::PK_Ops::KEM_Encryption_with_KDF::kem_encrypt ( std::span< uint8_t > out_encapsulated_key,
std::span< uint8_t > out_shared_key,
RandomNumberGenerator & rng,
size_t desired_shared_key_len,
std::span< const uint8_t > salt )
finalvirtual

Implements Botan::PK_Ops::KEM_Encryption.

Definition at line 169 of file pk_ops.cpp.

173 {
174 BOTAN_ARG_CHECK(salt.empty() || m_kdf, "PK_KEM_Encryptor::encrypt requires a KDF to use a salt");
175 BOTAN_ASSERT_NOMSG(out_encapsulated_key.size() == encapsulated_key_length());
176
177 if(m_kdf) {
179 out_shared_key.size(), desired_shared_key_len, "KDF output length and shared key length match");
180
181 secure_vector<uint8_t> raw_shared(raw_kem_shared_key_length());
182 this->raw_kem_encrypt(out_encapsulated_key, raw_shared, rng);
183 m_kdf->derive_key(out_shared_key, raw_shared, salt, {});
184 } else {
185 BOTAN_ASSERT_EQUAL(out_shared_key.size(), raw_kem_shared_key_length(), "Shared key has raw KEM output length");
186 this->raw_kem_encrypt(out_encapsulated_key, out_shared_key, rng);
187 }
188}
#define BOTAN_ASSERT_NOMSG(expr)
Definition assert.h:59
#define BOTAN_ASSERT_EQUAL(expr1, expr2, assertion_made)
Definition assert.h:68
#define BOTAN_ARG_CHECK(expr, msg)
Definition assert.h:29
virtual size_t raw_kem_shared_key_length() const =0
virtual void raw_kem_encrypt(std::span< uint8_t > out_encapsulated_key, std::span< uint8_t > out_raw_shared_key, RandomNumberGenerator &rng)=0
virtual size_t encapsulated_key_length() const =0

References BOTAN_ARG_CHECK, BOTAN_ASSERT_EQUAL, and BOTAN_ASSERT_NOMSG.

◆ raw_kem_encrypt()

virtual void Botan::PK_Ops::KEM_Encryption_with_KDF::raw_kem_encrypt ( std::span< uint8_t > out_encapsulated_key,
std::span< uint8_t > out_raw_shared_key,
RandomNumberGenerator & rng )
protectedpure virtual

◆ raw_kem_shared_key_length()

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

◆ shared_key_length()

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

Implements Botan::PK_Ops::KEM_Encryption.

Definition at line 161 of file pk_ops.cpp.

161 {
162 if(m_kdf) {
163 return desired_shared_key_len;
164 } else {
165 return this->raw_kem_shared_key_length();
166 }
167}

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