diff --git a/src/apps/lisk/sign_message.py b/src/apps/lisk/sign_message.py index 5d837d4b6..65dfaf29c 100644 --- a/src/apps/lisk/sign_message.py +++ b/src/apps/lisk/sign_message.py @@ -1,8 +1,16 @@ -from .helpers import LISK_CURVE, get_address_from_public_key -from apps.wallet.sign_message import require_confirm_sign_message +from apps.common import seed +from apps.common.confirm import require_confirm +from apps.common.signverify import split_message +from apps.wallet.sign_tx.signing import write_varint +from trezor import ui +from trezor.crypto.curve import ed25519 from trezor.crypto.hashlib import sha256 +from trezor.messages.LiskMessageSignature import LiskMessageSignature +from trezor.ui.text import Text from trezor.utils import HashWriter -from apps.wallet.sign_tx.signing import write_varint + +from .helpers import LISK_CURVE + def message_digest(message): h = HashWriter(sha256) @@ -15,16 +23,11 @@ def message_digest(message): async def lisk_sign_message(ctx, msg): - from trezor.messages.LiskMessageSignature import LiskMessageSignature - from trezor.crypto.curve import ed25519 - from ..common import seed - message = msg.message + address_n = msg.address_n or () await require_confirm_sign_message(ctx, message) - address_n = msg.address_n or () - node = await seed.derive_node(ctx, address_n, LISK_CURVE) seckey = node.private_key() pubkey = node.public_key() @@ -33,3 +36,9 @@ async def lisk_sign_message(ctx, msg): signature = ed25519.sign(seckey, message_digest(message)) return LiskMessageSignature(public_key=pubkey, signature=signature) + + +async def require_confirm_sign_message(ctx, message): + message = split_message(message) + content = Text('Sign Lisk message', ui.ICON_DEFAULT, max_lines=5, *message) + await require_confirm(ctx, content) diff --git a/src/apps/lisk/verify_message.py b/src/apps/lisk/verify_message.py index c50c95fd4..53632f089 100644 --- a/src/apps/lisk/verify_message.py +++ b/src/apps/lisk/verify_message.py @@ -1,20 +1,19 @@ +from apps.wallet.verify_message import require_confirm_verify_message +from trezor import wire +from trezor.crypto.curve import ed25519 +from trezor.messages.Success import Success -async def lisk_verify_message(ctx, msg): - from trezor.crypto.curve import ed25519 - from .helpers import get_address_from_public_key - from .sign_message import message_digest - from trezor import wire - from trezor.messages.Success import Success - from trezor.messages.FailureType import ProcessError - from apps.wallet.verify_message import require_confirm_verify_message +from .helpers import get_address_from_public_key +from .sign_message import message_digest - verify = ed25519.verify(msg.public_key, msg.signature, message_digest(msg.message)) - if not verify: +async def lisk_verify_message(ctx, msg): + digest = message_digest(msg.message) + verified = ed25519.verify(msg.public_key, msg.signature, digest) + if not verified: raise wire.ProcessError('Invalid signature') address = get_address_from_public_key(msg.public_key) - await require_confirm_verify_message(ctx, address, msg.message) - return Success(message='Message verified') \ No newline at end of file + return Success(message='Message verified')