7 #ifndef PIVX_LIBZEROCOIN_BIGNUM_H
8 #define PIVX_LIBZEROCOIN_BIGNUM_H
10 #if defined HAVE_CONFIG_H
55 explicit CBigNum(
const std::vector<unsigned char>& vch);
77 void setvch(
const std::vector<unsigned char>& vch);
78 std::vector<unsigned char>
getvch()
const;
79 void SetDec(
const std::string& str);
80 void SetHex(
const std::string& str);
82 std::string
ToString(
int nBase=10)
const;
83 std::string
GetHex()
const;
84 std::string
GetDec()
const;
86 template<
typename Stream>
92 template<
typename Stream>
95 std::vector<unsigned char> vch;
149 bool isPrime(
const int checks=15)
const;
182 mpz_add(r.
bn, a.
bn, b.
bn);
187 mpz_sub(r.
bn, a.
bn, b.
bn);
197 mpz_mul(r.
bn, a.
bn, b.
bn);
202 mpz_tdiv_q(r.
bn, a.
bn, b.
bn);
207 mpz_mmod(r.
bn, a.
bn, b.
bn);
212 mpz_mul_2exp(r.
bn, a.
bn, shift);
const CBigNum operator>>(const CBigNum &a, unsigned int shift)
bool operator!=(const CBigNum &a, const CBigNum &b)
const CBigNum operator*(const CBigNum &a, const CBigNum &b)
bool operator<(const CBigNum &a, const CBigNum &b)
const CBigNum operator+(const CBigNum &a, const CBigNum &b)
const CBigNum operator<<(const CBigNum &a, unsigned int shift)
const CBigNum operator%(const CBigNum &a, const CBigNum &b)
bool operator<=(const CBigNum &a, const CBigNum &b)
const CBigNum BN_ZERO
constant bignum instances
const CBigNum operator/(const CBigNum &a, const CBigNum &b)
bool operator>=(const CBigNum &a, const CBigNum &b)
bool operator>(const CBigNum &a, const CBigNum &b)
const CBigNum operator-(const CBigNum &a, const CBigNum &b)
bool operator==(const CBigNum &a, const CBigNum &b)
std::vector< unsigned char > getvch() const
unsigned long getulong() const
std::string ToString(int nBase=10) const
friend bool operator!=(const CBigNum &a, const CBigNum &b)
CBigNum(unsigned long long n)
void SetDec(const std::string &str)
CBigNum & operator*=(const CBigNum &b)
CBigNum & operator+=(const CBigNum &b)
CBigNum()
C++ wrapper for BIGNUM (Gmp bignum)
bool SetHexBool(const std::string &str)
void Unserialize(Stream &s)
CBigNum & operator/=(const CBigNum &b)
void Serialize(Stream &s) const
CBigNum & operator<<=(unsigned int shift)
CBigNum gcd(const CBigNum &b) const
Calculates the greatest common divisor (GCD) of two numbers.
unsigned int getuint() const
CBigNum & operator%=(const CBigNum &b)
friend const CBigNum operator*(const CBigNum &a, const CBigNum &b)
bool isPrime(const int checks=15) const
Miller-Rabin primality test on this element.
friend bool operator<(const CBigNum &a, const CBigNum &b)
std::string GetHex() const
friend const CBigNum operator+(const CBigNum &a, const CBigNum &b)
friend const CBigNum operator<<(const CBigNum &a, unsigned int shift)
arith_uint256 getuint256() const
friend const CBigNum operator%(const CBigNum &a, const CBigNum &b)
CBigNum pow_mod(const CBigNum &e, const CBigNum &m) const
modular exponentiation: this^e mod n
std::string GetDec() const
void SetHex(const std::string &str)
friend bool operator<=(const CBigNum &a, const CBigNum &b)
CBigNum & operator=(const CBigNum &b)
static CBigNum randBignum(const CBigNum &range)
Generates a cryptographically secure random number between zero and range exclusive i....
CBigNum pow(const int e) const
exponentiation with an int.
void setvch(const std::vector< unsigned char > &vch)
int bitSize() const
Returns the size in bits of the underlying bignum.
CBigNum mul_mod(const CBigNum &b, const CBigNum &m) const
modular multiplication: (this * b) mod m
CBigNum & operator-=(const CBigNum &b)
friend const CBigNum operator/(const CBigNum &a, const CBigNum &b)
void setulong(unsigned long n)
void setint64(int64_t sn)
CBigNum inverse(const CBigNum &m) const
Calculates the inverse of this element mod m.
friend bool operator>=(const CBigNum &a, const CBigNum &b)
void setuint256(uint256 n)
friend bool operator>(const CBigNum &a, const CBigNum &b)
void setuint64(uint64_t n)
friend const CBigNum operator-(const CBigNum &a, const CBigNum &b)
CBigNum & operator>>=(unsigned int shift)
friend bool operator==(const CBigNum &a, const CBigNum &b)
256-bit unsigned big integer.
Errors thrown by the bignum class.
bignum_error(const std::string &str)