Botan 1.10.17
Botan::ECDSA_PrivateKey Class Reference

#include <ecdsa.h>

Inheritance diagram for Botan::ECDSA_PrivateKey:
Botan::ECDSA_PublicKey Botan::EC_PrivateKey Botan::EC_PublicKey Botan::EC_PublicKey Botan::Private_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) const
MemoryVector< byteDER_domain () const
const EC_Groupdomain () const
EC_Group_Encoding domain_format () const
 ECDSA_PrivateKey (const AlgorithmIdentifier &alg_id, const MemoryRegion< byte > &key_bits)
 ECDSA_PrivateKey (RandomNumberGenerator &rng, const EC_Group &domain, const BigInt &x=0)
virtual OID get_oid () const
size_t max_input_bits () const
size_t message_part_size () const
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

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 ECDSA Private Keys

Definition at line 64 of file ecdsa.h.

Constructor & Destructor Documentation

◆ ECDSA_PrivateKey() [1/2]

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

Load a private key

Parameters
alg_idthe X.509 algorithm identifier
key_bitsPKCS #8 structure

Definition at line 74 of file ecdsa.h.

75 :
76 EC_PrivateKey(alg_id, key_bits) {}

References Botan::EC_PrivateKey::EC_PrivateKey().

Referenced by Botan::make_private_key().

◆ ECDSA_PrivateKey() [2/2]

Botan::ECDSA_PrivateKey::ECDSA_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, generate a ney random key)

Definition at line 84 of file ecdsa.h.

86 :
87 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::ECDSA_PublicKey::algo_name ( ) const
inlinevirtualinherited

Get this keys algorithm name.

Returns
this keys algorithm name ("ECDSA")

Implements Botan::Public_Key.

Definition at line 43 of file ecdsa.h.

43{ return "ECDSA"; }

Referenced by Botan::CVC_EAC::create_cvc_req(), and Botan::CVC_EAC::create_self_signed_cert().

◆ 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::ECDSA_PrivateKey::check_key ( RandomNumberGenerator & rng,
bool strong ) const
virtual

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

Reimplemented from Botan::EC_PublicKey.

Definition at line 15 of file ecdsa.cpp.

17 {
18 if(!public_point().on_the_curve())
19 return false;
20
21 if(!strong)
22 return true;
23
24 return KeyPair::signature_consistency_check(rng, *this, "EMSA1(SHA-1)");
25 }
const PointGFp & public_point() const
Definition ecc_key.h:45
bool signature_consistency_check(RandomNumberGenerator &rng, const Private_Key &key, const std::string &padding)
Definition keypair.cpp:47

References Botan::EC_PublicKey::public_point(), and Botan::KeyPair::signature_consistency_check().

◆ 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::ECDSA_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
the maximum number of input bits

Implements Botan::Public_Key.

Definition at line 50 of file ecdsa.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()

size_t Botan::ECDSA_PublicKey::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 from Botan::Public_Key.

Definition at line 54 of file ecdsa.h.

55 { return domain().get_order().bytes(); }
size_t bytes() const
Definition bigint.cpp:246

References Botan::EC_PublicKey::domain().

◆ message_parts()

size_t Botan::ECDSA_PublicKey::message_parts ( ) const
inlinevirtualinherited

Find out the number of message parts supported by this scheme.

Returns
number of message parts

Reimplemented from Botan::Public_Key.

Definition at line 52 of file ecdsa.h.

52{ return 2; }

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

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