X-Git-Url: https://git.novaco.in/?p=novacoin.git;a=blobdiff_plain;f=src%2Fbignum.h;h=c8ba566be77f7a71bd4dfd1f30ae1dde01b8bb5d;hp=f37d7edd8b65be732478afa2f74a2b49334d0bf5;hb=f7ad871507a82931ed5bc39a1196d3e839382b6c;hpb=59b5e172f9fed2d27202168630550e21ef995105 diff --git a/src/bignum.h b/src/bignum.h index f37d7ed..c8ba566 100644 --- a/src/bignum.h +++ b/src/bignum.h @@ -59,22 +59,34 @@ public: CBigNum(const CBigNum& b) { - bn = BN_new(); - if (!BN_copy(bn, b.bn)) + BIGNUM *dup = BN_dup(b.bn); + if (!dup) { - BN_clear_free(bn); - throw bignum_error("CBigNum::CBigNum(const CBigNum&) : BN_copy failed"); + throw bignum_error("CBigNum::CBigNum(const CBigNum&) : BN_dup failed"); } + bn = dup; } CBigNum& operator=(const CBigNum& b) { - bn = BN_new(); - if (!BN_copy(bn, b.bn)) - throw bignum_error("CBigNum::operator= : BN_copy failed"); + BIGNUM *dup = BN_dup(b.bn); + if (!dup) + { + throw bignum_error("CBigNum::operator= : BN_dup failed"); + } + bn = dup; 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); @@ -466,7 +478,7 @@ public: } BIGNUM* get() const { - return bn; + return BN_dup(bn); } unsigned int GetSerializeSize(int nType=0, int nVersion=PROTOCOL_VERSION) const @@ -593,7 +605,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"); }