mirror of
https://github.com/trezor/trezor-firmware.git
synced 2025-07-03 21:32:33 +00:00
37 lines
1.1 KiB
Python
37 lines
1.1 KiB
Python
from ubinascii import hexlify
|
|
|
|
from trezor import log, ui, wire
|
|
from trezor.crypto.curve import ed25519
|
|
from trezor.messages.Failure import Failure
|
|
from trezor.messages.Success import Success
|
|
|
|
from .ui import show_swipable_with_confirmation
|
|
|
|
|
|
async def cardano_verify_message(ctx, msg):
|
|
try:
|
|
res = _verify_message(msg.public_key, msg.signature, msg.message)
|
|
except ValueError as e:
|
|
if __debug__:
|
|
log.exception(__name__, e)
|
|
raise wire.ProcessError("Verifying failed")
|
|
|
|
if not res:
|
|
return Failure(message="Invalid signature")
|
|
|
|
if not await show_swipable_with_confirmation(
|
|
ctx, msg.message, "Verifying message", ui.ICON_RECEIVE, ui.GREEN
|
|
):
|
|
raise wire.ActionCancelled("Verifying cancelled")
|
|
|
|
if not await show_swipable_with_confirmation(
|
|
ctx, hexlify(msg.public_key), "With public key", ui.ICON_RECEIVE, ui.GREEN
|
|
):
|
|
raise wire.ActionCancelled("Verifying cancelled")
|
|
|
|
return Success(message="Message verified")
|
|
|
|
|
|
def _verify_message(public_key: bytes, signature: bytes, message: str):
|
|
return ed25519.verify(public_key, signature, message)
|