8 #include <botan/eme_pkcs.h>
9 #include <botan/internal/ct_utils.h>
16 secure_vector<uint8_t> EME_PKCS1v15::pad(
const uint8_t in[],
size_t inlen,
18 RandomNumberGenerator& rng)
const
24 throw Invalid_Argument(
"PKCS1: Input is too large");
27 secure_vector<uint8_t> out(key_length);
30 rng.randomize(out.data() + 1, (key_length - inlen - 2));
32 for(
size_t j = 1; j != key_length - inlen - 1; ++j)
36 out[j] = rng.next_nonzero_byte();
48 secure_vector<uint8_t> EME_PKCS1v15::unpad(uint8_t& valid_mask,
49 const uint8_t in[],
size_t inlen)
const
54 return secure_vector<uint8_t>();
59 uint8_t bad_input_m = 0;
60 uint8_t seen_zero_m = 0;
63 bad_input_m |= ~CT::is_equal<uint8_t>(in[0], 0);
64 bad_input_m |= ~CT::is_equal<uint8_t>(in[1], 2);
66 for(
size_t i = 2; i < inlen; ++i)
68 const uint8_t is_zero_m = CT::is_zero<uint8_t>(in[i]);
70 delim_idx += CT::select<uint8_t>(~seen_zero_m, 1, 0);
72 bad_input_m |= is_zero_m & CT::expand_mask<uint8_t>(i < 10);
73 seen_zero_m |= is_zero_m;
76 bad_input_m |= ~seen_zero_m;
77 bad_input_m |= CT::is_less<size_t>(delim_idx, 8);
83 secure_vector<uint8_t> output(&in[delim_idx + 2], &in[inlen]);
85 valid_mask = ~bad_input_m;
95 return ((keybits / 8) - 10);
size_t maximum_input_size(size_t) const override
void poison(const T *p, size_t n)
void cond_zero_mem(T cond, T *array, size_t elems)
size_t buffer_insert(std::vector< T, Alloc > &buf, size_t buf_offset, const T input[], size_t input_length)
void unpoison(const T *p, size_t n)