8 #include <botan/emsa_pkcs1.h>
9 #include <botan/hash_id.h>
15 secure_vector<uint8_t> emsa3_encoding(
const secure_vector<uint8_t>& msg,
17 const uint8_t hash_id[],
18 size_t hash_id_length)
20 size_t output_length = output_bits / 8;
21 if(output_length < hash_id_length + msg.size() + 10)
22 throw Encoding_Error(
"emsa3_encoding: Output length is too small");
24 secure_vector<uint8_t> T(output_length);
25 const size_t P_LENGTH = output_length - msg.size() - hash_id_length - 2;
31 if(hash_id_length > 0)
37 buffer_insert(T, output_length-msg.size(), msg.data(), msg.size());
45 m_hash->update(input, length);
50 return m_hash->final();
58 if(msg.size() != m_hash->output_length())
59 throw Encoding_Error(
"EMSA_PKCS1v15::encoding_of: Bad input length");
61 return emsa3_encoding(msg, output_bits,
62 m_hash_id.data(), m_hash_id.size());
69 if(raw.size() != m_hash->output_length())
74 return (coded == emsa3_encoding(raw, key_bits,
75 m_hash_id.data(), m_hash_id.size()));
90 m_message += std::make_pair(input, length);
96 std::swap(ret, m_message);
105 return emsa3_encoding(msg, output_bits,
nullptr, 0);
114 return (coded == emsa3_encoding(raw, key_bits,
nullptr, 0));
bool verify(const secure_vector< uint8_t > &, const secure_vector< uint8_t > &, size_t) override
void update(const uint8_t[], size_t) override
bool verify(const secure_vector< uint8_t > &, const secure_vector< uint8_t > &, size_t) override
EMSA_PKCS1v15(HashFunction *hash)
void set_mem(T *ptr, size_t n, uint8_t val)
std::vector< T, secure_allocator< T >> secure_vector
void update(const uint8_t[], size_t) override
#define BOTAN_ASSERT_NONNULL(ptr)
secure_vector< uint8_t > raw_data() override
secure_vector< uint8_t > raw_data() override
std::vector< uint8_t > pkcs_hash_id(const std::string &name)
secure_vector< uint8_t > encoding_of(const secure_vector< uint8_t > &, size_t, RandomNumberGenerator &rng) override
size_t buffer_insert(std::vector< T, Alloc > &buf, size_t buf_offset, const T input[], size_t input_length)
std::unique_ptr< HashFunction > m_hash
secure_vector< uint8_t > encoding_of(const secure_vector< uint8_t > &, size_t, RandomNumberGenerator &rng) override