8#include <botan/internal/eme_pkcs.h>
10#include <botan/exceptn.h>
11#include <botan/mem_ops.h>
13#include <botan/internal/ct_utils.h>
14#include <botan/internal/stl_util.h>
34 const size_t padding_bytes = key_length - inlen - 2;
37 for(
size_t i = 0; i != padding_bytes; ++i) {
41 stuffer.
append({in, inlen});
68 bad_input_m |= ~CT::Mask<uint8_t>::is_equal(in[0], 0);
69 bad_input_m |= ~CT::Mask<uint8_t>::is_equal(in[1], 2);
71 for(
size_t i = 2; i < inlen; ++i) {
74 seen_zero_m |= is_zero_m;
78 bad_input_m |= ~seen_zero_m;
86 valid_mask = (~bad_input_m).unpoisoned_value();
98 if(keybits / 8 > 10) {
99 return ((keybits / 8) - 10);
#define BOTAN_ASSERT_NOMSG(expr)
Helper class to ease in-place marshalling of concatenated fixed-length values.
void append(std::span< const uint8_t > buffer)
static Mask< T > is_zero(T x)
T if_not_set_return(T x) const
static Mask< T > cleared()
secure_vector< uint8_t > pad(const uint8_t[], size_t, size_t, RandomNumberGenerator &) const override
size_t maximum_input_size(size_t) const override
secure_vector< uint8_t > unpad(uint8_t &valid_mask, const uint8_t in[], size_t in_len) const override
uint8_t next_nonzero_byte()
void poison(const T *p, size_t n)
secure_vector< uint8_t > copy_output(CT::Mask< uint8_t > bad_input_u8, const uint8_t input[], size_t input_length, size_t offset)
void unpoison(const T *p, size_t n)
std::vector< T, secure_allocator< T > > secure_vector