Итак, я разобрался с проблемой, и ее трудно увидеть, поскольку математика кажется правильной, но вместо этого я допустил программную ошибку, которую не так легко увидеть, если вы посмотрите на функцию вне контекста.
Представленный код будет делать скалярное умножение точки генератора кривой все время, но не точки, на которую собственно ссылается self. Self является экземпляром точки, но в приведенном коде никогда не указывается прямая ссылка, вместо этого умножается точка генератора кривой.
new_point = self.curve().g()
следует заменить на
new_point = self
и
new_point = new_point + self.curve().g()
по
new_point = new_point + self
Мне все еще неясно, как этот код мог привести к правильным примерам в некоторых случаях.