18#ifndef _AUTH_BIGNUMBER_H
19#define _AUTH_BIGNUMBER_H
37 BigNumber(std::vector<uint8>
const& v,
bool littleEndian =
true) :
BigNumber() { SetBinary(v.data(), v.size(), littleEndian); }
38 template <
size_t Size>
39 BigNumber(std::array<uint8, Size>
const& v,
bool littleEndian =
true) :
BigNumber() { SetBinary(v.data(),
Size, littleEndian); }
46 void SetBinary(
uint8 const* bytes,
int32 len,
bool littleEndian =
true);
47 template <
typename Container>
48 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); }
49 bool SetHexStr(
char const* str);
52 void SetRand(
int32 numbits);
102 int32 cmp = CompareTo(other);
104 return std::strong_ordering::less;
106 return std::strong_ordering::greater;
107 return std::strong_ordering::equal;
111 bool IsNegative()
const;
116 int32 GetNumBytes()
const;
117 int32 GetNumBits()
const;
119 struct bignum_st*
BN() {
return _bn; }
120 struct bignum_st const*
BN()
const {
return _bn; }
124 void GetBytes(
uint8* buf,
size_t bufsize,
bool littleEndian =
true)
const;
125 std::vector<uint8> ToByteVector(
int32 minSize = 0,
bool littleEndian =
true)
const;
127 template <std::
size_t Size>
128 std::array<uint8, Size>
ToByteArray(
bool littleEndian =
true)
const
130 std::array<uint8, Size> buf;
131 GetBytes(buf.data(),
Size, littleEndian);
135 std::string AsHexStr()
const;
136 std::string AsDecStr()
const;
BigNumber(std::array< uint8, Size > const &v, bool littleEndian=true)
std::array< uint8, Size > ToByteArray(bool littleEndian=true) const
BigNumber operator*(BigNumber const &bn) const
BigNumber operator-(BigNumber const &bn) const
struct bignum_st const * BN() const
BigNumber operator%(BigNumber const &bn) const
BigNumber operator+(BigNumber const &bn) const
auto SetBinary(Container const &c, bool littleEndian=true) -> std::enable_if_t<!std::is_pointer_v< std::decay_t< Container > > >
bool SetHexStr(std::string const &str)
BigNumber(std::string const &v)
BigNumber operator/(BigNumber const &bn) const
std::strong_ordering operator<=>(BigNumber const &other) const
BigNumber operator<<(int n) const
bool operator==(BigNumber const &bn) const
BigNumber(std::vector< uint8 > const &v, bool littleEndian=true)
bool Size(ContainerUnorderedMap< TypeList< H, T >, KEY_TYPE > const &elements, std::size_t *size, SPECIFIC_TYPE *obj)
constexpr std::size_t size()