diff options
author | MITSUNARI Shigeo <herumi@nifty.com> | 2019-05-01 14:11:39 +0800 |
---|---|---|
committer | MITSUNARI Shigeo <herumi@nifty.com> | 2019-05-01 14:11:39 +0800 |
commit | e116eefe123bf38158c87a40706d78ebf84d885e (patch) | |
tree | 6e3eb558f864ff3faa9457a2463acceba4aeda3c | |
parent | 50ff82fb13bbb3e7b5bc1b1b4a6503dfa0083a92 (diff) | |
download | tangerine-mcl-0.94.tar.gz tangerine-mcl-0.94.tar.zst tangerine-mcl-0.94.zip |
support nothrow version of gmp::setStrv0.94
-rw-r--r-- | src/fp.cpp | 32 |
1 files changed, 21 insertions, 11 deletions
@@ -386,17 +386,27 @@ bool Op::init(const mpz_class& _p, size_t maxBitSize, int _xi_a, Mode mode, size isFullBit = (bitSize % UnitBitSize) == 0; #if defined(MCL_USE_LLVM) || defined(MCL_USE_XBYAK) - if ((mode == FP_AUTO || mode == FP_LLVM || mode == FP_XBYAK) - && mp == mpz_class("0xfffffffffffffffffffffffffffffffeffffffffffffffff")) { - primeMode = PM_NIST_P192; - isMont = false; - isFastMod = true; - } - if ((mode == FP_AUTO || mode == FP_LLVM || mode == FP_XBYAK) - && mp == mpz_class("0x1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")) { - primeMode = PM_NIST_P521; - isMont = false; - isFastMod = true; + if (mode == FP_AUTO || mode == FP_LLVM || mode == FP_XBYAK) { + const char *pStr = "0xfffffffffffffffffffffffffffffffeffffffffffffffff"; + bool b; + mpz_class p192; + gmp::setStr(&b, p192, pStr); + if (b && mp == p192) { + primeMode = PM_NIST_P192; + isMont = false; + isFastMod = true; + } + } + if (mode == FP_AUTO || mode == FP_LLVM || mode == FP_XBYAK) { + const char *pStr = "0x1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"; + bool b; + mpz_class p521; + gmp::setStr(&b, p521, pStr); + if (b && mp == p521) { + primeMode = PM_NIST_P521; + isMont = false; + isFastMod = true; + } } #endif #if defined(MCL_USE_VINT) && MCL_SIZEOF_UNIT == 8 |