Как реализовано сложение точек в python? Если берем (d+x)×G , то выдает одну точку, которая начинает "гулять" по полю, а если d×G +x×G, то уже другая точка по модулю.
Вопрос: как достичь , чтоб d×G + x×G тоже "гулял " по полю как и (d+x)×G?
Возьмём, к примеру, пару точек a = 10 и b = 15.
1. Библиотечная функция выдаёт
для a*G = 10*G:
x_10 = 72488970228380509287422715226575535698893157273063074627791787432852706183111
y_10 = 62070622898698443831883535403436258712770888294397026493185421712108624767191
для b*G = 15*G:
x_15 = 97505755694356382817881959832717013755620551362654128955029190924747025549326
y_15 = 39856815248295663243990443767776362321337592747889787217974905533720651000664
для (a + b)*G = 25*G:
x_25 = 66165162229742397718677620062386824252848999675912518712054484685772795754260
y_25 = 52018513869565587577673992057861898728543589604141463438466108080111932355586
2. Теперь сложим вручную точки a*G и b*G:
p = 2**256 - 2**32 - 977 = 115792089237316195423570985008687907853269984665640564039457584007908834671663
dd = (y_15 - y_10) * pow(x_15 - x_10, -1, p)
x_new = (dd**2 - x_10 - x_15) % p
y_new = (dd * (x_10 - x_new) - y_10) % p
Численные вычисления показывают, что x_new = x_25 и y_new = y_25, это одна и та же точка, т.е. (a + b)*G = a*G + b*G.
Что означает "гулять" по полю?