Botan 3.9.0
Crypto and TLS for C&
Botan::Null_Padding Class Referencefinal

#include <mode_pad.h>

Inheritance diagram for Botan::Null_Padding:
Botan::BlockCipherModePaddingMethod

Public Member Functions

void add_padding (std::span< uint8_t >, size_t, size_t) const override
std::string name () const override
size_t output_length (size_t input_length, size_t) const override
size_t remove_padding (std::span< const uint8_t > last_block) const override
size_t unpad (std::span< const uint8_t > last_block) const
bool valid_blocksize (size_t) const override

Static Public Member Functions

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

Detailed Description

Null Padding

Definition at line 162 of file mode_pad.h.

Member Function Documentation

◆ add_padding()

void Botan::Null_Padding::add_padding ( std::span< uint8_t > buffer,
size_t final_block_bytes,
size_t block_size ) const
inlineoverridevirtual

Add padding bytes to buffer.

Parameters
bufferdata to pad, span must be large enough to hold the padding behind the final (partial) block
final_block_bytessize of the final block in bytes
block_sizesize of each block in bytes

Reimplemented from Botan::BlockCipherModePaddingMethod.

Definition at line 164 of file mode_pad.h.

166 {
167 // no padding
168 }

◆ create()

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

Get a block cipher padding mode by name (eg "NoPadding" or "PKCS7")

Parameters
algo_specblock cipher padding mode name

Get a block cipher padding method by name

Definition at line 20 of file mode_pad.cpp.

20 {
21 if(algo_spec == "NoPadding") {
22 return std::make_unique<Null_Padding>();
23 }
24
25 if(algo_spec == "PKCS7") {
26 return std::make_unique<PKCS7_Padding>();
27 }
28
29 if(algo_spec == "OneAndZeros") {
30 return std::make_unique<OneAndZeros_Padding>();
31 }
32
33 if(algo_spec == "X9.23") {
34 return std::make_unique<ANSI_X923_Padding>();
35 }
36
37 if(algo_spec == "ESP") {
38 return std::make_unique<ESP_Padding>();
39 }
40
41 return nullptr;
42}

Referenced by Botan::Cipher_Mode::create().

◆ name()

std::string Botan::Null_Padding::name ( ) const
inlineoverridevirtual
Returns
name of the mode

Implements Botan::BlockCipherModePaddingMethod.

Definition at line 176 of file mode_pad.h.

176{ return "NoPadding"; }

◆ output_length()

size_t Botan::Null_Padding::output_length ( size_t input_length,
size_t block_size ) const
inlineoverridevirtual
Parameters
input_lengthnumber of bytes to be padded
block_sizesize of each block in bytes
Returns
the total number of output bytes (including the padding)

Reimplemented from Botan::BlockCipherModePaddingMethod.

Definition at line 174 of file mode_pad.h.

174{ return input_length; }

◆ remove_padding()

size_t Botan::Null_Padding::remove_padding ( std::span< const uint8_t > last_block) const
inlineoverridevirtual

Removes the padding from last_block and returns the number of data bytes. If the padding is invalid, this returns the byte length of last_block.

Concrete implementations of this function must ensure not to leak the size or validity of the padding via side channels. The bytes of last_block are passed in with CT::poison applied to them.

Implements Botan::BlockCipherModePaddingMethod.

Definition at line 170 of file mode_pad.h.

170{ return last_block.size(); }

◆ unpad()

size_t Botan::BlockCipherModePaddingMethod::unpad ( std::span< const uint8_t > last_block) const
inherited

Remove padding bytes from block

Parameters
last_blockthe last block containing the padding
Returns
number of data bytes, or if the padding is invalid returns the byte length of last_block (i.e. the block size)

Definition at line 54 of file mode_pad.cpp.

54 {
55 if(!valid_blocksize(last_block.size())) {
56 return last_block.size();
57 }
58
59 auto poison = CT::scoped_poison(last_block);
60 return CT::driveby_unpoison(remove_padding(last_block));
61}
virtual size_t remove_padding(std::span< const uint8_t > last_block) const =0
virtual bool valid_blocksize(size_t block_size) const =0
decltype(auto) driveby_unpoison(T &&v)
Definition ct_utils.h:241
constexpr auto scoped_poison(const Ts &... xs)
Definition ct_utils.h:220
constexpr void poison(const T *p, size_t n)
Definition ct_utils.h:54

References Botan::CT::driveby_unpoison(), remove_padding(), Botan::CT::scoped_poison(), and valid_blocksize().

◆ valid_blocksize()

bool Botan::Null_Padding::valid_blocksize ( size_t block_size) const
inlineoverridevirtual
Parameters
block_sizeof the cipher
Returns
valid block size for this padding mode

Implements Botan::BlockCipherModePaddingMethod.

Definition at line 172 of file mode_pad.h.

172{ return true; }

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