aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMITSUNARI Shigeo <herumi@nifty.com>2017-10-03 08:59:26 +0800
committerMITSUNARI Shigeo <herumi@nifty.com>2017-10-03 08:59:26 +0800
commitbfeb3c329668b8d2ac2016580960837c1fef37a7 (patch)
tree409a1b1f27927a5a977c1bce584eb6a3ccc22aee
parent651e122018f541a455b97711c474e113d5853f19 (diff)
downloaddexon-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.hpp47
-rw-r--r--misc/she/bench4.txt130
-rw-r--r--misc/she/bench6.txt122
-rw-r--r--misc/she/bench8.txt120
-rw-r--r--test/she_test.cpp10
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);