8#include <botan/internal/pkcs1_sig_padding.h> 
   10#include <botan/exceptn.h> 
   11#include <botan/hash.h> 
   12#include <botan/mem_ops.h> 
   13#include <botan/internal/fmt.h> 
   14#include <botan/internal/hash_id.h> 
   15#include <botan/internal/stl_util.h> 
   21std::vector<uint8_t> pkcs1v15_sig_encoding(std::span<const uint8_t> msg,
 
   23                                           std::span<const uint8_t> hash_id) {
 
   24   const size_t output_length = output_bits / 8;
 
   26   if(output_length < hash_id.size() + msg.size() + 2 + 8) {
 
   27      throw Encoding_Error(
"pkcs1v15_sig_encoding: Output length is too small");
 
   30   std::vector<uint8_t> padded(output_length);
 
   34   stuffer.append(0xFF, stuffer.remaining_capacity() - (1 + hash_id.size() + msg.size()));
 
   36   stuffer.append(hash_id);
 
   46   m_hash->update(input, length);
 
 
   50   return m_hash->final_stdvec();
 
 
   56   if(msg.size() != m_hash->output_length()) {
 
   57      throw Encoding_Error(
"PKCS1v15_SignaturePaddingScheme::encoding_of: Bad input length");
 
   60   return pkcs1v15_sig_encoding(msg, output_bits, m_hash_id);
 
 
   64                                             std::span<const uint8_t> raw,
 
   66   if(raw.size() != m_hash->output_length()) {
 
   71      const auto pkcs1 = pkcs1v15_sig_encoding(raw, key_bits, m_hash_id);
 
 
   79      m_hash(std::move(hash)) {
 
 
   84   return m_hash->name();
 
 
   88   return fmt(
"PKCS1v15({})", m_hash->name());
 
 
   92   if(m_hash_name.empty()) {
 
   93      return "PKCS1v15(Raw)";
 
   95      return fmt(
"PKCS1v15(Raw,{})", m_hash_name);
 
 
  106   m_hash_name = hash->name();
 
  107   m_hash_output_len = hash->output_length();
 
 
  111   m_message += std::make_pair(input, length);
 
 
  115   std::vector<uint8_t> ret;
 
  116   std::swap(ret, m_message);
 
  118   if(m_hash_output_len > 0 && ret.size() != m_hash_output_len) {
 
  119      throw Encoding_Error(
"PKCS1v15_Raw_SignaturePaddingScheme::encoding_of: Bad input length");
 
 
  128   return pkcs1v15_sig_encoding(msg, output_bits, m_hash_id);
 
 
  132                                                 std::span<const uint8_t> raw,
 
  134   if(m_hash_output_len > 0 && raw.size() != m_hash_output_len) {
 
  139      const auto pkcs1 = pkcs1v15_sig_encoding(raw, key_bits, m_hash_id);
 
 
#define BOTAN_ASSERT_NOMSG(expr)
 
Helper class to ease in-place marshalling of concatenated fixed-length values.
 
static std::unique_ptr< HashFunction > create_or_throw(std::string_view algo_spec, std::string_view provider="")
 
std::vector< uint8_t > encoding_of(std::span< const uint8_t > msg, size_t output_bits, RandomNumberGenerator &rng) override
 
PKCS1v15_Raw_SignaturePaddingScheme()
 
std::vector< uint8_t > raw_data() override
 
void update(const uint8_t input[], size_t length) override
 
std::string name() const override
 
bool verify(std::span< const uint8_t > coded, std::span< const uint8_t > raw, size_t key_bits) override
 
PKCS1v15_SignaturePaddingScheme(std::unique_ptr< HashFunction > hash)
 
void update(const uint8_t input[], size_t length) override
 
std::string name() const override
 
std::vector< uint8_t > encoding_of(std::span< const uint8_t > msg, size_t output_bits, RandomNumberGenerator &rng) override
 
std::vector< uint8_t > raw_data() override
 
bool verify(std::span< const uint8_t > coded, std::span< const uint8_t > raw, size_t key_bits) override
 
std::string hash_function() const override
 
std::string fmt(std::string_view format, const T &... args)
 
std::vector< uint8_t > pkcs_hash_id(std::string_view name)
 
bool constant_time_compare(std::span< const uint8_t > x, std::span< const uint8_t > y)