Botan 1.10.17
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

◆ PK_Verifier()

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.

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
Library_State & global_state()
Lookup_Error(const std::string &err)
Definition exceptn.h:37

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

Referenced by Botan::get_pk_verifier().

◆ ~PK_Verifier()

Botan::PK_Verifier::~PK_Verifier ( )
inline

Definition at line 296 of file pubkey.h.

296{ delete op; delete emsa; }

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

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 }
static SecureVector< byte > encode_1363(const BigInt &n, size_t bytes)
Definition big_code.cpp:78
std::string to_string(u64bit n, size_t min_len)
Definition parsing.cpp:42
std::invalid_argument Invalid_Argument
Definition exceptn.h:20
@ SEQUENCE
Definition asn1_int.h:35
@ DER_SEQUENCE
Definition pubkey.h:24
@ IEEE_1363
Definition pubkey.h:24
Decoding_Error(const std::string &name)
Definition exceptn.h:140

References Botan::BER_Decoder::decode(), Botan::Decoding_Error::Decoding_Error(), Botan::DER_SEQUENCE, Botan::BigInt::encode_1363(), Botan::IEEE_1363, Botan::BER_Decoder::more_items(), Botan::SEQUENCE, Botan::MemoryRegion< T >::size(), Botan::BER_Decoder::start_cons(), and Botan::to_string().

Referenced by check_signature(), Botan::Server_Key_Exchange::verify(), and verify_message().

◆ check_signature() [2/2]

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.

276 {
277 return check_signature(&sig[0], sig.size());
278 }
bool check_signature(const byte sig[], size_t length)
Definition pubkey.cpp:301

References check_signature(), and Botan::MemoryRegion< T >::size().

◆ 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.

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 }
Invalid_State(const std::string &err)
Definition exceptn.h:27

References Botan::IEEE_1363, and Botan::Invalid_State::Invalid_State().

◆ update() [1/3]

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.

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

References update().

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

◆ update() [2/3]

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.

294 {
295 emsa->update(in, length);
296 }

◆ update() [3/3]

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.

258 { update(&in[0], in.size()); }

References Botan::MemoryRegion< T >::size(), and update().

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

285 {
286 update(msg, msg_length);
287 return check_signature(sig, sig_length);
288 }

References check_signature(), and update().

Referenced by Botan::X509_Object::check_signature(), Botan::KeyPair::signature_consistency_check(), Botan::Certificate_Verify::verify(), and verify_message().

◆ verify_message() [2/2]

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.

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

References Botan::MemoryRegion< T >::size(), and verify_message().


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