from ecc import FieldElement, Point prime = 223 a = FieldElement(num=0, prime=prime) b = FieldElement(num=7, prime=prime) x1 = FieldElement(num=192, prime=prime) y1 = FieldElement(num=105, prime=prime) x2 = FieldElement(num=17, prime=prime) y2 = FieldElement(num=56, prime=prime) p1 = Point(x1, y1, a, b) p2 = Point(x2, y2, a, b) print(p1+p2) print(vars(p1+p2))
$ python3 main.py
{‘a’: FieldElement_223(0), ‘b’: FieldElement_223(7), ‘x’: FieldElement_223(170), ‘y’: FieldElement_223(142)}
vars()とすることで、オブジェクトの中身を表示します。ここでは、x:170, y:142になります。
(170,142) + (60, 139) = (220, 181)
(47,71) + (17,56) = (215,68)
(143,98) + (76,66) = (47,71)
これをpythonのunittestで記述する
def test_add(self): prime = 223 a = FieldElement(0, prime) b = FieldElement(7, prime) point1 = ((170,142),(47,71),(143,98)) point2 = ((60,139),(17,56),(76,66)) result = ((220, 181),(215,68),(47,71)) for i in range(0, 3): x1 = FieldElement(num=point1[i][0], prime=prime) y1 = FieldElement(num=point1[i][1], prime=prime) x2 = FieldElement(num=point2[i][0], prime=prime) y2 = FieldElement(num=point2[i][1], prime=prime) x3 = FieldElement(num=result[i][0], prime=prime) y3 = FieldElement(num=result[i][1], prime=prime) p1 = Point(x1, y1, a, b) p2 = Point(x2, y2, a, b) p3 = Point(x3, y3, a, b) self.assertEqual(p3, (p1+p2))
x1, y1, x2, y2, x3, y3をtuppleにしてforeachでも良かった。