aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMITSUNARI Shigeo <herumi@nifty.com>2019-05-01 14:11:39 +0800
committerMITSUNARI Shigeo <herumi@nifty.com>2019-05-01 14:11:39 +0800
commite116eefe123bf38158c87a40706d78ebf84d885e (patch)
tree6e3eb558f864ff3faa9457a2463acceba4aeda3c
parent50ff82fb13bbb3e7b5bc1b1b4a6503dfa0083a92 (diff)
downloadtangerine-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.cpp32
1 files changed, 21 insertions, 11 deletions
diff --git a/src/fp.cpp b/src/fp.cpp
index 2888f43..08e7388 100644
--- a/src/fp.cpp
+++ b/src/fp.cpp
@@ -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