Botan  1.10.9
Public Member Functions | List of all members
Botan::PK_Verifier Class Reference

#include <pubkey.h>

Public Member Functions

bool check_signature (const byte sig[], size_t length)
 
bool check_signature (const MemoryRegion< byte > &sig)
 
 PK_Verifier (const Public_Key &pub_key, const std::string &emsa, Signature_Format format=IEEE_1363)
 
void set_input_format (Signature_Format format)
 
void update (byte in)
 
void update (const byte msg_part[], size_t length)
 
void update (const MemoryRegion< byte > &in)
 
bool verify_message (const byte msg[], size_t msg_length, const byte sig[], size_t sig_length)
 
bool verify_message (const MemoryRegion< byte > &msg, const MemoryRegion< byte > &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 211 of file pubkey.h.

Constructor & Destructor Documentation

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

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

Definition at line 248 of file pubkey.cpp.

References Botan::Public_Key::algo_name(), Botan::get_emsa(), Botan::Global_State_Management::global_state(), and Botan::Algorithm_Factory::Engine_Iterator::next().

251  {
252  Algorithm_Factory::Engine_Iterator i(global_state().algorithm_factory());
253 
254  op = 0;
255 
256  while(const Engine* engine = i.next())
257  {
258  op = engine->get_verify_op(key);
259  if(op)
260  break;
261  }
262 
263  if(!op)
264  throw Lookup_Error("Verification with " + key.algo_name() + " not supported");
265 
266  emsa = get_emsa(emsa_name);
267  sig_format = format;
268  }
EMSA * get_emsa(const std::string &algo_spec)
Definition: get_enc.cpp:86
friend class Engine_Iterator
Definition: algo_factory.h:207
Library_State & global_state()
Botan::PK_Verifier::~PK_Verifier ( )
inline

Definition at line 296 of file pubkey.h.

296 { delete op; delete emsa; }

Member Function Documentation

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

References Botan::BER_Decoder::decode(), Botan::DER_SEQUENCE, Botan::BigInt::encode_1363(), Botan::IEEE_1363, Botan::PK_Ops::Verification::message_part_size(), Botan::PK_Ops::Verification::message_parts(), Botan::BER_Decoder::more_items(), Botan::EMSA::raw_data(), Botan::SEQUENCE, Botan::MemoryRegion< T >::size(), Botan::BER_Decoder::start_cons(), and Botan::to_string().

Referenced by Botan::PK_Verifier_Filter::end_msg(), and verify_message().

302  {
303  try {
304  if(sig_format == IEEE_1363)
305  return validate_signature(emsa->raw_data(), sig, length);
306  else if(sig_format == DER_SEQUENCE)
307  {
308  BER_Decoder decoder(sig, length);
309  BER_Decoder ber_sig = decoder.start_cons(SEQUENCE);
310 
311  size_t count = 0;
312  SecureVector<byte> real_sig;
313  while(ber_sig.more_items())
314  {
315  BigInt sig_part;
316  ber_sig.decode(sig_part);
317  real_sig += BigInt::encode_1363(sig_part, op->message_part_size());
318  ++count;
319  }
320 
321  if(count != op->message_parts())
322  throw Decoding_Error("PK_Verifier: signature size invalid");
323 
324  return validate_signature(emsa->raw_data(),
325  &real_sig[0], real_sig.size());
326  }
327  else
328  throw Decoding_Error("PK_Verifier: Unknown signature format " +
329  to_string(sig_format));
330  }
331  catch(Invalid_Argument) { return false; }
332  }
std::invalid_argument Invalid_Argument
Definition: exceptn.h:20
virtual SecureVector< byte > raw_data()=0
virtual size_t message_part_size() const
Definition: pk_ops.h:104
size_t size() const
Definition: secmem.h:29
virtual size_t message_parts() const
Definition: pk_ops.h:98
std::string to_string(u64bit n, size_t min_len)
Definition: parsing.cpp:42
static SecureVector< byte > encode_1363(const BigInt &n, size_t bytes)
Definition: big_code.cpp:78
bool Botan::PK_Verifier::check_signature ( const MemoryRegion< byte > &  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 275 of file pubkey.h.

References Botan::MemoryRegion< T >::size().

276  {
277  return check_signature(&sig[0], sig.size());
278  }
bool check_signature(const byte sig[], size_t length)
Definition: pubkey.cpp:301
size_t size() const
Definition: secmem.h:29
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, and Botan::PK_Ops::Verification::message_parts().

274  {
275  if(op->message_parts() == 1 && format != IEEE_1363)
276  throw Invalid_State("PK_Verifier: This algorithm always uses IEEE 1363");
277  sig_format = format;
278  }
virtual size_t message_parts() const
Definition: pk_ops.h:98
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 242 of file pubkey.h.

References update().

Referenced by update(), verify_message(), and Botan::PK_Verifier_Filter::write().

242 { update(&in, 1); }
void update(byte in)
Definition: pubkey.h:242
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 293 of file pubkey.cpp.

References Botan::EMSA::update().

294  {
295  emsa->update(in, length);
296  }
virtual void update(const byte input[], size_t length)=0
void Botan::PK_Verifier::update ( const MemoryRegion< 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 257 of file pubkey.h.

References Botan::MemoryRegion< T >::size().

258  { update(&in[0], in.size()); }
size_t size() const
Definition: secmem.h:29
void update(byte in)
Definition: pubkey.h:242
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 283 of file pubkey.cpp.

References check_signature(), and update().

Referenced by Botan::EAC_Signed_Object::check_signature(), Botan::X509_Object::check_signature(), and Botan::KeyPair::signature_consistency_check().

285  {
286  update(msg, msg_length);
287  return check_signature(sig, sig_length);
288  }
bool check_signature(const byte sig[], size_t length)
Definition: pubkey.cpp:301
void update(byte in)
Definition: pubkey.h:242
bool Botan::PK_Verifier::verify_message ( const MemoryRegion< byte > &  msg,
const MemoryRegion< byte > &  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 230 of file pubkey.h.

References Botan::MemoryRegion< T >::size().

232  {
233  return verify_message(&msg[0], msg.size(),
234  &sig[0], sig.size());
235  }
bool verify_message(const byte msg[], size_t msg_length, const byte sig[], size_t sig_length)
Definition: pubkey.cpp:283
size_t size() const
Definition: secmem.h:29

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