Botan  1.11.15
Public Member Functions | List of all members
Botan::PK_Signer Class Reference

#include <pubkey.h>

Public Member Functions

 PK_Signer (const Private_Key &key, const std::string &emsa, Signature_Format format=IEEE_1363, Fault_Protection prot=ENABLE_FAULT_PROTECTION)
 
void set_output_format (Signature_Format format)
 
std::vector< bytesign_message (const byte in[], size_t length, RandomNumberGenerator &rng)
 
std::vector< bytesign_message (const std::vector< byte > &in, RandomNumberGenerator &rng)
 
std::vector< bytesign_message (const secure_vector< byte > &in, RandomNumberGenerator &rng)
 
std::vector< bytesignature (RandomNumberGenerator &rng)
 
void update (byte in)
 
void update (const byte in[], size_t length)
 
void update (const std::vector< byte > &in)
 

Detailed Description

Public Key Signer. Use the sign_message() functions for small messages. Use multiple calls update() to process large messages and generate the signature by finally calling signature().

Definition at line 128 of file pubkey.h.

Constructor & Destructor Documentation

Botan::PK_Signer::PK_Signer ( const Private_Key key,
const std::string &  emsa,
Signature_Format  format = IEEE_1363,
Fault_Protection  prot = ENABLE_FAULT_PROTECTION 
)

Construct a PK Signer.

Parameters
keythe key to use inside this signer
emsathe EMSA to use An example would be "EMSA1(SHA-224)".
formatthe signature format to use
protsays if fault protection should be enabled

Definition at line 118 of file pubkey.cpp.

References Botan::Public_Key::algo_name(), Botan::ENABLE_FAULT_PROTECTION, and Botan::get_emsa().

122  {
123  m_op.reset(get_pk_op<PK_Ops::Signature>(key, emsa_name));
124 
125  if(prot == ENABLE_FAULT_PROTECTION)
126  m_verify_op.reset(get_pk_op<PK_Ops::Verification>(key, emsa_name));
127 
128  if(!m_op || (prot == ENABLE_FAULT_PROTECTION && !m_verify_op))
129  throw Lookup_Error("Signing with " + key.algo_name() + " not supported");
130 
131  m_emsa.reset(get_emsa(emsa_name));
132  m_sig_format = format;
133  }
BOTAN_DLL EMSA * get_emsa(const std::string &algo_spec)
Definition: get_pk_pad.cpp:15

Member Function Documentation

void Botan::PK_Signer::set_output_format ( Signature_Format  format)
inline

Set the output format of the signature.

Parameters
formatthe signature format to use

Definition at line 186 of file pubkey.h.

186 { m_sig_format = format; }
std::vector< byte > Botan::PK_Signer::sign_message ( const byte  in[],
size_t  length,
RandomNumberGenerator rng 
)

Sign a message.

Parameters
inthe message to sign as a byte array
lengththe length of the above byte array
rngthe rng to use
Returns
signature

Definition at line 138 of file pubkey.cpp.

References signature(), and update().

Referenced by Botan::TLS::Certificate_Verify::Certificate_Verify(), Botan::EAC1_1_ADO::make_signed(), Botan::X509_Object::make_signed(), Botan::EAC1_1_gen_CVC< Derived >::make_signed(), and Botan::KeyPair::signature_consistency_check().

140  {
141  update(msg, length);
142  return signature(rng);
143  }
std::vector< byte > signature(RandomNumberGenerator &rng)
Definition: pubkey.cpp:188
void update(byte in)
Definition: pubkey.h:159
std::vector<byte> Botan::PK_Signer::sign_message ( const std::vector< byte > &  in,
RandomNumberGenerator rng 
)
inline

Sign a message.

Parameters
inthe message to sign
rngthe rng to use
Returns
signature

Definition at line 147 of file pubkey.h.

149  { return sign_message(&in[0], in.size(), rng); }
std::vector< byte > sign_message(const byte in[], size_t length, RandomNumberGenerator &rng)
Definition: pubkey.cpp:138
std::vector<byte> Botan::PK_Signer::sign_message ( const secure_vector< byte > &  in,
RandomNumberGenerator rng 
)
inline

Definition at line 151 of file pubkey.h.

153  { return sign_message(&in[0], in.size(), rng); }
std::vector< byte > sign_message(const byte in[], size_t length, RandomNumberGenerator &rng)
Definition: pubkey.cpp:138
std::vector< byte > Botan::PK_Signer::signature ( RandomNumberGenerator rng)

Get the signature of the so far processed message (provided by the calls to update()).

Parameters
rngthe rng to use
Returns
signature of the total message

Definition at line 188 of file pubkey.cpp.

References BOTAN_ASSERT, Botan::DER_SEQUENCE, Botan::DER_Encoder::encode_list(), Botan::DER_Encoder::end_cons(), Botan::DER_Encoder::get_contents_unlocked(), Botan::IEEE_1363, Botan::SEQUENCE, Botan::DER_Encoder::start_cons(), Botan::ASN1::to_string(), and Botan::unlock().

Referenced by Botan::TLS::Server_Key_Exchange::Server_Key_Exchange(), and sign_message().

189  {
190  std::vector<byte> encoded = unlock(m_emsa->encoding_of(m_emsa->raw_data(),
191  m_op->max_input_bits(),
192  rng));
193 
194  std::vector<byte> plain_sig = unlock(m_op->sign(&encoded[0], encoded.size(), rng));
195 
196  BOTAN_ASSERT(self_test_signature(encoded, plain_sig), "Signature was consistent");
197 
198  if(m_op->message_parts() == 1 || m_sig_format == IEEE_1363)
199  return plain_sig;
200 
201  if(m_sig_format == DER_SEQUENCE)
202  {
203  if(plain_sig.size() % m_op->message_parts())
204  throw Encoding_Error("PK_Signer: strange signature size found");
205  const size_t SIZE_OF_PART = plain_sig.size() / m_op->message_parts();
206 
207  std::vector<BigInt> sig_parts(m_op->message_parts());
208  for(size_t j = 0; j != sig_parts.size(); ++j)
209  sig_parts[j].binary_decode(&plain_sig[SIZE_OF_PART*j], SIZE_OF_PART);
210 
211  return DER_Encoder()
212  .start_cons(SEQUENCE)
213  .encode_list(sig_parts)
214  .end_cons()
215  .get_contents_unlocked();
216  }
217  else
218  throw Encoding_Error("PK_Signer: Unknown signature format " +
219  std::to_string(m_sig_format));
220  }
std::string to_string(const BER_Object &obj)
Definition: asn1_obj.cpp:46
#define BOTAN_ASSERT(expr, assertion_made)
Definition: assert.h:27
std::vector< T > unlock(const secure_vector< T > &in)
Definition: secmem.h:97
void Botan::PK_Signer::update ( byte  in)
inline

Add a message part (single byte).

Parameters
inthe byte to add

Definition at line 159 of file pubkey.h.

References update().

Referenced by botan_pk_op_sign_update(), Botan::TLS::Server_Key_Exchange::Server_Key_Exchange(), sign_message(), and update().

159 { update(&in, 1); }
void update(byte in)
Definition: pubkey.h:159
void Botan::PK_Signer::update ( const byte  in[],
size_t  length 
)

Add a message part.

Parameters
inthe message part to add as a byte array
lengththe length of the above byte array

Definition at line 148 of file pubkey.cpp.

149  {
150  m_emsa->update(in, length);
151  }
void Botan::PK_Signer::update ( const std::vector< byte > &  in)
inline

Add a message part.

Parameters
inthe message part to add

Definition at line 172 of file pubkey.h.

References update().

Referenced by update().

172 { update(&in[0], in.size()); }
void update(byte in)
Definition: pubkey.h:159

The documentation for this class was generated from the following files: