Botan 1.10.17
Botan::ECDH_PrivateKey Class Reference

#include <ecdh.h>

Inheritance diagram for Botan::ECDH_PrivateKey:
Botan::ECDH_PublicKey Botan::EC_PrivateKey Botan::PK_Key_Agreement_Key Botan::EC_PublicKey Botan::EC_PublicKey Botan::Private_Key Botan::Private_Key Botan::Public_Key Botan::Public_Key Botan::Public_Key Botan::Public_Key

Public Member Functions

std::string algo_name () const
AlgorithmIdentifier algorithm_identifier () const
bool check_key (RandomNumberGenerator &rng, bool strong) const
MemoryVector< byteDER_domain () const
const EC_Groupdomain () 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< bytepkcs8_private_key () const
const BigIntprivate_value () const
const PointGFppublic_point () const
MemoryVector< bytepublic_value () const
void set_parameter_encoding (EC_Group_Encoding enc)
MemoryVector< bytex509_subject_public_key () const

Protected Member Functions

void gen_check (RandomNumberGenerator &rng) const
void load_check (RandomNumberGenerator &rng) const
virtual 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) {}

References Botan::EC_PrivateKey::EC_PrivateKey().

Referenced by Botan::make_private_key().

◆ 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
rnga random number generator
domainparameters to used for this key
xthe 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) {}
const EC_Group & domain() const
Definition ecc_key.h:60

References Botan::EC_PublicKey::domain(), and Botan::EC_PrivateKey::EC_PrivateKey().

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.

46 {
48 }
MemoryVector< byte > DER_domain() const
Definition ecc_key.h:72
virtual OID get_oid() const
Definition pk_keys.cpp:17

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

◆ check_key()

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

Test the key values for consistency.

Parameters
rngrng to use
strongwhether 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.

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

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

◆ 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.

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

References domain(), and domain_format().

Referenced by algorithm_identifier().

◆ domain()

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

◆ 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; }
EC_Group_Encoding domain_encoding
Definition ecc_key.h:86

References domain_encoding.

Referenced by DER_domain().

◆ gen_check()

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

Self-test after generating a key

Parameters
rnga 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 }
virtual bool check_key(RandomNumberGenerator &rng, bool strong) const =0
virtual std::string algo_name() const =0
Self_Test_Failure(const std::string &err)
Definition exceptn.h:177

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

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

◆ 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.

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 }
std::string lookup(const OID &oid)
Definition oids.cpp:31
Lookup_Error(const std::string &err)
Definition exceptn.h:37

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

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

◆ load_check() [1/2]

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

◆ load_check() [2/2]

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

Self-test after loading a key

Parameters
rnga 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 }

References algo_name(), and check_key().

◆ 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(); }
size_t bits() const
Definition bigint.cpp:254
const BigInt & get_order() const
Definition ec_group.h:101

References Botan::EC_PublicKey::domain().

◆ 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::DSA_PublicKey, Botan::ECDSA_PublicKey, and Botan::NR_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::DSA_PublicKey, Botan::ECDSA_PublicKey, and Botan::NR_PublicKey.

Definition at line 50 of file pk_keys.h.

50{ return 1; }

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

◆ 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.

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

References Botan::Public_Key::algorithm_identifier().

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

◆ 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.

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

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, private_key, Botan::SEQUENCE, and Botan::DER_Encoder::start_cons().

◆ 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.

71 {
72 if(private_key == 0)
73 throw Invalid_State("EC_PrivateKey::private_value - uninitialized");
74
75 return private_key;
76 }
Invalid_State(const std::string &err)
Definition exceptn.h:27

References Botan::Invalid_State::Invalid_State(), and private_key.

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

◆ public_point()

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

Get the public point of this key.

Exceptions
Invalid_Stateis 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.

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

References public_key.

Referenced by check_key(), Botan::ECDSA_PrivateKey::check_key(), EC_PublicKey(), Botan::ECDH_PublicKey::ECDH_PublicKey(), Botan::ECDSA_PublicKey::ECDSA_PublicKey(), Botan::ECDH_PublicKey::public_value(), and x509_subject_public_key().

◆ 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.

MemoryVector< byte > public_value() const
Definition ecdh.h:55

References Botan::ECDH_PublicKey::public_value().

◆ 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
encthe encoding to use

Definition at line 55 of file ecc_key.cpp.

56 {
57 if(form != EC_DOMPAR_ENC_EXPLICIT &&
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 }
std::string get_oid() const
Definition ec_group.h:115
@ EC_DOMPAR_ENC_EXPLICIT
Definition ec_group.h:23
@ EC_DOMPAR_ENC_OID
Definition ec_group.h:25
@ EC_DOMPAR_ENC_IMPLICITCA
Definition ec_group.h:24

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

Referenced by Botan::DE_EAC::create_cvc_req(), Botan::DE_EAC::link_cvca(), and Botan::DE_EAC::sign_request().

◆ 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.

51 {
53 }
SecureVector< byte > EC2OSP(const PointGFp &point, byte format)

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

Member Data Documentation

◆ domain_encoding

◆ domain_params

EC_Group Botan::EC_PublicKey::domain_params
protectedinherited

◆ private_key

BigInt Botan::EC_PrivateKey::private_key
protectedinherited

Definition at line 113 of file ecc_key.h.

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

◆ public_key

PointGFp Botan::EC_PublicKey::public_key
protectedinherited

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