Botan 3.9.0
Crypto and TLS for C&
Botan::EC_PrivateKey_Data Class Referencefinal

#include <ec_key_data.h>

Public Member Functions

 EC_PrivateKey_Data (const EC_Group &group, std::span< const uint8_t > bytes)
 EC_PrivateKey_Data (const EC_PrivateKey_Data &)=default
 EC_PrivateKey_Data (EC_Group group, EC_Scalar x)
 EC_PrivateKey_Data (EC_PrivateKey_Data &&)=default
const EC_Groupgroup () const
const BigIntlegacy_bigint () const
EC_PrivateKey_Dataoperator= (const EC_PrivateKey_Data &)=default
EC_PrivateKey_Dataoperator= (EC_PrivateKey_Data &&)=default
const EC_Scalarprivate_key () const
std::shared_ptr< EC_PublicKey_Datapublic_key (bool with_modular_inverse) const
std::shared_ptr< EC_PublicKey_Datapublic_key (RandomNumberGenerator &rng, bool with_modular_inverse) const
template<typename T>
serialize () const
void serialize_to (std::span< uint8_t > output) const
 ~EC_PrivateKey_Data ()

Detailed Description

Definition at line 47 of file ec_key_data.h.

Constructor & Destructor Documentation

◆ EC_PrivateKey_Data() [1/4]

Botan::EC_PrivateKey_Data::EC_PrivateKey_Data ( EC_Group group,
EC_Scalar x )

Definition at line 25 of file ec_key_data.cpp.

25 :
26 m_group(std::move(group)), m_scalar(std::move(x)), m_legacy_x(m_scalar.to_bigint()) {
27 // Checking that the scalar is lower than the group order is ensured in the
28 // deserialization of the EC_Scalar or during the random generation respectively.
29 BOTAN_ARG_CHECK(m_scalar.is_nonzero(), "ECC private key cannot be zero");
30}
#define BOTAN_ARG_CHECK(expr, msg)
Definition assert.h:33
const EC_Group & group() const
Definition ec_key_data.h:72

References BOTAN_ARG_CHECK, and group().

Referenced by EC_PrivateKey_Data(), EC_PrivateKey_Data(), EC_PrivateKey_Data(), operator=(), and operator=().

◆ EC_PrivateKey_Data() [2/4]

Botan::EC_PrivateKey_Data::EC_PrivateKey_Data ( const EC_Group & group,
std::span< const uint8_t > bytes )

Definition at line 61 of file ec_key_data.cpp.

61 :
62 Botan::EC_PrivateKey_Data(group, decode_ec_secret_key_scalar(group, bytes)) {}

References EC_PrivateKey_Data(), and group().

◆ EC_PrivateKey_Data() [3/4]

Botan::EC_PrivateKey_Data::EC_PrivateKey_Data ( const EC_PrivateKey_Data & )
default

References EC_PrivateKey_Data().

◆ EC_PrivateKey_Data() [4/4]

Botan::EC_PrivateKey_Data::EC_PrivateKey_Data ( EC_PrivateKey_Data && )
default

References EC_PrivateKey_Data().

◆ ~EC_PrivateKey_Data()

Botan::EC_PrivateKey_Data::~EC_PrivateKey_Data ( )

Definition at line 64 of file ec_key_data.cpp.

64 {
65 m_scalar.zeroize();
66}

Member Function Documentation

◆ group()

const EC_Group & Botan::EC_PrivateKey_Data::group ( ) const
inline

Definition at line 72 of file ec_key_data.h.

72{ return m_group; }

Referenced by EC_PrivateKey_Data(), EC_PrivateKey_Data(), and serialize().

◆ legacy_bigint()

const BigInt & Botan::EC_PrivateKey_Data::legacy_bigint ( ) const
inline

Definition at line 76 of file ec_key_data.h.

76{ return m_legacy_x; }

◆ operator=() [1/2]

EC_PrivateKey_Data & Botan::EC_PrivateKey_Data::operator= ( const EC_PrivateKey_Data & )
default

References EC_PrivateKey_Data().

◆ operator=() [2/2]

EC_PrivateKey_Data & Botan::EC_PrivateKey_Data::operator= ( EC_PrivateKey_Data && )
default

References EC_PrivateKey_Data().

◆ private_key()

const EC_Scalar & Botan::EC_PrivateKey_Data::private_key ( ) const
inline

Definition at line 74 of file ec_key_data.h.

74{ return m_scalar; }

◆ public_key() [1/2]

std::shared_ptr< EC_PublicKey_Data > Botan::EC_PrivateKey_Data::public_key ( bool with_modular_inverse) const

Definition at line 81 of file ec_key_data.cpp.

81 {
82 Null_RNG null_rng;
83 return this->public_key(null_rng, with_modular_inverse);
84}
std::shared_ptr< EC_PublicKey_Data > public_key(RandomNumberGenerator &rng, bool with_modular_inverse) const

References public_key().

◆ public_key() [2/2]

std::shared_ptr< EC_PublicKey_Data > Botan::EC_PrivateKey_Data::public_key ( RandomNumberGenerator & rng,
bool with_modular_inverse ) const

Definition at line 68 of file ec_key_data.cpp.

69 {
70 auto public_point = [&] {
71 if(with_modular_inverse) {
72 return EC_AffinePoint::g_mul(m_scalar.invert(), rng);
73 } else {
74 return EC_AffinePoint::g_mul(m_scalar, rng);
75 }
76 };
77
78 return std::make_shared<EC_PublicKey_Data>(m_group, public_point());
79}
static EC_AffinePoint g_mul(const EC_Scalar &scalar, RandomNumberGenerator &rng)
Multiply by the group generator returning a complete point.

References Botan::EC_AffinePoint::g_mul().

Referenced by public_key().

◆ serialize()

template<typename T>
T Botan::EC_PrivateKey_Data::serialize ( ) const
inline

Definition at line 66 of file ec_key_data.h.

66 {
67 T bytes(this->group().get_order_bytes());
68 this->serialize_to(bytes);
69 return bytes;
70 }
void serialize_to(std::span< uint8_t > output) const

References group(), and serialize_to().

◆ serialize_to()

void Botan::EC_PrivateKey_Data::serialize_to ( std::span< uint8_t > output) const

Definition at line 86 of file ec_key_data.cpp.

86 {
87 m_scalar.serialize_to(output);
88}

Referenced by serialize().


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