Bitcoinlib подписывает необработанное текстовое сообщение с помощью PythonPython

Программы на Python
Ответить
Anonymous
 Bitcoinlib подписывает необработанное текстовое сообщение с помощью Python

Сообщение Anonymous »

Я пытаюсь подписать необработанное сообщение, например «Hello World», используя библиотеку Python bitcoinlib. Цель состоит в том, чтобы создать подпись сообщения в кодировке Base64, которую можно проверить. Однако bitcoinlib, похоже, не предлагает простого способа прямой подписи сообщений.
Вот что я пробовал:
Использование bitcoinlib.keys.Key: Я попытался использовать объект ключа для подписи, но он не поддерживает подпись произвольных сообщений напрямую.
Использование bitcoinlib.transactions.Transaction: этот класс предназначен для подписи транзакций биткойнов, но он не поддерживает подпись в необработанном виде. сообщения.
Проблемы:
Transaction.inputs_add() не является допустимым методом.
Transaction.sign() не принимает сообщения. в качестве аргумента.
Похоже, что bitcoinlib в первую очередь предназначена для обработки транзакций, а не произвольных сообщений.
Ожидаемое поведение: я хочу подписывать необработанные сообщения типа «Hello World» и получать действительную подпись в кодировке Base64 с помощью bitcoinlib. . Есть ли лучший подход для достижения этой цели с помощью bitcoinlib или мне нужна другая библиотека?
Дополнительная информация:
Версия Python: 3.11
Версия биткойнлиба: 0.6.0
from bitcoinlib.keys import Key
from bitcoinlib.transactions import Transaction

class BitcoinClient:
def __init__(self, private_key_wif: str) -> None:
"""
Initialize the BitcoinClient with a WIF private key.

:param private_key_wif: The private key in Wallet Import Format (WIF).
"""
self.key = Key(import_key=private_key_wif)
self.address = self.key.address()

def get_address(self) -> str:
"""
Get the Bitcoin address associated with the private key.

:return: Bitcoin address as a string.
"""
return self.address

def sign_message(self, message: str) -> str:
"""
Sign a message using the private key.

:param message: The message to be signed.
:return: The signature as a base64-encoded string.
"""
tx = Transaction(network=self.key.network)
tx.inputs_add(self.key.address())
signature = tx.sign(self.key, message=message)
return signature

def verify_message(self, message: str, signature: str) -> bool:
"""
Verify a signed message.

:param message: The original message.
:param signature: The base64-encoded signature to verify.
:return: True if the signature is valid, False otherwise.
"""
tx = Transaction(network=self.key.network)
return tx.verify_message(self.key.address(), message=message, signature=signature)

if __name__ == "__main__":
# Expected address and signature for testing
address_from_priv = ''
# Signed message type which i should see
signed = 'AUCozKGE8DkRwCIKgJdzwIY6nQ4lYkUlFnQqry5sDaKa9rHrpIUoIyD9I+nkRA0tCf1nwlfCeqUmMl6aSDBaLwn6'

# Your WIF private key and message
private_key_wif = ""
message = "Hello world!"

# Initialize the BitcoinClient
try:
signer = BitcoinClient(private_key_wif)

# Sign the message
signature = signer.sign_message(message)

# Get the Bitcoin address
address = signer.get_address()

# Verify the signature
is_valid = signer.verify_message(message, signature)

# Output the results
print(f"Bitcoin Address: {address}")
print(f"Signature: {signature}")
print(f"Is signature valid: {is_valid}")
print(f"Is signature matching expected: {signature == signed}")
print(f"Is address matching expected: {address == address_from_priv}")
except ValueError as e:
print(f"Error: {e}")


Подробнее здесь: https://stackoverflow.com/questions/792 ... ing-python
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»