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 {
67 return ((input_length + block_size) / block_size) * block_size;
73 virtual std::string
name()
const = 0;
89 virtual void apply_padding(std::span<uint8_t> last_block,
size_t padding_start_pos)
const = 0;
108 void apply_padding(std::span<uint8_t> last_block,
size_t final_block_bytes)
const override;
110 size_t remove_padding(std::span<const uint8_t> last_block)
const override;
114 std::string
name()
const override {
return "PKCS7"; }
122 void apply_padding(std::span<uint8_t> last_block,
size_t final_block_bytes)
const override;
124 size_t remove_padding(std::span<const uint8_t> last_block)
const override;
128 std::string
name()
const override {
return "X9.23"; }
136 void apply_padding(std::span<uint8_t> last_block,
size_t final_block_bytes)
const override;
138 size_t remove_padding(std::span<const uint8_t> last_block)
const override;
142 std::string
name()
const override {
return "OneAndZeros"; }
150 void apply_padding(std::span<uint8_t> last_block,
size_t final_block_bytes)
const override;
152 size_t remove_padding(std::span<const uint8_t> last_block)
const override;
156 std::string
name()
const override {
return "ESP"; }
166 size_t )
const override {
170 size_t remove_padding(std::span<const uint8_t> last_block)
const override {
return last_block.size(); }
174 size_t output_length(
size_t input_length,
size_t )
const override {
return input_length; }
176 std::string
name()
const override {
return "NoPadding"; }
179 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
size_t unpad(std::span< const uint8_t > last_block) const
virtual size_t output_length(size_t input_length, size_t block_size) 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