Botan 2.13.0 Crypto and TLS for C++11

- Main Page
- Namespaces
- Classes
- Files

- Class List
- Class Index
- Class Hierarchy
- Class Members

Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
Botan::RSA_PrivateKey Class Referencefinal abstract

`#include <rsa.h>`

Inheritance diagram for Botan::RSA_PrivateKey:

## Public Member Functions
virtual std::string | algo_name () const =0
std::string | algo_name () const override
AlgorithmIdentifier | algorithm_identifier () const override
virtual AlgorithmIdentifier | algorithm_identifier () const =0
bool | check_key (RandomNumberGenerator &rng, bool) const override
std::unique_ptr< PK_Ops::Decryption > | create_decryption_op (RandomNumberGenerator &rng, const std::string &params, const std::string &provider) const override
std::unique_ptr< PK_Ops::Encryption > | create_encryption_op (RandomNumberGenerator &rng, const std::string &params, const std::string &provider) const override
virtual std::unique_ptr< PK_Ops::Encryption > | create_encryption_op (RandomNumberGenerator &rng, const std::string &params, const std::string &provider) const
std::unique_ptr< PK_Ops::KEM_Decryption > | create_kem_decryption_op (RandomNumberGenerator &rng, const std::string &params, const std::string &provider) const override
std::unique_ptr< PK_Ops::KEM_Encryption > | create_kem_encryption_op (RandomNumberGenerator &rng, const std::string &params, const std::string &provider) const override
virtual std::unique_ptr< PK_Ops::KEM_Encryption > | create_kem_encryption_op (RandomNumberGenerator &rng, const std::string &params, const std::string &provider) const
virtual std::unique_ptr< PK_Ops::Key_Agreement > | create_key_agreement_op (RandomNumberGenerator &rng, const std::string &params, const std::string &provider) const
std::unique_ptr< PK_Ops::Signature > | create_signature_op (RandomNumberGenerator &rng, const std::string &params, const std::string &provider) const override
std::unique_ptr< PK_Ops::Verification > | create_verification_op (const std::string &params, const std::string &provider) const override
virtual std::unique_ptr< PK_Ops::Verification > | create_verification_op (const std::string &params, const std::string &provider) const
virtual Signature_Format | default_x509_signature_format () const
virtual size_t | estimated_strength () const =0
size_t | estimated_strength () const override
std::string | fingerprint (const std::string &alg) const
std::string | fingerprint_private (const std::string &alg) const
std::string | fingerprint_public (const std::string &alg="SHA-256") const
const BigInt & | get_c () const
const BigInt & | get_d () const
const BigInt & | get_d1 () const
const BigInt & | get_d2 () const
const BigInt & | get_e () const
const BigInt & | get_n () const
virtual OID | get_oid () const
const BigInt & | get_p () const
const BigInt & | get_q () const
virtual size_t | key_length () const =0
size_t | key_length () const override
virtual size_t | message_part_size () const
virtual size_t | message_parts () const
virtual AlgorithmIdentifier | pkcs8_algorithm_identifier () const
std::shared_ptr< const RSA_Private_Data > | private_data () const
secure_vector< uint8_t > | private_key_bits () const override
secure_vector< uint8_t > | private_key_info () const
std::shared_ptr< const RSA_Public_Data > | public_data () const
std::vector< uint8_t > | public_key_bits () const override
virtual std::vector< uint8_t > | public_key_bits () const =0
| RSA_PrivateKey (const AlgorithmIdentifier &alg_id, const secure_vector< uint8_t > &key_bits)
| RSA_PrivateKey (const BigInt &p, const BigInt &q, const BigInt &e, const BigInt &d=0, const BigInt &n=0)
| RSA_PrivateKey (RandomNumberGenerator &rng, size_t bits, size_t exp=65537)
virtual bool | stateful_operation () const
std::vector< uint8_t > | subject_public_key () const

## Protected Member Functions
void | init (BigInt &&n, BigInt &&e)

## Protected Attributes
std::shared_ptr< const RSA_Public_Data > | m_public

## Detailed Description

RSA Private Key

Definition at line 92 of file rsa.h.

## Constructor & Destructor Documentation

Botan::RSA_PrivateKey::RSA_PrivateKey | ( | const AlgorithmIdentifier & | alg_id,
|  | const secure_vector< uint8_t > & | key_bits
| ) |  |

Load a private key.

Parameters

  alg_id | the X.509 algorithm identifier
  key_bits | PKCS#1 RSAPrivateKey bits

Definition at line 211 of file rsa.cpp.

References Botan::PEM_Code::decode(), Botan::BER_Decoder::decode_and_check(), Botan::RSA_PublicKey::init(), Botan::SEQUENCE, and Botan::BER_Decoder::start_cons().

213 {
214 BigInt n, e, d, p, q, d1, d2, c;
215
216 BER_Decoder(key_bits)
217 .start_cons(SEQUENCE)
218 .decode_and_check<size_t>(0, "Unknown PKCS #1 key format version")
219 .decode(n)
220 .decode(e)
221 .decode(d)
222 .decode(p)
223 .decode(q)
224 .decode(d1)
225 .decode(d2)
226 .decode(c)
227 .end_cons();
228
229 RSA_PublicKey::init(std::move(n), std::move(e));
230
231 RSA_PrivateKey::init(std::move(d), std::move(p), std::move(q),
232 std::move(d1), std::move(d2), std::move(c));
233 }
Botan::SEQUENCE
Definition: asn1_obj.h:40
Botan::PEM_Code::decode
secure_vector< uint8_t > decode(DataSource &source, std::string &label)
Definition: pem.cpp:68
Botan::RSA_PublicKey::init
void init(BigInt &&n, BigInt &&e)
Definition: rsa.cpp:111

Botan::RSA_PrivateKey::RSA_PrivateKey | ( | const BigInt & | p,
|  | const BigInt & | q,
|  | const BigInt & | e,
|  | const BigInt & | d = `0`,
|  | const BigInt & | n = `0`
| ) |  |

Construct a private key from the specified parameters.

Parameters

  p | the first prime
  q | the second prime
  e | the exponent
  d | if specified, this has to be d with exp * d = 1 mod (p - 1, q - 1). Leave it as 0 if you wish to the constructor to calculate it.
  n | if specified, this must be n = p * q. Leave it as 0 if you wish to the constructor to calculate it.

Definition at line 235 of file rsa.cpp.

References Botan::ct_modulo(), Botan::RSA_PublicKey::init(), Botan::inverse_mod(), Botan::BigInt::is_zero(), and Botan::lcm().

240 {
241 BigInt p = prime1;
242 BigInt q = prime2;
243 BigInt n = mod;
244 if(n.is_zero())
245 n = p * q;
246
247 BigInt e = exp;
248
249 BigInt d = d_exp;
250
251 const BigInt p_minus_1 = p - 1;
252 const BigInt q_minus_1 = q - 1;
253
254 if(d.is_zero())
255 {
256 const BigInt phi_n = lcm(p_minus_1, q_minus_1);
257 d = inverse_mod(e, phi_n);
258 }
259
260 BigInt d1 = ct_modulo(d, p_minus_1);
261 BigInt d2 = ct_modulo(d, q_minus_1);
262 BigInt c = inverse_mod(q, p);
263
264 RSA_PublicKey::init(std::move(n), std::move(e));
265
266 RSA_PrivateKey::init(std::move(d), std::move(p), std::move(q),
267 std::move(d1), std::move(d2), std::move(c));
268 }
Botan::ct_modulo
BigInt ct_modulo(const BigInt &x, const BigInt &y)
Definition: divide.cpp:118
Botan::lcm
BigInt lcm(const BigInt &a, const BigInt &b)
Definition: numthry.cpp:120
Botan::inverse_mod
BigInt inverse_mod(const BigInt &n, const BigInt &mod)
Definition: numthry.cpp:325
Botan::RSA_PublicKey::init
void init(BigInt &&n, BigInt &&e)
Definition: rsa.cpp:111

Botan::RSA_PrivateKey::RSA_PrivateKey | ( | RandomNumberGenerator & | rng,
|  | size_t | bits,
|  | size_t | exp = `65537`
| ) |  |

Create a new private key with the specified bit length

Parameters

  rng | the random number generator to use
  bits | the desired bit length of the private key
  exp | the public exponent to be used

Definition at line 273 of file rsa.cpp.

References Botan::RSA_PublicKey::algo_name(), Botan::BigInt::bits(), Botan::ct_modulo(), Botan::generate_rsa_prime(), Botan::RSA_PublicKey::init(), Botan::inverse_mod(), Botan::lcm(), and Botan::ASN1::to_string().

275 {
276 if(bits < 1024)
277 throw Invalid_Argument(algo_name() + ": Can't make a key that is only " +
278 std::to_string(bits) + " bits long");
279 if(exp < 3 || exp % 2 == 0)
280 throw Invalid_Argument(algo_name() + ": Invalid encryption exponent");
281
282 BigInt n, e, d, p, q, d1, d2, c;
283
284 e = exp;
285
286 const size_t p_bits = (bits + 1) / 2;
287 const size_t q_bits = bits - p_bits;
288
289 do
290 {
291 // TODO could generate primes in thread pool
292 p = generate_rsa_prime(rng, rng, p_bits, e);
293 q = generate_rsa_prime(rng, rng, q_bits, e);
294 n = p * q;
295 } while(n.bits() != bits);
296
297 const BigInt p_minus_1 = p - 1;
298 const BigInt q_minus_1 = q - 1;
299
300 const BigInt phi_n = lcm(p_minus_1, q_minus_1);
301 // FIXME: this uses binary ext gcd because phi_n is even
302 d = inverse_mod(e, phi_n);
303 d1 = ct_modulo(d, p_minus_1);
304 d2 = ct_modulo(d, q_minus_1);
305 c = inverse_mod(q, p); // p odd, so uses const time algorithm
306
307 RSA_PublicKey::init(std::move(n), std::move(e));
308
309 RSA_PrivateKey::init(std::move(d), std::move(p), std::move(q),
310 std::move(d1), std::move(d2), std::move(c));
311 }
Botan::ct_modulo
BigInt ct_modulo(const BigInt &x, const BigInt &y)
Definition: divide.cpp:118
Botan::ASN1::to_string
std::string to_string(const BER_Object &obj)
Definition: asn1_obj.cpp:213
Botan::lcm
BigInt lcm(const BigInt &a, const BigInt &b)
Definition: numthry.cpp:120
Botan::inverse_mod
BigInt inverse_mod(const BigInt &n, const BigInt &mod)
Definition: numthry.cpp:325
Botan::RSA_PublicKey::algo_name
std::string algo_name() const override
Definition: rsa.h:43
Botan::RSA_PublicKey::init
void init(BigInt &&n, BigInt &&e)
Definition: rsa.cpp:111
Botan::generate_rsa_prime
BigInt generate_rsa_prime(RandomNumberGenerator &keygen_rng, RandomNumberGenerator &prime_test_rng, size_t bits, const BigInt &coprime, size_t prob)
Definition: make_prm.cpp:207

## Member Function Documentation

virtual std::string Botan::Public_Key::algo_name | ( |  | ) | const
| pure virtual inherited

Get the name of the underlying public key scheme.

Returns
  name of the public key scheme

Implemented in Botan::XMSS_WOTS_PublicKey, Botan::XMSS_PublicKey, Botan::TPM_PrivateKey, Botan::ECDSA_PublicKey, Botan::XMSS_WOTS_Addressed_PublicKey, Botan::ECDH_PublicKey, Botan::GOST_3410_PublicKey, Botan::ECGDSA_PublicKey, Botan::ECKCDSA_PublicKey, Botan::SM2_PublicKey, Botan::RSA_PublicKey, Botan::McEliece_PublicKey, Botan::DH_PublicKey, Botan::DSA_PublicKey, Botan::Ed25519_PublicKey, Botan::ElGamal_PublicKey, and Botan::Curve25519_PublicKey.

Referenced by Botan::PKCS8::BER_encode(), botan_pubkey_sm2_compute_za(), Botan::TLS::Policy::check_peer_key_acceptable(), Botan::TLS::Handshake_State::choose_sig_format(), Botan::TLS::Client_Key_Exchange::Client_Key_Exchange(), Botan::EMSA1::config_for_x509(), Botan::PSSR::config_for_x509(), Botan::EMSA_PKCS1v15::config_for_x509(), Botan::Private_Key::create_decryption_op(), Botan::Public_Key::create_encryption_op(), Botan::Private_Key::create_kem_decryption_op(), Botan::Public_Key::create_kem_encryption_op(), Botan::Private_Key::create_key_agreement_op(), Botan::Private_Key::create_signature_op(), Botan::Public_Key::create_verification_op(), Botan::Public_Key::get_oid(), Botan::TLS::Handshake_State::parse_sig_format(), Botan::PK_Decryptor_EME::PK_Decryptor_EME(), Botan::PK_Encryptor_EME::PK_Encryptor_EME(), Botan::PK_KEM_Decryptor::PK_KEM_Decryptor(), Botan::PK_KEM_Encryptor::PK_KEM_Encryptor(), Botan::PK_Key_Agreement::PK_Key_Agreement(), Botan::PK_Signer::PK_Signer(), Botan::PK_Verifier::PK_Verifier(), Botan::verify_cert_constraints_valid_for_key_type(), and Botan::X509_Object::verify_signature().

std::string Botan::RSA_PublicKey::algo_name | ( |  | ) | const
| inline override virtual inherited

Get the name of the underlying public key scheme.

Returns
  name of the public key scheme

Implements Botan::Public_Key.

Definition at line 43 of file rsa.h.

Referenced by create_decryption_op(), Botan::RSA_PublicKey::create_encryption_op(), create_kem_decryption_op(), Botan::RSA_PublicKey::create_kem_encryption_op(), create_signature_op(), Botan::RSA_PublicKey::create_verification_op(), and RSA_PrivateKey().

43 { return "RSA"; }

AlgorithmIdentifier Botan::RSA_PublicKey::algorithm_identifier | ( |  | ) | const
| override virtual inherited

Returns
  X.509 AlgorithmIdentifier for this key

Implements Botan::Public_Key.

Definition at line 148 of file rsa.cpp.

References Botan::Public_Key::get_oid(), and Botan::AlgorithmIdentifier::USE_NULL_PARAM.

149 {
150 return AlgorithmIdentifier(get_oid(), AlgorithmIdentifier::USE_NULL_PARAM);
151 }
Botan::Public_Key::get_oid
virtual OID get_oid() const
Definition: pk_keys.cpp:53
Botan::AlgorithmIdentifier::USE_NULL_PARAM
Definition: alg_id.h:24

virtual AlgorithmIdentifier Botan::Public_Key::algorithm_identifier | ( |  | ) | const
| pure virtual inherited

Returns
  X.509 AlgorithmIdentifier for this key

Implemented in Botan::XMSS_WOTS_PublicKey, Botan::XMSS_PublicKey, Botan::TPM_PrivateKey, Botan::EC_PublicKey, Botan::XMSS_WOTS_Addressed_PublicKey, Botan::GOST_3410_PublicKey, Botan::RSA_PublicKey, Botan::McEliece_PublicKey, Botan::Ed25519_PublicKey, Botan::Curve25519_PublicKey, and Botan::DL_Scheme_PublicKey.

Referenced by Botan::EMSA1::config_for_x509(), and Botan::Public_Key::subject_public_key().

bool Botan::RSA_PrivateKey::check_key | ( | RandomNumberGenerator & | rng,
|  | bool | strong
| ) |  | const
| override virtual

Test the key values for consistency.

Parameters

  rng | rng to use
  strong | whether to perform strong and lengthy version of the test

Returns
  true if the test is passed

Reimplemented from Botan::RSA_PublicKey.

Definition at line 316 of file rsa.cpp.

References Botan::ct_modulo(), get_c(), get_d(), get_d1(), get_d2(), Botan::RSA_PublicKey::get_e(), Botan::RSA_PublicKey::get_n(), get_p(), get_q(), Botan::inverse_mod(), Botan::is_prime(), Botan::lcm(), and Botan::KeyPair::signature_consistency_check().

317 {
318 if(get_n() < 35 || get_n().is_even() || get_e() < 3 || get_e().is_even())
319 return false;
320
321 if(get_d() < 2 || get_p() < 3 || get_q() < 3)
322 return false;
323
324 if(get_p() * get_q() != get_n())
325 return false;
326
327 if(get_d1() != ct_modulo(get_d(), get_p() - 1))
328 return false;
329 if(get_d2() != ct_modulo(get_d(), get_q() - 1))
330 return false;
331 if(get_c() != inverse_mod(get_q(), get_p()))
332 return false;
333
334 const size_t prob = (strong) ? 128 : 12;
335
336 if(!is_prime(get_p(), rng, prob))
337 return false;
338 if(!is_prime(get_q(), rng, prob))
339 return false;
340
341 if(strong)
342 {
343 if(ct_modulo(get_e() * get_d(), lcm(get_p() - 1, get_q() - 1)) != 1)
344 return false;
345
346 return KeyPair::signature_consistency_check(rng, *this, "EMSA4(SHA-256)");
347 }
348
349 return true;
350 }
Botan::RSA_PrivateKey::get_p
const BigInt & get_p() const
Definition: rsa.cpp:197
Botan::RSA_PublicKey::get_n
const BigInt & get_n() const
Definition: rsa.cpp:108
Botan::RSA_PublicKey::get_e
const BigInt & get_e() const
Definition: rsa.cpp:109
Botan::is_prime
bool is_prime(const BigInt &n, RandomNumberGenerator &rng, size_t prob, bool is_random)
Definition: numthry.cpp:528
Botan::ct_modulo
BigInt ct_modulo(const BigInt &x, const BigInt &y)
Definition: divide.cpp:118
Botan::RSA_PrivateKey::get_d2
const BigInt & get_d2() const
Definition: rsa.cpp:202
Botan::RSA_PrivateKey::get_d
const BigInt & get_d() const
Definition: rsa.cpp:199
Botan::KeyPair::signature_consistency_check
bool signature_consistency_check(RandomNumberGenerator &rng, const Private_Key &private_key, const Public_Key &public_key, const std::string &padding)
Definition: keypair.cpp:49
Botan::lcm
BigInt lcm(const BigInt &a, const BigInt &b)
Definition: numthry.cpp:120
Botan::inverse_mod
BigInt inverse_mod(const BigInt &n, const BigInt &mod)
Definition: numthry.cpp:325
Botan::RSA_PrivateKey::get_c
const BigInt & get_c() const
Definition: rsa.cpp:200
Botan::RSA_PrivateKey::get_d1
const BigInt & get_d1() const
Definition: rsa.cpp:201
Botan::RSA_PrivateKey::get_q
const BigInt & get_q() const
Definition: rsa.cpp:198

std::unique_ptr< PK_Ops::Decryption > Botan::RSA_PrivateKey::create_decryption_op | ( | RandomNumberGenerator & | rng,
|  | const std::string & | params,
|  | const std::string & | provider
| ) |  | const
| override virtual

This is an internal library function exposed on key types. In almost all cases applications should use wrappers in pubkey.h

Return an decryption operation for this key/params or throw

Parameters

  rng | a random number generator. The PK_Op may maintain a reference to the RNG and use it many times. The rng must outlive any operations which reference it.
  params | additional parameters
  provider | the provider to use

Reimplemented from Botan::Private_Key.

Definition at line 691 of file rsa.cpp.

References Botan::RSA_PublicKey::algo_name(), and Botan::Exception::what().

694 {
695 #if defined(BOTAN_HAS_OPENSSL)
696 if(provider == "openssl" || provider.empty())
697 {
698 try
699 {
700 return make_openssl_rsa_dec_op(*this, params);
701 }
702 catch(Exception& e)
703 {
704 if(provider == "openssl")
705 throw Lookup_Error("OpenSSL RSA provider rejected key:" + std::string(e.what()));
706 }
707 }
708 #endif
709
710 if(provider == "base" || provider.empty())
711 return std::unique_ptr<PK_Ops::Decryption>(new RSA_Decryption_Operation(*this, params, rng));
712
713 throw Provider_Not_Found(algo_name(), provider);
714 }
Botan::RSA_PublicKey::algo_name
std::string algo_name() const override
Definition: rsa.h:43

std::unique_ptr< PK_Ops::Encryption > Botan::RSA_PublicKey::create_encryption_op | ( | RandomNumberGenerator & | rng,
|  | const std::string & | params,
|  | const std::string & | provider
| ) |  | const
| override virtual inherited

This is an internal library function exposed on key types. In almost all cases applications should use wrappers in pubkey.h

Return an encryption operation for this key/params or throw

Parameters

  rng | a random number generator. The PK_Op may maintain a reference to the RNG and use it many times. The rng must outlive any operations which reference it.
  params | additional parameters
  provider | the provider to use

Reimplemented from Botan::Public_Key.

Definition at line 632 of file rsa.cpp.

References Botan::RSA_PublicKey::algo_name(), and Botan::Exception::what().

635 {
636 #if defined(BOTAN_HAS_OPENSSL)
637 if(provider == "openssl" || provider.empty())
638 {
639 try
640 {
641 return make_openssl_rsa_enc_op(*this, params);
642 }
643 catch(Exception& e)
644 {
645 /*
646 * If OpenSSL for some reason could not handle this (eg due to OAEP params),
647 * throw if openssl was specifically requested but otherwise just fall back
648 * to the normal version.
649 */
650 if(provider == "openssl")
651 throw Lookup_Error("OpenSSL RSA provider rejected key:" + std::string(e.what()));
652 }
653 }
654 #endif
655
656 if(provider == "base" || provider.empty())
657 return std::unique_ptr<PK_Ops::Encryption>(new RSA_Encryption_Operation(*this, params));
658 throw Provider_Not_Found(algo_name(), provider);
659 }
Botan::RSA_PublicKey::algo_name
std::string algo_name() const override
Definition: rsa.h:43

std::unique_ptr< PK_Ops::Encryption > Botan::Public_Key::create_encryption_op | ( | RandomNumberGenerator & | rng,
|  | const std::string & | params,
|  | const std::string & | provider
| ) |  | const
| virtual inherited

This is an internal library function exposed on key types. In almost all cases applications should use wrappers in pubkey.h

Return an encryption operation for this key/params or throw

Parameters

  rng | a random number generator. The PK_Op may maintain a reference to the RNG and use it many times. The rng must outlive any operations which reference it.
  params | additional parameters
  provider | the provider to use

Reimplemented in Botan::RSA_PublicKey, Botan::SM2_PublicKey, and Botan::ElGamal_PublicKey.

Definition at line 91 of file pk_keys.cpp.

References Botan::Public_Key::algo_name().

Referenced by Botan::PK_Encryptor_EME::PK_Encryptor_EME().

94 {
95 throw Lookup_Error(algo_name() + " does not support encryption");
96 }
Botan::Public_Key::algo_name
virtual std::string algo_name() const =0

std::unique_ptr< PK_Ops::KEM_Decryption > Botan::RSA_PrivateKey::create_kem_decryption_op | ( | RandomNumberGenerator & | rng,
|  | const std::string & | params,
|  | const std::string & | provider
| ) |  | const
| override virtual

This is an internal library function exposed on key types. In almost all cases applications should use wrappers in pubkey.h

Return a KEM decryption operation for this key/params or throw

Parameters

  rng | a random number generator. The PK_Op may maintain a reference to the RNG and use it many times. The rng must outlive any operations which reference it.
  params | additional parameters
  provider | the provider to use

Reimplemented from Botan::Private_Key.

Definition at line 717 of file rsa.cpp.

References Botan::RSA_PublicKey::algo_name().

720 {
721 if(provider == "base" || provider.empty())
722 return std::unique_ptr<PK_Ops::KEM_Decryption>(new RSA_KEM_Decryption_Operation(*this, params, rng));
723
724 throw Provider_Not_Found(algo_name(), provider);
725 }
Botan::RSA_PublicKey::algo_name
std::string algo_name() const override
Definition: rsa.h:43

std::unique_ptr< PK_Ops::KEM_Encryption > Botan::RSA_PublicKey::create_kem_encryption_op | ( | RandomNumberGenerator & | rng,
|  | const std::string & | params,
|  | const std::string & | provider
| ) |  | const
| override virtual inherited

This is an internal library function exposed on key types. In almost all cases applications should use wrappers in pubkey.h

Return a KEM encryption operation for this key/params or throw

Parameters

  rng | a random number generator. The PK_Op may maintain a reference to the RNG and use it many times. The rng must outlive any operations which reference it.
  params | additional parameters
  provider | the provider to use

Reimplemented from Botan::Public_Key.

Definition at line 662 of file rsa.cpp.

References Botan::RSA_PublicKey::algo_name().

665 {
666 if(provider == "base" || provider.empty())
667 return std::unique_ptr<PK_Ops::KEM_Encryption>(new RSA_KEM_Encryption_Operation(*this, params));
668 throw Provider_Not_Found(algo_name(), provider);
669 }
Botan::RSA_PublicKey::algo_name
std::string algo_name() const override
Definition: rsa.h:43

std::unique_ptr< PK_Ops::KEM_Encryption > Botan::Public_Key::create_kem_encryption_op | ( | RandomNumberGenerator & | rng,
|  | const std::string & | params,
|  | const std::string & | provider
| ) |  | const
| virtual inherited

This is an internal library function exposed on key types. In almost all cases applications should use wrappers in pubkey.h

Return a KEM encryption operation for this key/params or throw

Parameters

  rng | a random number generator. The PK_Op may maintain a reference to the RNG and use it many times. The rng must outlive any operations which reference it.
  params | additional parameters
  provider | the provider to use

Reimplemented in Botan::RSA_PublicKey, and Botan::McEliece_PublicKey.

Definition at line 99 of file pk_keys.cpp.

References Botan::Public_Key::algo_name().

Referenced by Botan::PK_KEM_Encryptor::PK_KEM_Encryptor().

102 {
103 throw Lookup_Error(algo_name() + " does not support KEM encryption");
104 }
Botan::Public_Key::algo_name
virtual std::string algo_name() const =0

std::unique_ptr< PK_Ops::Key_Agreement > Botan::Private_Key::create_key_agreement_op | ( | RandomNumberGenerator & | rng,
|  | const std::string & | params,
|  | const std::string & | provider
| ) |  | const
| virtual inherited

This is an internal library function exposed on key types. In almost all cases applications should use wrappers in pubkey.h

Return a key agreement operation for this key/params or throw

Parameters

  rng | a random number generator. The PK_Op may maintain a reference to the RNG and use it many times. The rng must outlive any operations which reference it.
  params | additional parameters
  provider | the provider to use

Reimplemented in Botan::ECDH_PrivateKey, Botan::Curve25519_PrivateKey, and Botan::DH_PrivateKey.

Definition at line 138 of file pk_keys.cpp.

References Botan::Public_Key::algo_name().

Referenced by Botan::PK_Key_Agreement::PK_Key_Agreement().

141 {
142 throw Lookup_Error(algo_name() + " does not support key agreement");
143 }
Botan::Public_Key::algo_name
virtual std::string algo_name() const =0

std::unique_ptr< PK_Ops::Signature > Botan::RSA_PrivateKey::create_signature_op | ( | RandomNumberGenerator & | rng,
|  | const std::string & | params,
|  | const std::string & | provider
| ) |  | const
| override virtual

This is an internal library function exposed on key types. In almost all cases applications should use wrappers in pubkey.h

Return a signature operation for this key/params or throw

Parameters

  rng | a random number generator. The PK_Op may maintain a reference to the RNG and use it many times. The rng must outlive any operations which reference it.
  params | additional parameters
  provider | the provider to use

Reimplemented from Botan::Private_Key.

Definition at line 728 of file rsa.cpp.

References Botan::RSA_PublicKey::algo_name().

731 {
732 #if defined(BOTAN_HAS_OPENSSL)
733 if(provider == "openssl" || provider.empty())
734 {
735 std::unique_ptr<PK_Ops::Signature> res = make_openssl_rsa_sig_op(*this, params);
736 if(res)
737 return res;
738 }
739 #endif
740
741 if(provider == "base" || provider.empty())
742 return std::unique_ptr<PK_Ops::Signature>(new RSA_Signature_Operation(*this, params, rng));
743
744 throw Provider_Not_Found(algo_name(), provider);
745 }
Botan::RSA_PublicKey::algo_name
std::string algo_name() const override
Definition: rsa.h:43

std::unique_ptr< PK_Ops::Verification > Botan::RSA_PublicKey::create_verification_op | ( | const std::string & | params,
|  | const std::string & | provider
| ) |  | const
| override virtual inherited

This is an internal library function exposed on key types. In almost all cases applications should use wrappers in pubkey.h

Return a verification operation for this key/params or throw

Parameters

  params | additional parameters
  provider | the provider to use

Reimplemented from Botan::Public_Key.

Definition at line 672 of file rsa.cpp.

References Botan::RSA_PublicKey::algo_name().

674 {
675 #if defined(BOTAN_HAS_OPENSSL)
676 if(provider == "openssl" || provider.empty())
677 {
678 std::unique_ptr<PK_Ops::Verification> res = make_openssl_rsa_ver_op(*this, params);
679 if(res)
680 return res;
681 }
682 #endif
683
684 if(provider == "base" || provider.empty())
685 return std::unique_ptr<PK_Ops::Verification>(new RSA_Verify_Operation(*this, params));
686
687 throw Provider_Not_Found(algo_name(), provider);
688 }
Botan::RSA_PublicKey::algo_name
std::string algo_name() const override
Definition: rsa.h:43

std::unique_ptr< PK_Ops::Verification > Botan::Public_Key::create_verification_op | ( | const std::string & | params,
|  | const std::string & | provider
| ) |  | const
| virtual inherited

This is an internal library function exposed on key types. In almost all cases applications should use wrappers in pubkey.h

Return a verification operation for this key/params or throw

Parameters

  params | additional parameters
  provider | the provider to use

Reimplemented in Botan::XMSS_PublicKey, Botan::RSA_PublicKey, Botan::ECDSA_PublicKey, Botan::XMSS_WOTS_Addressed_PublicKey, Botan::GOST_3410_PublicKey, Botan::ECGDSA_PublicKey, Botan::ECKCDSA_PublicKey, Botan::SM2_PublicKey, Botan::Ed25519_PublicKey, and Botan::DSA_PublicKey.

Definition at line 107 of file pk_keys.cpp.

References Botan::Public_Key::algo_name().

Referenced by Botan::XMSS_WOTS_Addressed_PublicKey::create_verification_op(), and Botan::PK_Verifier::PK_Verifier().

109 {
110 throw Lookup_Error(algo_name() + " does not support verification");
111 }
Botan::Public_Key::algo_name
virtual std::string algo_name() const =0

virtual Signature_Format Botan::Public_Key::default_x509_signature_format | ( |  | ) | const
| inline virtual inherited

Reimplemented in Botan::GOST_3410_PublicKey.

Definition at line 126 of file pk_keys.h.

References Botan::DER_SEQUENCE, and Botan::IEEE_1363.

Referenced by Botan::X509_Object::choose_sig_format(), and Botan::X509_Object::verify_signature().

127 {
128 return (this->message_parts() >= 2) ? DER_SEQUENCE : IEEE_1363;
129 }
Botan::Public_Key::message_parts
virtual size_t message_parts() const
Definition: pk_keys.h:113
Botan::IEEE_1363
Definition: pk_keys.h:24
Botan::DER_SEQUENCE
Definition: pk_keys.h:24

virtual size_t Botan::Public_Key::estimated_strength | ( |  | ) | const
| pure virtual inherited

Return the estimated strength of the underlying key against the best currently known attack. Note that this ignores anything but pure attacks against the key itself and do not take into account padding schemes, usage mistakes, etc which might reduce the strength. However it does suffice to provide an upper bound.

Returns
  estimated strength in bits

Implemented in Botan::XMSS_WOTS_PublicKey, Botan::XMSS_PublicKey, Botan::TPM_PrivateKey, Botan::EC_PublicKey, Botan::XMSS_WOTS_Addressed_PublicKey, Botan::DL_Scheme_PublicKey, Botan::RSA_PublicKey, Botan::McEliece_PublicKey, Botan::Ed25519_PublicKey, and Botan::Curve25519_PublicKey.

Referenced by botan_pubkey_estimated_strength().

size_t Botan::RSA_PublicKey::estimated_strength | ( |  | ) | const
| override virtual inherited

Return the estimated strength of the underlying key against the best currently known attack. Note that this ignores anything but pure attacks against the key itself and do not take into account padding schemes, usage mistakes, etc which might reduce the strength. However it does suffice to provide an upper bound.

Returns
  estimated strength in bits

Implements Botan::Public_Key.

Definition at line 143 of file rsa.cpp.

References Botan::if_work_factor(), and Botan::RSA_PublicKey::key_length().

144 {
145 return if_work_factor(key_length());
146 }
Botan::if_work_factor
size_t if_work_factor(size_t bits)
Definition: workfactor.cpp:38
Botan::RSA_PublicKey::key_length
size_t key_length() const override
Definition: rsa.cpp:138

std::string Botan::Private_Key::fingerprint | ( | const std::string & | alg | ) | const
| inline inherited

Definition at line 216 of file pk_keys.h.

217 {
218 return fingerprint_private(alg); // match behavior in previous versions
219 }
Botan::Private_Key::fingerprint_private
std::string fingerprint_private(const std::string &alg) const
Definition: pk_keys.cpp:85

std::string Botan::Private_Key::fingerprint_private | ( | const std::string & | alg | ) | const
| inherited

Returns
  Hash of the PKCS #8 encoding for this key object

Definition at line 85 of file pk_keys.cpp.

References Botan::create_hex_fingerprint(), and Botan::Private_Key::private_key_bits().

Referenced by Botan::Certificate_Store_In_SQL::find_certs_for_key(), Botan::Certificate_Store_In_SQL::insert_key(), and Botan::Certificate_Store_In_SQL::remove_key().

86 {
87 return create_hex_fingerprint(private_key_bits(), hash_algo);
88 }
Botan::Private_Key::private_key_bits
virtual secure_vector< uint8_t > private_key_bits() const =0
hash_algo
AlgorithmIdentifier hash_algo
Definition: x509_obj.cpp:22
Botan::create_hex_fingerprint
std::string create_hex_fingerprint(const uint8_t bits[], size_t bits_len, const std::string &hash_name)
Definition: pk_keys.cpp:17

std::string Botan::Public_Key::fingerprint_public | ( | const std::string & | alg = `"SHA-256"` | ) | const
| inherited

Returns
  Hash of the subject public key

Definition at line 77 of file pk_keys.cpp.

References Botan::create_hex_fingerprint(), and Botan::Public_Key::subject_public_key().

78 {
79 return create_hex_fingerprint(subject_public_key(), hash_algo);
80 }
hash_algo
AlgorithmIdentifier hash_algo
Definition: x509_obj.cpp:22
Botan::create_hex_fingerprint
std::string create_hex_fingerprint(const uint8_t bits[], size_t bits_len, const std::string &hash_name)
Definition: pk_keys.cpp:17
Botan::Public_Key::subject_public_key
std::vector< uint8_t > subject_public_key() const
Definition: pk_keys.cpp:38

const BigInt & Botan::RSA_PrivateKey::get_c | ( |  | ) | const

Definition at line 200 of file rsa.cpp.

Referenced by check_key(), and private_key_bits().

200 { return m_private->get_c(); }

const BigInt & Botan::RSA_PrivateKey::get_d | ( |  | ) | const

Get d with exp * d = 1 mod (p - 1, q - 1).

Returns
  d

Definition at line 199 of file rsa.cpp.

Referenced by check_key(), and private_key_bits().

199 { return m_private->get_d(); }

const BigInt & Botan::RSA_PrivateKey::get_d1 | ( |  | ) | const

Definition at line 201 of file rsa.cpp.

Referenced by check_key(), and private_key_bits().

201 { return m_private->get_d1(); }

const BigInt & Botan::RSA_PrivateKey::get_d2 | ( |  | ) | const

Definition at line 202 of file rsa.cpp.

Referenced by check_key(), and private_key_bits().

202 { return m_private->get_d2(); }

const BigInt & Botan::RSA_PublicKey::get_e | ( |  | ) | const
| inherited

Returns
  public exponent

Definition at line 109 of file rsa.cpp.

References Botan::RSA_PublicKey::m_public.

Referenced by Botan::RSA_PublicKey::check_key(), check_key(), private_key_bits(), and Botan::RSA_PublicKey::public_key_bits().

109 { return m_public->get_e(); }
Botan::RSA_PublicKey::m_public
std::shared_ptr< const RSA_Public_Data > m_public
Definition: rsa.h:86

const BigInt & Botan::RSA_PublicKey::get_n | ( |  | ) | const
| inherited

Returns
  public modulus

Definition at line 108 of file rsa.cpp.

References Botan::RSA_PublicKey::m_public.

Referenced by Botan::RSA_PublicKey::check_key(), check_key(), private_key_bits(), and Botan::RSA_PublicKey::public_key_bits().

108 { return m_public->get_n(); }
Botan::RSA_PublicKey::m_public
std::shared_ptr< const RSA_Public_Data > m_public
Definition: rsa.h:86

OID Botan::Public_Key::get_oid | ( |  | ) | const
| virtual inherited

Get the OID of the underlying public key scheme.

Returns
  OID of the public key scheme

Reimplemented in Botan::XMSS_WOTS_Addressed_PublicKey.

Definition at line 53 of file pk_keys.cpp.

References Botan::Public_Key::algo_name(), Botan::OID::empty(), and Botan::OIDS::str2oid_or_empty().

Referenced by Botan::DL_Scheme_PublicKey::algorithm_identifier(), Botan::Curve25519_PublicKey::algorithm_identifier(), Botan::Ed25519_PublicKey::algorithm_identifier(), Botan::McEliece_PublicKey::algorithm_identifier(), Botan::RSA_PublicKey::algorithm_identifier(), Botan::GOST_3410_PublicKey::algorithm_identifier(), Botan::EC_PublicKey::algorithm_identifier(), Botan::TPM_PrivateKey::algorithm_identifier(), and Botan::XMSS_WOTS_Addressed_PublicKey::get_oid().

54 {
55 const OID o = OIDS::str2oid_or_empty(algo_name());
56 if(o.empty())
57 throw Lookup_Error("PK algo " + algo_name() + " has no defined OIDs");
58 return o;
59 }
Botan::Public_Key::algo_name
virtual std::string algo_name() const =0
Botan::OIDS::str2oid_or_empty
BOTAN_UNSTABLE_API OID str2oid_or_empty(const std::string &name)
Definition: oids.cpp:116

const BigInt & Botan::RSA_PrivateKey::get_p | ( |  | ) | const

Get the first prime p.

Returns
  prime p

Definition at line 197 of file rsa.cpp.

Referenced by check_key(), and private_key_bits().

197 { return m_private->get_p(); }

const BigInt & Botan::RSA_PrivateKey::get_q | ( |  | ) | const

Get the second prime q.

Returns
  prime q

Definition at line 198 of file rsa.cpp.

Referenced by check_key(), and private_key_bits().

198 { return m_private->get_q(); }

void Botan::RSA_PublicKey::init | ( | BigInt && | n,
|  | BigInt && | e
| ) |  |
| protected inherited

Definition at line 111 of file rsa.cpp.

References Botan::RSA_PublicKey::m_public.

Referenced by RSA_PrivateKey(), and Botan::RSA_PublicKey::RSA_PublicKey().

112 {
113 if(n.is_negative() || n.is_even() || e.is_negative() || e.is_even())
114 throw Decoding_Error("Invalid RSA public key parameters");
115 m_public = std::make_shared<RSA_Public_Data>(std::move(n), std::move(e));
116 }
Botan::RSA_PublicKey::m_public
std::shared_ptr< const RSA_Public_Data > m_public
Definition: rsa.h:86

virtual size_t Botan::Public_Key::key_length | ( |  | ) | const
| pure virtual inherited

Return an integer value best approximating the length of the primary security parameter. For example for RSA this will be the size of the modulus, for ECDSA the size of the ECC group, and for McEliece the size of the code will be returned.

Implemented in Botan::XMSS_WOTS_PublicKey, Botan::XMSS_PublicKey, Botan::TPM_PrivateKey, Botan::EC_PublicKey, Botan::XMSS_WOTS_Addressed_PublicKey, Botan::DL_Scheme_PublicKey, Botan::RSA_PublicKey, Botan::McEliece_PublicKey, Botan::Ed25519_PublicKey, and Botan::Curve25519_PublicKey.

Referenced by Botan::TLS::Policy::check_peer_key_acceptable().

size_t Botan::RSA_PublicKey::key_length | ( |  | ) | const
| override virtual inherited

Return an integer value best approximating the length of the primary security parameter. For example for RSA this will be the size of the modulus, for ECDSA the size of the ECC group, and for McEliece the size of the code will be returned.

Implements Botan::Public_Key.

Definition at line 138 of file rsa.cpp.

References Botan::RSA_PublicKey::m_public.

Referenced by Botan::RSA_PublicKey::estimated_strength().

139 {
140 return m_public->public_modulus_bits();
141 }
Botan::RSA_PublicKey::m_public
std::shared_ptr< const RSA_Public_Data > m_public
Definition: rsa.h:86

virtual size_t Botan::Public_Key::message_part_size | ( |  | ) | const
| inline virtual inherited

Returns how large each of the message parts refered to by message_parts() is

This function is public but applications should have few reasons to ever call this.

Returns
  size of the message parts in bits

Reimplemented in Botan::ECDSA_PublicKey, Botan::GOST_3410_PublicKey, Botan::ECGDSA_PublicKey, Botan::ECKCDSA_PublicKey, Botan::SM2_PublicKey, and Botan::DSA_PublicKey.

Definition at line 124 of file pk_keys.h.

Referenced by Botan::PK_Signer::PK_Signer(), and Botan::PK_Verifier::PK_Verifier().

124 { return 0; }

virtual size_t Botan::Public_Key::message_parts | ( |  | ) | const
| inline virtual inherited

Returns more than 1 if the output of this algorithm (ciphertext, signature) should be treated as more than one value. This is used for algorithms like DSA and ECDSA, where the (r,s) output pair can be encoded as either a plain binary list or a TLV tagged DER encoding depending on the protocol.

This function is public but applications should have few reasons to ever call this.

Returns
  number of message parts

Reimplemented in Botan::ECDSA_PublicKey, Botan::GOST_3410_PublicKey, Botan::ECGDSA_PublicKey, Botan::ECKCDSA_PublicKey, Botan::SM2_PublicKey, and Botan::DSA_PublicKey.

Definition at line 113 of file pk_keys.h.

Referenced by Botan::PK_Signer::PK_Signer(), and Botan::PK_Verifier::PK_Verifier().

113 { return 1; }

virtual AlgorithmIdentifier Botan::Private_Key::pkcs8_algorithm_identifier | ( |  | ) | const
| inline virtual inherited

Returns
  PKCS #8 AlgorithmIdentifier for this key Might be different from the X.509 identifier, but normally is not

Reimplemented in Botan::XMSS_WOTS_PrivateKey, Botan::GOST_3410_PrivateKey, and Botan::XMSS_WOTS_Addressed_PrivateKey.

Definition at line 205 of file pk_keys.h.

Referenced by Botan::Private_Key::private_key_info().

206 { return algorithm_identifier(); }
Botan::Public_Key::algorithm_identifier
virtual AlgorithmIdentifier algorithm_identifier() const =0

std::shared_ptr< const RSA_Private_Data > Botan::RSA_PrivateKey::private_data | ( |  | ) | const

Definition at line 175 of file rsa.cpp.

176 {
177 return m_private;
178 }

secure_vector< uint8_t > Botan::RSA_PrivateKey::private_key_bits | ( |  | ) | const
| override virtual

Returns
  BER encoded private key bits

Implements Botan::Private_Key.

Definition at line 180 of file rsa.cpp.

References Botan::DER_Encoder::encode(), Botan::DER_Encoder::end_cons(), get_c(), Botan::DER_Encoder::get_contents(), get_d(), get_d1(), get_d2(), Botan::RSA_PublicKey::get_e(), Botan::RSA_PublicKey::get_n(), get_p(), get_q(), Botan::SEQUENCE, and Botan::DER_Encoder::start_cons().

181 {
182 return DER_Encoder()
183 .start_cons(SEQUENCE)
184 .encode(static_cast<size_t>(0))
185 .encode(get_n())
186 .encode(get_e())
187 .encode(get_d())
188 .encode(get_p())
189 .encode(get_q())
190 .encode(get_d1())
191 .encode(get_d2())
192 .encode(get_c())
193 .end_cons()
194 .get_contents();
195 }
Botan::RSA_PrivateKey::get_p
const BigInt & get_p() const
Definition: rsa.cpp:197
Botan::RSA_PublicKey::get_n
const BigInt & get_n() const
Definition: rsa.cpp:108
Botan::RSA_PublicKey::get_e
const BigInt & get_e() const
Definition: rsa.cpp:109
Botan::RSA_PrivateKey::get_d2
const BigInt & get_d2() const
Definition: rsa.cpp:202
Botan::RSA_PrivateKey::get_d
const BigInt & get_d() const
Definition: rsa.cpp:199
Botan::SEQUENCE
Definition: asn1_obj.h:40
Botan::RSA_PrivateKey::get_c
const BigInt & get_c() const
Definition: rsa.cpp:200
Botan::RSA_PrivateKey::get_d1
const BigInt & get_d1() const
Definition: rsa.cpp:201
Botan::RSA_PrivateKey::get_q
const BigInt & get_q() const
Definition: rsa.cpp:198

secure_vector< uint8_t > Botan::Private_Key::private_key_info | ( |  | ) | const
| inherited

Returns
  PKCS #8 private key encoding for this key object

Definition at line 61 of file pk_keys.cpp.

References Botan::DER_Encoder::encode(), Botan::DER_Encoder::end_cons(), Botan::DER_Encoder::get_contents(), Botan::OCTET_STRING, Botan::Private_Key::pkcs8_algorithm_identifier(), Botan::Private_Key::private_key_bits(), Botan::SEQUENCE, and Botan::DER_Encoder::start_cons().

Referenced by Botan::PKCS8::BER_encode(), Botan::PKCS8::BER_encode_encrypted_pbkdf_iter(), and Botan::PKCS8::BER_encode_encrypted_pbkdf_msec().

62 {
63 const size_t PKCS8_VERSION = 0;
64
65 return DER_Encoder()
66 .start_cons(SEQUENCE)
67 .encode(PKCS8_VERSION)
68 .encode(pkcs8_algorithm_identifier())
69 .encode(private_key_bits(), OCTET_STRING)
70 .end_cons()
71 .get_contents();
72 }
Botan::Private_Key::private_key_bits
virtual secure_vector< uint8_t > private_key_bits() const =0
Botan::SEQUENCE
Definition: asn1_obj.h:40
Botan::Private_Key::pkcs8_algorithm_identifier
virtual AlgorithmIdentifier pkcs8_algorithm_identifier() const
Definition: pk_keys.h:205
Botan::OCTET_STRING
Definition: asn1_obj.h:36

std::shared_ptr< const RSA_Public_Data > Botan::RSA_PublicKey::public_data | ( |  | ) | const
| inherited

Definition at line 103 of file rsa.cpp.

References Botan::RSA_PublicKey::m_public.

104 {
105 return m_public;
106 }
Botan::RSA_PublicKey::m_public
std::shared_ptr< const RSA_Public_Data > m_public
Definition: rsa.h:86

std::vector< uint8_t > Botan::RSA_PublicKey::public_key_bits | ( |  | ) | const
| override virtual inherited

Returns
  BER encoded public key bits

Implements Botan::Public_Key.

Definition at line 153 of file rsa.cpp.

References Botan::DER_Encoder::encode(), Botan::DER_Encoder::end_cons(), Botan::RSA_PublicKey::get_e(), Botan::RSA_PublicKey::get_n(), Botan::SEQUENCE, and Botan::DER_Encoder::start_cons().

154 {
155 std::vector<uint8_t> output;
156 DER_Encoder der(output);
157 der.start_cons(SEQUENCE)
158 .encode(get_n())
159 .encode(get_e())
160 .end_cons();
161
162 return output;
163 }
Botan::RSA_PublicKey::get_n
const BigInt & get_n() const
Definition: rsa.cpp:108
Botan::RSA_PublicKey::get_e
const BigInt & get_e() const
Definition: rsa.cpp:109
Botan::SEQUENCE
Definition: asn1_obj.h:40

virtual std::vector<uint8_t> Botan::Public_Key::public_key_bits | ( |  | ) | const
| pure virtual inherited

Returns
  BER encoded public key bits

Implemented in Botan::XMSS_WOTS_PublicKey, Botan::XMSS_PublicKey, Botan::TPM_PrivateKey, Botan::XMSS_WOTS_Addressed_PublicKey, Botan::EC_PublicKey, Botan::GOST_3410_PublicKey, Botan::RSA_PublicKey, Botan::McEliece_PublicKey, Botan::Ed25519_PublicKey, Botan::Curve25519_PublicKey, and Botan::DL_Scheme_PublicKey.

Referenced by Botan::Public_Key::subject_public_key().

virtual bool Botan::Private_Key::stateful_operation | ( |  | ) | const
| inline virtual inherited

Reimplemented in Botan::XMSS_PrivateKey.

Definition at line 189 of file pk_keys.h.

189 { return false; }

std::vector< uint8_t > Botan::Public_Key::subject_public_key | ( |  | ) | const
| inherited

Returns
  X.509 subject key encoding for this key object

Definition at line 38 of file pk_keys.cpp.

References Botan::Public_Key::algorithm_identifier(), Botan::BIT_STRING, Botan::DER_Encoder::encode(), Botan::DER_Encoder::end_cons(), Botan::Public_Key::public_key_bits(), Botan::SEQUENCE, and Botan::DER_Encoder::start_cons().

Referenced by Botan::X509::BER_encode(), Botan::PKCS10_Request::create(), Botan::Public_Key::fingerprint_public(), and Botan::X509::PEM_encode().

39 {
40 std::vector<uint8_t> output;
41
42 DER_Encoder(output).start_cons(SEQUENCE)
43 .encode(algorithm_identifier())
44 .encode(public_key_bits(), BIT_STRING)
45 .end_cons();
46
47 return output;
48 }
Botan::Public_Key::public_key_bits
virtual std::vector< uint8_t > public_key_bits() const =0
Botan::Public_Key::algorithm_identifier
virtual AlgorithmIdentifier algorithm_identifier() const =0
Botan::SEQUENCE
Definition: asn1_obj.h:40
Botan::BIT_STRING
Definition: asn1_obj.h:35

## Member Data Documentation

std::shared_ptr<const RSA_Public_Data> Botan::RSA_PublicKey::m_public
| protected inherited

Definition at line 86 of file rsa.h.

Referenced by Botan::RSA_PublicKey::get_e(), Botan::RSA_PublicKey::get_n(), Botan::RSA_PublicKey::init(), Botan::RSA_PublicKey::key_length(), and Botan::RSA_PublicKey::public_data().

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

- src/lib/pubkey/rsa/rsa.h
- src/lib/pubkey/rsa/rsa.cpp