Botan 1.10.17
Botan::EC_PrivateKey Class Referenceabstract

#include <ecc_key.h>

Inheritance diagram for Botan::EC_PrivateKey:
Botan::EC_PublicKey Botan::Private_Key Botan::Public_Key Botan::Public_Key Botan::ECDH_PrivateKey Botan::ECDSA_PrivateKey

Public Member Functions

virtual std::string algo_name () const =0
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
 EC_PrivateKey (const AlgorithmIdentifier &alg_id, const MemoryRegion< byte > &key_bits)
 EC_PrivateKey (RandomNumberGenerator &rng, const EC_Group &domain, const BigInt &private_key)
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< bytepkcs8_private_key () const
const BigIntprivate_value () const
const PointGFppublic_point () const
void set_parameter_encoding (EC_Group_Encoding enc)
MemoryVector< bytex509_subject_public_key () const

Protected Member Functions

 EC_PrivateKey ()
void gen_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;
87
88 if(x == 0)
89 private_key = BigInt::random_integer(rng, 1, domain().get_order());
90 else
91 private_key = x;
92
94
96 "ECC private key was not on the curve");
97 }
#define BOTAN_ASSERT(expr, msg)
Definition assert.h:19
static BigInt random_integer(RandomNumberGenerator &rng, const BigInt &min, const BigInt &max)
Definition big_rand.cpp:50
const PointGFp & get_base_point() const
Definition ec_group.h:95
const EC_Group & domain() const
Definition ecc_key.h:60
EC_Group domain_params
Definition ecc_key.h:84
EC_Group_Encoding domain_encoding
Definition ecc_key.h:86
PointGFp public_key
Definition ecc_key.h:85
bool on_the_curve() const
@ EC_DOMPAR_ENC_EXPLICIT
Definition ec_group.h:23

References BOTAN_ASSERT, 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(), private_key, Botan::EC_PublicKey::public_key, and Botan::BigInt::random_integer().

Referenced by Botan::ECDH_PrivateKey::ECDH_PrivateKey(), Botan::ECDH_PrivateKey::ECDH_PrivateKey(), Botan::ECDSA_PrivateKey::ECDSA_PrivateKey(), and Botan::ECDSA_PrivateKey::ECDSA_PrivateKey().

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

112 {
113 domain_params = EC_Group(alg_id.parameters);
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
123
125 "Loaded ECC private key not on the curve");
126 }
BER_Decoder(DataSource &)
Definition ber_dec.cpp:264
EC_Group(const CurveGFp &curve, const PointGFp &base_point, const BigInt &order, const BigInt &cofactor)
Definition ec_group.h:42
@ SEQUENCE
Definition asn1_int.h:35

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

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

◆ 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

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

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

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

◆ 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::DH_PublicKey, Botan::DSA_PublicKey, Botan::ECDH_PublicKey, Botan::ECDSA_PublicKey, Botan::ElGamal_PublicKey, Botan::IF_Scheme_PublicKey, and Botan::NR_PublicKey.

Referenced by Botan::choose_sig_format().

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

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

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().

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

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