Тема: Haskell && Bitcoin Elliptic Curve Crypto
пробував розібратись як "вручну" рахувати ті точки на еліптичних кривих
( Elliptic Curve Crypto в Bitcoin -- це вичислення публічного ключа з приватного ),
рішення-"костиль" для свого кривого коду наче знайшов,
і все ж хочеться уточнити чому у певний момент працювало "криво" --
1 -- я не (повністю) догнав як готувати хаскель ?
2 -- я не (повністю) догнав формулу додавання точок ?
3 -- я не (повністю) догнав модульну арифметику/модульну інверсію ?
4 -- я не догнав ще щось ???
хочу критики, варіант рефакторинга коду etc
переходимо до суті "кривизни"
для Private_Key "0x59" все вичислялось ок,
для "0x5A" -- на 5-му кроці було щось не те...
консоль в хаскелі з демонстрацією кривизни
повинно бути
тикаючи паличкою шляхом досліджень я виявив наступне:
1 -- функція doublePoint працює ок
2 -- функція addPoints -- не завжди
код цих функцій
досліджуючи далі, стало зрозуміло --
addPoints має повертати
[2069755349039566255304036353648839232649715781170511813011535420394543798627,
53173698995439924366951845531266805314230463309822098990695656330917108292762]
для наступного варіанту застосування
gX = 0x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798
gY = 0x483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8
n1 = 42072772011086351294328511389423850314698152445154323541536957340534349973349
n2 = 99133657745585934968186133288050721248258413615930917407282740640761199917928
addPoints [n1, n2] [gX, gY]
повертає ж наступне
[18653054203952500459663754724095523212321228766708646322420439306985367969074,
16658431491730260455384851720637186605011571049709646632174843367147634753735]
і якщо я перепишу функцію addPoints наступним чином --
то для суми двох точок вище -- результат повертатиметься вірний,
та буде помилка з попередніми додаваннями, де раніше повертався правильний результат!
в результаті у мене ок працює отакий костиль
загалом як я зрозумів - існує приблизно 3 способи порахувати публічний ключ з приватного,
і я навчився рахувати в 1й спосіб , маю код 2го способу ,
залишилось догнати як рахувати 3м способом
+ трішки догнав що таке модульна арифметика
код в результаті
https://gist.github.com/221V/b1d9ab83a2 … 954ec2c5aa
використані матеріали --
http://gobittest.appspot.com/Address -- перевірки
формули --
https://github.com/BitcoinPHP/BitcoinEC … nECDSA.php
https://gist.github.com/nlitsme/c9031c7b9bf6bb009e5a
https://bitcoin.stackexchange.com/quest … -ecc-curve
https://bitcointalk.org/index.php?topic … sg26195945
http://royalforkblog.github.io/2014/09/04/ecc/
https://hackernoon.com/eliptic-curve-cr … eb1e934dc5
https://hackernoon.com/elliptic-curve-c … 8508d40a88
https://hackernoon.com/elliptic-curve-c … f6cb9916d7
https://www.reddit.com/r/Bitcoin/commen … ey_from_a/
https://bitcoin.stackexchange.com/quest … rivate-key