aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMITSUNARI Shigeo <herumi@nifty.com>2018-04-19 08:30:20 +0800
committerMITSUNARI Shigeo <herumi@nifty.com>2018-04-19 08:30:20 +0800
commit1a8bfdd7c07f2eb736311a5612b462dbe13f51c3 (patch)
tree35cd764ad9248e743ff9598f10d84c214a6059df
parentfab655989b4ea753d6dbaf489a54864e2826c5fe (diff)
downloadtangerine-mcl-1a8bfdd7c07f2eb736311a5612b462dbe13f51c3.tar.gz
tangerine-mcl-1a8bfdd7c07f2eb736311a5612b462dbe13f51c3.tar.zst
tangerine-mcl-1a8bfdd7c07f2eb736311a5612b462dbe13f51c3.zip
refactor structure of BN
-rw-r--r--include/mcl/bn.hpp117
-rw-r--r--include/mcl/bn256.hpp15
-rw-r--r--include/mcl/bn384.hpp17
-rw-r--r--include/mcl/bn512.hpp16
-rw-r--r--include/mcl/bn_common.hpp103
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);
-}
-