diff --git a/src/apps/lisk/__init__.py b/src/apps/lisk/__init__.py index 854cd38a2..0bbd41b35 100644 --- a/src/apps/lisk/__init__.py +++ b/src/apps/lisk/__init__.py @@ -1,6 +1,6 @@ from trezor.wire import register, protobuf_workflow from trezor.messages.wire_types import \ - LiskGetAddress, LiskGetPublicKey + LiskGetAddress, LiskSignMessage, LiskGetPublicKey def dispatch_LiskGetAddress(*args, **kwargs): @@ -13,6 +13,12 @@ def dispatch_LiskGetPublicKey(*args, **kwargs): return lisk_get_public_key(*args, **kwargs) +def dispatch_LiskSignMessage(*args, **kwargs): + from .sign_message import lisk_sign_message + return lisk_sign_message(*args, **kwargs) + + def boot(): register(LiskGetPublicKey, protobuf_workflow, dispatch_LiskGetPublicKey) register(LiskGetAddress, protobuf_workflow, dispatch_LiskGetAddress) + register(LiskSignMessage, protobuf_workflow, dispatch_LiskSignMessage) diff --git a/src/apps/lisk/sign_message.py b/src/apps/lisk/sign_message.py new file mode 100644 index 000000000..632761efb --- /dev/null +++ b/src/apps/lisk/sign_message.py @@ -0,0 +1,17 @@ +from .helpers import LISK_CURVE, get_address_from_public_key + +async def lisk_sign_message(ctx, msg): + from trezor.messages.LiskMessageSignature import LiskMessageSignature + from trezor.crypto.curve import ed25519 + from ..common import seed + + address_n = msg.address_n or () + node = await seed.derive_node(ctx, address_n, LISK_CURVE) + + seckey = node.private_key() + public_key = ed25519.publickey(seckey) + address = get_address_from_public_key(public_key) + + signature = ed25519.sign(seckey, msg.message) + + return LiskMessageSignature(address=address, signature=signature)