Botan 3.11.0
Crypto and TLS for C&
Botan::EC_Scalar_Data_BN Class Referencefinal

#include <ec_inner_bn.h>

Inheritance diagram for Botan::EC_Scalar_Data_BN:
Botan::EC_Scalar_Data

Public Member Functions

std::unique_ptr< EC_Scalar_Dataadd (const EC_Scalar_Data &other) const override
void assign (const EC_Scalar_Data &y) override
size_t bytes () const override
std::unique_ptr< EC_Scalar_Dataclone () const override
 EC_Scalar_Data_BN (std::shared_ptr< const EC_Group_Data > group, BigInt v)
const std::shared_ptr< const EC_Group_Data > & group () const override
std::unique_ptr< EC_Scalar_Datainvert () const override
std::unique_ptr< EC_Scalar_Datainvert_vartime () const override
bool is_eq (const EC_Scalar_Data &y) const override
bool is_zero () const override
std::unique_ptr< EC_Scalar_Datamul (const EC_Scalar_Data &other) const override
std::unique_ptr< EC_Scalar_Datanegate () const override
void serialize_to (std::span< uint8_t > bytes) const override
void square_self () override
std::unique_ptr< EC_Scalar_Datasub (const EC_Scalar_Data &other) const override
const BigIntvalue () const
void zeroize () override

Static Public Member Functions

static const EC_Scalar_Data_BNchecked_ref (const EC_Scalar_Data &data)

Detailed Description

Definition at line 15 of file ec_inner_bn.h.

Constructor & Destructor Documentation

◆ EC_Scalar_Data_BN()

Botan::EC_Scalar_Data_BN::EC_Scalar_Data_BN ( std::shared_ptr< const EC_Group_Data > group,
BigInt v )
inline

Definition at line 17 of file ec_inner_bn.h.

17 :
18 m_group(std::move(group)), m_v(std::move(v)) {}
const std::shared_ptr< const EC_Group_Data > & group() const override

References group().

Referenced by checked_ref().

Member Function Documentation

◆ add()

std::unique_ptr< EC_Scalar_Data > Botan::EC_Scalar_Data_BN::add ( const EC_Scalar_Data & other) const
overridevirtual

Implements Botan::EC_Scalar_Data.

Definition at line 70 of file ec_inner_bn.cpp.

70 {
71 return std::make_unique<EC_Scalar_Data_BN>(m_group, m_group->mod_order().reduce(m_v + checked_ref(other).value()));
72}
const BigInt & value() const
Definition ec_inner_bn.h:52
static const EC_Scalar_Data_BN & checked_ref(const EC_Scalar_Data &data)

References checked_ref(), and value().

◆ assign()

void Botan::EC_Scalar_Data_BN::assign ( const EC_Scalar_Data & y)
overridevirtual

Implements Botan::EC_Scalar_Data.

Definition at line 43 of file ec_inner_bn.cpp.

43 {
44 m_v = checked_ref(other).value();
45}

References checked_ref(), and value().

◆ bytes()

size_t Botan::EC_Scalar_Data_BN::bytes ( ) const
overridevirtual

Implements Botan::EC_Scalar_Data.

Definition at line 27 of file ec_inner_bn.cpp.

27 {
28 return this->group()->order_bytes();
29}

References group().

Referenced by serialize_to().

◆ checked_ref()

const EC_Scalar_Data_BN & Botan::EC_Scalar_Data_BN::checked_ref ( const EC_Scalar_Data & data)
static

Definition at line 15 of file ec_inner_bn.cpp.

15 {
16 const auto* p = dynamic_cast<const EC_Scalar_Data_BN*>(&data);
17 if(p == nullptr) {
18 throw Invalid_State("Failed conversion to EC_Scalar_Data_BN");
19 }
20 return *p;
21}
EC_Scalar_Data_BN(std::shared_ptr< const EC_Group_Data > group, BigInt v)
Definition ec_inner_bn.h:17

References EC_Scalar_Data_BN().

Referenced by add(), assign(), Botan::EC_Group_Data::gk_x_mod_order(), is_eq(), Botan::EC_AffinePoint_Data_BN::mul(), mul(), Botan::EC_Mul2Table_Data_BN::mul2_vartime(), Botan::EC_Mul2Table_Data_BN::mul2_vartime_x_mod_order_eq(), Botan::EC_Group_Data::mul_px_qy(), Botan::EC_AffinePoint_Data_BN::mul_x_only(), Botan::EC_Group_Data::point_g_mul(), and sub().

◆ clone()

std::unique_ptr< EC_Scalar_Data > Botan::EC_Scalar_Data_BN::clone ( ) const
overridevirtual

Implements Botan::EC_Scalar_Data.

Definition at line 31 of file ec_inner_bn.cpp.

31 {
32 return std::make_unique<EC_Scalar_Data_BN>(this->group(), this->value());
33}

References group(), and value().

◆ group()

const std::shared_ptr< const EC_Group_Data > & Botan::EC_Scalar_Data_BN::group ( ) const
overridevirtual

Implements Botan::EC_Scalar_Data.

Definition at line 23 of file ec_inner_bn.cpp.

23 {
24 return m_group;
25}

Referenced by bytes(), clone(), and EC_Scalar_Data_BN().

◆ invert()

std::unique_ptr< EC_Scalar_Data > Botan::EC_Scalar_Data_BN::invert ( ) const
overridevirtual

Implements Botan::EC_Scalar_Data.

Definition at line 62 of file ec_inner_bn.cpp.

62 {
63 return std::make_unique<EC_Scalar_Data_BN>(m_group, inverse_mod_public_prime(m_v, m_group->order()));
64}
BigInt inverse_mod_public_prime(const BigInt &x, const BigInt &p)
Definition mod_inv.cpp:293

References Botan::inverse_mod_public_prime().

◆ invert_vartime()

std::unique_ptr< EC_Scalar_Data > Botan::EC_Scalar_Data_BN::invert_vartime ( ) const
overridevirtual

Implements Botan::EC_Scalar_Data.

Definition at line 66 of file ec_inner_bn.cpp.

66 {
67 return std::make_unique<EC_Scalar_Data_BN>(m_group, inverse_mod_public_prime(m_v, m_group->order()));
68}

References Botan::inverse_mod_public_prime().

◆ is_eq()

bool Botan::EC_Scalar_Data_BN::is_eq ( const EC_Scalar_Data & y) const
overridevirtual

Implements Botan::EC_Scalar_Data.

Definition at line 39 of file ec_inner_bn.cpp.

39 {
40 return (value() == checked_ref(other).value());
41}

References checked_ref(), and value().

◆ is_zero()

bool Botan::EC_Scalar_Data_BN::is_zero ( ) const
overridevirtual

Implements Botan::EC_Scalar_Data.

Definition at line 35 of file ec_inner_bn.cpp.

35 {
36 return this->value().is_zero();
37}
bool is_zero() const
Definition bigint.h:473

References Botan::BigInt::is_zero(), and value().

◆ mul()

std::unique_ptr< EC_Scalar_Data > Botan::EC_Scalar_Data_BN::mul ( const EC_Scalar_Data & other) const
overridevirtual

Implements Botan::EC_Scalar_Data.

Definition at line 79 of file ec_inner_bn.cpp.

79 {
80 return std::make_unique<EC_Scalar_Data_BN>(m_group, m_group->mod_order().multiply(m_v, checked_ref(other).value()));
81}

References checked_ref(), and value().

◆ negate()

std::unique_ptr< EC_Scalar_Data > Botan::EC_Scalar_Data_BN::negate ( ) const
overridevirtual

Implements Botan::EC_Scalar_Data.

Definition at line 58 of file ec_inner_bn.cpp.

58 {
59 return std::make_unique<EC_Scalar_Data_BN>(m_group, m_group->mod_order().reduce(m_group->order() - m_v));
60}

◆ serialize_to()

void Botan::EC_Scalar_Data_BN::serialize_to ( std::span< uint8_t > bytes) const
overridevirtual

Implements Botan::EC_Scalar_Data.

Definition at line 83 of file ec_inner_bn.cpp.

83 {
84 BOTAN_ARG_CHECK(bytes.size() == m_group->order_bytes(), "Invalid output length");
85 m_v.serialize_to(bytes);
86}
#define BOTAN_ARG_CHECK(expr, msg)
Definition assert.h:33
size_t bytes() const override

References BOTAN_ARG_CHECK, and bytes().

◆ square_self()

void Botan::EC_Scalar_Data_BN::square_self ( )
overridevirtual

Implements Botan::EC_Scalar_Data.

Definition at line 54 of file ec_inner_bn.cpp.

54 {
55 m_group->mod_order().square(m_v);
56}

◆ sub()

std::unique_ptr< EC_Scalar_Data > Botan::EC_Scalar_Data_BN::sub ( const EC_Scalar_Data & other) const
overridevirtual

Implements Botan::EC_Scalar_Data.

Definition at line 74 of file ec_inner_bn.cpp.

74 {
75 return std::make_unique<EC_Scalar_Data_BN>(
76 m_group, m_group->mod_order().reduce(m_v + (m_group->order() - checked_ref(other).value())));
77}

References checked_ref(), and value().

◆ value()

const BigInt & Botan::EC_Scalar_Data_BN::value ( ) const
inline

Definition at line 52 of file ec_inner_bn.h.

52{ return m_v; }

Referenced by add(), assign(), clone(), is_eq(), is_zero(), mul(), and sub().

◆ zeroize()

void Botan::EC_Scalar_Data_BN::zeroize ( )
overridevirtual

Implements Botan::EC_Scalar_Data.

Definition at line 47 of file ec_inner_bn.cpp.

47 {
48 // BigInt stores its value in a secure_vector, after swapping the existing
49 // value will go out of scope (inside `zero`) and be wiped properly.
50 BigInt zero;
51 std::swap(m_v, zero);
52}

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