X-Git-Url: https://git.novaco.in/?a=blobdiff_plain;f=src%2Fbignum.h;h=6ab5a6d4cd55e9d3d5d0e431be8fa1d277343457;hb=dba17cd539033f9e051e023cc4617991ac722c44;hp=d5927d3a58120b4a03472ddab2d71c36f04738ca;hpb=68324ee855d3dd1428682855f8b2f2d138b034db;p=novacoin.git diff --git a/src/bignum.h b/src/bignum.h index d5927d3..6ab5a6d 100644 --- a/src/bignum.h +++ b/src/bignum.h @@ -78,11 +78,22 @@ public: return (*this); } + CBigNum(const BIGNUM *bnp) { + BIGNUM *dup = BN_dup(bnp); + if (!dup) + { + throw bignum_error("CBigNum::CBigNum(const BIGNUM*) : BN_dup failed"); + } + bn = dup; + } + ~CBigNum() { BN_clear_free(bn); } + CBigNum(bool n) { bn = BN_new(); setuint32(n); } + CBigNum(int8_t n) { bn = BN_new(); if (n >= 0) setuint32(n); else setint64(n); } CBigNum(int16_t n) { bn = BN_new(); if (n >= 0) setuint32(n); else setint64(n); } CBigNum(int32_t n) { bn = BN_new(); if (n >= 0) setuint32(n); else setint64(n); } @@ -469,7 +480,7 @@ public: } BIGNUM* get() const { - return bn; + return BN_dup(bn); } unsigned int GetSerializeSize(int nType=0, int nVersion=PROTOCOL_VERSION) const @@ -596,7 +607,7 @@ public: */ bool isPrime(const int checks=BN_prime_checks) const { CAutoBN_CTX pctx; - int ret = BN_is_prime(bn, checks, NULL, pctx, NULL); + int ret = BN_is_prime_ex(bn, checks, pctx, NULL); if(ret < 0){ throw bignum_error("CBigNum::isPrime :BN_is_prime"); } @@ -709,9 +720,7 @@ public: friend inline const CBigNum operator/(const CBigNum& a, const CBigNum& b); friend inline const CBigNum operator%(const CBigNum& a, const CBigNum& b); friend inline const CBigNum operator*(const CBigNum& a, const CBigNum& b); - friend inline bool operator<(const CBigNum& a, const CBigNum& b); friend inline const CBigNum operator+(const CBigNum& a, const CBigNum& b); - friend inline const CBigNum operator-(const CBigNum& a, const CBigNum& b); friend inline const CBigNum operator*(const CBigNum& a); friend inline const CBigNum operator-(const CBigNum& a);