aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/ec/test_context.py30
-rw-r--r--test/ec/test_formula.py35
-rw-r--r--test/ec/test_key_agreement.py12
-rw-r--r--test/ec/test_key_generation.py26
-rw-r--r--test/ec/test_op.py9
-rw-r--r--test/ec/test_signature.py13
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),