diff options
Diffstat (limited to 'test')
| -rw-r--r-- | test/ec/test_context.py | 30 | ||||
| -rw-r--r-- | test/ec/test_formula.py | 35 | ||||
| -rw-r--r-- | test/ec/test_key_agreement.py | 12 | ||||
| -rw-r--r-- | test/ec/test_key_generation.py | 26 | ||||
| -rw-r--r-- | test/ec/test_op.py | 9 | ||||
| -rw-r--r-- | test/ec/test_signature.py | 13 |
6 files changed, 90 insertions, 35 deletions
diff --git a/test/ec/test_context.py b/test/ec/test_context.py index 6b9c526..3f46c9d 100644 --- a/test/ec/test_context.py +++ b/test/ec/test_context.py @@ -1,22 +1,9 @@ -import ast from unittest import TestCase -from pyecsca.ec.context import (local, DefaultContext, OpResult, NullContext, getcontext, - setcontext, - resetcontext) -from pyecsca.ec.coordinates import AffineCoordinateModel +from pyecsca.ec.context import (local, DefaultContext, NullContext, getcontext, + setcontext, resetcontext) from pyecsca.ec.curves import get_params -from pyecsca.ec.mod import Mod -from pyecsca.ec.mult import LTRMultiplier -from pyecsca.ec.point import Point - - -class OpResultTests(TestCase): - - def test_str(self): - for op, char in zip((ast.Add(), ast.Sub(), ast.Mult(), ast.Div()), "+-*/"): - res = OpResult("X1", Mod(0, 5), op, Mod(2, 5), Mod(3, 5)) - self.assertEqual(str(res), "X1") +from pyecsca.ec.mult import LTRMultiplier, ScalarMultiplicationAction class ContextTests(TestCase): @@ -40,17 +27,10 @@ class ContextTests(TestCase): with local(DefaultContext()) as ctx: self.mult.multiply(59) - self.assertEqual(len(ctx.actions), 10) + self.assertEqual(len(ctx.actions), 1) + self.assertIsInstance(next(iter(ctx.actions.keys())), ScalarMultiplicationAction) self.assertEqual(len(getcontext().actions), 0) - def test_execute(self): - with self.assertRaises(ValueError): - getcontext().execute(self.coords.formulas["z"], self.base, self.base) - with self.assertRaises(ValueError): - getcontext().execute(self.coords.formulas["z"], - Point(AffineCoordinateModel(self.secp128r1.curve.model), - x=Mod(1, 5), y=Mod(2, 5))) - def test_str(self): with local(DefaultContext()) as default: self.mult.multiply(59) diff --git a/test/ec/test_formula.py b/test/ec/test_formula.py new file mode 100644 index 0000000..cedbe1f --- /dev/null +++ b/test/ec/test_formula.py @@ -0,0 +1,35 @@ +from unittest import TestCase + +from pyecsca.ec.curves import get_params +from pyecsca.ec.key_generation import KeyGeneration +from pyecsca.ec.mult import LTRMultiplier + + +class FormulaTests(TestCase): + + def setUp(self): + self.secp128r1 = get_params("secg", "secp128r1", "projective") + self.add = self.secp128r1.curve.coordinate_model.formulas["add-2007-bl"] + + def test_wrong_call(self): + with self.assertRaises(ValueError): + self.add() + with self.assertRaises(ValueError): + self.add(self.secp128r1.generator.to_affine(), self.secp128r1.generator.to_affine()) + + def test_indices(self): + self.assertEqual(self.add.input_index, 1) + self.assertEqual(self.add.output_index, 3) + + def test_inputs_outputs(self): + self.assertEqual(self.add.inputs, {"X1", "Y1", "Z1", "X2", "Y2", "Z2"}) + self.assertEqual(self.add.outputs, {"X3", "Y3", "Z3"}) + + def test_num_ops(self): + self.assertEqual(self.add.num_operations, 33) + self.assertEqual(self.add.num_multiplications, 17) + self.assertEqual(self.add.num_divisions, 0) + self.assertEqual(self.add.num_inversions, 0) + self.assertEqual(self.add.num_powers, 0) + self.assertEqual(self.add.num_squarings, 6) + self.assertEqual(self.add.num_addsubs, 10)
\ No newline at end of file diff --git a/test/ec/test_key_agreement.py b/test/ec/test_key_agreement.py index b771863..adffbab 100644 --- a/test/ec/test_key_agreement.py +++ b/test/ec/test_key_agreement.py @@ -3,7 +3,9 @@ from unittest import TestCase from parameterized import parameterized from pyecsca.ec.curves import get_params -from pyecsca.ec.key_agreement import * +from pyecsca.ec.key_agreement import (ECDH_NONE, ECDH_SHA1, ECDH_SHA224, ECDH_SHA256, ECDH_SHA384, + ECDH_SHA512) +from pyecsca.ec.mod import Mod from pyecsca.ec.mult import LTRMultiplier @@ -14,11 +16,11 @@ class KeyAgreementTests(TestCase): self.add = self.secp128r1.curve.coordinate_model.formulas["add-2007-bl"] self.dbl = self.secp128r1.curve.coordinate_model.formulas["dbl-2007-bl"] self.mult = LTRMultiplier(self.add, self.dbl) - self.priv_a = 0xdeadbeef + self.priv_a = Mod(0xdeadbeef, self.secp128r1.order) self.mult.init(self.secp128r1, self.secp128r1.generator) - self.pub_a = self.mult.multiply(self.priv_a) - self.priv_b = 0xcafebabe - self.pub_b = self.mult.multiply(self.priv_b) + self.pub_a = self.mult.multiply(int(self.priv_a)) + self.priv_b = Mod(0xcafebabe, self.secp128r1.order) + self.pub_b = self.mult.multiply(int(self.priv_b)) @parameterized.expand([ ("NONE", ECDH_NONE), diff --git a/test/ec/test_key_generation.py b/test/ec/test_key_generation.py new file mode 100644 index 0000000..59f3b23 --- /dev/null +++ b/test/ec/test_key_generation.py @@ -0,0 +1,26 @@ +from unittest import TestCase + +from pyecsca.ec.curves import get_params +from pyecsca.ec.key_generation import KeyGeneration +from pyecsca.ec.mult import LTRMultiplier + + +class KeyGenerationTests(TestCase): + + def setUp(self): + self.secp128r1 = get_params("secg", "secp128r1", "projective") + self.add = self.secp128r1.curve.coordinate_model.formulas["add-2007-bl"] + self.dbl = self.secp128r1.curve.coordinate_model.formulas["dbl-2007-bl"] + self.mult = LTRMultiplier(self.add, self.dbl) + + def test_basic(self): + generator = KeyGeneration(self.mult, self.secp128r1) + priv, pub = generator.generate() + self.assertIsNotNone(priv) + self.assertIsNotNone(pub) + self.assertTrue(self.secp128r1.curve.is_on_curve(pub)) + generator = KeyGeneration(self.mult, self.secp128r1, True) + priv, pub = generator.generate() + self.assertIsNotNone(priv) + self.assertIsNotNone(pub) + self.assertTrue(self.secp128r1.curve.is_on_curve(pub)) diff --git a/test/ec/test_op.py b/test/ec/test_op.py index a7f9cd0..9471148 100644 --- a/test/ec/test_op.py +++ b/test/ec/test_op.py @@ -1,8 +1,10 @@ +import ast from ast import parse from unittest import TestCase from parameterized import parameterized +from pyecsca.ec.formula import OpResult from pyecsca.ec.mod import Mod from pyecsca.ec.op import CodeOp, OpType @@ -35,3 +37,10 @@ class OpTests(TestCase): op = CodeOp(code) res = op(**locals) self.assertEqual(res, result) + +class OpResultTests(TestCase): + + def test_str(self): + for op, char in zip((ast.Add(), ast.Sub(), ast.Mult(), ast.Div()), "+-*/"): + res = OpResult("X1", Mod(0, 5), op, Mod(2, 5), Mod(3, 5)) + self.assertEqual(str(res), "X1")
\ No newline at end of file diff --git a/test/ec/test_signature.py b/test/ec/test_signature.py index 41e9df2..125c280 100644 --- a/test/ec/test_signature.py +++ b/test/ec/test_signature.py @@ -1,10 +1,13 @@ -from hashlib import sha1 from unittest import TestCase +from parameterized import parameterized + from pyecsca.ec.curves import get_params +from pyecsca.ec.mod import Mod from pyecsca.ec.mult import LTRMultiplier -from pyecsca.ec.signature import * -from parameterized import parameterized +from pyecsca.ec.signature import (Signature, SignatureResult, ECDSA_NONE, ECDSA_SHA1, ECDSA_SHA224, + ECDSA_SHA256, ECDSA_SHA384, ECDSA_SHA512) + class SignatureTests(TestCase): @@ -14,9 +17,9 @@ class SignatureTests(TestCase): self.dbl = self.secp128r1.curve.coordinate_model.formulas["dbl-2007-bl"] self.mult = LTRMultiplier(self.add, self.dbl) self.msg = 0xcafebabe.to_bytes(4, byteorder="big") - self.priv = 0xdeadbeef + self.priv = Mod(0xdeadbeef, self.secp128r1.order) self.mult.init(self.secp128r1, self.secp128r1.generator) - self.pub = self.mult.multiply(self.priv) + self.pub = self.mult.multiply(self.priv.x) @parameterized.expand([ ("SHA1", ECDSA_SHA1), |
