Этот баг дает нереальный эффект. Теперь надо подумать, как сделать этот же эффект при сложении точек или хотя б при умножении точки на число.
Вот Вам простая программка на Python-е, дающая "нереальный эффект", повторяя баг ice.scalar_multiplication. Учтите, что "правильный" баг получите только в случае, если складываемые приват. ключи имеют сумму > N.
Пользуйтесь на здоровье! Не забудьте включить в соавторы после получения признания величайшего открытия.
def Wonder_func():
print('Два варианта сложения пуб. ключей: простой (корректный) и усложнённый (с нереальным эффектом)')
p = 115792089237316195423570985008687907853269984665640564039457584007908834671663
P = input('Пуб. ключ №1 : ')
Q = input('Пуб. ключ №2 : ')
px = int(P[2:66], 16)
py = int(P[66:], 16)
qx = int(Q[2:66], 16)
qy = int(Q[66:], 16)
if (px == qx) and (py == qy):
py2 = 2 * py
dydx = (3 * px**2) * pow(py2, -1, p)
else:
qpx = qx - px
dydx = (qy - py) * pow(qpx, -1, p)
x = (dydx**2 - px - qx) % p
y = (dydx * (px - x) - py) % p
R = '04' + hex(x)[2:].zfill(64) + hex(y)[2:].zfill(64)
print('\nПравильный суммарный пуб. ключ :')
print(R)
x0 = 100056811408208733275829432225571761443897154861420255832015183193056831248263
y0 = 60566526027762671372996215584771165169296852327468804800455915050077397931708
qpx = x0 - x
dydx = (y0 - y) * pow(qpx, -1, p)
x1 = (dydx**2 - x - x0) % p
y1 = (dydx * (x - x1) - y) % p
F = '04' + hex(x1)[2:].zfill(64) + hex(y1)[2:].zfill(64)
print('\nПуб. ключ с "нереальным эффектом" :')
print(F)P.S.
Такое ощущение, будто кого-то обманул...