## 2019年4月6日土曜日

### Python - Elliptic Curve Cryptography - Coding Coding Point Addition over Finite Fields

Programming Bitcoin: Learn How to Program Bitcoin from Scratch (Jimmy Song(著)、O'Reilly Media)のChapter 3(Elliptic Curve Cryptography)、Coding Point Addition over Finite Fields、Exercises 2(47)の解答を求めてみる。

コード

Python 3

```#!/usr/bin/env python3
from ecc import FieldElement, Point
prime = 223
a = FieldElement(0, prime)
b = FieldElement(7, prime)
pairs = [((170, 142), (60, 139)),
((47, 71), (17, 56)),
((143, 98), (76, 66))]

for (x1, y1), (x2, y2) in pairs:
x1 = FieldElement(x1, prime)
y1 = FieldElement(y1, prime)
x2 = FieldElement(x2, prime)
y2 = FieldElement(y2, prime)
p1 = Point(x1, y1, a, b)
p2 = Point(x2, y2, a, b)
print(f'{p1} +\n{p2}\n= {p1 + p2}')
```

```C:\Users\...>py sample2.py
Point(170,142)_0_7 FieldElement(223) +
Point(60,139)_0_7 FieldElement(223)
= Point(220,181)_0_7 FieldElement(223)
Point(47,71)_0_7 FieldElement(223) +
Point(17,56)_0_7 FieldElement(223)
= Point(215,68)_0_7 FieldElement(223)
Point(143,98)_0_7 FieldElement(223) +
Point(76,66)_0_7 FieldElement(223)
= Point(47,71)_0_7 FieldElement(223)

C:\Users\...>
```