Привет! Я использую пакет Pycryptodome, чтобы попытаться проверить подписи транзакций в блокчейне. Моя проблема заключается в том, что при попытке добавить новую транзакцию я сначала создаю подпись для передачи в метод проверки транзакции, но по какой-то причине она всегда дает сбой, даже если logi c кажется правильным, когда я сравниваю ее с документацией , Если бы кто-то мог указать мне, где я иду не так, это было бы очень ценно. У меня есть 3 метода, которые обрабатывают все это, и я не уверен, где проблема
Метод генерации ключей
def generate_keys(self):
# generate private key pair
private_key = RSA.generate(1024, Crypto.Random.new().read)
# public key comes as part of private key generation
public_key = private_key.publickey()
# return keys as hexidecimal representation of binary data
return (binascii.hexlify(public_key.exportKey(format='DER')).decode('ascii'), binascii.hexlify(private_key.exportKey(format='DER')).decode('ascii'))
Метод подписи транзакции
def sign_transaction(self, sender, recipient, amount, key):
# convert transaction data to SHA256 string
hash_signer = SHA256.new(
(str(sender) + str(recipient) + str(amount)).encode('utf-8'))
# sign transaction
signature = pkcs1_15.new(RSA.importKey(
binascii.unhexlify(key))).sign(hash_signer)
# return hexidecimal representation of signature
return binascii.hexlify(signature).decode('ascii')
и метод проверки транзакции
@staticmethod
def verify_transaction(transaction):
# convert public key back to binary representation
public_key = RSA.importKey(binascii.unhexlify(
transaction.sender))
try:
# create signature from transaction data
hash_signer = SHA256.new(
(str(transaction.sender) + str(transaction.recipient) + str(transaction.amount)).encode('utf-8'))
pkcs1_15.new(public_key).verify(
hash_signer, binascii.unhexlify(transaction.signature))
return True
except ValueError:
return False
После того, как я сгенерировал свою пару ключей и попытался использовать их для подписания и проверки транзакций, всегда происходит сбой. Я знаю это, потому что он всегда возвращает false из метода verify, что наводит меня на мысль, что всегда возникает ошибка значения. Спасибо заранее, надеюсь, кто-то может мне помочь.