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でも良かった。