формат ключа подписи ecdsa - PullRequest
0 голосов
/ 12 ноября 2018

Я пытаюсь создать пару открытый / закрытый ключ, используя python.

Я создал закрытый ключ, используя следующий метод:

private_key = ''.join(['%x' % random.randrange(16) for x in range(0, 64)])

используя этот закрытый ключ, я попытался с помощью графа ecdsa сгенерировать соответствующий открытый ключ

def privateKeyToPublicKey(s):
    sk = ecdsa.SigningKey.from_string(s, curve=ecdsa.SECP256k1)
    vk = sk.verifying_key
    return ('\04' + sk.verifying_key.to_string())

Мне не удалось создать ключ подписи (sk) из-за ошибки форматирования, когда моя строка имеет неправильный формат. Но я не уверен, как / в каком формате должна работать строка s, чтобы SigningKey работал.

Я получаю следующую ошибку при запуске скрипта:

Traceback (most recent call last):
  File "address.py", line 23, in <module>
    privateKeyToPublicKey(private_key)
  File "address.py", line 20, in privateKeyToPublicKey
    sk = ecdsa.SigningKey.from_string(s, curve=ecdsa.SECP256k1)
  File "/usr/local/lib/python3.6/dist-packages/ecdsa/keys.py", line 
149, in from_string
    assert len(string) == curve.baselen, (len(string), curve.baselen)
AssertionError: (64, 32)

Ответы [ 2 ]

0 голосов
/ 26 ноября 2018

Вот более полный пример кода для ясности ответа. Python3.

    from ecdsa import SigningKey, SECP256k1
    import sha3, random, binascii

    private_key = ''.join(['%x' % random.randrange(16) for x in range(0, 64)])
    private_key = bytes(private_key, 'utf-8')
    private_key = binascii.unhexlify(private_key)
    priv = SigningKey.from_string(private_key, curve=SECP256k1)
    pub = priv.get_verifying_key().to_string()
    keccak = sha3.keccak_256()
    keccak.update(pub)
    address = keccak.hexdigest()[24:]
    print(address, priv.to_string().hex())
0 голосов
/ 12 ноября 2018

Я понял свою ошибку, ввод должен быть в байтах, закрытый ключ в шестнадцатеричном формате. В python2 вы можете использовать:

private_key.decode('hex')

или вы можете использовать

binascii.unhexlify

в python3

...