Botan 3.6.1
Crypto and TLS for C&
Botan::EME Class Referenceabstract

#include <eme.h>

Inheritance diagram for Botan::EME:
Botan::EME_PKCS1v15 Botan::EME_Raw Botan::OAEP

Public Member Functions

virtual size_t maximum_input_size (size_t keybits) const =0
 
virtual size_t pad (std::span< uint8_t > output, std::span< const uint8_t > input, size_t key_length, RandomNumberGenerator &rng) const =0
 
virtual CT::Option< size_t > unpad (std::span< uint8_t > output, std::span< const uint8_t > input) const =0
 
virtual ~EME ()
 

Static Public Member Functions

static std::unique_ptr< EMEcreate (std::string_view algo_spec)
 

Detailed Description

Encoding Method for Encryption

Definition at line 23 of file eme.h.

Constructor & Destructor Documentation

◆ ~EME()

Botan::EME::~EME ( )
virtualdefault

Member Function Documentation

◆ create()

std::unique_ptr< EME > Botan::EME::create ( std::string_view algo_spec)
static

Factory method for EME (message-encoding methods for encryption) objects

Parameters
algo_specthe name of the EME to create
Returns
pointer to newly allocated object of that type

Definition at line 28 of file eme.cpp.

28 {
29#if defined(BOTAN_HAS_EME_RAW)
30 if(algo_spec == "Raw") {
31 return std::make_unique<EME_Raw>();
32 }
33#endif
34
35#if defined(BOTAN_HAS_EME_PKCS1)
36 if(algo_spec == "PKCS1v15" || algo_spec == "EME-PKCS1-v1_5") {
37 return std::make_unique<EME_PKCS1v15>();
38 }
39#endif
40
41#if defined(BOTAN_HAS_EME_OAEP)
42 SCAN_Name req(algo_spec);
43
44 if(req.algo_name() == "OAEP" || req.algo_name() == "EME-OAEP" || req.algo_name() == "EME1") {
45 if(req.arg_count() == 1 || ((req.arg_count() == 2 || req.arg_count() == 3) && req.arg(1) == "MGF1")) {
46 if(auto hash = HashFunction::create(req.arg(0))) {
47 return std::make_unique<OAEP>(std::move(hash), req.arg(2, ""));
48 }
49 } else if(req.arg_count() == 2 || req.arg_count() == 3) {
50 auto mgf_params = parse_algorithm_name(req.arg(1));
51
52 if(mgf_params.size() == 2 && mgf_params[0] == "MGF1") {
53 auto hash = HashFunction::create(req.arg(0));
54 auto mgf1_hash = HashFunction::create(mgf_params[1]);
55
56 if(hash && mgf1_hash) {
57 return std::make_unique<OAEP>(std::move(hash), std::move(mgf1_hash), req.arg(2, ""));
58 }
59 }
60 }
61 }
62#endif
63
64 throw Algorithm_Not_Found(algo_spec);
65}
static std::unique_ptr< HashFunction > create(std::string_view algo_spec, std::string_view provider="")
Definition hash.cpp:107
std::vector< std::string > parse_algorithm_name(std::string_view namex)
Definition parsing.cpp:57

References Botan::SCAN_Name::algo_name(), Botan::SCAN_Name::arg(), Botan::SCAN_Name::arg_count(), Botan::HashFunction::create(), and Botan::parse_algorithm_name().

◆ maximum_input_size()

virtual size_t Botan::EME::maximum_input_size ( size_t keybits) const
pure virtual

Return the maximum input size in bytes we can support

Parameters
keybitsthe size of the key in bits
Returns
upper bound of input in bytes

Implemented in Botan::OAEP.

◆ pad()

virtual size_t Botan::EME::pad ( std::span< uint8_t > output,
std::span< const uint8_t > input,
size_t key_length,
RandomNumberGenerator & rng ) const
pure virtual

Encode an input

Parameters
outputbuffer that is written to
inputthe plaintext
key_lengthlength of the key in bits
rnga random number generator
Returns
number of bytes written to output

◆ unpad()

virtual CT::Option< size_t > Botan::EME::unpad ( std::span< uint8_t > output,
std::span< const uint8_t > input ) const
pure virtual

Decode an input

Parameters
outputbuffer where output is placed
inputthe encoded plaintext
Returns
number of bytes written to output if valid, or an empty option if invalid. If an empty option is returned the contents of output are undefined

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