Botan 1.10.17
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)
SecureVector< bytesign_message (const byte in[], size_t length, RandomNumberGenerator &rng)
SecureVector< bytesign_message (const MemoryRegion< byte > &in, RandomNumberGenerator &rng)
SecureVector< bytesignature (RandomNumberGenerator &rng)
void update (byte in)
void update (const byte in[], size_t length)
void update (const MemoryRegion< byte > &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 123 of file pubkey.h.

Constructor & Destructor Documentation

◆ PK_Signer()

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

132 {
133 Algorithm_Factory::Engine_Iterator i(global_state().algorithm_factory());
134
135 op = 0;
136 verify_op = 0;
137
138 while(const Engine* engine = i.next())
139 {
140 if(!op)
141 op = engine->get_signature_op(key);
142
143 if(!verify_op && prot == ENABLE_FAULT_PROTECTION)
144 verify_op = engine->get_verify_op(key);
145
146 if(op && (verify_op || prot == DISABLE_FAULT_PROTECTION))
147 break;
148 }
149
150 if(!op || (!verify_op && prot == ENABLE_FAULT_PROTECTION))
151 throw Lookup_Error("Signing with " + key.algo_name() + " not supported");
152
153 emsa = get_emsa(emsa_name);
154 sig_format = format;
155 }
EMSA * get_emsa(const std::string &algo_spec)
Definition get_enc.cpp:86
@ ENABLE_FAULT_PROTECTION
Definition pubkey.h:30
@ DISABLE_FAULT_PROTECTION
Definition pubkey.h:31
Library_State & global_state()
Lookup_Error(const std::string &err)
Definition exceptn.h:37

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

Referenced by Botan::choose_sig_format(), and Botan::get_pk_signer().

◆ ~PK_Signer()

Botan::PK_Signer::~PK_Signer ( )
inline

Definition at line 192 of file pubkey.h.

192{ delete op; delete verify_op; delete emsa; }

Member Function Documentation

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

177{ sig_format = format; }

◆ sign_message() [1/2]

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

162 {
163 update(msg, length);
164 return signature(rng);
165 }
void update(byte in)
Definition pubkey.h:150
SecureVector< byte > signature(RandomNumberGenerator &rng)
Definition pubkey.cpp:210

References signature(), and update().

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

◆ sign_message() [2/2]

SecureVector< byte > Botan::PK_Signer::sign_message ( const MemoryRegion< byte > & in,
RandomNumberGenerator & rng )
inline

Sign a message.

Parameters
inthe message to sign
rngthe rng to use
Returns
signature

Definition at line 142 of file pubkey.h.

144 { return sign_message(&in[0], in.size(), rng); }
SecureVector< byte > sign_message(const byte in[], size_t length, RandomNumberGenerator &rng)
Definition pubkey.cpp:160

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

◆ signature()

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

211 {
212 SecureVector<byte> encoded = emsa->encoding_of(emsa->raw_data(),
213 op->max_input_bits(),
214 rng);
215
216 SecureVector<byte> plain_sig = op->sign(&encoded[0], encoded.size(), rng);
217
218 BOTAN_ASSERT(self_test_signature(encoded, plain_sig),
219 "PK_Signer consistency check failed");
220
221 if(op->message_parts() == 1 || sig_format == IEEE_1363)
222 return plain_sig;
223
224 if(sig_format == DER_SEQUENCE)
225 {
226 if(plain_sig.size() % op->message_parts())
227 throw Encoding_Error("PK_Signer: strange signature size found");
228 const size_t SIZE_OF_PART = plain_sig.size() / op->message_parts();
229
230 std::vector<BigInt> sig_parts(op->message_parts());
231 for(size_t j = 0; j != sig_parts.size(); ++j)
232 sig_parts[j].binary_decode(&plain_sig[SIZE_OF_PART*j], SIZE_OF_PART);
233
234 return DER_Encoder()
235 .start_cons(SEQUENCE)
236 .encode_list(sig_parts)
237 .end_cons()
238 .get_contents();
239 }
240 else
241 throw Encoding_Error("PK_Signer: Unknown signature format " +
242 to_string(sig_format));
243 }
#define BOTAN_ASSERT(expr, msg)
Definition assert.h:19
std::string to_string(u64bit n, size_t min_len)
Definition parsing.cpp:42
@ SEQUENCE
Definition asn1_int.h:35
@ DER_SEQUENCE
Definition pubkey.h:24
@ IEEE_1363
Definition pubkey.h:24
Encoding_Error(const std::string &name)
Definition exceptn.h:131

References BOTAN_ASSERT, Botan::DER_SEQUENCE, Botan::DER_Encoder::encode_list(), Botan::Encoding_Error::Encoding_Error(), Botan::DER_Encoder::end_cons(), Botan::DER_Encoder::get_contents(), Botan::IEEE_1363, Botan::SEQUENCE, Botan::MemoryRegion< T >::size(), Botan::DER_Encoder::start_cons(), and Botan::to_string().

Referenced by Botan::Server_Key_Exchange::Server_Key_Exchange(), Botan::CMS_Encoder::sign(), and sign_message().

◆ update() [1/3]

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

Add a message part (single byte).

Parameters
inthe byte to add

Definition at line 150 of file pubkey.h.

150{ update(&in, 1); }

References update().

Referenced by Botan::Server_Key_Exchange::Server_Key_Exchange(), Botan::CMS_Encoder::sign(), sign_message(), and update().

◆ update() [2/3]

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

171 {
172 emsa->update(in, length);
173 }

◆ update() [3/3]

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

Add a message part.

Parameters
inthe message part to add

Definition at line 163 of file pubkey.h.

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

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

Referenced by update().


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