Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
BigNumber.h
Go to the documentation of this file.
1/*
2* This file is part of Project SkyFire https://www.projectskyfire.org.
3* See LICENSE.md file for Copyright information
4*/
5
6#ifndef _AUTH_BIGNUMBER_H
7#define _AUTH_BIGNUMBER_H
8
9#include "Define.h"
10#include "Errors.h"
11#include <array>
12#include <memory>
13#include <string>
14#include <vector>
15
16struct bignum_st;
17
19{
20public:
21 BigNumber();
22 BigNumber(BigNumber const& bn);
25 BigNumber(std::string const& v) : BigNumber() { SetHexStr(v); }
26 template<size_t Size>
27 BigNumber(std::array<uint8, Size> const& v, bool littleEndian = true) : BigNumber() { SetBinary(v.data(), Size, littleEndian); }
28
29 ~BigNumber();
30
31 void SetDword(int32);
32 void SetDword(uint32);
33 void SetQword(uint64);
34 void SetBinary(uint8 const* bytes, int32 len, bool littleEndian = true);
35 template<typename Container>
36 auto SetBinary(Container const& c, bool littleEndian = true) -> std::enable_if_t<!std::is_pointer_v<std::decay_t<Container>>> { SetBinary(std::data(c), std::size(c), littleEndian); }
37 void SetHexStr(char const* str);
38 void SetHexStr(std::string const& str) { SetHexStr(str.c_str()); }
39
40 void SetRand(int32 numbits);
41
42 BigNumber& operator=(BigNumber const& bn);
43
45 BigNumber operator+(BigNumber const& bn) const
46 {
47 BigNumber t(*this);
48 return t += bn;
49 }
50
52 BigNumber operator-(BigNumber const& bn) const
53 {
54 BigNumber t(*this);
55 return t -= bn;
56 }
57
59 BigNumber operator*(BigNumber const& bn) const
60 {
61 BigNumber t(*this);
62 return t *= bn;
63 }
64
66 BigNumber operator/(BigNumber const& bn) const
67 {
68 BigNumber t(*this);
69 return t /= bn;
70 }
71
73 BigNumber operator%(BigNumber const& bn) const
74 {
75 BigNumber t(*this);
76 return t %= bn;
77 }
78
79 bool isZero() const;
80
81 BigNumber ModExp(BigNumber const& bn1, BigNumber const& bn2) const;
82 BigNumber Exp(BigNumber const&) const;
83
84 int32 GetNumBytes(void) const;
85
86 struct bignum_st* BN() { return _bn; }
87 struct bignum_st const* BN() const { return _bn; }
88
90
91 void GetBytes(uint8* buf, size_t bufsize, bool littleEndian = true) const;
92 std::vector<uint8> ToByteVector(int32 minSize = 0, bool littleEndian = true) const;
93
94 template<std::size_t Size>
95 std::array<uint8, Size> ToByteArray(bool littleEndian = true) const
96 {
97 std::array<uint8, Size> buf;
98 GetBytes(buf.data(), Size, littleEndian);
99 return buf;
100 }
101
102 char* AsHexStr() const;
103 char* AsDecStr() const;
104
105private:
106 struct bignum_st* _bn;
107};
108#endif
109
std::int32_t int32
Definition Define.h:73
std::uint8_t uint8
Definition Define.h:79
std::uint32_t uint32
Definition Define.h:77
std::uint64_t uint64
Definition Define.h:76
void SetHexStr(std::string const &str)
Definition BigNumber.h:38
BigNumber Exp(BigNumber const &) const
struct bignum_st * BN()
Definition BigNumber.h:86
BigNumber(std::array< uint8, Size > const &v, bool littleEndian=true)
Definition BigNumber.h:27
BigNumber ModExp(BigNumber const &bn1, BigNumber const &bn2) const
std::vector< uint8 > ToByteVector(int32 minSize=0, bool littleEndian=true) const
std::array< uint8, Size > ToByteArray(bool littleEndian=true) const
Definition BigNumber.h:95
BigNumber(uint32 v)
Definition BigNumber.h:23
BigNumber operator%=(BigNumber const &bn)
void SetRand(int32 numbits)
Definition BigNumber.cpp:70
void SetDword(int32)
Definition BigNumber.cpp:25
BigNumber(int32 v)
Definition BigNumber.h:24
BigNumber operator*(BigNumber const &bn) const
Definition BigNumber.h:59
uint32 AsDword()
void SetBinary(uint8 const *bytes, int32 len, bool littleEndian=true)
Definition BigNumber.cpp:44
BigNumber operator*=(BigNumber const &bn)
Definition BigNumber.cpp:96
BigNumber operator-(BigNumber const &bn) const
Definition BigNumber.h:52
void SetHexStr(char const *str)
Definition BigNumber.cpp:65
struct bignum_st const * BN() const
Definition BigNumber.h:87
char * AsHexStr() const
BigNumber operator%(BigNumber const &bn) const
Definition BigNumber.h:73
BigNumber operator+(BigNumber const &bn) const
Definition BigNumber.h:45
char * AsDecStr() const
auto SetBinary(Container const &c, bool littleEndian=true) -> std::enable_if_t<!std::is_pointer_v< std::decay_t< Container > > >
Definition BigNumber.h:36
int32 GetNumBytes(void) const
BigNumber operator+=(BigNumber const &bn)
Definition BigNumber.cpp:84
struct bignum_st * _bn
Definition BigNumber.h:106
BigNumber operator/=(BigNumber const &bn)
BigNumber(std::string const &v)
Definition BigNumber.h:25
bool isZero() const
BigNumber operator/(BigNumber const &bn) const
Definition BigNumber.h:66
void GetBytes(uint8 *buf, size_t bufsize, bool littleEndian=true) const
void SetQword(uint64)
Definition BigNumber.cpp:37
BigNumber & operator=(BigNumber const &bn)
Definition BigNumber.cpp:75
BigNumber operator-=(BigNumber const &bn)
Definition BigNumber.cpp:90