Radzhab
@Radzhab

Как построить эллиптическую кривую для скалярного умножения?

Есть статья на хабре https://habr.com/ru/post/335906/
Представлена формула для нахождения Q = P*n
9KuF8S.jpg
С помощью кода, который есть также в статье получаю Q

import numpy as np
def f(x,a,b):
    return x**3+a*x + b

def bits(n):
    """
    Генерирует двоичные разряды n, начиная
    с наименее значимого бита.

    bits(151) -> 1, 1, 1, 0, 1, 0, 0, 1
    """
    while n:
        yield n & 1
        n >>= 1

def double_and_add(n, x):
    """
    Возвращает результат n * x, вычисленный
    алгоритмом удвоения-сложения.
    """
    result = 0
    addend = x

    for bit in bits(n):
        if bit == 1:
            result += addend
        addend *= 2

    return result


Вопрос. Вот мои входные данные. Или я неправильно умножаю, или тут что то не так.
P = 3
Q = double_and_add(P,151)

xp = P
yp = np.sqrt(f(xp)) #4 

xq = Q #453 вот тут уже что то не так
yq = np.sqrt(f(xq))


Результат я сопоставляю с сайтом https://cdn.rawgit.com/andreacorbellini/ecc/920b29...
0bDwZx.jpg
  • Вопрос задан
  • 72 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы