Skip to content

Commit 933ef4c

Browse files
committed
make CurveFp hash()able again
Revert an unfortunate consequence of 79d7d90 making CurveFp unhashable. Fixes #172.
1 parent 8deb089 commit 933ef4c

File tree

2 files changed

+18
-1
lines changed

2 files changed

+18
-1
lines changed

src/ecdsa/ellipticcurve.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,9 @@ def __eq__(self, other):
9393
and self.__b == other.__b
9494
return NotImplemented
9595

96+
def __hash__(self):
97+
return hash((self.__p, self.__a, self.__b))
98+
9699
def p(self):
97100
return self.__p
98101

src/ecdsa/test_ellipticcurve.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,21 @@ def test_equality_curves(self):
8080
def test_inequality_curves(self):
8181
c192 = CurveFp(p, -3, b)
8282
self.assertNotEqual(self.c_23, c192)
83-
83+
84+
def test_usability_in_a_hashed_collection_curves(self):
85+
{self.c_23: None}
86+
87+
def test_hashability_curves(self):
88+
hash(self.c_23)
89+
90+
def test_conflation_curves(self):
91+
ne1, ne2, ne3 = CurveFp(24, 1, 1), CurveFp(23, 2, 1), CurveFp(23, 1, 2)
92+
eq1, eq2, eq3 = CurveFp(23, 1, 1), CurveFp(23, 1, 1), self.c_23
93+
self.assertEqual(len(set((c_23, eq1, eq2, eq3))), 1)
94+
self.assertEqual(len(set((c_23, ne1, ne2, ne3))), 4)
95+
self.assertDictEqual({c_23: None}, {eq1: None})
96+
self.assertTrue(eq2 in {eq3: None})
97+
8498

8599
class TestPoint(unittest.TestCase):
86100

0 commit comments

Comments
 (0)