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

#include <pubkey.h>

Public Member Functions

bool check_signature (const byte sig[], size_t length)
 
template<typename Alloc >
bool check_signature (const std::vector< byte, Alloc > &sig)
 
PK_Verifieroperator= (const PK_Verifier &)=delete
 
 PK_Verifier (const Public_Key &pub_key, const std::string &emsa, Signature_Format format=IEEE_1363, const std::string &provider="")
 
 PK_Verifier (const PK_Verifier &)=delete
 
void set_input_format (Signature_Format format)
 
void update (byte in)
 
void update (const byte msg_part[], size_t length)
 
void update (const std::vector< byte > &in)
 
void update (const std::string &in)
 
bool verify_message (const byte msg[], size_t msg_length, const byte sig[], size_t sig_length)
 
template<typename Alloc , typename Alloc2 >
bool verify_message (const std::vector< byte, Alloc > &msg, const std::vector< byte, Alloc2 > &sig)
 
 ~PK_Verifier ()
 

Detailed Description

Public Key Verifier. Use the verify_message() functions for small messages. Use multiple calls update() to process large messages and verify the signature by finally calling check_signature().

Definition at line 287 of file pubkey.h.

Constructor & Destructor Documentation

§ PK_Verifier() [1/2]

Botan::PK_Verifier::PK_Verifier ( const Public_Key pub_key,
const std::string &  emsa,
Signature_Format  format = IEEE_1363,
const std::string &  provider = "" 
)

Construct a PK Verifier.

Parameters
pub_keythe public key to verify against
emsathe EMSA to use (eg "EMSA3(SHA-1)")
formatthe signature format to use
providerthe provider to use

Definition at line 258 of file pubkey.cpp.

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

262  {
263  m_op = key.create_verification_op(emsa, provider);
264  if(!m_op)
265  throw Invalid_Argument("Key type " + key.algo_name() + " does not support signature verification");
266  m_sig_format = format;
267  m_parts = key.message_parts();
268  m_part_size = key.message_part_size();
269  }

§ ~PK_Verifier()

Botan::PK_Verifier::~PK_Verifier ( )

Definition at line 271 of file pubkey.cpp.

271 { /* for unique_ptr */ }

§ PK_Verifier() [2/2]

Botan::PK_Verifier::PK_Verifier ( const PK_Verifier )
delete

Member Function Documentation

§ check_signature() [1/2]

bool Botan::PK_Verifier::check_signature ( const byte  sig[],
size_t  length 
)

Check the signature of the buffered message, i.e. the one build by successive calls to update.

Parameters
sigthe signature to be verified as a byte array
lengththe length of the above byte array
Returns
true if the signature is valid, false otherwise

Definition at line 292 of file pubkey.cpp.

References Botan::BER_Decoder::decode(), Botan::DER_SEQUENCE, Botan::BigInt::encode_1363(), Botan::IEEE_1363, Botan::BER_Decoder::more_items(), Botan::SEQUENCE, and Botan::BER_Decoder::start_cons().

Referenced by botan_pk_op_verify_finish(), and Botan::TLS::Server_Key_Exchange::verify().

293  {
294  try {
295  if(m_sig_format == IEEE_1363)
296  {
297  return m_op->is_valid_signature(sig, length);
298  }
299  else if(m_sig_format == DER_SEQUENCE)
300  {
301  std::vector<byte> real_sig;
302  BER_Decoder decoder(sig, length);
303  BER_Decoder ber_sig = decoder.start_cons(SEQUENCE);
304 
305  size_t count = 0;
306  while(ber_sig.more_items())
307  {
308  BigInt sig_part;
309  ber_sig.decode(sig_part);
310  real_sig += BigInt::encode_1363(sig_part, m_part_size);
311  ++count;
312  }
313 
314  if(count != m_parts)
315  throw Decoding_Error("PK_Verifier: signature size invalid");
316 
317  return m_op->is_valid_signature(real_sig.data(), real_sig.size());
318  }
319  else
320  throw Internal_Error("PK_Verifier: Invalid signature format enum");
321  }
322  catch(Invalid_Argument&) { return false; }
323  }
static secure_vector< byte > encode_1363(const BigInt &n, size_t bytes)
Definition: big_code.cpp:82

§ check_signature() [2/2]

template<typename Alloc >
bool Botan::PK_Verifier::check_signature ( const std::vector< byte, Alloc > &  sig)
inline

Check the signature of the buffered message, i.e. the one build by successive calls to update.

Parameters
sigthe signature to be verified
Returns
true if the signature is valid, false otherwise

Definition at line 379 of file pubkey.h.

380  {
381  return check_signature(sig.data(), sig.size());
382  }
bool check_signature(const byte sig[], size_t length)
Definition: pubkey.cpp:292

§ operator=()

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

§ set_input_format()

void Botan::PK_Verifier::set_input_format ( Signature_Format  format)

Set the format of the signatures fed to this verifier.

Parameters
formatthe signature format to use

Definition at line 273 of file pubkey.cpp.

References Botan::IEEE_1363.

274  {
275  if(format != IEEE_1363 && m_parts == 1)
276  throw Invalid_Argument("PK_Verifier: This algorithm does not support DER encoding");
277  m_sig_format = format;
278  }

§ update() [1/4]

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

Add a message part (single byte) of the message corresponding to the signature to be verified.

Parameters
inthe byte to add

Definition at line 336 of file pubkey.h.

References update().

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

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

§ update() [2/4]

void Botan::PK_Verifier::update ( const byte  msg_part[],
size_t  length 
)

Add a message part of the message corresponding to the signature to be verified.

Parameters
msg_partthe new message part as a byte array
lengththe length of the above byte array

Definition at line 287 of file pubkey.cpp.

288  {
289  m_op->update(in, length);
290  }

§ update() [3/4]

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

Add a message part of the message corresponding to the signature to be verified.

Parameters
inthe new message part

Definition at line 351 of file pubkey.h.

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

§ update() [4/4]

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

Add a message part of the message corresponding to the signature to be verified.

Definition at line 358 of file pubkey.h.

359  {
360  update(reinterpret_cast<const byte*>(in.data()), in.size());
361  }
void update(byte in)
Definition: pubkey.h:336

§ verify_message() [1/2]

bool Botan::PK_Verifier::verify_message ( const byte  msg[],
size_t  msg_length,
const byte  sig[],
size_t  sig_length 
)

Verify a signature.

Parameters
msgthe message that the signature belongs to, as a byte array
msg_lengththe length of the above byte array msg
sigthe signature as a byte array
sig_lengththe length of the above byte array sig
Returns
true if the signature is valid

Definition at line 280 of file pubkey.cpp.

Referenced by Botan::X509_Object::check_signature(), Botan::KeyPair::signature_consistency_check(), Botan::TLS::Certificate_Verify::verify(), and Botan::OCSP::Response::verify_signature().

282  {
283  update(msg, msg_length);
284  return check_signature(sig, sig_length);
285  }
bool check_signature(const byte sig[], size_t length)
Definition: pubkey.cpp:292
void update(byte in)
Definition: pubkey.h:336

§ verify_message() [2/2]

template<typename Alloc , typename Alloc2 >
bool Botan::PK_Verifier::verify_message ( const std::vector< byte, Alloc > &  msg,
const std::vector< byte, Alloc2 > &  sig 
)
inline

Verify a signature.

Parameters
msgthe message that the signature belongs to
sigthe signature
Returns
true if the signature is valid

Definition at line 324 of file pubkey.h.

326  {
327  return verify_message(msg.data(), msg.size(),
328  sig.data(), sig.size());
329  }
bool verify_message(const byte msg[], size_t msg_length, const byte sig[], size_t sig_length)
Definition: pubkey.cpp:280

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