18#ifndef _AUTH_BIGNUMBER_H
19#define _AUTH_BIGNUMBER_H
30template <
typename Container>
32 && std::same_as<std::ranges::range_value_t<Container>,
uint8>;
42 template <BigNumberBinaryInput Container>
43 BigNumber(Container
const& binary,
bool littleEndian =
true) :
BigNumber() { SetBinary(std::ranges::data(binary), std::ranges::size(binary), littleEndian); }
50 void SetBinary(
uint8 const* bytes,
int32 len,
bool littleEndian =
true);
51 template <BigNumberBinaryInput Container>
52 void SetBinary(Container
const& binary,
bool littleEndian =
true) {
SetBinary(std::ranges::data(binary), std::ranges::size(binary), littleEndian); }
53 bool SetDecStr(
char const* str);
55 bool SetHexStr(
char const* str);
58 void SetRand(
int32 numbits);
108 int32 cmp = CompareTo(other);
110 return std::strong_ordering::less;
112 return std::strong_ordering::greater;
113 return std::strong_ordering::equal;
117 bool IsNegative()
const;
122 int32 GetNumBytes()
const;
123 int32 GetNumBits()
const;
125 struct bignum_st*
BN() {
return _bn; }
126 struct bignum_st const*
BN()
const {
return _bn; }
130 void GetBytes(
uint8* buf,
size_t bufsize,
bool littleEndian =
true)
const;
131 std::vector<uint8> ToByteVector(
int32 minSize = 0,
bool littleEndian =
true)
const;
133 template <std::
size_t Size>
134 std::array<uint8, Size>
ToByteArray(
bool littleEndian =
true)
const
136 std::array<uint8, Size> buf;
137 GetBytes(buf.data(), Size, littleEndian);
141 std::string AsHexStr()
const;
142 std::string AsDecStr()
const;
std::array< uint8, Size > ToByteArray(bool littleEndian=true) const
bool SetDecStr(std::string const &str)
BigNumber operator*(BigNumber const &bn) const
BigNumber operator-(BigNumber const &bn) const
struct bignum_st const * BN() const
BigNumber(Container const &binary, bool littleEndian=true)
BigNumber operator%(BigNumber const &bn) const
BigNumber operator+(BigNumber const &bn) const
void SetBinary(Container const &binary, bool littleEndian=true)
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