Подписанное сообщение Cardano и проверка nacl выдают сообщение «Подпись была подделана или повреждена»Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Подписанное сообщение Cardano и проверка nacl выдают сообщение «Подпись была подделана или повреждена»

Сообщение Anonymous »

Имейте веб-интерфейс, который позволит кошельку eternl подписывать сообщение и отправлять его на серверную часть Python:

Код: Выделить всё

const addresses = await api.getUsedAddresses();
const address = addresses[0];

const message = new TextEncoder().encode("Authentifizieren mit Cardano");
const signedMessage = await api.signData(address, toHexString(message));
let signature = signedMessage.signature;

const response = await fetch('/verify-wallet', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
address: address,
signature: signature,
key: signedMessage.key
})
});

function toHexString(byteArray) {
return Array.from(byteArray, byte => ('0' + (byte & 0xFF).toString(16)).slice(-2)).join('');
}
Бэкэнд получает следующие значения:

Код: Выделить всё

hex_address: 01e5bd9fee501b0fa277e00ed67daf9ae3d0aec24af7be88d84417c42b21fb6253481ab62cea3fc508f02aa5b1386a6a9dd8992c1bf47593ed
hex_signature:845846a201276761646472657373583901e5bd9fee501b0fa277e00ed67daf9ae3d0aec24af7be88d84417c42b21fb6253481ab62cea3fc508f02aa5b1386a6a9dd8992c1bf47593eda166686173686564f4581c41757468656e746966697a696572656e206d69742043617264616e6f58401450b24776f8e5d578be522d9c491b3d312059cf7c18ecddf5c032c4f6ffc404e0fbacee4f0332e48b1e13a3b39ff5043555af2b0ea375c1720cb168f68e8308
base64_public_key:a40101032720062158201f9a62d6a8cd0ccb42537dbe9d7c895a087a3ccba2089e37354d3025b60e830d
Я пытаюсь выполнить проверку на Python с помощью следующего кода

Код: Выделить всё

from pycardano import Address, VerificationKey, TransactionBody
from nacl.signing import VerifyKey
from nacl.exceptions import BadSignatureError
import base64
import cbor2

try:
data = request.json
hex_address = data['address']
hex_signature = data['signature']
base64_public_key = data['key']

signature_bytes = bytes.fromhex(hex_signature)
decoded_data = cbor2.loads(signature_bytes)
signature_decoded = decoded_data[-1]

public_key_bytes = base64.b64decode(base64_public_key)
public_key_raw = public_key_bytes[-32:]

address = Address.from_primitive(bytes.fromhex(hex_address))

message = "Authentifizieren mit Cardano".encode('utf-8')

# nacl part
try:
verify_key = VerifyKey(public_key_raw)
verify_key.verify(message,signature_decoded)
valid_signature = True
except BadSignatureError as e:
valid_signature = False
print(e)

Код: Выделить всё

verify_key.verify(message,signature_decoded)
завершается с ошибкой «Подпись была подделана или повреждена». Я предполагаю, что подпись_decoded неверна, но я не знаю, как это проверить...

Подробнее здесь: https://stackoverflow.com/questions/790 ... ged-or-cor
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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