diff options
author | MITSUNARI Shigeo <herumi@nifty.com> | 2018-04-19 08:30:20 +0800 |
---|---|---|
committer | MITSUNARI Shigeo <herumi@nifty.com> | 2018-04-19 08:30:20 +0800 |
commit | 1a8bfdd7c07f2eb736311a5612b462dbe13f51c3 (patch) | |
tree | 35cd764ad9248e743ff9598f10d84c214a6059df | |
parent | fab655989b4ea753d6dbaf489a54864e2826c5fe (diff) | |
download | tangerine-mcl-1a8bfdd7c07f2eb736311a5612b462dbe13f51c3.tar.gz tangerine-mcl-1a8bfdd7c07f2eb736311a5612b462dbe13f51c3.tar.zst tangerine-mcl-1a8bfdd7c07f2eb736311a5612b462dbe13f51c3.zip |
refactor structure of BN
-rw-r--r-- | include/mcl/bn.hpp | 117 | ||||
-rw-r--r-- | include/mcl/bn256.hpp | 15 | ||||
-rw-r--r-- | include/mcl/bn384.hpp | 17 | ||||
-rw-r--r-- | include/mcl/bn512.hpp | 16 | ||||
-rw-r--r-- | include/mcl/bn_common.hpp | 103 |
5 files changed, 127 insertions, 141 deletions
diff --git a/include/mcl/bn.hpp b/include/mcl/bn.hpp index 9964b32..b58dc24 100644 --- a/include/mcl/bn.hpp +++ b/include/mcl/bn.hpp @@ -11,8 +11,24 @@ #include <mcl/curve_type.h> #include <assert.h> +#ifndef MCL_MAX_FP_BIT_SIZE + #define MCL_MAX_FP_BIT_SIZE 256 +#endif + +#ifndef MCL_MAX_FR_BIT_SIZE + #define MCL_MAX_FR_BIT_SIZE MCL_MAX_FP_BIT_SIZE +#endif namespace mcl { +namespace bn { +namespace local { +struct FpTag; +struct FrTag; +} +typedef mcl::FpT<local::FpTag, MCL_MAX_FP_BIT_SIZE> Fp; +typedef mcl::FpT<local::FrTag, MCL_MAX_FR_BIT_SIZE> Fr; +} + struct CurveParam { /* y^2 = x^3 + b @@ -1840,5 +1856,106 @@ static const CurveParam& CurveFp382_2 = BN381_2; static const CurveParam& CurveFp462 = BN462; static const CurveParam& CurveSNARK1 = BN_SNARK1; +typedef mcl::bn::BNT<Fp> BN; +typedef BN::Fp2 Fp2; +typedef BN::Fp6 Fp6; +typedef BN::Fp12 Fp12; +typedef BN::G1 G1; +typedef BN::G2 G2; +typedef BN::Fp12 GT; + +inline void initPairing(const mcl::CurveParam& cp = mcl::BN254, fp::Mode mode = fp::FP_AUTO) +{ + BN::init(cp, mode); + G1::setCompressedExpression(); + G2::setCompressedExpression(); + Fr::init(BN::param.r); +} + +inline void finalExp(Fp12& y, const Fp12& x) +{ + BN::finalExp(y, x); +} + +inline void hashAndMapToG1(G1& P, const void *buf, size_t bufSize) +{ + BN::hashAndMapToG1(P, buf, bufSize); +} + +inline void hashAndMapToG1(G1& P, const std::string& str) +{ + BN::hashAndMapToG1(P, str); +} + +inline void hashAndMapToG2(G2& P, const void *buf, size_t bufSize) +{ + BN::hashAndMapToG2(P, buf, bufSize); +} + +inline void hashAndMapToG2(G2& P, const std::string& str) +{ + BN::hashAndMapToG2(P, str); +} + +inline void mapToG1(G1& P, const Fp& x) +{ + BN::mapToG1(P, x); +} + +inline void mapToG2(G2& P, const Fp2& x) +{ + BN::mapToG2(P, x); +} + +inline void millerLoop(Fp12& f, const G1& P, const G2& Q) +{ + BN::millerLoop(f, P, Q); +} +inline void pairing(Fp12& f, const G1& P, const G2& Q) +{ + BN::pairing(f, P, Q); +} + +inline void precomputeG2(std::vector<Fp6>& Qcoeff, const G2& Q) +{ + BN::precomputeG2(Qcoeff, Q); +} + +inline void precomputeG2(Fp6 *Qcoeff, const G2& Q) +{ + BN::precomputeG2(Qcoeff, Q); +} + +inline void precomputedMillerLoop(Fp12& f, const G1& P, const std::vector<Fp6>& Qcoeff) +{ + BN::precomputedMillerLoop(f, P, Qcoeff); +} + +inline void precomputedMillerLoop(Fp12& f, const G1& P, const Fp6* Qcoeff) +{ + BN::precomputedMillerLoop(f, P, Qcoeff); +} + +inline void precomputedMillerLoop2(Fp12& f, const G1& P1, const std::vector<Fp6>& Q1coeff, const G1& P2, const std::vector<Fp6>& Q2coeff) +{ + BN::precomputedMillerLoop2(f, P1, Q1coeff, P2, Q2coeff); +} + +inline void precomputedMillerLoop2(Fp12& f, const G1& P1, const Fp6* Q1coeff, const G1& P2, const Fp6* Q2coeff) +{ + BN::precomputedMillerLoop2(f, P1, Q1coeff, P2, Q2coeff); +} + +inline void verifyOrderG1(bool doVerify) +{ + BN::verifyOrderG1(doVerify); +} + +inline void verifyOrderG2(bool doVerify) +{ + BN::verifyOrderG2(doVerify); +} + + } } // mcl::bn diff --git a/include/mcl/bn256.hpp b/include/mcl/bn256.hpp index ef0a324..7a5da7a 100644 --- a/include/mcl/bn256.hpp +++ b/include/mcl/bn256.hpp @@ -6,19 +6,10 @@ @license modified new BSD license http://opensource.org/licenses/BSD-3-Clause */ +#define MCL_MAX_FP_BIT_SIZE 256 #include <mcl/bn.hpp> namespace mcl { namespace bn256 { - -namespace local { -struct FpTag; -struct FrTag; -} - -typedef mcl::FpT<local::FpTag, 256> Fp; -typedef mcl::FpT<local::FrTag, 256> Fr; - -#include <mcl/bn_common.hpp> - -} } // mcl::bn256 +using namespace mcl::bn; +} } diff --git a/include/mcl/bn384.hpp b/include/mcl/bn384.hpp index cda2ad6..8aa14fe 100644 --- a/include/mcl/bn384.hpp +++ b/include/mcl/bn384.hpp @@ -6,19 +6,10 @@ @license modified new BSD license http://opensource.org/licenses/BSD-3-Clause */ +#define MCL_MAX_FP_BIT_SIZE 384 #include <mcl/bn.hpp> +// #define MCL_MAX_FR_BIT_SIZE 256 // can set if BLS12_381 namespace mcl { namespace bn384 { - -namespace local { -struct FpTag; -struct FrTag; -} - -typedef mcl::FpT<local::FpTag, 384> Fp; -typedef mcl::FpT<local::FrTag, 384> Fr; - -#include <mcl/bn_common.hpp> - -} } // mcl::bn384 - +using namespace mcl::bn; +} } diff --git a/include/mcl/bn512.hpp b/include/mcl/bn512.hpp index 3a990b1..c87ad90 100644 --- a/include/mcl/bn512.hpp +++ b/include/mcl/bn512.hpp @@ -6,19 +6,9 @@ @license modified new BSD license http://opensource.org/licenses/BSD-3-Clause */ +#define MCL_MAX_FP_BIT_SIZE 512 #include <mcl/bn.hpp> namespace mcl { namespace bn512 { - -namespace local { -struct FpTag; -struct FrTag; -} - -typedef mcl::FpT<local::FpTag, 512> Fp; -typedef mcl::FpT<local::FrTag, 512> Fr; - -#include <mcl/bn_common.hpp> - -} } // mcl::bn512 - +using namespace mcl::bn; +} } diff --git a/include/mcl/bn_common.hpp b/include/mcl/bn_common.hpp deleted file mode 100644 index 7d2b188..0000000 --- a/include/mcl/bn_common.hpp +++ /dev/null @@ -1,103 +0,0 @@ -/* - included by mcl/bnXXX.hpp -*/ -typedef mcl::bn::BNT<Fp> BN; -typedef BN::Fp2 Fp2; -typedef BN::Fp6 Fp6; -typedef BN::Fp12 Fp12; -typedef BN::G1 G1; -typedef BN::G2 G2; -typedef BN::Fp12 GT; - -inline void initPairing(const mcl::CurveParam& cp = mcl::BN254, fp::Mode mode = fp::FP_AUTO) -{ - BN::init(cp, mode); - G1::setCompressedExpression(); - G2::setCompressedExpression(); - Fr::init(BN::param.r); -} - -inline void finalExp(Fp12& y, const Fp12& x) -{ - BN::finalExp(y, x); -} - -inline void hashAndMapToG1(G1& P, const void *buf, size_t bufSize) -{ - BN::hashAndMapToG1(P, buf, bufSize); -} - -inline void hashAndMapToG1(G1& P, const std::string& str) -{ - BN::hashAndMapToG1(P, str); -} - -inline void hashAndMapToG2(G2& P, const void *buf, size_t bufSize) -{ - BN::hashAndMapToG2(P, buf, bufSize); -} - -inline void hashAndMapToG2(G2& P, const std::string& str) -{ - BN::hashAndMapToG2(P, str); -} - -inline void mapToG1(G1& P, const Fp& x) -{ - BN::mapToG1(P, x); -} - -inline void mapToG2(G2& P, const Fp2& x) -{ - BN::mapToG2(P, x); -} - -inline void millerLoop(Fp12& f, const G1& P, const G2& Q) -{ - BN::millerLoop(f, P, Q); -} -inline void pairing(Fp12& f, const G1& P, const G2& Q) -{ - BN::pairing(f, P, Q); -} - -inline void precomputeG2(std::vector<Fp6>& Qcoeff, const G2& Q) -{ - BN::precomputeG2(Qcoeff, Q); -} - -inline void precomputeG2(Fp6 *Qcoeff, const G2& Q) -{ - BN::precomputeG2(Qcoeff, Q); -} - -inline void precomputedMillerLoop(Fp12& f, const G1& P, const std::vector<Fp6>& Qcoeff) -{ - BN::precomputedMillerLoop(f, P, Qcoeff); -} - -inline void precomputedMillerLoop(Fp12& f, const G1& P, const Fp6* Qcoeff) -{ - BN::precomputedMillerLoop(f, P, Qcoeff); -} - -inline void precomputedMillerLoop2(Fp12& f, const G1& P1, const std::vector<Fp6>& Q1coeff, const G1& P2, const std::vector<Fp6>& Q2coeff) -{ - BN::precomputedMillerLoop2(f, P1, Q1coeff, P2, Q2coeff); -} - -inline void precomputedMillerLoop2(Fp12& f, const G1& P1, const Fp6* Q1coeff, const G1& P2, const Fp6* Q2coeff) -{ - BN::precomputedMillerLoop2(f, P1, Q1coeff, P2, Q2coeff); -} - -inline void verifyOrderG1(bool doVerify) -{ - BN::verifyOrderG1(doVerify); -} - -inline void verifyOrderG2(bool doVerify) -{ - BN::verifyOrderG2(doVerify); -} - |