diff options
author | MITSUNARI Shigeo <herumi@nifty.com> | 2017-10-03 08:59:26 +0800 |
---|---|---|
committer | MITSUNARI Shigeo <herumi@nifty.com> | 2017-10-03 08:59:26 +0800 |
commit | bfeb3c329668b8d2ac2016580960837c1fef37a7 (patch) | |
tree | 409a1b1f27927a5a977c1bce584eb6a3ccc22aee | |
parent | 651e122018f541a455b97711c474e113d5853f19 (diff) | |
download | dexon-mcl-bfeb3c329668b8d2ac2016580960837c1fef37a7.tar.gz dexon-mcl-bfeb3c329668b8d2ac2016580960837c1fef37a7.tar.zst dexon-mcl-bfeb3c329668b8d2ac2016580960837c1fef37a7.zip |
[she] add bench for encGi with PrecomputedPublicKey
-rw-r--r-- | include/mcl/she.hpp | 47 | ||||
-rw-r--r-- | misc/she/bench4.txt | 130 | ||||
-rw-r--r-- | misc/she/bench6.txt | 122 | ||||
-rw-r--r-- | misc/she/bench8.txt | 120 | ||||
-rw-r--r-- | test/she_test.cpp | 10 |
5 files changed, 244 insertions, 185 deletions
diff --git a/include/mcl/she.hpp b/include/mcl/she.hpp index 946611f..83f4479 100644 --- a/include/mcl/she.hpp +++ b/include/mcl/she.hpp @@ -352,6 +352,7 @@ private: G S_, T_; friend class SecretKey; friend class PublicKey; + friend class PrecomputedPublicKey; friend class CipherTextA; friend class CipherTextM; public: @@ -879,6 +880,8 @@ public: GTwin exPQwm_; GTwin eyPQwm_; GTwin exyPQwm_; + mcl::fp::WindowMethod<G1> xPwm_; + mcl::fp::WindowMethod<G2> yQwm_; template<class T> void mulByWindowMethod(GT& x, const GTwin& wm, const T& y) const { @@ -894,6 +897,33 @@ public: exPQwm_.init(static_cast<const GTasEC&>(exPQ_), bitSize, local::winSize); eyPQwm_.init(static_cast<const GTasEC&>(eyPQ_), bitSize, local::winSize); exyPQwm_.init(static_cast<const GTasEC&>(exyPQ_), bitSize, local::winSize); + xPwm_.init(pub.xP_, bitSize, local::winSize); + yQwm_.init(pub.yQ_, bitSize, local::winSize); + } + /* + (S, T) = (m P + r xP, rP) + */ + template<class G, class RG, class I> + void enc1(G& S, G& T, int64_t m, RG& rg, const mcl::fp::WindowMethod<I>& Pwm, const mcl::fp::WindowMethod<G>& xPwm) const + { + Fr r; + r.setRand(rg); + Pwm.mul(static_cast<I&>(T), r); + xPwm.mul(S, r); + if (m == 0) return; + G C; + Pwm.mul(static_cast<I&>(C), m); + S += C; + } + template<class RG> + void enc(CipherTextG1& c, int64_t m, RG& rg) const + { + enc1(c.S_, c.T_, m, rg, PhashTbl_.getWM(), xPwm_); + } + template<class RG> + void enc(CipherTextG2& c, int64_t m, RG& rg) const + { + enc1(c.S_, c.T_, m, rg, QhashTbl_.getWM(), yQwm_); } template<class RG> void enc(CipherTextM& c, int64_t m, RG& rg) const @@ -914,14 +944,21 @@ public: rb = rb + rc - ra; ePQhashTbl_.mulByWindowMethod(c.g_[3], rb); } - template<class RG> - void reRand(CipherTextM& c, RG& rg) const + template<class CT, class RG> + void reRandT(CT& c, RG& rg) const { - CipherTextM c0; + CT c0; enc(c0, 0, rg); - CipherTextM::add(c, c, c0); + CT::add(c, c, c0); } + template<class RG> void reRand(CipherTextG1& c, RG& rg) const { reRandT(c, rg); } + template<class RG> void reRand(CipherTextG2& c, RG& rg) const { reRandT(c, rg); } + template<class RG> void reRand(CipherTextM& c, RG& rg) const { reRandT(c, rg); } + void enc(CipherTextG1& c, int64_t m) const { return enc(c, m, local::g_rg); } + void enc(CipherTextG2& c, int64_t m) const { return enc(c, m, local::g_rg); } void enc(CipherTextM& c, int64_t m) const { return enc(c, m, local::g_rg); } + void reRand(CipherTextG1& c) const { reRand(c, local::g_rg); } + void reRand(CipherTextG2& c) const { reRand(c, local::g_rg); } void reRand(CipherTextM& c) const { reRand(c, local::g_rg); } }; @@ -1226,8 +1263,8 @@ typedef SHE::PublicKey PublicKey; typedef SHE::PrecomputedPublicKey PrecomputedPublicKey; typedef SHE::CipherTextG1 CipherTextG1; typedef SHE::CipherTextG2 CipherTextG2; -typedef SHE::CipherTextA CipherTextA; typedef SHE::CipherTextM CipherTextM; +typedef SHE::CipherTextA CipherTextA; typedef CipherTextM CipherTextGT; typedef SHE::CipherText CipherText; diff --git a/misc/she/bench4.txt b/misc/she/bench4.txt index 95f7a28..99349c5 100644 --- a/misc/she/bench4.txt +++ b/misc/she/bench4.txt @@ -8,84 +8,88 @@ ctest:module=add_mul_add_sub ctest:module=innerProduct ctest:module=io ctest:module=bench -enc 674.326Kclk -add 7.910Kclk -mul 4.054Mclk -dec 2.223Mclk -add after mul 21.223Kclk +enc 691.368Kclk +add 8.353Kclk +mul 4.051Mclk +dec 2.168Mclk +add after mul 20.690Kclk ctest:module=saveHash ctest:module=hashBench Kclk -m=000fffff decG1 1.89e+02 -m=001fffff decG1 1.89e+02 +m=000fffff decG1 1.86e+02 +m=001fffff decG1 1.87e+02 m=003fffff decG1 1.89e+02 -m=007fffff decG1 1.96e+02 -m=00ffffff decG1 2.11e+02 -m=01ffffff decG1 2.68e+02 -m=03ffffff decG1 4.19e+02 -m=07ffffff decG1 7.23e+02 -m=0fffffff decG1 1.30e+03 -m=1fffffff decG1 2.45e+03 -m=3fffffff decG1 4.71e+03 -m=7fffffff decG1 9.31e+03 +m=007fffff decG1 1.95e+02 +m=00ffffff decG1 2.09e+02 +m=01ffffff decG1 2.70e+02 +m=03ffffff decG1 4.21e+02 +m=07ffffff decG1 7.25e+02 +m=0fffffff decG1 1.29e+03 +m=1fffffff decG1 2.44e+03 +m=3fffffff decG1 4.70e+03 +m=7fffffff decG1 9.27e+03 -m=000fffff decG2 4.07e+02 -m=001fffff decG2 4.08e+02 -m=003fffff decG2 4.08e+02 -m=007fffff decG2 4.20e+02 -m=00ffffff decG2 4.46e+02 -m=01ffffff decG2 5.17e+02 -m=03ffffff decG2 7.20e+02 -m=07ffffff decG2 1.11e+03 -m=0fffffff decG2 1.87e+03 -m=1fffffff decG2 3.36e+03 -m=3fffffff decG2 6.38e+03 -m=7fffffff decG2 1.24e+04 +m=000fffff decG2 4.12e+02 +m=001fffff decG2 4.14e+02 +m=003fffff decG2 4.12e+02 +m=007fffff decG2 4.26e+02 +m=00ffffff decG2 4.53e+02 +m=01ffffff decG2 5.36e+02 +m=03ffffff decG2 7.40e+02 +m=07ffffff decG2 1.15e+03 +m=0fffffff decG2 1.94e+03 +m=1fffffff decG2 3.51e+03 +m=3fffffff decG2 6.65e+03 +m=7fffffff decG2 1.30e+04 -m=000fffff decGT 2.25e+03 -m=001fffff decGT 2.23e+03 -m=003fffff decGT 2.27e+03 -m=007fffff decGT 2.22e+03 -m=00ffffff decGT 2.25e+03 -m=01ffffff decGT 2.35e+03 -m=03ffffff decGT 2.44e+03 -m=07ffffff decGT 2.63e+03 -m=0fffffff decGT 3.00e+03 -m=1fffffff decGT 3.86e+03 -m=3fffffff decGT 5.46e+03 -m=7fffffff decGT 8.72e+03 +m=000fffff decGT 2.16e+03 +m=001fffff decGT 2.17e+03 +m=003fffff decGT 2.17e+03 +m=007fffff decGT 2.17e+03 +m=00ffffff decGT 2.20e+03 +m=01ffffff decGT 2.24e+03 +m=03ffffff decGT 2.34e+03 +m=07ffffff decGT 2.53e+03 +m=0fffffff decGT 2.91e+03 +m=1fffffff decGT 3.76e+03 +m=3fffffff decGT 5.40e+03 +m=7fffffff decGT 8.69e+03 large m -G1::add 7.35e-01 -G1::mul 1.94e+02 -G2::add 3.17e+00 -G2::mul 4.04e+02 -GT::mul 5.08e+00 -GT::pow 7.44e+02 +G1::add 7.37e-01 +G1::mul 1.86e+02 +G2::add 3.44e+00 +G2::mul 4.19e+02 +GT::mul 5.11e+00 +GT::pow 7.33e+02 GTwindow 1.35e+02 -miller 6.74e+02 -finalExp 4.23e+02 -precomML 5.18e+02 +miller 6.73e+02 +finalExp 4.21e+02 +precomML 5.17e+02 small m = 2097151 -G1::mul 4.52e+01 -G2::mul 9.95e+01 +G1::mul 4.53e+01 +G2::mul 1.03e+02 GT::pow 1.33e+02 -GTwindow 1.55e+01 +GTwindow 1.58e+01 encG1 2.10e+02 -encG2 4.81e+02 -encGT 2.47e+03 +encG2 4.88e+02 +encGT 2.45e+03 +encG1pre 5.31e+01 +encG2pre 1.56e+02 encGTpre 6.02e+02 -decG1 1.90e+02 +decG1 1.88e+02 decG2 4.12e+02 -degGT 2.22e+03 -mul 4.07e+03 +degGT 2.16e+03 +mul 4.05e+03 addG1 1.56e+00 -addG2 4.76e+00 +addG2 4.70e+00 addGT 2.07e+01 reRandG1 2.10e+02 -reRandG2 4.73e+02 -reRandGT 2.48e+03 +reRandG2 4.85e+02 +reRandGT 2.47e+03 +reRandG1pre 5.26e+01 +reRandG2pre 1.54e+02 reRandGTpre 6.08e+02 -mulG1 9.21e+01 -mulG2 2.00e+02 +mulG1 9.06e+01 +mulG2 2.08e+02 mulGT 5.35e+02 -ctest:name=she_test, module=11, total=2859, ok=2859, ng=0, exception=0 +ctest:name=she_test, module=11, total=2879, ok=2879, ng=0, exception=0 diff --git a/misc/she/bench6.txt b/misc/she/bench6.txt index d1125f1..b33d3b0 100644 --- a/misc/she/bench6.txt +++ b/misc/she/bench6.txt @@ -8,84 +8,88 @@ ctest:module=add_mul_add_sub ctest:module=innerProduct ctest:module=io ctest:module=bench -enc 2.081Mclk -add 17.729Kclk -mul 13.522Mclk -dec 6.002Mclk -add after mul 42.743Kclk +enc 2.087Mclk +add 17.699Kclk +mul 13.369Mclk +dec 6.004Mclk +add after mul 41.593Kclk ctest:module=saveHash ctest:module=hashBench Kclk m=000fffff decG1 5.29e+02 -m=001fffff decG1 5.27e+02 +m=001fffff decG1 5.30e+02 m=003fffff decG1 5.30e+02 -m=007fffff decG1 5.36e+02 -m=00ffffff decG1 5.83e+02 -m=01ffffff decG1 7.07e+02 -m=03ffffff decG1 9.52e+02 +m=007fffff decG1 5.42e+02 +m=00ffffff decG1 5.86e+02 +m=01ffffff decG1 7.09e+02 +m=03ffffff decG1 9.54e+02 m=07ffffff decG1 1.41e+03 m=0fffffff decG1 2.31e+03 m=1fffffff decG1 4.13e+03 m=3fffffff decG1 7.73e+03 m=7fffffff decG1 1.50e+04 -m=000fffff decG2 1.26e+03 -m=001fffff decG2 1.27e+03 -m=003fffff decG2 1.26e+03 -m=007fffff decG2 1.29e+03 -m=00ffffff decG2 1.35e+03 -m=01ffffff decG2 1.53e+03 -m=03ffffff decG2 1.88e+03 -m=07ffffff decG2 2.54e+03 -m=0fffffff decG2 3.86e+03 -m=1fffffff decG2 6.50e+03 -m=3fffffff decG2 1.18e+04 -m=7fffffff decG2 2.24e+04 +m=000fffff decG2 1.29e+03 +m=001fffff decG2 1.30e+03 +m=003fffff decG2 1.30e+03 +m=007fffff decG2 1.33e+03 +m=00ffffff decG2 1.38e+03 +m=01ffffff decG2 1.55e+03 +m=03ffffff decG2 1.90e+03 +m=07ffffff decG2 2.57e+03 +m=0fffffff decG2 3.90e+03 +m=1fffffff decG2 6.55e+03 +m=3fffffff decG2 1.19e+04 +m=7fffffff decG2 2.25e+04 -m=000fffff decGT 6.05e+03 -m=001fffff decGT 6.05e+03 -m=003fffff decGT 6.04e+03 -m=007fffff decGT 6.07e+03 -m=00ffffff decGT 6.11e+03 -m=01ffffff decGT 6.19e+03 +m=000fffff decGT 6.06e+03 +m=001fffff decGT 6.07e+03 +m=003fffff decGT 6.06e+03 +m=007fffff decGT 6.08e+03 +m=00ffffff decGT 6.13e+03 +m=01ffffff decGT 6.21e+03 m=03ffffff decGT 6.42e+03 m=07ffffff decGT 6.74e+03 m=0fffffff decGT 7.47e+03 -m=1fffffff decGT 9.00e+03 -m=3fffffff decGT 1.21e+04 -m=7fffffff decGT 1.81e+04 +m=1fffffff decGT 8.99e+03 +m=3fffffff decGT 1.20e+04 +m=7fffffff decGT 1.80e+04 large m G1::add 1.48e+00 G1::mul 5.34e+02 -G2::add 6.94e+00 -G2::mul 1.22e+03 -GT::mul 1.07e+01 -GT::pow 1.96e+03 -GTwindow 4.15e+02 -miller 2.10e+03 -finalExp 1.50e+03 -precomML 1.64e+03 +G2::add 6.93e+00 +G2::mul 1.23e+03 +GT::mul 1.05e+01 +GT::pow 1.95e+03 +GTwindow 3.96e+02 +miller 2.08e+03 +finalExp 1.49e+03 +precomML 1.63e+03 small m = 2097151 -G1::mul 8.24e+01 +G1::mul 8.27e+01 G2::mul 2.06e+02 -GT::pow 2.68e+02 -GTwindow 3.18e+01 -encG1 6.03e+02 -encG2 1.51e+03 -encGT 7.68e+03 -encGTpre 1.75e+03 -decG1 5.28e+02 +GT::pow 2.64e+02 +GTwindow 3.13e+01 +encG1 6.01e+02 +encG2 1.49e+03 +encGT 7.63e+03 +encG1pre 1.42e+02 +encG2pre 4.73e+02 +encGTpre 1.72e+03 +decG1 5.30e+02 decG2 1.29e+03 -degGT 6.05e+03 -mul 1.35e+04 -addG1 3.09e+00 -addG2 1.02e+01 -addGT 4.22e+01 -reRandG1 5.99e+02 -reRandG2 1.50e+03 -reRandGT 7.72e+03 -reRandGTpre 1.76e+03 +degGT 6.08e+03 +mul 1.34e+04 +addG1 3.07e+00 +addG2 1.04e+01 +addGT 4.13e+01 +reRandG1 6.01e+02 +reRandG2 1.49e+03 +reRandGT 7.67e+03 +reRandG1pre 1.40e+02 +reRandG2pre 4.68e+02 +reRandGTpre 1.73e+03 mulG1 1.65e+02 -mulG2 4.13e+02 -mulGT 1.07e+03 -ctest:name=she_test, module=11, total=2859, ok=2859, ng=0, exception=0 +mulG2 4.15e+02 +mulGT 1.06e+03 +ctest:name=she_test, module=11, total=2879, ok=2879, ng=0, exception=0 diff --git a/misc/she/bench8.txt b/misc/she/bench8.txt index 4f09ad7..ff5284a 100644 --- a/misc/she/bench8.txt +++ b/misc/she/bench8.txt @@ -8,39 +8,39 @@ ctest:module=add_mul_add_sub ctest:module=innerProduct ctest:module=io ctest:module=bench -enc 5.084Mclk -add 36.299Kclk -mul 30.169Mclk -dec 12.705Mclk -add after mul 77.619Kclk +enc 5.113Mclk +add 36.423Kclk +mul 30.275Mclk +dec 12.745Mclk +add after mul 77.231Kclk ctest:module=saveHash ctest:module=hashBench Kclk -m=000fffff decG1 1.43e+03 -m=001fffff decG1 1.44e+03 -m=003fffff decG1 1.43e+03 -m=007fffff decG1 1.46e+03 -m=00ffffff decG1 1.54e+03 -m=01ffffff decG1 1.69e+03 -m=03ffffff decG1 2.02e+03 -m=07ffffff decG1 2.64e+03 -m=0fffffff decG1 3.89e+03 -m=1fffffff decG1 6.37e+03 +m=000fffff decG1 1.47e+03 +m=001fffff decG1 1.48e+03 +m=003fffff decG1 1.47e+03 +m=007fffff decG1 1.49e+03 +m=00ffffff decG1 1.56e+03 +m=01ffffff decG1 1.73e+03 +m=03ffffff decG1 2.05e+03 +m=07ffffff decG1 2.66e+03 +m=0fffffff decG1 3.88e+03 +m=1fffffff decG1 6.35e+03 m=3fffffff decG1 1.13e+04 -m=7fffffff decG1 2.13e+04 +m=7fffffff decG1 2.11e+04 -m=000fffff decG2 3.00e+03 -m=001fffff decG2 3.01e+03 -m=003fffff decG2 3.00e+03 -m=007fffff decG2 3.05e+03 -m=00ffffff decG2 3.16e+03 -m=01ffffff decG2 3.43e+03 -m=03ffffff decG2 3.94e+03 -m=07ffffff decG2 4.95e+03 -m=0fffffff decG2 6.95e+03 +m=000fffff decG2 2.96e+03 +m=001fffff decG2 2.97e+03 +m=003fffff decG2 2.96e+03 +m=007fffff decG2 3.00e+03 +m=00ffffff decG2 3.11e+03 +m=01ffffff decG2 3.39e+03 +m=03ffffff decG2 3.91e+03 +m=07ffffff decG2 4.92e+03 +m=0fffffff decG2 6.93e+03 m=1fffffff decG2 1.10e+04 m=3fffffff decG2 1.91e+04 -m=7fffffff decG2 3.52e+04 +m=7fffffff decG2 3.53e+04 m=000fffff decGT 1.29e+04 m=001fffff decGT 1.29e+04 @@ -52,40 +52,44 @@ m=03ffffff decGT 1.35e+04 m=07ffffff decGT 1.41e+04 m=0fffffff decGT 1.54e+04 m=1fffffff decGT 1.80e+04 -m=3fffffff decGT 2.32e+04 -m=7fffffff decGT 3.37e+04 +m=3fffffff decGT 2.33e+04 +m=7fffffff decGT 3.38e+04 large m -G1::add 3.42e+00 -G1::mul 1.48e+03 -G2::add 1.38e+01 -G2::mul 2.90e+03 -GT::mul 1.92e+01 -GT::pow 4.32e+03 +G1::add 3.44e+00 +G1::mul 1.47e+03 +G2::add 1.37e+01 +G2::mul 2.91e+03 +GT::mul 1.91e+01 +GT::pow 4.22e+03 GTwindow 9.01e+02 -miller 4.86e+03 -finalExp 3.25e+03 -precomML 3.74e+03 +miller 4.88e+03 +finalExp 3.26e+03 +precomML 3.73e+03 small m = 2097151 -G1::mul 1.53e+02 -G2::mul 3.87e+02 -GT::pow 4.89e+02 -GTwindow 5.82e+01 -encG1 1.68e+03 -encG2 3.48e+03 -encGT 1.78e+04 -encGTpre 3.76e+03 -decG1 1.48e+03 -decG2 2.96e+03 -degGT 1.30e+04 -mul 3.10e+04 -addG1 6.92e+00 -addG2 2.05e+01 -addGT 7.66e+01 -reRandG1 1.65e+03 +G1::mul 1.54e+02 +G2::mul 3.85e+02 +GT::pow 4.88e+02 +GTwindow 5.78e+01 +encG1 1.64e+03 +encG2 3.50e+03 +encGT 1.77e+04 +encG1pre 3.65e+02 +encG2pre 1.09e+03 +encGTpre 3.78e+03 +decG1 1.46e+03 +decG2 2.98e+03 +degGT 1.29e+04 +mul 3.03e+04 +addG1 7.01e+00 +addG2 2.13e+01 +addGT 7.69e+01 +reRandG1 1.61e+03 reRandG2 3.48e+03 -reRandGT 1.77e+04 +reRandGT 1.78e+04 +reRandG1pre 3.64e+02 +reRandG2pre 1.08e+03 reRandGTpre 3.78e+03 -mulG1 3.07e+02 -mulG2 7.69e+02 -mulGT 1.96e+03 -ctest:name=she_test, module=11, total=2859, ok=2859, ng=0, exception=0 +mulG1 3.09e+02 +mulG2 7.67e+02 +mulGT 1.95e+03 +ctest:name=she_test, module=11, total=2879, ok=2879, ng=0, exception=0 diff --git a/test/she_test.cpp b/test/she_test.cpp index 3869ed7..db448ac 100644 --- a/test/she_test.cpp +++ b/test/she_test.cpp @@ -93,12 +93,18 @@ CYBOZU_TEST_AUTO(enc_dec) } PrecomputedPublicKey ppub; ppub.init(pub); + CipherTextG1 c1; + CipherTextG1 c2; CipherTextM cm1, cm2; for (int i = -5; i < 5; i++) { pub.enc(cm1, i); CYBOZU_TEST_EQUAL(sec.dec(cm1), i); ppub.enc(cm2, i); CYBOZU_TEST_EQUAL(sec.dec(cm2), i); + ppub.enc(c1, i); + CYBOZU_TEST_EQUAL(sec.dec(c1), i); + ppub.enc(c2, i); + CYBOZU_TEST_EQUAL(sec.dec(c2), i); } } @@ -378,6 +384,8 @@ CYBOZU_TEST_AUTO(hashBench) CYBOZU_BENCH_C("encG1 ", C, pub.enc, ca1, m); CYBOZU_BENCH_C("encG2 ", C, pub.enc, ca2, m); CYBOZU_BENCH_C("encGT ", C, pub.enc, cm, m); + CYBOZU_BENCH_C("encG1pre", C, ppub.enc, ca1, m); + CYBOZU_BENCH_C("encG2pre", C, ppub.enc, ca2, m); CYBOZU_BENCH_C("encGTpre", C, ppub.enc, cm, m); CYBOZU_BENCH_C("decG1 ", C, sec.dec, ca1); @@ -392,6 +400,8 @@ CYBOZU_TEST_AUTO(hashBench) CYBOZU_BENCH_C("reRandG1", C, pub.reRand, ca1); CYBOZU_BENCH_C("reRandG2", C, pub.reRand, ca2); CYBOZU_BENCH_C("reRandGT", C, pub.reRand, cm); + CYBOZU_BENCH_C("reRandG1pre", C, ppub.reRand, ca1); + CYBOZU_BENCH_C("reRandG2pre", C, ppub.reRand, ca2); CYBOZU_BENCH_C("reRandGTpre", C, ppub.reRand, cm); CYBOZU_BENCH_C("mulG1 ", C, CipherTextG1::mul, ca1, ca1, m); CYBOZU_BENCH_C("mulG2 ", C, CipherTextG2::mul, ca2, ca2, m); |