diff options
Diffstat (limited to 'test/ec')
| -rw-r--r-- | test/ec/test_configuration.py | 4 | ||||
| -rw-r--r-- | test/ec/test_mult.py | 59 | ||||
| -rw-r--r-- | test/ec/utils.py | 7 |
3 files changed, 45 insertions, 25 deletions
diff --git a/test/ec/test_configuration.py b/test/ec/test_configuration.py index e184ca3..54e4827 100644 --- a/test/ec/test_configuration.py +++ b/test/ec/test_configuration.py @@ -29,7 +29,7 @@ class ConfigurationTests(TestCase): model = ShortWeierstrassModel() coords = model.coordinates["projective"] configs = list(all_configurations(model=model, coords=coords, **self.base_independents())) - self.assertEqual(len(configs), 1344) + self.assertEqual(len(configs), 1960) def test_mult_class(self): model = ShortWeierstrassModel() @@ -37,7 +37,7 @@ class ConfigurationTests(TestCase): scalarmult = LTRMultiplier configs = list(all_configurations(model=model, coords=coords, scalarmult=scalarmult, **self.base_independents())) - self.assertEqual(len(configs), 384) + self.assertEqual(len(configs), 560) def test_one(self): model = ShortWeierstrassModel() diff --git a/test/ec/test_mult.py b/test/ec/test_mult.py index 5b3683f..5d7e66b 100644 --- a/test/ec/test_mult.py +++ b/test/ec/test_mult.py @@ -8,6 +8,7 @@ from pyecsca.ec.mult import (LTRMultiplier, RTLMultiplier, LadderMultiplier, Bin DifferentialLadderMultiplier, CoronMultiplier) from pyecsca.ec.point import InfinityPoint +from .utils import cartesian class ScalarMultiplierTests(TestCase): @@ -45,6 +46,7 @@ class ScalarMultiplierTests(TestCase): @parameterized.expand([ ("scaled", "add-1998-cmo", "dbl-1998-cmo", "z"), + ("complete", "add-2016-rcb", "dbl-2016-rcb", None), ("none", "add-1998-cmo", "dbl-1998-cmo", None) ]) def test_rtl(self, name, add, dbl, scale): @@ -52,6 +54,7 @@ class ScalarMultiplierTests(TestCase): @parameterized.expand([ ("scaled", "add-1998-cmo", "dbl-1998-cmo", "z"), + ("complete", "add-2016-rcb", "dbl-2016-rcb", None), ("none", "add-1998-cmo", "dbl-1998-cmo", None) ]) def test_ltr(self, name, add, dbl, scale): @@ -69,6 +72,7 @@ class ScalarMultiplierTests(TestCase): @parameterized.expand([ ("scaled", "add-1998-cmo", "dbl-1998-cmo", "z"), + ("complete", "add-2016-rcb", "dbl-2016-rcb", None), ("none", "add-1998-cmo", "dbl-1998-cmo", None) ]) def test_coron(self, name, add, dbl, scale): @@ -83,6 +87,7 @@ class ScalarMultiplierTests(TestCase): @parameterized.expand([ ("scaled", "add-1998-cmo", "dbl-1998-cmo", "z"), + ("complete", "add-2016-rcb", "dbl-2016-rcb", None), ("none", "add-1998-cmo", "dbl-1998-cmo", None) ]) def test_simple_ladder(self, name, add, dbl, scale): @@ -113,6 +118,7 @@ class ScalarMultiplierTests(TestCase): @parameterized.expand([ ("scaled", "add-1998-cmo", "dbl-1998-cmo", "neg", "z"), + ("complete", "add-2016-rcb", "dbl-2016-rcb", "neg", None), ("none", "add-1998-cmo", "dbl-1998-cmo", "neg", None) ]) def test_binary_naf(self, name, add, dbl, neg, scale): @@ -120,16 +126,20 @@ class ScalarMultiplierTests(TestCase): @parameterized.expand([ ("scaled3", "add-1998-cmo", "dbl-1998-cmo", "neg", 3, "z"), - ("none3", "add-1998-cmo", "dbl-1998-cmo", "neg", 3, None) + ("none3", "add-1998-cmo", "dbl-1998-cmo", "neg", 3, None), + ("complete3", "add-2016-rcb", "dbl-2016-rcb", "neg", 3, None), + ("scaled5", "add-1998-cmo", "dbl-1998-cmo", "neg", 5, "z"), + ("none5", "add-1998-cmo", "dbl-1998-cmo", "neg", 5, None), + ("complete5", "add-2016-rcb", "dbl-2016-rcb", "neg", 5, None), ]) def test_window_naf(self, name, add, dbl, neg, width, scale): formulas = self.get_formulas(self.coords, add, dbl, neg, scale) mult = WindowNAFMultiplier(*formulas[:3], width, *formulas[3:]) mult.init(self.secp128r1, self.base) - res = mult.multiply(10) - other = mult.multiply(5) + res = mult.multiply(157*789) + other = mult.multiply(157) mult.init(self.secp128r1, other) - other = mult.multiply(2) + other = mult.multiply(789) self.assertPointEquality(res, other, scale) mult.init(self.secp128r1, self.base) self.assertEqual(InfinityPoint(self.coords), mult.multiply(0)) @@ -137,22 +147,25 @@ class ScalarMultiplierTests(TestCase): mult = WindowNAFMultiplier(*formulas[:3], width, *formulas[3:], precompute_negation=True) mult.init(self.secp128r1, self.base) - res_precompute = mult.multiply(10) + res_precompute = mult.multiply(157*789) self.assertPointEquality(res_precompute, res, scale) - @parameterized.expand([ + @parameterized.expand(cartesian([ ("10", 10), ("2355498743", 2355498743), ("325385790209017329644351321912443757746", 325385790209017329644351321912443757746) - ]) - def test_basic_multipliers(self, name, num): - ltr = LTRMultiplier(self.coords.formulas["add-1998-cmo"], - self.coords.formulas["dbl-1998-cmo"], self.coords.formulas["z"]) + ],[ + ("add-1998-cmo", "dbl-1998-cmo"), + ("add-2016-rcb", "dbl-2016-rcb") + ])) + def test_basic_multipliers(self, name, num, add, dbl): + ltr = LTRMultiplier(self.coords.formulas[add], + self.coords.formulas[dbl], self.coords.formulas["z"]) with self.assertRaises(ValueError): ltr.multiply(1) ltr.init(self.secp128r1, self.base) res_ltr = ltr.multiply(num) - rtl = RTLMultiplier(self.coords.formulas["add-1998-cmo"], + rtl = RTLMultiplier(self.coords.formulas[add], self.coords.formulas["dbl-1998-cmo"], self.coords.formulas["z"]) with self.assertRaises(ValueError): rtl.multiply(1) @@ -160,11 +173,11 @@ class ScalarMultiplierTests(TestCase): res_rtl = rtl.multiply(num) self.assertEqual(res_ltr, res_rtl) - ltr_always = LTRMultiplier(self.coords.formulas["add-1998-cmo"], - self.coords.formulas["dbl-1998-cmo"], self.coords.formulas["z"], + ltr_always = LTRMultiplier(self.coords.formulas[add], + self.coords.formulas[dbl], self.coords.formulas["z"], always=True) - rtl_always = RTLMultiplier(self.coords.formulas["add-1998-cmo"], - self.coords.formulas["dbl-1998-cmo"], self.coords.formulas["z"], + rtl_always = RTLMultiplier(self.coords.formulas[add], + self.coords.formulas[dbl], self.coords.formulas["z"], always=True) ltr_always.init(self.secp128r1, self.base) rtl_always.init(self.secp128r1, self.base) @@ -173,8 +186,8 @@ class ScalarMultiplierTests(TestCase): self.assertEqual(res_ltr, res_ltr_always) self.assertEqual(res_rtl, res_rtl_always) - bnaf = BinaryNAFMultiplier(self.coords.formulas["add-1998-cmo"], - self.coords.formulas["dbl-1998-cmo"], + bnaf = BinaryNAFMultiplier(self.coords.formulas[add], + self.coords.formulas[dbl], self.coords.formulas["neg"], self.coords.formulas["z"]) with self.assertRaises(ValueError): bnaf.multiply(1) @@ -182,8 +195,8 @@ class ScalarMultiplierTests(TestCase): res_bnaf = bnaf.multiply(num) self.assertEqual(res_bnaf, res_ltr) - wnaf = WindowNAFMultiplier(self.coords.formulas["add-1998-cmo"], - self.coords.formulas["dbl-1998-cmo"], + wnaf = WindowNAFMultiplier(self.coords.formulas[add], + self.coords.formulas[dbl], self.coords.formulas["neg"], 3, self.coords.formulas["z"]) with self.assertRaises(ValueError): wnaf.multiply(1) @@ -191,8 +204,8 @@ class ScalarMultiplierTests(TestCase): res_wnaf = wnaf.multiply(num) self.assertEqual(res_wnaf, res_ltr) - ladder = SimpleLadderMultiplier(self.coords.formulas["add-1998-cmo"], - self.coords.formulas["dbl-1998-cmo"], + ladder = SimpleLadderMultiplier(self.coords.formulas[add], + self.coords.formulas[dbl], self.coords.formulas["z"]) with self.assertRaises(ValueError): ladder.multiply(1) @@ -200,8 +213,8 @@ class ScalarMultiplierTests(TestCase): res_ladder = ladder.multiply(num) self.assertEqual(res_ladder, res_ltr) - coron = CoronMultiplier(self.coords.formulas["add-1998-cmo"], - self.coords.formulas["dbl-1998-cmo"], + coron = CoronMultiplier(self.coords.formulas[add], + self.coords.formulas[dbl], self.coords.formulas["z"]) with self.assertRaises(ValueError): coron.multiply(1) diff --git a/test/ec/utils.py b/test/ec/utils.py index bedfed2..e1812b3 100644 --- a/test/ec/utils.py +++ b/test/ec/utils.py @@ -1,3 +1,10 @@ +from itertools import product +from functools import reduce + def slow(func): func.slow = 1 return func + +def cartesian(*items): + for cart in product(*items): + yield reduce(lambda x, y: x + y, cart)
\ No newline at end of file |
