Возникли проблемы с библиотекой ecdsa для python - PullRequest
0 голосов
/ 26 апреля 2020

Я хотел проверить, будет ли работать код кривой эллипти c (для получения ключа publi c из закрытого ключа) из книги «Мастеринг Bitcoin» Андреаса Антонополуса ... поэтому я скопировал и вставил код в книге для моего редактора VS C. Это вызвало несколько ошибок, которые заставили меня удалить буквы «L» в конце параметров и вставить необходимые скобки после операторов print. Теперь я все еще сталкиваюсь с ошибками, такими как «невозможно импортировать ecdsa.util» ...

Ниже приведен код, который я использую и прикрепил, снимок отображаемой ошибки:


import ecdsa
import random

from ecdsa.util import string_to_number, number_to_string

_p = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F
_r = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141
_b = 0x0000000000000000000000000000000000000000000000000000000000000007
_a = 0x0000000000000000000000000000000000000000000000000000000000000000
_Gx = 0x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798
_Gy = 0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8
curve_secp256k1 = ecdsa.ellipticcurve.CurveFp(_p, _a, _b)
generator_secp256k1 = ecdsa.ellipticcurve.Point(curve_secp256k1, _Gx, _Gy, _r)
oid_secp256k1 = (1, 3, 132, 0, 10)
SECP256k1 = ecdsa.curves.Curve("SECP256k1", curve_secp256k1, generator_secp256k1,
oid_secp256k1)
ec_order = _r

curve = curve_secp256k1
generator = generator_secp256k1

def random_secret():
    random_char = lambda: chr(random.randint(0, 255))
    convert_to_int = lambda array: int("".join(array).encode("hex"), 16)
    byte_array = [random_char() for i in range(32)]
    return convert_to_int(byte_array)

def get_point_pubkey(point):
    if point.y() & 1:
        key = '03' + '%064x' % point.x()
    else:
        key = '02' + '%064x' % point.x()
    return key.decode('hex')

def get_point_pubkey_uncompressed(point):
    key = '04' + \
          '%064x' % point.x() + \
          '%064x' % point.y()
    return key.decode('hex')

secret = random_secret()
print ("Secret: ", secret)

point = secret * generator
print ("EC point:", point)

print ("BTC public key:", get_point_pubkey(point).encode("hex"))

point1 = ecdsa.ellipticcurve.Point(curve, point.x(), point.y(), ec_order)
assert point1 == point

...