Botan: Botan::ECDH_PrivateKey Class Reference

Botan 1.10.17

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

`#include <ecdh.h>`

Inheritance diagram for Botan::ECDH_PrivateKey:

## Public Member Functions
std::string | algo_name () const
AlgorithmIdentifier | algorithm_identifier () const
bool | check_key (RandomNumberGenerator &rng, bool strong) const
MemoryVector< byte > | DER_domain () const
const EC_Group & | domain () const
EC_Group_Encoding | domain_format () const
| ECDH_PrivateKey (const AlgorithmIdentifier &alg_id, const MemoryRegion< byte > &key_bits)
| ECDH_PrivateKey (RandomNumberGenerator &rng, const EC_Group &domain, const BigInt &x=0)
virtual OID | get_oid () 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
const BigInt & | private_value () const
const PointGFp & | public_point () const
MemoryVector< byte > | public_value () const
void | set_parameter_encoding (EC_Group_Encoding enc)
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
EC_Group_Encoding | domain_encoding
EC_Group | domain_params
BigInt | private_key
PointGFp | public_key

## Detailed Description

This class represents ECDH Private Keys.

Definition at line 65 of file ecdh.h.

## Constructor & Destructor Documentation

## ◆ ECDH_PrivateKey() [1/2]

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

Definition at line 71 of file ecdh.h.

72 :
73 EC_PrivateKey(alg_id, key_bits) {}
Botan::EC_PrivateKey::EC_PrivateKey
EC_PrivateKey()
Definition: ecc_key.h:111

## ◆ ECDH_PrivateKey() [2/2]

Botan::ECDH_PrivateKey::ECDH_PrivateKey | ( | RandomNumberGenerator & | rng,
|  | const EC_Group & | domain,
|  | const BigInt & | x = `0`
| ) |  |
| inline

Generate a new private key

Parameters

  rng | a random number generator
  domain | parameters to used for this key
  x | the private key; if zero, a new random key is generated

Definition at line 81 of file ecdh.h.

83 :
84 EC_PrivateKey(rng, domain, x) {}
Botan::EC_PublicKey::domain
const EC_Group & domain() const
Definition: ecc_key.h:60
Botan::EC_PrivateKey::EC_PrivateKey
EC_PrivateKey()
Definition: ecc_key.h:111

## Member Function Documentation

## ◆ algo_name()

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

Get this keys algorithm name.

Returns
  this keys algorithm name

Implements Botan::Public_Key.

Definition at line 42 of file ecdh.h.

42 { return "ECDH"; }

## ◆ algorithm_identifier()

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

Returns
  X.509 AlgorithmIdentifier for this key

Implements Botan::Public_Key.

Definition at line 45 of file ecc_key.cpp.

References Botan::EC_PublicKey::DER_domain(), and Botan::Public_Key::get_oid().

46 {
47 return AlgorithmIdentifier(get_oid(), DER_domain());
48 }
Botan::Public_Key::get_oid
virtual OID get_oid() const
Definition: pk_keys.cpp:17
Botan::EC_PublicKey::DER_domain
MemoryVector< byte > DER_domain() const
Definition: ecc_key.h:72

## ◆ check_key()

bool Botan::EC_PublicKey::check_key | ( | RandomNumberGenerator & | rng,
|  | bool | strong
| ) |  | const
| virtualinherited

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

Implements Botan::Public_Key.

Reimplemented in Botan::ECDSA_PrivateKey.

Definition at line 39 of file ecc_key.cpp.

References Botan::PointGFp::on_the_curve(), and Botan::EC_PublicKey::public_point().

41 {
42 return public_point().on_the_curve();
43 }
Botan::EC_PublicKey::public_point
const PointGFp & public_point() const
Definition: ecc_key.h:45
Botan::PointGFp::on_the_curve
bool on_the_curve() const
Definition: point_gfp.cpp:427

## ◆ DER_domain()

MemoryVector<byte> Botan::EC_PublicKey::DER_domain | ( |  | ) | const
| inlineinherited

Return the DER encoding of this keys domain in whatever format is preset for this particular key

Definition at line 72 of file ecc_key.h.

Referenced by Botan::EC_PublicKey::algorithm_identifier().

73 { return domain().DER_encode(domain_format()); }
Botan::EC_Group::DER_encode
SecureVector< byte > DER_encode(EC_Group_Encoding form) const
Definition: ec_group.cpp:95
Botan::EC_PublicKey::domain
const EC_Group & domain() const
Definition: ecc_key.h:60
Botan::EC_PublicKey::domain_format
EC_Group_Encoding domain_format() const
Definition: ecc_key.h:79

## ◆ domain()

const EC_Group& Botan::EC_PublicKey::domain | ( |  | ) | const
| inlineinherited

Get the domain parameters of this key.

Exceptions

  Invalid_State | is thrown if the domain parameters of this point are not set

Returns
  the domain parameters of this key

Definition at line 60 of file ecc_key.h.

Referenced by Botan::EC_PrivateKey::EC_PrivateKey(), Botan::EC_PublicKey::EC_PublicKey(), and Botan::ECDH_KA_Operation::ECDH_KA_Operation().

60 { return domain_params; }
Botan::EC_PublicKey::domain_params
EC_Group domain_params
Definition: ecc_key.h:84

## ◆ domain_format()

EC_Group_Encoding Botan::EC_PublicKey::domain_format | ( |  | ) | const
| inlineinherited

Get the domain parameter encoding to be used when encoding this key.

Returns
  the encoding to use

Definition at line 79 of file ecc_key.h.

80 { return domain_encoding; }
Botan::EC_PublicKey::domain_encoding
EC_Group_Encoding domain_encoding
Definition: ecc_key.h:86

## ◆ 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_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

## ◆ 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::ECDH_PublicKey::max_input_bits | ( |  | ) | const
| inlinevirtualinherited

Get the maximum number of bits allowed to be fed to this key. This is the bitlength of the order of the base point.

Returns
  maximum number of input bits

Implements Botan::Public_Key.

Definition at line 50 of file ecdh.h.

50 { return domain().get_order().bits(); }
Botan::BigInt::bits
size_t bits() const
Definition: bigint.cpp:254
Botan::EC_PublicKey::domain
const EC_Group & domain() const
Definition: ecc_key.h:60
Botan::EC_Group::get_order
const BigInt & get_order() const
Definition: ec_group.h:101

## ◆ 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::EC_PrivateKey::pkcs8_private_key | ( |  | ) | const
| virtualinherited

Returns
  PKCS #8 private key encoding for this key object

Implements Botan::Private_Key.

Definition at line 99 of file ecc_key.cpp.

References Botan::BigInt::bytes(), Botan::DER_Encoder::encode(), Botan::BigInt::encode_1363(), Botan::DER_Encoder::end_cons(), Botan::DER_Encoder::get_contents(), Botan::OCTET_STRING, Botan::EC_PrivateKey::private_key, Botan::SEQUENCE, and Botan::DER_Encoder::start_cons().

100 {
101 return DER_Encoder()
102 .start_cons(SEQUENCE)
103 .encode(static_cast<size_t>(1))
104 .encode(BigInt::encode_1363(private_key, private_key.bytes()),
105 OCTET_STRING)
106 .end_cons()
107 .get_contents();
108 }
Botan::EC_PrivateKey::private_key
BigInt private_key
Definition: ecc_key.h:113
Botan::OCTET_STRING
Definition: asn1_int.h:31
Botan::SEQUENCE
Definition: asn1_int.h:35
Botan::BigInt::bytes
size_t bytes() const
Definition: bigint.cpp:246
Botan::BigInt::encode_1363
static SecureVector< byte > encode_1363(const BigInt &n, size_t bytes)
Definition: big_code.cpp:78

## ◆ private_value()

const BigInt & Botan::EC_PrivateKey::private_value | ( |  | ) | const
| inherited

Get the private key value of this key object.

Returns
  the private key value of this key object

Definition at line 70 of file ecc_key.cpp.

References Botan::EC_PrivateKey::private_key.

Referenced by Botan::ECDH_KA_Operation::ECDH_KA_Operation().

71 {
72 if(private_key == 0)
73 throw Invalid_State("EC_PrivateKey::private_value - uninitialized");
74
75 return private_key;
76 }
Botan::EC_PrivateKey::private_key
BigInt private_key
Definition: ecc_key.h:113

## ◆ public_point()

const PointGFp& Botan::EC_PublicKey::public_point | ( |  | ) | const
| inlineinherited

Get the public point of this key.

Exceptions

  Invalid_State | is thrown if the domain parameters of this point are not set

Returns
  the public point of this key

Definition at line 45 of file ecc_key.h.

Referenced by Botan::EC_PublicKey::check_key(), Botan::EC_PublicKey::EC_PublicKey(), and Botan::EC_PublicKey::x509_subject_public_key().

45 { return public_key; }
Botan::EC_PublicKey::public_key
PointGFp public_key
Definition: ecc_key.h:85

## ◆ public_value()

MemoryVector<byte> Botan::ECDH_PrivateKey::public_value | ( |  | ) | const
| inlinevirtual

Implements Botan::PK_Key_Agreement_Key.

Definition at line 86 of file ecdh.h.

References Botan::ECDH_PublicKey::public_value().

87 { return ECDH_PublicKey::public_value(); }
Botan::ECDH_PublicKey::public_value
MemoryVector< byte > public_value() const
Definition: ecdh.h:55

## ◆ set_parameter_encoding()

void Botan::EC_PublicKey::set_parameter_encoding | ( | EC_Group_Encoding | enc | ) |
| inherited

Set the domain parameter encoding to be used when encoding this key.

Parameters

  enc | the encoding to use

Definition at line 55 of file ecc_key.cpp.

References Botan::EC_PublicKey::domain_encoding, Botan::EC_PublicKey::domain_params, Botan::EC_DOMPAR_ENC_EXPLICIT, Botan::EC_DOMPAR_ENC_IMPLICITCA, Botan::EC_DOMPAR_ENC_OID, and Botan::EC_Group::get_oid().

56 {
57 if(form != EC_DOMPAR_ENC_EXPLICIT &&
58 form != EC_DOMPAR_ENC_IMPLICITCA &&
59 form != EC_DOMPAR_ENC_OID)
60 throw Invalid_Argument("Invalid encoding form for EC-key object specified");
61
62 if((form == EC_DOMPAR_ENC_OID) && (domain_params.get_oid() == ""))
63 throw Invalid_Argument("Invalid encoding form OID specified for "
64 "EC-key object whose corresponding domain "
65 "parameters are without oid");
66
67 domain_encoding = form;
68 }
Botan::EC_DOMPAR_ENC_EXPLICIT
Definition: ec_group.h:23
Botan::Invalid_Argument
std::invalid_argument Invalid_Argument
Definition: exceptn.h:20
Botan::EC_DOMPAR_ENC_IMPLICITCA
Definition: ec_group.h:24
Botan::EC_DOMPAR_ENC_OID
Definition: ec_group.h:25
Botan::EC_PublicKey::domain_encoding
EC_Group_Encoding domain_encoding
Definition: ecc_key.h:86
Botan::EC_Group::get_oid
std::string get_oid() const
Definition: ec_group.h:115
Botan::EC_PublicKey::domain_params
EC_Group domain_params
Definition: ecc_key.h:84

## ◆ x509_subject_public_key()

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

Returns
  X.509 subject key encoding for this key object

Implements Botan::Public_Key.

Definition at line 50 of file ecc_key.cpp.

References Botan::PointGFp::COMPRESSED, Botan::EC2OSP(), and Botan::EC_PublicKey::public_point().

51 {
52 return EC2OSP(public_point(), PointGFp::COMPRESSED);
53 }
Botan::PointGFp::COMPRESSED
Definition: point_gfp.h:46
Botan::EC_PublicKey::public_point
const PointGFp & public_point() const
Definition: ecc_key.h:45
Botan::EC2OSP
SecureVector< byte > EC2OSP(const PointGFp &point, byte format)
Definition: point_gfp.cpp:490

## Member Data Documentation

## ◆ domain_encoding

EC_Group_Encoding Botan::EC_PublicKey::domain_encoding
| protectedinherited

Definition at line 86 of file ecc_key.h.

Referenced by Botan::EC_PrivateKey::EC_PrivateKey(), Botan::EC_PublicKey::EC_PublicKey(), and Botan::EC_PublicKey::set_parameter_encoding().

## ◆ domain_params

EC_Group Botan::EC_PublicKey::domain_params
| protectedinherited

Definition at line 84 of file ecc_key.h.

Referenced by Botan::EC_PrivateKey::EC_PrivateKey(), Botan::EC_PublicKey::EC_PublicKey(), and Botan::EC_PublicKey::set_parameter_encoding().

## ◆ private_key

BigInt Botan::EC_PrivateKey::private_key
| protectedinherited

Definition at line 113 of file ecc_key.h.

Referenced by Botan::EC_PrivateKey::EC_PrivateKey(), Botan::EC_PrivateKey::pkcs8_private_key(), and Botan::EC_PrivateKey::private_value().

## ◆ public_key

PointGFp Botan::EC_PublicKey::public_key
| protectedinherited

Definition at line 85 of file ecc_key.h.

Referenced by Botan::EC_PrivateKey::EC_PrivateKey(), and Botan::EC_PublicKey::EC_PublicKey().

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

- src/pubkey/ecdh/ecdh.h