Botan: Botan::RW_PrivateKey Class Reference

Botan 1.10.12

- Main Page
- Related Pages
- Namespaces
- Classes
- Files

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

Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
Botan::RW_PrivateKey Class Reference

`#include <rw.h>`

Inheritance diagram for Botan::RW_PrivateKey:

## Public Member Functions
std::string | algo_name () const
AlgorithmIdentifier | algorithm_identifier () const
bool | check_key (RandomNumberGenerator &rng, bool) 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
size_t | max_input_bits () const
virtual size_t | message_part_size () const
virtual size_t | message_parts () const
virtual AlgorithmIdentifier | pkcs8_algorithm_identifier () const
MemoryVector< byte > | pkcs8_private_key () const
| RW_PrivateKey (const AlgorithmIdentifier &alg_id, const MemoryRegion< byte > &key_bits, RandomNumberGenerator &rng)
| RW_PrivateKey (RandomNumberGenerator &rng, const BigInt &p, const BigInt &q, const BigInt &e, const BigInt &d=0, const BigInt &n=0)
| RW_PrivateKey (RandomNumberGenerator &rng, size_t bits, size_t=2)
MemoryVector< byte > | x509_subject_public_key () const

## Protected Member Functions
void | gen_check (RandomNumberGenerator &rng) const
virtual void | load_check (RandomNumberGenerator &rng) const
void | load_check (RandomNumberGenerator &rng) const

## Protected Attributes
BigInt | c
BigInt | d
BigInt | d1
BigInt | d2
BigInt | e
BigInt | n
BigInt | p
BigInt | q

## Detailed Description

Rabin-Williams Private Key

Definition at line 42 of file rw.h.

## Constructor & Destructor Documentation

Botan::RW_PrivateKey::RW_PrivateKey | ( | const AlgorithmIdentifier & | alg_id,
|  | const MemoryRegion< byte > & | key_bits,
|  | RandomNumberGenerator & | rng
| ) |  |
| inline

Definition at line 46 of file rw.h.

48 :
49 IF_Scheme_PrivateKey(rng, alg_id, key_bits) {}
Botan::IF_Scheme_PrivateKey::IF_Scheme_PrivateKey
IF_Scheme_PrivateKey()
Definition: if_algo.h:99

Botan::RW_PrivateKey::RW_PrivateKey | ( | RandomNumberGenerator & | rng,
|  | const BigInt & | p,
|  | const BigInt & | q,
|  | const BigInt & | e,
|  | const BigInt & | d = `0`,
|  | const BigInt & | n = `0`
| ) |  |
| inline

Definition at line 51 of file rw.h.

54 :
55 IF_Scheme_PrivateKey(rng, p, q, e, d, n) {}
Botan::IF_Scheme_PublicKey::n
BigInt n
Definition: if_algo.h:51
Botan::IF_Scheme_PrivateKey::IF_Scheme_PrivateKey
IF_Scheme_PrivateKey()
Definition: if_algo.h:99
Botan::IF_Scheme_PublicKey::e
BigInt e
Definition: if_algo.h:51
Botan::IF_Scheme_PrivateKey::q
BigInt q
Definition: if_algo.h:101
Botan::IF_Scheme_PrivateKey::d
BigInt d
Definition: if_algo.h:101
Botan::IF_Scheme_PrivateKey::p
BigInt p
Definition: if_algo.h:101

Botan::RW_PrivateKey::RW_PrivateKey | ( | RandomNumberGenerator & | rng,
|  | size_t | bits,
|  | size_t | exp = `2`
| ) |  |

Definition at line 19 of file rw.cpp.

References Botan::RW_PublicKey::algo_name(), Botan::BigInt::bits(), Botan::IF_Scheme_PrivateKey::c, Botan::IF_Scheme_PrivateKey::d, Botan::IF_Scheme_PrivateKey::d1, Botan::IF_Scheme_PrivateKey::d2, Botan::IF_Scheme_PublicKey::e, Botan::Private_Key::gen_check(), Botan::inverse_mod(), Botan::lcm(), Botan::IF_Scheme_PublicKey::n, Botan::IF_Scheme_PrivateKey::p, Botan::IF_Scheme_PrivateKey::q, Botan::random_prime(), and Botan::to_string().

21 {
22 if(bits < 512)
23 throw Invalid_Argument(algo_name() + ": Can't make a key that is only " +
24 to_string(bits) + " bits long");
25 if(exp < 2 || exp % 2 == 1)
26 throw Invalid_Argument(algo_name() + ": Invalid encryption exponent");
27
28 e = exp;
29
30 do
31 {
32 p = random_prime(rng, (bits + 1) / 2, e / 2, 3, 4);
33 q = random_prime(rng, bits - p.bits(), e / 2, ((p % 8 == 3) ? 7 : 3), 8);
34 n = p * q;
35 } while(n.bits() != bits);
36
37 d = inverse_mod(e, lcm(p - 1, q - 1) >> 1);
38 d1 = d % (p - 1);
39 d2 = d % (q - 1);
40 c = inverse_mod(q, p);
41
42 gen_check(rng);
43 }
Botan::IF_Scheme_PublicKey::n
BigInt n
Definition: if_algo.h:51
Botan::IF_Scheme_PrivateKey::d2
BigInt d2
Definition: if_algo.h:101
Botan::IF_Scheme_PublicKey::e
BigInt e
Definition: if_algo.h:51
Botan::Invalid_Argument
std::invalid_argument Invalid_Argument
Definition: exceptn.h:20
Botan::BigInt::bits
size_t bits() const
Definition: bigint.cpp:253
Botan::IF_Scheme_PrivateKey::d1
BigInt d1
Definition: if_algo.h:101
Botan::IF_Scheme_PrivateKey::q
BigInt q
Definition: if_algo.h:101
Botan::inverse_mod
BigInt inverse_mod(const BigInt &n, const BigInt &mod)
Definition: numthry.cpp:202
Botan::RW_PublicKey::algo_name
std::string algo_name() const
Definition: rw.h:24
Botan::IF_Scheme_PrivateKey::d
BigInt d
Definition: if_algo.h:101
Botan::IF_Scheme_PrivateKey::c
BigInt c
Definition: if_algo.h:101
Botan::to_string
std::string to_string(u64bit n, size_t min_len)
Definition: parsing.cpp:42
Botan::Private_Key::gen_check
void gen_check(RandomNumberGenerator &rng) const
Definition: pk_keys.cpp:49
Botan::lcm
BigInt lcm(const BigInt &a, const BigInt &b)
Definition: numthry.cpp:194
Botan::random_prime
BigInt random_prime(RandomNumberGenerator &rng, size_t bits, const BigInt &coprime, size_t equiv, size_t modulo)
Definition: make_prm.cpp:17
Botan::IF_Scheme_PrivateKey::p
BigInt p
Definition: if_algo.h:101

## Member Function Documentation

std::string Botan::RW_PublicKey::algo_name | ( |  | ) | const
| inlinevirtualinherited

Get the name of the underlying public key scheme.

Returns
  name of the public key scheme

Implements Botan::Public_Key.

Definition at line 24 of file rw.h.

Referenced by RW_PrivateKey().

24 { return "RW"; }

AlgorithmIdentifier Botan::IF_Scheme_PublicKey::algorithm_identifier | ( |  | ) | const
| virtualinherited

Returns
  X.509 AlgorithmIdentifier for this key

Implements Botan::Public_Key.

Definition at line 15 of file if_algo.cpp.

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

16 {
17 return AlgorithmIdentifier(get_oid(),
18 AlgorithmIdentifier::USE_NULL_PARAM);
19 }
Botan::Public_Key::get_oid
virtual OID get_oid() const
Definition: pk_keys.cpp:17
Botan::AlgorithmIdentifier::USE_NULL_PARAM
Definition: alg_id.h:23

bool Botan::RW_PrivateKey::check_key | ( | RandomNumberGenerator & | rng,
|  | bool | strong
| ) |  | const
| 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::IF_Scheme_PrivateKey.

Definition at line 48 of file rw.cpp.

References Botan::IF_Scheme_PrivateKey::check_key(), Botan::IF_Scheme_PrivateKey::d, Botan::IF_Scheme_PublicKey::e, Botan::lcm(), Botan::IF_Scheme_PrivateKey::p, Botan::IF_Scheme_PrivateKey::q, and Botan::KeyPair::signature_consistency_check().

49 {
50 if(!IF_Scheme_PrivateKey::check_key(rng, strong))
51 return false;
52
53 if(!strong)
54 return true;
55
56 if((e * d) % (lcm(p - 1, q - 1) / 2) != 1)
57 return false;
58
59 return KeyPair::signature_consistency_check(rng, *this, "EMSA2(SHA-1)");
60 }
Botan::KeyPair::signature_consistency_check
bool signature_consistency_check(RandomNumberGenerator &rng, const Private_Key &key, const std::string &padding)
Definition: keypair.cpp:47
Botan::IF_Scheme_PublicKey::e
BigInt e
Definition: if_algo.h:51
Botan::IF_Scheme_PrivateKey::q
BigInt q
Definition: if_algo.h:101
Botan::IF_Scheme_PrivateKey::check_key
bool check_key(RandomNumberGenerator &rng, bool) const
Definition: if_algo.cpp:121
Botan::IF_Scheme_PrivateKey::d
BigInt d
Definition: if_algo.h:101
Botan::lcm
BigInt lcm(const BigInt &a, const BigInt &b)
Definition: numthry.cpp:194
Botan::IF_Scheme_PrivateKey::p
BigInt p
Definition: if_algo.h:101

void Botan::Private_Key::gen_check | ( | RandomNumberGenerator & | rng | ) | const
| protectedinherited

Self-test after generating a key

Parameters

  rng | a random number generator

Definition at line 49 of file pk_keys.cpp.

References Botan::Public_Key::algo_name(), and Botan::Public_Key::check_key().

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

50 {
51 if(!check_key(rng, BOTAN_PRIVATE_KEY_STRONG_CHECKS_ON_GENERATE))
52 throw Self_Test_Failure(algo_name() + " private key generation failed");
53 }
Botan::Public_Key::algo_name
virtual std::string algo_name() const =0
Botan::Public_Key::check_key
virtual bool check_key(RandomNumberGenerator &rng, bool strong) const =0

const BigInt& Botan::IF_Scheme_PrivateKey::get_c | ( |  | ) | const
| inlineinherited

Definition at line 92 of file if_algo.h.

92 { return c; }
Botan::IF_Scheme_PrivateKey::c
BigInt c
Definition: if_algo.h:101

const BigInt& Botan::IF_Scheme_PrivateKey::get_d | ( |  | ) | const
| inlineinherited

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

Returns
  d

Definition at line 90 of file if_algo.h.

90 { return d; }
Botan::IF_Scheme_PrivateKey::d
BigInt d
Definition: if_algo.h:101

const BigInt& Botan::IF_Scheme_PrivateKey::get_d1 | ( |  | ) | const
| inlineinherited

Definition at line 93 of file if_algo.h.

93 { return d1; }
Botan::IF_Scheme_PrivateKey::d1
BigInt d1
Definition: if_algo.h:101

const BigInt& Botan::IF_Scheme_PrivateKey::get_d2 | ( |  | ) | const
| inlineinherited

Definition at line 94 of file if_algo.h.

94 { return d2; }
Botan::IF_Scheme_PrivateKey::d2
BigInt d2
Definition: if_algo.h:101

const BigInt& Botan::IF_Scheme_PublicKey::get_e | ( |  | ) | const
| inlineinherited

Returns
  public exponent

Definition at line 44 of file if_algo.h.

Referenced by Botan::Server_Key_Exchange::Server_Key_Exchange().

44 { return e; }
Botan::IF_Scheme_PublicKey::e
BigInt e
Definition: if_algo.h:51

const BigInt& Botan::IF_Scheme_PublicKey::get_n | ( |  | ) | const
| inlineinherited

Returns
  public modulus

Definition at line 39 of file if_algo.h.

Referenced by Botan::Server_Key_Exchange::Server_Key_Exchange().

39 { return n; }
Botan::IF_Scheme_PublicKey::n
BigInt n
Definition: if_algo.h:51

OID Botan::Public_Key::get_oid | ( |  | ) | const
| virtualinherited

Get the OID of the underlying public key scheme.

Returns
  OID of the public key scheme

Definition at line 17 of file pk_keys.cpp.

References Botan::Public_Key::algo_name(), and Botan::OIDS::lookup().

Referenced by Botan::DL_Scheme_PublicKey::algorithm_identifier(), Botan::IF_Scheme_PublicKey::algorithm_identifier(), and Botan::EC_PublicKey::algorithm_identifier().

18 {
19 try {
20 return OIDS::lookup(algo_name());
21 }
22 catch(Lookup_Error)
23 {
24 throw Lookup_Error("PK algo " + algo_name() + " has no defined OIDs");
25 }
26 }
Botan::Public_Key::algo_name
virtual std::string algo_name() const =0
Botan::OIDS::lookup
std::string lookup(const OID &oid)
Definition: oids.cpp:31

const BigInt& Botan::IF_Scheme_PrivateKey::get_p | ( |  | ) | const
| inlineinherited

Get the first prime p.

Returns
  prime p

Definition at line 78 of file if_algo.h.

78 { return p; }
Botan::IF_Scheme_PrivateKey::p
BigInt p
Definition: if_algo.h:101

const BigInt& Botan::IF_Scheme_PrivateKey::get_q | ( |  | ) | const
| inlineinherited

Get the second prime q.

Returns
  prime q

Definition at line 84 of file if_algo.h.

84 { return q; }
Botan::IF_Scheme_PrivateKey::q
BigInt q
Definition: if_algo.h:101

void Botan::Public_Key::load_check | ( | RandomNumberGenerator & | rng | ) | const
| protectedvirtualinherited

Self-test after loading a key

Parameters

  rng | a random number generator

Reimplemented in Botan::Private_Key.

Definition at line 31 of file pk_keys.cpp.

References Botan::Public_Key::algo_name(), and Botan::Public_Key::check_key().

Referenced by Botan::DH_PrivateKey::DH_PrivateKey(), Botan::DSA_PrivateKey::DSA_PrivateKey(), Botan::ElGamal_PrivateKey::ElGamal_PrivateKey(), Botan::IF_Scheme_PrivateKey::IF_Scheme_PrivateKey(), and Botan::NR_PrivateKey::NR_PrivateKey().

32 {
33 if(!check_key(rng, BOTAN_PUBLIC_KEY_STRONG_CHECKS_ON_LOAD))
34 throw Invalid_Argument(algo_name() + ": Invalid public key");
35 }
Botan::Public_Key::algo_name
virtual std::string algo_name() const =0
Botan::Invalid_Argument
std::invalid_argument Invalid_Argument
Definition: exceptn.h:20
Botan::Public_Key::check_key
virtual bool check_key(RandomNumberGenerator &rng, bool strong) const =0

void Botan::Private_Key::load_check | ( | RandomNumberGenerator & | rng | ) | const
| protectedvirtualinherited

Self-test after loading a key

Parameters

  rng | a random number generator

Reimplemented from Botan::Public_Key.

Definition at line 40 of file pk_keys.cpp.

References Botan::Public_Key::algo_name(), and Botan::Public_Key::check_key().

Referenced by Botan::DH_PrivateKey::DH_PrivateKey(), Botan::DSA_PrivateKey::DSA_PrivateKey(), Botan::ElGamal_PrivateKey::ElGamal_PrivateKey(), and Botan::NR_PrivateKey::NR_PrivateKey().

41 {
42 if(!check_key(rng, BOTAN_PRIVATE_KEY_STRONG_CHECKS_ON_LOAD))
43 throw Invalid_Argument(algo_name() + ": Invalid private key");
44 }
Botan::Public_Key::algo_name
virtual std::string algo_name() const =0
Botan::Invalid_Argument
std::invalid_argument Invalid_Argument
Definition: exceptn.h:20
Botan::Public_Key::check_key
virtual bool check_key(RandomNumberGenerator &rng, bool strong) const =0

size_t Botan::IF_Scheme_PublicKey::max_input_bits | ( |  | ) | const
| inlinevirtualinherited

Get the maximum message size in bits supported by this public key.

Returns
  maximum message size in bits

Implements Botan::Public_Key.

Definition at line 46 of file if_algo.h.

46 { return (n.bits() - 1); }
Botan::IF_Scheme_PublicKey::n
BigInt n
Definition: if_algo.h:51
Botan::BigInt::bits
size_t bits() const
Definition: bigint.cpp:253

virtual size_t Botan::Public_Key::message_part_size | ( |  | ) | const
| inlinevirtualinherited

Find out the message part size supported by this scheme/key.

Returns
  size of the message parts in bits

Reimplemented in Botan::ECDSA_PublicKey, Botan::NR_PublicKey, and Botan::DSA_PublicKey.

Definition at line 56 of file pk_keys.h.

56 { return 0; }

virtual size_t Botan::Public_Key::message_parts | ( |  | ) | const
| inlinevirtualinherited

Find out the number of message parts supported by this scheme.

Returns
  number of message parts

Reimplemented in Botan::ECDSA_PublicKey, Botan::NR_PublicKey, and Botan::DSA_PublicKey.

Definition at line 50 of file pk_keys.h.

Referenced by Botan::EAC_Signed_Object::check_signature(), Botan::X509_Object::check_signature(), Botan::choose_sig_format(), and Botan::X509_Store::validate_cert().

50 { return 1; }

virtual AlgorithmIdentifier Botan::Private_Key::pkcs8_algorithm_identifier | ( |  | ) | const
| inlinevirtualinherited

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

Definition at line 98 of file pk_keys.h.

Referenced by Botan::PKCS8::BER_encode().

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

MemoryVector< byte > Botan::IF_Scheme_PrivateKey::pkcs8_private_key | ( |  | ) | const
| virtualinherited

Returns
  PKCS #8 private key encoding for this key object

Implements Botan::Private_Key.

Definition at line 52 of file if_algo.cpp.

References Botan::IF_Scheme_PublicKey::e, Botan::DER_Encoder::encode(), Botan::DER_Encoder::end_cons(), Botan::DER_Encoder::get_contents(), Botan::IF_Scheme_PublicKey::n, Botan::SEQUENCE, and Botan::DER_Encoder::start_cons().

53 {
54 return DER_Encoder()
55 .start_cons(SEQUENCE)
56 .encode(static_cast<size_t>(0))
57 .encode(n)
58 .encode(e)
59 .encode(d)
60 .encode(p)
61 .encode(q)
62 .encode(d1)
63 .encode(d2)
64 .encode(c)
65 .end_cons()
66 .get_contents();
67 }
Botan::IF_Scheme_PublicKey::n
BigInt n
Definition: if_algo.h:51
Botan::IF_Scheme_PrivateKey::d2
BigInt d2
Definition: if_algo.h:101
Botan::IF_Scheme_PublicKey::e
BigInt e
Definition: if_algo.h:51
Botan::IF_Scheme_PrivateKey::d1
BigInt d1
Definition: if_algo.h:101
Botan::SEQUENCE
Definition: asn1_int.h:35
Botan::IF_Scheme_PrivateKey::q
BigInt q
Definition: if_algo.h:101
Botan::IF_Scheme_PrivateKey::d
BigInt d
Definition: if_algo.h:101
Botan::IF_Scheme_PrivateKey::c
BigInt c
Definition: if_algo.h:101
Botan::IF_Scheme_PrivateKey::p
BigInt p
Definition: if_algo.h:101

MemoryVector< byte > Botan::IF_Scheme_PublicKey::x509_subject_public_key | ( |  | ) | const
| virtualinherited

Returns
  X.509 subject key encoding for this key object

Implements Botan::Public_Key.

Definition at line 21 of file if_algo.cpp.

References Botan::IF_Scheme_PublicKey::e, Botan::DER_Encoder::encode(), Botan::DER_Encoder::end_cons(), Botan::DER_Encoder::get_contents(), Botan::IF_Scheme_PublicKey::n, Botan::SEQUENCE, and Botan::DER_Encoder::start_cons().

22 {
23 return DER_Encoder()
24 .start_cons(SEQUENCE)
25 .encode(n)
26 .encode(e)
27 .end_cons()
28 .get_contents();
29 }
Botan::IF_Scheme_PublicKey::n
BigInt n
Definition: if_algo.h:51
Botan::IF_Scheme_PublicKey::e
BigInt e
Definition: if_algo.h:51
Botan::SEQUENCE
Definition: asn1_int.h:35

## Member Data Documentation

BigInt Botan::IF_Scheme_PrivateKey::c
| protectedinherited

Definition at line 101 of file if_algo.h.

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

BigInt Botan::IF_Scheme_PrivateKey::d
| protectedinherited

Definition at line 101 of file if_algo.h.

Referenced by Botan::RSA_PrivateKey::check_key(), check_key(), Botan::RSA_PrivateKey::RSA_PrivateKey(), and RW_PrivateKey().

BigInt Botan::IF_Scheme_PrivateKey::d1
| protectedinherited

Definition at line 101 of file if_algo.h.

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

BigInt Botan::IF_Scheme_PrivateKey::d2
| protectedinherited

Definition at line 101 of file if_algo.h.

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

BigInt Botan::IF_Scheme_PublicKey::e
| protectedinherited

Definition at line 51 of file if_algo.h.

Referenced by Botan::IF_Scheme_PublicKey::check_key(), Botan::RSA_PrivateKey::check_key(), check_key(), Botan::IF_Scheme_PrivateKey::check_key(), Botan::IF_Scheme_PrivateKey::IF_Scheme_PrivateKey(), Botan::IF_Scheme_PublicKey::IF_Scheme_PublicKey(), Botan::IF_Scheme_PrivateKey::pkcs8_private_key(), Botan::RSA_PrivateKey::RSA_PrivateKey(), RW_PrivateKey(), and Botan::IF_Scheme_PublicKey::x509_subject_public_key().

BigInt Botan::IF_Scheme_PublicKey::n
| protectedinherited

Definition at line 51 of file if_algo.h.

Referenced by Botan::IF_Scheme_PublicKey::check_key(), Botan::IF_Scheme_PrivateKey::check_key(), Botan::IF_Scheme_PrivateKey::IF_Scheme_PrivateKey(), Botan::IF_Scheme_PublicKey::IF_Scheme_PublicKey(), Botan::IF_Scheme_PrivateKey::pkcs8_private_key(), Botan::RSA_PrivateKey::RSA_PrivateKey(), RW_PrivateKey(), and Botan::IF_Scheme_PublicKey::x509_subject_public_key().

BigInt Botan::IF_Scheme_PrivateKey::p
| protectedinherited

Definition at line 101 of file if_algo.h.

Referenced by Botan::RSA_PrivateKey::check_key(), check_key(), Botan::RSA_PrivateKey::RSA_PrivateKey(), and RW_PrivateKey().

BigInt Botan::IF_Scheme_PrivateKey::q
| protectedinherited

Definition at line 101 of file if_algo.h.

Referenced by Botan::RSA_PrivateKey::check_key(), check_key(), Botan::RSA_PrivateKey::RSA_PrivateKey(), and RW_PrivateKey().

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

- src/pubkey/rw/rw.h
- src/pubkey/rw/rw.cpp