Botan 1.10.17

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

`#include <ecc_key.h>`

Inheritance diagram for Botan::EC_PublicKey:

## 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_PublicKey (const EC_Group &dom_par, const PointGFp &pub_point)
| EC_PublicKey (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
const PointGFp & | public_point () const
void | set_parameter_encoding (EC_Group_Encoding enc)
MemoryVector< byte > | x509_subject_public_key () const

## Protected Member Functions
| EC_PublicKey ()
virtual void | load_check (RandomNumberGenerator &rng) const

## Protected Attributes
EC_Group_Encoding | domain_encoding
EC_Group | domain_params
PointGFp | public_key

## Detailed Description

This class represents abstract ECC public keys. When encoding a key via an encoder that can be accessed via the corresponding member functions, the key will decide upon its internally stored encoding information whether to encode itself with or without domain parameters, or using the domain parameter oid. Furthermore, a public key without domain parameters can be decoded. In that case, it cannot be used for verification until its domain parameters are set by calling the corresponding member function.

Definition at line 30 of file ecc_key.h.

## Constructor & Destructor Documentation

## ◆ EC_PublicKey() [1/3]

Botan::EC_PublicKey::EC_PublicKey | ( | const EC_Group & | dom_par,
|  | const PointGFp & | pub_point
| ) |  |

Definition at line 21 of file ecc_key.cpp.

References domain(), and public_point().

22 :
23 domain_params(dom_par), public_key(pub_point),
24 domain_encoding(EC_DOMPAR_ENC_EXPLICIT)
25 {
26 if(domain().get_curve() != public_point().get_curve())
27 throw Invalid_Argument("EC_PublicKey: curve mismatch in constructor");
28 }
Botan::EC_DOMPAR_ENC_EXPLICIT
Definition: ec_group.h:23
Botan::EC_PublicKey::public_point
const PointGFp & public_point() const
Definition: ecc_key.h:45
Botan::EC_PublicKey::public_key
PointGFp public_key
Definition: ecc_key.h:85
Botan::Invalid_Argument
std::invalid_argument Invalid_Argument
Definition: exceptn.h:20
Botan::EC_PublicKey::domain
const EC_Group & domain() const
Definition: ecc_key.h:60
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_PublicKey() [2/3]

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

Definition at line 30 of file ecc_key.cpp.

References domain(), domain_encoding, domain_params, Botan::EC_DOMPAR_ENC_EXPLICIT, Botan::OS2ECP(), Botan::AlgorithmIdentifier::parameters, and public_key.

32 {
33 domain_params = EC_Group(alg_id.parameters);
34 domain_encoding = EC_DOMPAR_ENC_EXPLICIT;
35
36 public_key = OS2ECP(key_bits, domain().get_curve());
37 }
Botan::EC_DOMPAR_ENC_EXPLICIT
Definition: ec_group.h:23
Botan::OS2ECP
PointGFp OS2ECP(const byte data[], size_t data_len, const CurveGFp &curve)
Definition: point_gfp.cpp:562
Botan::EC_PublicKey::public_key
PointGFp public_key
Definition: ecc_key.h:85
Botan::EC_PublicKey::domain
const EC_Group & domain() const
Definition: ecc_key.h:60
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_PublicKey() [3/3]

Botan::EC_PublicKey::EC_PublicKey | ( |  | ) |
| inline protected

Definition at line 82 of file ecc_key.h.

82 : domain_encoding(EC_DOMPAR_ENC_EXPLICIT) {}
Botan::EC_DOMPAR_ENC_EXPLICIT
Definition: ec_group.h:23
Botan::EC_PublicKey::domain_encoding
EC_Group_Encoding domain_encoding
Definition: ecc_key.h:86

## Member Function Documentation

## ◆ algo_name()

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

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

Returns
  X.509 AlgorithmIdentifier for this key

Implements Botan::Public_Key.

Definition at line 45 of file ecc_key.cpp.

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

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

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

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

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

## ◆ get_oid()

OID Botan::Public_Key::get_oid | ( |  | ) | const
| virtual inherited

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

void Botan::Public_Key::load_check | ( | RandomNumberGenerator & | rng | ) | const
| protected virtual inherited

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

## ◆ max_input_bits()

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

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
| inline virtual inherited

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
| inline virtual inherited

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

## ◆ public_point()

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

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 check_key(), EC_PublicKey(), and 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 | ) |

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

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

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

Definition at line 86 of file ecc_key.h.

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

## ◆ domain_params

EC_Group Botan::EC_PublicKey::domain_params
| protected

Definition at line 84 of file ecc_key.h.

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

## ◆ public_key

PointGFp Botan::EC_PublicKey::public_key
| protected

Definition at line 85 of file ecc_key.h.

Referenced by Botan::EC_PrivateKey::EC_PrivateKey(), and 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