Код: Выделить всё
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
Код: Выделить всё
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)
Подробнее здесь: https://stackoverflow.com/questions/790 ... ged-or-cor