10#ifndef BOTAN_MODE_PADDING_H_
11#define BOTAN_MODE_PADDING_H_
13#include <botan/assert.h>
14#include <botan/secmem.h>
36 static std::unique_ptr<BlockCipherModePaddingMethod>
create(std::string_view algo_spec);
45 virtual void add_padding(std::span<uint8_t> buffer,
size_t final_block_bytes,
size_t block_size)
const;
53 size_t unpad(std::span<const uint8_t> last_block)
const;
66 virtual size_t output_length(
size_t input_length,
size_t block_size)
const;
71 virtual std::string
name()
const = 0;
87 virtual void apply_padding(std::span<uint8_t> last_block,
size_t padding_start_pos)
const = 0;
98 virtual size_t remove_padding(std::span<const uint8_t> last_block)
const = 0;
106 void apply_padding(std::span<uint8_t> last_block,
size_t final_block_bytes)
const override;
108 size_t remove_padding(std::span<const uint8_t> last_block)
const override;
112 std::string
name()
const override {
return "PKCS7"; }
120 void apply_padding(std::span<uint8_t> last_block,
size_t final_block_bytes)
const override;
122 size_t remove_padding(std::span<const uint8_t> last_block)
const override;
126 std::string
name()
const override {
return "X9.23"; }
134 void apply_padding(std::span<uint8_t> last_block,
size_t final_block_bytes)
const override;
136 size_t remove_padding(std::span<const uint8_t> last_block)
const override;
140 std::string
name()
const override {
return "OneAndZeros"; }
148 void apply_padding(std::span<uint8_t> last_block,
size_t final_block_bytes)
const override;
150 size_t remove_padding(std::span<const uint8_t> last_block)
const override;
154 std::string
name()
const override {
return "ESP"; }
164 size_t )
const override {
168 size_t remove_padding(std::span<const uint8_t> last_block)
const override {
return last_block.size(); }
172 size_t output_length(
size_t input_length,
size_t )
const override {
return input_length; }
174 std::string
name()
const override {
return "NoPadding"; }
177 void apply_padding(std::span<uint8_t> ,
size_t )
const override {
#define BOTAN_ASSERT_UNREACHABLE()
size_t remove_padding(std::span< const uint8_t > last_block) const override
void apply_padding(std::span< uint8_t > last_block, size_t final_block_bytes) const override
std::string name() const override
bool valid_blocksize(size_t bs) const override
virtual std::string name() const =0
static std::unique_ptr< BlockCipherModePaddingMethod > create(std::string_view algo_spec)
virtual size_t remove_padding(std::span< const uint8_t > last_block) const =0
virtual bool valid_blocksize(size_t block_size) const =0
virtual size_t output_length(size_t input_length, size_t block_size) const
size_t unpad(std::span< const uint8_t > last_block) const
virtual ~BlockCipherModePaddingMethod()=default
virtual void apply_padding(std::span< uint8_t > last_block, size_t padding_start_pos) const =0
virtual void add_padding(std::span< uint8_t > buffer, size_t final_block_bytes, size_t block_size) const
std::string name() const override
bool valid_blocksize(size_t bs) const override
size_t remove_padding(std::span< const uint8_t > last_block) const override
void apply_padding(std::span< uint8_t > last_block, size_t final_block_bytes) const override
std::string name() const override
bool valid_blocksize(size_t) const override
size_t output_length(size_t input_length, size_t) const override
void add_padding(std::span< uint8_t >, size_t, size_t) const override
size_t remove_padding(std::span< const uint8_t > last_block) const override
std::string name() const override
bool valid_blocksize(size_t bs) const override
size_t remove_padding(std::span< const uint8_t > last_block) const override
void apply_padding(std::span< uint8_t > last_block, size_t final_block_bytes) const override
size_t remove_padding(std::span< const uint8_t > last_block) const override
void apply_padding(std::span< uint8_t > last_block, size_t final_block_bytes) const override
bool valid_blocksize(size_t bs) const override
std::string name() const override