Botan 3.13.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 46 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 51 of file ec_key_data.cpp.

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

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 87 of file ec_key_data.cpp.

87 :
88 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 90 of file ec_key_data.cpp.

90 {
91 m_scalar.zeroize();
92}

Member Function Documentation

◆ group()

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

Definition at line 71 of file ec_key_data.h.

71{ 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 75 of file ec_key_data.h.

75{ 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 73 of file ec_key_data.h.

73{ 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 107 of file ec_key_data.cpp.

107 {
108 Null_RNG null_rng;
109 return this->public_key(null_rng, with_modular_inverse);
110}
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 94 of file ec_key_data.cpp.

95 {
96 auto public_point = [&] {
97 if(with_modular_inverse) {
98 return EC_AffinePoint::g_mul(m_scalar.invert(), rng);
99 } else {
100 return EC_AffinePoint::g_mul(m_scalar, rng);
101 }
102 };
103
104 return std::make_shared<EC_PublicKey_Data>(m_group, public_point());
105}
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 65 of file ec_key_data.h.

65 {
66 T bytes(this->group().get_order_bytes());
67 this->serialize_to(bytes);
68 return bytes;
69 }
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 112 of file ec_key_data.cpp.

112 {
113 m_scalar.serialize_to(output);
114}

Referenced by serialize().


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