Подписание и проверка подписи с использованием Pycryptodome всегда терпит неудачу - PullRequest
0 голосов
/ 12 марта 2020

Привет! Я использую пакет 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, что наводит меня на мысль, что всегда возникает ошибка значения. Спасибо заранее, надеюсь, кто-то может мне помочь.

...