Если я генерирую открытый ключ непосредственно из ключа подписи с помощью sk.get_verifying_key()
Он работает нормально и проверяет его, но если я пытаюсь вручную создать открытый ключ с помощью ecdsa.VerifyingKey.from_string
, по какой-то причине он не проверяет егои возвращает false.
скопируйте и вставьте следующий код и запустите, вы увидите странную разницу
import random
import string
import sys
import ecdsa
import hashlib
import binascii
# randomly generate secret and public keys
sk = ecdsa.SigningKey.generate(curve=ecdsa.NIST256p, hashfunc = hashlib.sha256)
pk = sk.get_verifying_key()
publicKeyVerifyObject = ecdsa.VerifyingKey.from_string(bytes.fromhex(binascii.hexlify(pk.to_string()).decode('utf-8')), curve=ecdsa.NIST256p)
print("public key:", binascii.hexlify(pk.to_string()))
print("public key:", binascii.hexlify(publicKeyVerifyObject.to_string()))
# a message to sign
name = "lastpeony"
# signature of the message
signature = sk.sign(name.encode('utf-8'))
#first test
try:
print (publicKeyVerifyObject.verify(signature, name.encode('utf-8')))
except ecdsa.BadSignatureError:
print (False)
#second test
try:
print (pk.verify(signature, name.encode('utf-8')))
except ecdsa.BadSignatureError:
print (False)
То, что я ожидаю, - это True True вывод из обоих тестов.