Botan 3.4.0
Crypto and TLS for C&
Public Member Functions | Static Public Member Functions | List of all members
Botan::EME_Raw Class Referencefinal

#include <eme_raw.h>

Inheritance diagram for Botan::EME_Raw:
Botan::EME

Public Member Functions

 EME_Raw ()=default
 
secure_vector< uint8_t > encode (const secure_vector< uint8_t > &in, size_t key_length, RandomNumberGenerator &rng) const
 
secure_vector< uint8_t > encode (const uint8_t in[], size_t in_length, size_t key_length, RandomNumberGenerator &rng) const
 
size_t maximum_input_size (size_t i) const override
 

Static Public Member Functions

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

Detailed Description

Definition at line 14 of file eme_raw.h.

Constructor & Destructor Documentation

◆ EME_Raw()

Botan::EME_Raw::EME_Raw ( )
default

Member Function Documentation

◆ create()

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

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().

◆ encode() [1/2]

secure_vector< uint8_t > Botan::EME::encode ( const secure_vector< uint8_t > & in,
size_t key_length,
RandomNumberGenerator & rng ) const
inherited

Encode an input

Parameters
inthe plaintext
key_lengthlength of the key in bits
rnga random number generator
Returns
encoded plaintext

Definition at line 80 of file eme.cpp.

82 {
83 return pad(msg.data(), msg.size(), key_bits, rng);
84}
virtual secure_vector< uint8_t > pad(const uint8_t in[], size_t in_length, size_t key_length, RandomNumberGenerator &rng) const =0

References Botan::EME::pad().

◆ encode() [2/2]

secure_vector< uint8_t > Botan::EME::encode ( const uint8_t in[],
size_t in_length,
size_t key_length,
RandomNumberGenerator & rng ) const
inherited

Encode an input

Parameters
inthe plaintext
in_lengthlength of plaintext in bytes
key_lengthlength of the key in bits
rnga random number generator
Returns
encoded plaintext

Definition at line 70 of file eme.cpp.

73 {
74 return pad(msg, msg_len, key_bits, rng);
75}

References Botan::EME::pad().

◆ maximum_input_size()

size_t Botan::EME_Raw::maximum_input_size ( size_t keybits) const
overridevirtual

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

Implements Botan::EME.

Definition at line 26 of file eme_raw.cpp.

26 {
27 return keybits / 8;
28}

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