Botan: Botan::EC_PrivateKey Class Reference

Botan 1.10.17

Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
Botan::EC_PrivateKey Class Referenceabstract

`#include <ecc_key.h>`

Inheritance diagram for Botan::EC_PrivateKey:

## Public Member Functions
virtual std::string | algo_name () const =0
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
| EC_PrivateKey (RandomNumberGenerator &rng, const EC_Group &domain, const BigInt &private_key)
| EC_PrivateKey (const AlgorithmIdentifier &alg_id, const MemoryRegion< byte > &key_bits)
virtual OID | get_oid () const
virtual size_t | max_input_bits () const =0
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
void | set_parameter_encoding (EC_Group_Encoding enc)
MemoryVector< byte > | x509_subject_public_key () const

## Protected Member Functions
| EC_PrivateKey ()
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 abstract class represents ECC private keys

Definition at line 92 of file ecc_key.h.

## Constructor & Destructor Documentation

## ◆ EC_PrivateKey() [1/3]

Botan::EC_PrivateKey::EC_PrivateKey | ( | RandomNumberGenerator & | rng,
|  | const EC_Group & | ec_group,
|  | const BigInt & | x
| ) |  |

EC_PrivateKey constructor

Definition at line 81 of file ecc_key.cpp.

84 {
85 domain_params = ec_group;
86 domain_encoding = EC_DOMPAR_ENC_EXPLICIT;
87
88 if(x == 0)
89 private_key = BigInt::random_integer(rng, 1, domain().get_order());
90 else
91 private_key = x;
92
93 public_key = domain().get_base_point() * private_key;
94
95 BOTAN_ASSERT(public_key.on_the_curve(),
96 "ECC private key was not on the curve");
97 }
Botan::EC_PrivateKey::private_key
BigInt private_key
Definition: ecc_key.h:113
Botan::EC_Group::get_base_point
const PointGFp & get_base_point() const
Definition: ec_group.h:95
Botan::EC_DOMPAR_ENC_EXPLICIT
Definition: ec_group.h:23
Botan::EC_PublicKey::public_key
PointGFp public_key
Definition: ecc_key.h:85
Botan::BigInt::random_integer
static BigInt random_integer(RandomNumberGenerator &rng, const BigInt &min, const BigInt &max)
Definition: big_rand.cpp:50
BOTAN_ASSERT
#define BOTAN_ASSERT(expr, msg)
Definition: assert.h:19
Botan::EC_PublicKey::domain
const EC_Group & domain() const
Definition: ecc_key.h:60
Botan::PointGFp::on_the_curve
bool on_the_curve() const
Definition: point_gfp.cpp:427
Botan::EC_PublicKey::domain_encoding
EC_Group_Encoding domain_encoding
Definition: ecc_key.h:86
Botan::EC_PublicKey::domain_params
EC_Group domain_params
Definition: ecc_key.h:84

## ◆ EC_PrivateKey() [2/3]

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

Definition at line 110 of file ecc_key.cpp.

References BOTAN_ASSERT, Botan::BER_Decoder::decode_and_check(), Botan::EC_PublicKey::domain(), Botan::EC_PublicKey::domain_encoding, Botan::EC_PublicKey::domain_params, Botan::EC_DOMPAR_ENC_EXPLICIT, Botan::EC_Group::get_base_point(), Botan::PointGFp::on_the_curve(), Botan::AlgorithmIdentifier::parameters, private_key, Botan::EC_PublicKey::public_key, Botan::SEQUENCE, and Botan::BER_Decoder::start_cons().

112 {
113 domain_params = EC_Group(alg_id.parameters);
114 domain_encoding = EC_DOMPAR_ENC_EXPLICIT;
115
116 BER_Decoder(key_bits)
117 .start_cons(SEQUENCE)
118 .decode_and_check<size_t>(1, "Unknown version code for ECC key")
119 .decode_octet_string_bigint(private_key);
120 // possibly group params and public key follow
121
122 public_key = domain().get_base_point() * private_key;
123
124 BOTAN_ASSERT(public_key.on_the_curve(),
125 "Loaded ECC private key not on the curve");
126 }
Botan::EC_PrivateKey::private_key
BigInt private_key
Definition: ecc_key.h:113
Botan::EC_Group::get_base_point
const PointGFp & get_base_point() const
Definition: ec_group.h:95
Botan::EC_DOMPAR_ENC_EXPLICIT
Definition: ec_group.h:23
Botan::EC_PublicKey::public_key
PointGFp public_key
Definition: ecc_key.h:85
BOTAN_ASSERT
#define BOTAN_ASSERT(expr, msg)
Definition: assert.h:19
Botan::EC_PublicKey::domain
const EC_Group & domain() const
Definition: ecc_key.h:60
Botan::SEQUENCE
Definition: asn1_int.h:35
Botan::PointGFp::on_the_curve
bool on_the_curve() const
Definition: point_gfp.cpp:427
Botan::EC_PublicKey::domain_encoding
EC_Group_Encoding domain_encoding
Definition: ecc_key.h:86
Botan::EC_PublicKey::domain_params
EC_Group domain_params
Definition: ecc_key.h:84

## ◆ EC_PrivateKey() [3/3]

Botan::EC_PrivateKey::EC_PrivateKey | ( |  | ) |
| inlineprotected

Definition at line 111 of file ecc_key.h.

111 {}

## Member Function Documentation

## ◆ algo_name()

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

Get the name of the underlying public key scheme.

Returns
  name of the public key scheme

Implemented in Botan::ECDSA_PublicKey, Botan::ECDH_PublicKey, Botan::ElGamal_PublicKey, Botan::DH_PublicKey, Botan::DSA_PublicKey, Botan::NR_PublicKey, Botan::RSA_PublicKey, and Botan::RW_PublicKey.

Referenced by Botan::EAC_Signed_Object::check_signature(), Botan::X509_Object::check_signature(), Botan::X509::find_constraints(), Botan::Public_Key::get_oid(), Botan::PK_Decryptor_EME::PK_Decryptor_EME(), Botan::PK_Encryptor_EME::PK_Encryptor_EME(), Botan::PK_Key_Agreement::PK_Key_Agreement(), Botan::PK_Signer::PK_Signer(), Botan::PK_Verifier::PK_Verifier(), and Botan::Server_Key_Exchange::verify().

## ◆ 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 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()

virtual size_t Botan::Public_Key::max_input_bits | ( |  | ) | const
| pure virtualinherited

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

Returns
  maximum message size in bits

Implemented in Botan::ECDH_PublicKey, Botan::ECDSA_PublicKey, Botan::IF_Scheme_PublicKey, Botan::NR_PublicKey, Botan::DSA_PublicKey, Botan::ElGamal_PublicKey, and Botan::DH_PublicKey.

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

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, 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

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

## ◆ 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 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 EC_PrivateKey(), Botan::EC_PublicKey::EC_PublicKey(), and Botan::EC_PublicKey::set_parameter_encoding().

## ◆ private_key

BigInt Botan::EC_PrivateKey::private_key
| protected

Definition at line 113 of file ecc_key.h.

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

## ◆ public_key

PointGFp Botan::EC_PublicKey::public_key
| protectedinherited

Definition at line 85 of file ecc_key.h.

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

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

- src/pubkey/ecc_key/ecc_key.h
- src/pubkey/ecc_key/ecc_key.cpp