Botan 3.7.1
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
 

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

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 61 of file ec_inner_bn.cpp.

61 {
62 return std::make_unique<EC_Scalar_Data_BN>(m_group, m_group->mod_order().reduce(m_v + checked_ref(other).value()));
63}
const BigInt & value() const
Definition ec_inner_bn.h:50
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 41 of file ec_inner_bn.cpp.

41 {
42 m_v = checked_ref(other).value();
43}

References checked_ref(), and value().

◆ bytes()

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

Implements Botan::EC_Scalar_Data.

Definition at line 25 of file ec_inner_bn.cpp.

25 {
26 return this->group()->order_bytes();
27}

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 13 of file ec_inner_bn.cpp.

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

Referenced by add(), assign(), 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_AffinePoint_Data_BN::mul_x_only(), 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 29 of file ec_inner_bn.cpp.

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

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 21 of file ec_inner_bn.cpp.

21 {
22 return m_group;
23}

Referenced by bytes(), and clone().

◆ invert()

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

Implements Botan::EC_Scalar_Data.

Definition at line 53 of file ec_inner_bn.cpp.

53 {
54 return std::make_unique<EC_Scalar_Data_BN>(m_group, inverse_mod_public_prime(m_v, m_group->order()));
55}
BigInt inverse_mod_public_prime(const BigInt &x, const BigInt &p)
Definition mod_inv.cpp:291

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 57 of file ec_inner_bn.cpp.

57 {
58 return std::make_unique<EC_Scalar_Data_BN>(m_group, inverse_mod_public_prime(m_v, m_group->order()));
59}

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 37 of file ec_inner_bn.cpp.

37 {
38 return (value() == checked_ref(other).value());
39}

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 33 of file ec_inner_bn.cpp.

33 {
34 return this->value().is_zero();
35}
bool is_zero() const
Definition bigint.h:458

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 69 of file ec_inner_bn.cpp.

69 {
70 return std::make_unique<EC_Scalar_Data_BN>(m_group, m_group->mod_order().multiply(m_v, checked_ref(other).value()));
71}

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 49 of file ec_inner_bn.cpp.

49 {
50 return std::make_unique<EC_Scalar_Data_BN>(m_group, m_group->mod_order().reduce(-m_v));
51}

◆ 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 73 of file ec_inner_bn.cpp.

73 {
74 BOTAN_ARG_CHECK(bytes.size() == m_group->order_bytes(), "Invalid output length");
76}
#define BOTAN_ARG_CHECK(expr, msg)
Definition assert.h:29
void serialize_to(std::span< uint8_t > out) const
Definition bigint.cpp:383
size_t bytes() const override

References BOTAN_ARG_CHECK, bytes(), and Botan::BigInt::serialize_to().

◆ square_self()

void Botan::EC_Scalar_Data_BN::square_self ( )
overridevirtual

Implements Botan::EC_Scalar_Data.

Definition at line 45 of file ec_inner_bn.cpp.

45 {
46 m_group->mod_order().square(m_v);
47}

◆ 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 65 of file ec_inner_bn.cpp.

65 {
66 return std::make_unique<EC_Scalar_Data_BN>(m_group, m_group->mod_order().reduce(m_v - checked_ref(other).value()));
67}

References checked_ref(), and value().

◆ value()

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

Definition at line 50 of file ec_inner_bn.h.

50{ return m_v; }

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


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