Botan: Botan::ElGamal_PrivateKey Class Reference

Botan 1.10.17

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

`#include <elgamal.h>`

Inheritance diagram for Botan::ElGamal_PrivateKey:

## Public Member Functions
std::string | algo_name () const
AlgorithmIdentifier | algorithm_identifier () const
bool | check_key (RandomNumberGenerator &rng, bool) const
| ElGamal_PrivateKey (const AlgorithmIdentifier &alg_id, const MemoryRegion< byte > &key_bits, RandomNumberGenerator &rng)
| ElGamal_PrivateKey (RandomNumberGenerator &rng, const DL_Group &group, const BigInt &priv_key=0)
const DL_Group & | get_domain () const
virtual OID | get_oid () const
const BigInt & | get_x () const
const BigInt & | get_y () const
DL_Group::Format | group_format () const
const BigInt & | group_g () const
const BigInt & | group_p () const
const BigInt & | group_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
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
DL_Group | group
BigInt | x
BigInt | y

## Detailed Description

ElGamal Private Key

Definition at line 43 of file elgamal.h.

## Constructor & Destructor Documentation

## ◆ ElGamal_PrivateKey() [1/2]

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

Definition at line 46 of file elgamal.cpp.

48 :
49 DL_Scheme_PrivateKey(alg_id, key_bits, DL_Group::ANSI_X9_42)
50 {
51 y = power_mod(group_g(), x, group_p());
52 load_check(rng);
53 }
Botan::DL_Group::ANSI_X9_42
Definition: dl_group.h:45
Botan::Private_Key::load_check
void load_check(RandomNumberGenerator &rng) const
Definition: pk_keys.cpp:40
Botan::DL_Scheme_PrivateKey::DL_Scheme_PrivateKey
DL_Scheme_PrivateKey()
Definition: dl_algo.h:104
Botan::DL_Scheme_PublicKey::group_p
const BigInt & group_p() const
Definition: dl_algo.h:44
Botan::power_mod
BigInt power_mod(const BigInt &base, const BigInt &exp, const BigInt &mod)
Definition: numthry.cpp:366
Botan::DL_Scheme_PrivateKey::x
BigInt x
Definition: dl_algo.h:109
Botan::DL_Scheme_PublicKey::group_g
const BigInt & group_g() const
Definition: dl_algo.h:56
Botan::DL_Scheme_PublicKey::y
BigInt y
Definition: dl_algo.h:74

## ◆ ElGamal_PrivateKey() [2/2]

Botan::ElGamal_PrivateKey::ElGamal_PrivateKey | ( | RandomNumberGenerator & | rng,
|  | const DL_Group & | group,
|  | const BigInt & | priv_key = `0`
| ) |  |

Definition at line 28 of file elgamal.cpp.

31 {
32 group = grp;
33 x = x_arg;
34
35 if(x == 0)
36 x.randomize(rng, 2 * dl_work_factor(group_p().bits()));
37
38 y = power_mod(group_g(), x, group_p());
39
40 if(x_arg == 0)
41 gen_check(rng);
42 else
43 load_check(rng);
44 }
Botan::BigInt::randomize
void randomize(RandomNumberGenerator &rng, size_t bitsize=0)
Definition: big_rand.cpp:29
Botan::Private_Key::gen_check
void gen_check(RandomNumberGenerator &rng) const
Definition: pk_keys.cpp:49
Botan::Private_Key::load_check
void load_check(RandomNumberGenerator &rng) const
Definition: pk_keys.cpp:40
Botan::DL_Scheme_PublicKey::group_p
const BigInt & group_p() const
Definition: dl_algo.h:44
Botan::power_mod
BigInt power_mod(const BigInt &base, const BigInt &exp, const BigInt &mod)
Definition: numthry.cpp:366
Botan::DL_Scheme_PrivateKey::x
BigInt x
Definition: dl_algo.h:109
Botan::DL_Scheme_PublicKey::group
DL_Group group
Definition: dl_algo.h:79
Botan::dl_work_factor
size_t dl_work_factor(size_t bits)
Definition: workfactor.cpp:14
Botan::DL_Scheme_PublicKey::group_g
const BigInt & group_g() const
Definition: dl_algo.h:56
Botan::DL_Scheme_PublicKey::y
BigInt y
Definition: dl_algo.h:74

## Member Function Documentation

## ◆ algo_name()

std::string Botan::ElGamal_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 25 of file elgamal.h.

25 { return "ElGamal"; }

## ◆ algorithm_identifier()

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

Returns
  X.509 AlgorithmIdentifier for this key

Implements Botan::Public_Key.

Definition at line 15 of file dl_algo.cpp.

References Botan::DL_Group::DER_encode(), Botan::Public_Key::get_oid(), Botan::DL_Scheme_PublicKey::group, and Botan::DL_Scheme_PublicKey::group_format().

16 {
17 return AlgorithmIdentifier(get_oid(),
18 group.DER_encode(group_format()));
19 }
Botan::Public_Key::get_oid
virtual OID get_oid() const
Definition: pk_keys.cpp:17
Botan::DL_Scheme_PublicKey::group_format
virtual DL_Group::Format group_format() const =0
Botan::DL_Scheme_PublicKey::group
DL_Group group
Definition: dl_algo.h:79
Botan::DL_Group::DER_encode
SecureVector< byte > DER_encode(Format format) const
Definition: dl_group.cpp:205

## ◆ check_key()

bool Botan::ElGamal_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::DL_Scheme_PrivateKey.

Definition at line 58 of file elgamal.cpp.

60 {
61 if(!DL_Scheme_PrivateKey::check_key(rng, strong))
62 return false;
63
64 if(!strong)
65 return true;
66
67 return KeyPair::encryption_consistency_check(rng, *this, "EME1(SHA-1)");
68 }
Botan::DL_Scheme_PrivateKey::check_key
bool check_key(RandomNumberGenerator &rng, bool) const
Definition: dl_algo.cpp:67
Botan::KeyPair::encryption_consistency_check
bool encryption_consistency_check(RandomNumberGenerator &rng, const Private_Key &key, const std::string &padding)
Definition: keypair.cpp:18

## ◆ gen_check()

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.

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::check_key
virtual bool check_key(RandomNumberGenerator &rng, bool strong) const =0
Botan::Public_Key::algo_name
virtual std::string algo_name() const =0

## ◆ get_domain()

const DL_Group& Botan::DL_Scheme_PublicKey::get_domain | ( |  | ) | const
| inlineinherited

Get the DL domain parameters of this key.

Returns
  DL domain parameters of this key

Definition at line 33 of file dl_algo.h.

33 { return group; }
Botan::DL_Scheme_PublicKey::group
DL_Group group
Definition: dl_algo.h:79

## ◆ get_oid()

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

## ◆ get_x()

const BigInt& Botan::DL_Scheme_PrivateKey::get_x | ( |  | ) | const
| inlineinherited

Get the secret key x.

Returns
  secret key

Definition at line 95 of file dl_algo.h.

Referenced by Botan::ElGamal_Decryption_Operation::ElGamal_Decryption_Operation().

95 { return x; }
Botan::DL_Scheme_PrivateKey::x
BigInt x
Definition: dl_algo.h:109

## ◆ get_y()

const BigInt& Botan::DL_Scheme_PublicKey::get_y | ( |  | ) | const
| inlineinherited

Get the public value y with y = g^x mod p where x is the secret key.

Definition at line 38 of file dl_algo.h.

Referenced by Botan::ElGamal_Encryption_Operation::ElGamal_Encryption_Operation().

38 { return y; }
Botan::DL_Scheme_PublicKey::y
BigInt y
Definition: dl_algo.h:74

## ◆ group_format()

DL_Group::Format Botan::ElGamal_PublicKey::group_format | ( |  | ) | const
| inlinevirtualinherited

Get the underlying groups encoding format.

Returns
  encoding format

Implements Botan::DL_Scheme_PublicKey.

Definition at line 26 of file elgamal.h.

References Botan::DL_Group::ANSI_X9_42.

26 { return DL_Group::ANSI_X9_42; }
Botan::DL_Group::ANSI_X9_42
Definition: dl_group.h:45

## ◆ group_g()

const BigInt& Botan::DL_Scheme_PublicKey::group_g | ( |  | ) | const
| inlineinherited

Get the generator g of the underlying DL group.

Returns
  generator g

Definition at line 56 of file dl_algo.h.

Referenced by Botan::DSA_Verification_Operation::DSA_Verification_Operation(), Botan::ElGamal_Encryption_Operation::ElGamal_Encryption_Operation(), and Botan::NR_Verification_Operation::NR_Verification_Operation().

56 { return group.get_g(); }
Botan::DL_Group::get_g
const BigInt & get_g() const
Definition: dl_group.cpp:185
Botan::DL_Scheme_PublicKey::group
DL_Group group
Definition: dl_algo.h:79

## ◆ group_p()

const BigInt& Botan::DL_Scheme_PublicKey::group_p | ( |  | ) | const
| inlineinherited

Get the prime p of the underlying DL group.

Returns
  prime p

Definition at line 44 of file dl_algo.h.

Referenced by Botan::DSA_Verification_Operation::DSA_Verification_Operation(), Botan::ElGamal_Decryption_Operation::ElGamal_Decryption_Operation(), Botan::ElGamal_Encryption_Operation::ElGamal_Encryption_Operation(), Botan::NR_Verification_Operation::NR_Verification_Operation(), and Botan::DH_PublicKey::public_value().

44 { return group.get_p(); }
Botan::DL_Group::get_p
const BigInt & get_p() const
Definition: dl_group.cpp:176
Botan::DL_Scheme_PublicKey::group
DL_Group group
Definition: dl_algo.h:79

## ◆ group_q()

const BigInt& Botan::DL_Scheme_PublicKey::group_q | ( |  | ) | const
| inlineinherited

Get the prime q of the underlying DL group.

Returns
  prime q

Definition at line 50 of file dl_algo.h.

Referenced by Botan::DSA_Verification_Operation::DSA_Verification_Operation(), and Botan::NR_Verification_Operation::NR_Verification_Operation().

50 { return group.get_q(); }
Botan::DL_Scheme_PublicKey::group
DL_Group group
Definition: dl_algo.h:79
Botan::DL_Group::get_q
const BigInt & get_q() const
Definition: dl_group.cpp:194

## ◆ load_check() [1/2]

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.

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::check_key
virtual bool check_key(RandomNumberGenerator &rng, bool strong) const =0
Botan::Public_Key::algo_name
virtual std::string algo_name() const =0
Botan::Invalid_Argument
std::invalid_argument Invalid_Argument
Definition: exceptn.h:20

## ◆ load_check() [2/2]

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.

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::check_key
virtual bool check_key(RandomNumberGenerator &rng, bool strong) const =0
Botan::Public_Key::algo_name
virtual std::string algo_name() const =0
Botan::Invalid_Argument
std::invalid_argument Invalid_Argument
Definition: exceptn.h:20

## ◆ max_input_bits()

size_t Botan::ElGamal_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 28 of file elgamal.h.

28 { return (group_p().bits() - 1); }
Botan::DL_Scheme_PublicKey::group_p
const BigInt & group_p() const
Definition: dl_algo.h:44

## ◆ message_part_size()

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; }

## ◆ message_parts()

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(), and Botan::X509_Object::check_signature().

50 { return 1; }

## ◆ pkcs8_algorithm_identifier()

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

## ◆ pkcs8_private_key()

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

Returns
  PKCS #8 private key encoding for this key object

Implements Botan::Private_Key.

Definition at line 36 of file dl_algo.cpp.

References Botan::DER_Encoder::encode(), Botan::DER_Encoder::get_contents(), and Botan::DL_Scheme_PrivateKey::x.

37 {
38 return DER_Encoder().encode(x).get_contents();
39 }
Botan::DL_Scheme_PrivateKey::x
BigInt x
Definition: dl_algo.h:109

## ◆ x509_subject_public_key()

MemoryVector< byte > Botan::DL_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 dl_algo.cpp.

References Botan::DER_Encoder::encode(), Botan::DER_Encoder::get_contents(), and Botan::DL_Scheme_PublicKey::y.

22 {
23 return DER_Encoder().encode(y).get_contents();
24 }
Botan::DL_Scheme_PublicKey::y
BigInt y
Definition: dl_algo.h:74

## Member Data Documentation

## ◆ group

DL_Group Botan::DL_Scheme_PublicKey::group
| protectedinherited

The DL group

Definition at line 79 of file dl_algo.h.

Referenced by Botan::DL_Scheme_PublicKey::algorithm_identifier(), Botan::DH_PublicKey::DH_PublicKey(), Botan::DL_Scheme_PrivateKey::DL_Scheme_PrivateKey(), Botan::DL_Scheme_PublicKey::DL_Scheme_PublicKey(), Botan::DSA_PublicKey::DSA_PublicKey(), Botan::ElGamal_PublicKey::ElGamal_PublicKey(), and Botan::NR_PublicKey::NR_PublicKey().

## ◆ x

BigInt Botan::DL_Scheme_PrivateKey::x
| protectedinherited

The DL private key

Definition at line 109 of file dl_algo.h.

Referenced by Botan::DL_Scheme_PrivateKey::DL_Scheme_PrivateKey(), and Botan::DL_Scheme_PrivateKey::pkcs8_private_key().

## ◆ y

BigInt Botan::DL_Scheme_PublicKey::y
| protectedinherited

The DL public key

Definition at line 74 of file dl_algo.h.

Referenced by Botan::DH_PublicKey::DH_PublicKey(), Botan::DL_Scheme_PublicKey::DL_Scheme_PublicKey(), Botan::DSA_PublicKey::DSA_PublicKey(), Botan::ElGamal_PublicKey::ElGamal_PublicKey(), Botan::NR_PublicKey::NR_PublicKey(), Botan::DH_PublicKey::public_value(), and Botan::DL_Scheme_PublicKey::x509_subject_public_key().

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

- src/pubkey/elgamal/elgamal.h
- src/pubkey/elgamal/elgamal.cpp