aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJ08nY2019-04-22 18:30:36 +0200
committerJ08nY2019-04-22 20:22:14 +0200
commitc7f7856611147ff9626188657b9fb20e91f0da45 (patch)
tree4a676eb9993f856f5e9ae8bd5373c623c2477a46
parent24b9b3958a54bdf7f18df62ae14199749934e3c2 (diff)
downloadpyecsca-c7f7856611147ff9626188657b9fb20e91f0da45.tar.gz
pyecsca-c7f7856611147ff9626188657b9fb20e91f0da45.tar.zst
pyecsca-c7f7856611147ff9626188657b9fb20e91f0da45.zip
-rw-r--r--pyecsca/ec/curve.py2
-rw-r--r--test/ec/test_curve.py12
-rw-r--r--test/ec/test_mod.py30
3 files changed, 40 insertions, 4 deletions
diff --git a/pyecsca/ec/curve.py b/pyecsca/ec/curve.py
index 7c30700..3c0b200 100644
--- a/pyecsca/ec/curve.py
+++ b/pyecsca/ec/curve.py
@@ -34,7 +34,7 @@ class EllipticCurve(object):
self.parameters[name] = value
def is_on_curve(self, point: Point) -> bool:
- if point.coordinate_model != self.coordinate_model:
+ if point.coordinate_model.curve_model != self.model:
return False
loc = {**self.parameters, **point.to_affine().coords}
return eval(compile(self.model.equation, "", mode="eval"), loc)
diff --git a/test/ec/test_curve.py b/test/ec/test_curve.py
index 382d144..9d4e509 100644
--- a/test/ec/test_curve.py
+++ b/test/ec/test_curve.py
@@ -2,7 +2,7 @@ from unittest import TestCase
from pyecsca.ec.mod import Mod
from pyecsca.ec.point import Point
-from test.ec.curves import get_secp128r1
+from .curves import get_secp128r1
class CurveTests(TestCase):
@@ -16,3 +16,13 @@ class CurveTests(TestCase):
Y=Mod(0xcf5ac8395bafeb13c02da292dded7a83, self.secp128r1.curve.prime),
Z=Mod(1, self.secp128r1.curve.prime))
assert self.secp128r1.curve.is_on_curve(pt)
+ assert self.secp128r1.curve.is_on_curve(pt.to_affine())
+ other = Point(self.secp128r1.curve.coordinate_model,
+ X=Mod(0x161ff7528b899b2d0c28607ca52c5b86, self.secp128r1.curve.prime),
+ Y=Mod(0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa, self.secp128r1.curve.prime),
+ Z=Mod(1, self.secp128r1.curve.prime))
+ assert not self.secp128r1.curve.is_on_curve(other)
+
+ def test_repr(self):
+ self.assertEqual(repr(self.secp128r1.curve),
+ "EllipticCurve([a=340282366762482138434845932244680310780, b=308990863222245658030922601041482374867] on ShortWeierstrassModel() using EFDCoordinateModel(\"projective\" on short Weierstrass curves))")
diff --git a/test/ec/test_mod.py b/test/ec/test_mod.py
index 6e4cfbf..59b716e 100644
--- a/test/ec/test_mod.py
+++ b/test/ec/test_mod.py
@@ -1,12 +1,13 @@
from unittest import TestCase
-from pyecsca.ec.mod import Mod, gcd, extgcd
+from pyecsca.ec.mod import Mod, gcd, extgcd, Undefined
class ModTests(TestCase):
def test_gcd(self):
self.assertEqual(gcd(15, 20), 5)
+ self.assertEqual(extgcd(15, 0), (1, 0, 15))
self.assertEqual(extgcd(15, 20), (-1, 1, 5))
def test_wrong_mod(self):
@@ -15,6 +16,12 @@ class ModTests(TestCase):
with self.assertRaises(ValueError):
a + b
+ def test_wrong_pow(self):
+ a = Mod(5, 7)
+ c = Mod(4, 11)
+ with self.assertRaises(TypeError):
+ a**c
+
def test_other(self):
a = Mod(5, 7)
b = Mod(3, 7)
@@ -26,5 +33,24 @@ class ModTests(TestCase):
self.assertEqual(a // b, Mod(4, 7))
self.assertEqual(5 / b, Mod(4, 7))
self.assertEqual(5 // b, Mod(4, 7))
+ self.assertEqual(a / 3, Mod(4, 7))
+ self.assertEqual(a // 3, Mod(4, 7))
self.assertEqual(divmod(a, b), (Mod(1, 7), Mod(2, 7)))
- self.assertNotEqual(a, 6) \ No newline at end of file
+ self.assertEqual(a + b, Mod(1, 7))
+ self.assertEqual(5 + b, Mod(1, 7))
+ self.assertEqual(a + 3, Mod(1, 7))
+ self.assertNotEqual(a, 6)
+
+ def test_undefined(self):
+ u = Undefined()
+ for k, meth in u.__class__.__dict__.items():
+ if k in ("__module__", "__init__", "__doc__", "__hash__"):
+ continue
+ args = [5 for _ in range(meth.__code__.co_argcount - 1)]
+ if k == "__repr__":
+ self.assertEqual(meth(u), "Undefined")
+ elif k in ("__eq__", "__ne__"):
+ assert not meth(u, *args)
+ else:
+ with self.assertRaises(NotImplementedError):
+ meth(u, *args) \ No newline at end of file