diff options
author | MITSUNARI Shigeo <herumi@nifty.com> | 2016-12-23 10:22:56 +0800 |
---|---|---|
committer | MITSUNARI Shigeo <herumi@nifty.com> | 2016-12-23 10:22:56 +0800 |
commit | b51a57b547b8eef77861a8c4ea06334ccc8b92ff (patch) | |
tree | e9411fd9b9de3001c47d77f7307959673fb12e2f /include/mcl/bn.hpp | |
parent | 28b211149ccc7bf7a78ef06f17ba1f19df6a7749 (diff) | |
download | dexon-mcl-b51a57b547b8eef77861a8c4ea06334ccc8b92ff.tar.gz dexon-mcl-b51a57b547b8eef77861a8c4ea06334ccc8b92ff.tar.zst dexon-mcl-b51a57b547b8eef77861a8c4ea06334ccc8b92ff.zip |
use Frobenius3
Diffstat (limited to 'include/mcl/bn.hpp')
-rw-r--r-- | include/mcl/bn.hpp | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/include/mcl/bn.hpp b/include/mcl/bn.hpp index 97c4e94..4275069 100644 --- a/include/mcl/bn.hpp +++ b/include/mcl/bn.hpp @@ -357,6 +357,21 @@ struct BNT { } #endif } + static void Frobenius3(Fp12& y, const Fp12& x) + { +#if 0 + Frobenius(y, x); + Frobenius(y, y); + Frobenius(y, y); +#else + for (int i = 0; i < 6; i++) { + Frobenius(y.getFp2()[i], x.getFp2()[i]); + } + for (int i = 1; i < 6; i++) { + y.getFp2()[i] *= param.g3[i - 1]; + } +#endif + } /* p mod 6 = 1, w^6 = xi Frob(x', y') = phi Frob phi^-1(x', y') @@ -754,13 +769,10 @@ struct BNT { Fp12::mul(c0, a, a2); c0 *= x; Frobenius(c1, b); - Frobenius(c2, a); - Frobenius(c2, c2); + Frobenius2(c2, a); unitaryInv(c3, x); c3 *= b; - Frobenius(c3, c3); - Frobenius(c3, c3); - Frobenius(c3, c3); + Frobenius3(c3, c3); Fp12::mul(y, c0, c1); y *= c2; y *= c3; |