aboutsummaryrefslogtreecommitdiffhomepage
path: root/test
diff options
context:
space:
mode:
authorJ08nY2020-03-02 17:23:20 +0100
committerJ08nY2020-03-02 17:23:20 +0100
commit49018aa37f44b56292193b763ed4a8bb15389c30 (patch)
tree9d62101f699075d18c9406a2a175bdd5c377954a /test
parent81e5f24363cf8f50099b7fbed0fd3bcfaac9d5ea (diff)
downloadpyecsca-codegen-49018aa37f44b56292193b763ed4a8bb15389c30.tar.gz
pyecsca-codegen-49018aa37f44b56292193b763ed4a8bb15389c30.tar.zst
pyecsca-codegen-49018aa37f44b56292193b763ed4a8bb15389c30.zip
Add support for specifying multiplication and square algos.
Diffstat (limited to 'test')
-rw-r--r--test/test_builder.py26
-rw-r--r--test/test_impl.py46
2 files changed, 35 insertions, 37 deletions
diff --git a/test/test_builder.py b/test/test_builder.py
index 4bf945e..e43ae70 100644
--- a/test/test_builder.py
+++ b/test/test_builder.py
@@ -3,28 +3,20 @@ from unittest import TestCase
from click.testing import CliRunner
from pyecsca.codegen.builder import build_impl, list_impl
-
+from parameterized import parameterized
class BuilderTests(TestCase):
- def test_cli_build(self):
+ @parameterized.expand([
+ ("basic", ["--platform", "HOST", "shortw", "projective", "add-1998-cmo", "dbl-1998-cmo", "z", "ltr(complete=True)", "."]),
+ ("karatsuba", ["--platform", "HOST", "--mul", "KARATSUBA", "shortw", "projective", "add-1998-cmo", "dbl-1998-cmo", "z", "ltr(complete=True)", "."]),
+ ("strip", ["--platform", "HOST", "--strip", "--no-remove", "shortw", "projective", "add-1998-cmo", "dbl-1998-cmo", "z", "ltr(complete=True)", "."]),
+ ("montgom", ["--platform", "HOST", "--no-ecdsa", "montgom", "xz", "ladd-1987-m", "dbl-1987-m", "scale", "ldr()", "."])
+ ])
+ def test_cli_build(self, name, args):
runner = CliRunner()
with runner.isolated_filesystem():
- result = runner.invoke(build_impl,
- ["--platform", "HOST", "shortw", "projective",
- "add-1998-cmo",
- "dbl-1998-cmo", "z", "ltr(complete=True)", "."])
- self.assertEqual(result.exit_code, 0)
- result = runner.invoke(build_impl,
- ["--platform", "HOST", "--strip", "--no-remove", "shortw",
- "projective",
- "add-1998-cmo", "dbl-1998-cmo", "z", "ltr(complete=True)",
- "."])
- self.assertEqual(result.exit_code, 0)
- result = runner.invoke(build_impl,
- ["--platform", "HOST", "--no-ecdsa", "montgom",
- "xz", "ladd-1987-m", "dbl-1987-m", "scale", "ldr()",
- "."])
+ result = runner.invoke(build_impl, args)
self.assertEqual(result.exit_code, 0)
def test_cli_build_fails(self):
diff --git a/test/test_impl.py b/test/test_impl.py
index 9e61390..7e37722 100644
--- a/test/test_impl.py
+++ b/test/test_impl.py
@@ -27,26 +27,32 @@ class ImplTests(TestCase):
def do_basic_test(self, callback, runner, params, mult_class, formulas, mult_name,
ecdsa, ecdh, **mult_kwargs):
- with runner.isolated_filesystem() as tmpdir:
- runner.invoke(build_impl,
- ["--platform", "HOST",
- #"--red", "MONTGOMERY",
- "--ecdsa" if ecdsa else "--no-ecdsa",
- "--ecdh" if ecdh else "--no-ecdh",
- params.curve.model.shortname, params.curve.coordinate_model.name,
- *formulas,
- f"{mult_name}({','.join(f'{key}={value}' for key, value in mult_kwargs.items())})",
- "."])
- target = HostTarget(params.curve.model, params.curve.coordinate_model,
- binary=join(tmpdir, "pyecsca-codegen-HOST.elf"))
- target.connect()
- target.set_params(params)
- formula_instances = [params.curve.coordinate_model.formulas[formula] for formula
- in formulas]
- mult = mult_class(*formula_instances, **mult_kwargs)
- mult.init(params, params.generator)
- callback(target, mult, params)
- target.disconnect()
+ other_args = [
+ ("--mul", "KARATSUBA", "--sqr", "KARATSUBA"),
+ ("--mul", "TOOM_COOK", "--sqr", "TOOM_COOK"),
+ ("--red", "BARRETT")
+ ]
+ for additional in other_args:
+ with runner.isolated_filesystem() as tmpdir:
+ runner.invoke(build_impl,
+ ["--platform", "HOST",
+ *additional,
+ "--ecdsa" if ecdsa else "--no-ecdsa",
+ "--ecdh" if ecdh else "--no-ecdh",
+ params.curve.model.shortname, params.curve.coordinate_model.name,
+ *formulas,
+ f"{mult_name}({','.join(f'{key}={value}' for key, value in mult_kwargs.items())})",
+ "."])
+ target = HostTarget(params.curve.model, params.curve.coordinate_model,
+ binary=join(tmpdir, "pyecsca-codegen-HOST.elf"))
+ target.connect()
+ target.set_params(params)
+ formula_instances = [params.curve.coordinate_model.formulas[formula] for formula
+ in formulas]
+ mult = mult_class(*formula_instances, **mult_kwargs)
+ mult.init(params, params.generator)
+ callback(target, mult, params)
+ target.disconnect()
class PRNGTests(ImplTests):