Botan  1.11.34
Crypto and TLS for C++11
Public Member Functions | List of all members
Botan::PK_Signer Class Referencefinal

#include <pubkey.h>

Public Member Functions

PK_Signeroperator= (const PK_Signer &)=delete
 
 PK_Signer (const Private_Key &key, RandomNumberGenerator &rng, const std::string &emsa, Signature_Format format=IEEE_1363, const std::string &provider="")
 
 PK_Signer (const PK_Signer &)=delete
 
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)
 
void update (const std::string &in)
 
 ~PK_Signer ()
 

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 160 of file pubkey.h.

Constructor & Destructor Documentation

§ PK_Signer() [1/2]

Botan::PK_Signer::PK_Signer ( const Private_Key key,
RandomNumberGenerator rng,
const std::string &  emsa,
Signature_Format  format = IEEE_1363,
const std::string &  provider = "" 
)

Construct a PK Signer.

Parameters
keythe key to use inside this signer
rngthe random generator to use
emsathe EMSA to use An example would be "EMSA1(SHA-224)".
formatthe signature format to use
providerthe provider to use

Definition at line 210 of file pubkey.cpp.

References Botan::Public_Key::algo_name(), Botan::Private_Key::create_signature_op(), Botan::Public_Key::message_part_size(), and Botan::Public_Key::message_parts().

215  {
216  m_op = key.create_signature_op(rng, emsa, provider);
217  if(!m_op)
218  throw Invalid_Argument("Key type " + key.algo_name() + " does not support signature generation");
219  m_sig_format = format;
220  m_parts = key.message_parts();
221  m_part_size = key.message_part_size();
222  }

§ ~PK_Signer()

Botan::PK_Signer::~PK_Signer ( )

Definition at line 224 of file pubkey.cpp.

224 { /* for unique_ptr */ }

§ PK_Signer() [2/2]

Botan::PK_Signer::PK_Signer ( const PK_Signer )
delete

Member Function Documentation

§ operator=()

PK_Signer& Botan::PK_Signer::operator= ( const PK_Signer )
delete

§ set_output_format()

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 275 of file pubkey.h.

275 { m_sig_format = format; }

§ sign_message() [1/3]

std::vector<byte> Botan::PK_Signer::sign_message ( const byte  in[],
size_t  length,
RandomNumberGenerator rng 
)
inline

Sign a message all in one go

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 208 of file pubkey.h.

Referenced by Botan::TLS::Certificate_Verify::Certificate_Verify(), Botan::X509_Object::make_signed(), and Botan::KeyPair::signature_consistency_check().

210  {
211  this->update(in, length);
212  return this->signature(rng);
213  }
std::vector< byte > signature(RandomNumberGenerator &rng)
Definition: pubkey.cpp:231
void update(byte in)
Definition: pubkey.h:239

§ sign_message() [2/3]

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 221 of file pubkey.h.

223  { return sign_message(in.data(), in.size(), rng); }
std::vector< byte > sign_message(const byte in[], size_t length, RandomNumberGenerator &rng)
Definition: pubkey.h:208

§ sign_message() [3/3]

std::vector<byte> Botan::PK_Signer::sign_message ( const secure_vector< byte > &  in,
RandomNumberGenerator rng 
)
inline

Sign a message.

Parameters
inthe message to sign
rngthe rng to use
Returns
signature

Definition at line 231 of file pubkey.h.

233  { return sign_message(in.data(), in.size(), rng); }
std::vector< byte > sign_message(const byte in[], size_t length, RandomNumberGenerator &rng)
Definition: pubkey.h:208

§ signature()

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 231 of file pubkey.cpp.

References 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(), and Botan::unlock().

Referenced by Botan::TLS::Server_Key_Exchange::Server_Key_Exchange().

232  {
233  const std::vector<byte> sig = unlock(m_op->sign(rng));
234 
235  if(m_sig_format == IEEE_1363)
236  {
237  return sig;
238  }
239  else if(m_sig_format == DER_SEQUENCE)
240  {
241  if(sig.size() % m_parts != 0 || sig.size() != m_parts * m_part_size)
242  throw Internal_Error("PK_Signer: DER signature sizes unexpected, cannot encode");
243 
244  std::vector<BigInt> sig_parts(m_parts);
245  for(size_t i = 0; i != sig_parts.size(); ++i)
246  sig_parts[i].binary_decode(&sig[m_part_size*i], m_part_size);
247 
248  return DER_Encoder()
249  .start_cons(SEQUENCE)
250  .encode_list(sig_parts)
251  .end_cons()
252  .get_contents_unlocked();
253  }
254  else
255  throw Internal_Error("PK_Signer: Invalid signature format enum");
256  }
std::vector< T > unlock(const secure_vector< T > &in)
Definition: secmem.h:117

§ update() [1/4]

void Botan::PK_Signer::update ( byte  in)
inline

Add a message part (single byte).

Parameters
inthe byte to add

Definition at line 239 of file pubkey.h.

References update().

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

239 { update(&in, 1); }
void update(byte in)
Definition: pubkey.h:239

§ update() [2/4]

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 226 of file pubkey.cpp.

227  {
228  m_op->update(in, length);
229  }

§ update() [3/4]

void Botan::PK_Signer::update ( const std::vector< byte > &  in)
inline

Add a message part.

Parameters
inthe message part to add

Definition at line 252 of file pubkey.h.

References update().

Referenced by update().

252 { update(in.data(), in.size()); }
void update(byte in)
Definition: pubkey.h:239

§ update() [4/4]

void Botan::PK_Signer::update ( const std::string &  in)
inline

Add a message part.

Parameters
inthe message part to add

Definition at line 258 of file pubkey.h.

259  {
260  update(reinterpret_cast<const byte*>(in.data()), in.size());
261  }
void update(byte in)
Definition: pubkey.h:239

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