diff --git a/python/.changelog.d/1765.removed b/python/.changelog.d/1765.removed new file mode 100644 index 000000000..a82056b27 --- /dev/null +++ b/python/.changelog.d/1765.removed @@ -0,0 +1 @@ +Removed support for Lisk diff --git a/python/docs/OPTIONS.rst b/python/docs/OPTIONS.rst index 7781d8315..84356e0e2 100644 --- a/python/docs/OPTIONS.rst +++ b/python/docs/OPTIONS.rst @@ -49,7 +49,6 @@ on one page here. firmware Firmware commands. get-features Retrieve device features and settings. get-session Get a session ID for subsequent commands. - lisk Lisk commands. list List connected Trezor devices. monero Monero commands. nem NEM commands. @@ -298,29 +297,6 @@ Firmware commands. update Upload new firmware to device. verify Verify the integrity of the firmware data stored in a file. -Lisk commands. -~~~~~~~~~~~~~~ - -.. code:: - - trezorctl lisk --help - -.. code:: - - Usage: trezorctl lisk [OPTIONS] COMMAND [ARGS]... - - Lisk commands. - - Options: - --help Show this message and exit. - - Commands: - get-address Get Lisk address for specified path. - get-public-key Get Lisk public key for specified path. - sign-message Sign message with Lisk address. - sign-tx Sign Lisk transaction. - verify-message Verify message signed with Lisk address. - Monero commands. ~~~~~~~~~~~~~~~~ diff --git a/python/src/trezorlib/cli/lisk.py b/python/src/trezorlib/cli/lisk.py deleted file mode 100644 index b81430850..000000000 --- a/python/src/trezorlib/cli/lisk.py +++ /dev/null @@ -1,94 +0,0 @@ -# This file is part of the Trezor project. -# -# Copyright (C) 2012-2019 SatoshiLabs and contributors -# -# This library is free software: you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License version 3 -# as published by the Free Software Foundation. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Lesser General Public License for more details. -# -# You should have received a copy of the License along with this library. -# If not, see . - -import json - -import click - -from .. import lisk, tools -from . import with_client - -PATH_HELP = "BIP-32 path, e.g. m/44'/134'/0'/0'" - - -@click.group(name="lisk") -def cli(): - """Lisk commands.""" - - -@cli.command() -@click.option("-n", "--address", required=True, help=PATH_HELP) -@click.option("-d", "--show-display", is_flag=True) -@with_client -def get_address(client, address, show_display): - """Get Lisk address for specified path.""" - address_n = tools.parse_path(address) - return lisk.get_address(client, address_n, show_display) - - -@cli.command() -@click.option("-n", "--address", required=True, help=PATH_HELP) -@click.option("-d", "--show-display", is_flag=True) -@with_client -def get_public_key(client, address, show_display): - """Get Lisk public key for specified path.""" - address_n = tools.parse_path(address) - res = lisk.get_public_key(client, address_n, show_display) - output = {"public_key": res.public_key.hex()} - return output - - -@cli.command() -@click.argument("file", type=click.File("r")) -@click.option("-n", "--address", required=True, help=PATH_HELP) -@click.option("-f", "--file", "_ignore", is_flag=True, hidden=True, expose_value=False) -@with_client -def sign_tx(client, address, file): - """Sign Lisk transaction.""" - address_n = tools.parse_path(address) - transaction = lisk.sign_tx(client, address_n, json.load(file)) - - payload = {"signature": transaction.signature.hex()} - - return payload - - -@cli.command() -@click.option("-n", "--address", required=True, help=PATH_HELP) -@click.argument("message") -@with_client -def sign_message(client, address, message): - """Sign message with Lisk address.""" - address_n = tools.parse_path(address) - res = lisk.sign_message(client, address_n, message) - output = { - "message": message, - "public_key": res.public_key.hex(), - "signature": res.signature.hex(), - } - return output - - -@cli.command() -@click.argument("pubkey") -@click.argument("signature") -@click.argument("message") -@with_client -def verify_message(client, pubkey, signature, message): - """Verify message signed with Lisk address.""" - signature = bytes.fromhex(signature) - pubkey = bytes.fromhex(pubkey) - return lisk.verify_message(client, pubkey, signature, message) diff --git a/python/src/trezorlib/cli/trezorctl.py b/python/src/trezorlib/cli/trezorctl.py index e15548552..601c84186 100755 --- a/python/src/trezorlib/cli/trezorctl.py +++ b/python/src/trezorlib/cli/trezorctl.py @@ -40,7 +40,6 @@ from . import ( ethereum, fido, firmware, - lisk, monero, nem, ripple, @@ -70,7 +69,6 @@ COMMAND_ALIASES = { "bnb": binance.cli, "eth": ethereum.cli, "ada": cardano.cli, - "lsk": lisk.cli, "xmr": monero.cli, "xrp": ripple.cli, "xlm": stellar.cli, @@ -333,7 +331,6 @@ cli.add_command(device.cli) cli.add_command(eos.cli) cli.add_command(ethereum.cli) cli.add_command(fido.cli) -cli.add_command(lisk.cli) cli.add_command(monero.cli) cli.add_command(nem.cli) cli.add_command(ripple.cli) diff --git a/python/src/trezorlib/lisk.py b/python/src/trezorlib/lisk.py deleted file mode 100644 index 79d572ab3..000000000 --- a/python/src/trezorlib/lisk.py +++ /dev/null @@ -1,60 +0,0 @@ -# This file is part of the Trezor project. -# -# Copyright (C) 2012-2019 SatoshiLabs and contributors -# -# This library is free software: you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License version 3 -# as published by the Free Software Foundation. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Lesser General Public License for more details. -# -# You should have received a copy of the License along with this library. -# If not, see . - -from . import exceptions, messages -from .protobuf import dict_to_proto -from .tools import dict_from_camelcase, expect, normalize_nfc - - -@expect(messages.LiskAddress, field="address") -def get_address(client, n, show_display=False): - return client.call(messages.LiskGetAddress(address_n=n, show_display=show_display)) - - -@expect(messages.LiskPublicKey) -def get_public_key(client, n, show_display=False): - return client.call( - messages.LiskGetPublicKey(address_n=n, show_display=show_display) - ) - - -@expect(messages.LiskMessageSignature) -def sign_message(client, n, message): - message = normalize_nfc(message) - return client.call(messages.LiskSignMessage(address_n=n, message=message)) - - -def verify_message(client, pubkey, signature, message): - message = normalize_nfc(message) - try: - resp = client.call( - messages.LiskVerifyMessage( - signature=signature, public_key=pubkey, message=message - ) - ) - except exceptions.TrezorFailure: - return False - return isinstance(resp, messages.Success) - - -RENAMES = {"lifetime": "life_time", "keysgroup": "keys_group"} - - -@expect(messages.LiskSignedTx) -def sign_tx(client, n, transaction): - transaction = dict_from_camelcase(transaction, renames=RENAMES) - msg = dict_to_proto(messages.LiskTransactionCommon, transaction) - return client.call(messages.LiskSignTx(address_n=n, transaction=msg)) diff --git a/python/src/trezorlib/messages.py b/python/src/trezorlib/messages.py index 4acc24239..ef2e58b09 100644 --- a/python/src/trezorlib/messages.py +++ b/python/src/trezorlib/messages.py @@ -129,15 +129,6 @@ class MessageType(IntEnum): NEMSignedTx = 70 NEMDecryptMessage = 75 NEMDecryptedMessage = 76 - LiskGetAddress = 114 - LiskAddress = 115 - LiskSignTx = 116 - LiskSignedTx = 117 - LiskSignMessage = 118 - LiskMessageSignature = 119 - LiskVerifyMessage = 120 - LiskGetPublicKey = 121 - LiskPublicKey = 122 TezosGetAddress = 150 TezosAddress = 151 TezosSignTx = 152 @@ -403,17 +394,6 @@ class DebugSwipeDirection(IntEnum): RIGHT = 3 -class LiskTransactionType(IntEnum): - Transfer = 0 - RegisterSecondPassphrase = 1 - RegisterDelegate = 2 - CastVotes = 3 - RegisterMultisignatureAccount = 4 - CreateDapp = 5 - TransferIntoDapp = 6 - TransferOutOfDapp = 7 - - class NEMMosaicLevy(IntEnum): MosaicLevy_Absolute = 1 MosaicLevy_Percentile = 2 @@ -4124,265 +4104,6 @@ class EthereumAccessList(protobuf.MessageType): self.address = address -class LiskGetAddress(protobuf.MessageType): - MESSAGE_WIRE_TYPE = 114 - FIELDS = { - 1: protobuf.Field("address_n", "uint32", repeated=True, required=False), - 2: protobuf.Field("show_display", "bool", repeated=False, required=False), - } - - def __init__( - self, - *, - address_n: Optional[List["int"]] = None, - show_display: Optional["bool"] = None, - ) -> None: - self.address_n = address_n if address_n is not None else [] - self.show_display = show_display - - -class LiskAddress(protobuf.MessageType): - MESSAGE_WIRE_TYPE = 115 - FIELDS = { - 1: protobuf.Field("address", "string", repeated=False, required=True), - } - - def __init__( - self, - *, - address: "str", - ) -> None: - self.address = address - - -class LiskGetPublicKey(protobuf.MessageType): - MESSAGE_WIRE_TYPE = 121 - FIELDS = { - 1: protobuf.Field("address_n", "uint32", repeated=True, required=False), - 2: protobuf.Field("show_display", "bool", repeated=False, required=False), - } - - def __init__( - self, - *, - address_n: Optional[List["int"]] = None, - show_display: Optional["bool"] = None, - ) -> None: - self.address_n = address_n if address_n is not None else [] - self.show_display = show_display - - -class LiskPublicKey(protobuf.MessageType): - MESSAGE_WIRE_TYPE = 122 - FIELDS = { - 1: protobuf.Field("public_key", "bytes", repeated=False, required=True), - } - - def __init__( - self, - *, - public_key: "bytes", - ) -> None: - self.public_key = public_key - - -class LiskSignTx(protobuf.MessageType): - MESSAGE_WIRE_TYPE = 116 - FIELDS = { - 1: protobuf.Field("address_n", "uint32", repeated=True, required=False), - 2: protobuf.Field("transaction", "LiskTransactionCommon", repeated=False, required=True), - } - - def __init__( - self, - *, - transaction: "LiskTransactionCommon", - address_n: Optional[List["int"]] = None, - ) -> None: - self.address_n = address_n if address_n is not None else [] - self.transaction = transaction - - -class LiskSignedTx(protobuf.MessageType): - MESSAGE_WIRE_TYPE = 117 - FIELDS = { - 1: protobuf.Field("signature", "bytes", repeated=False, required=True), - } - - def __init__( - self, - *, - signature: "bytes", - ) -> None: - self.signature = signature - - -class LiskSignMessage(protobuf.MessageType): - MESSAGE_WIRE_TYPE = 118 - FIELDS = { - 1: protobuf.Field("address_n", "uint32", repeated=True, required=False), - 2: protobuf.Field("message", "bytes", repeated=False, required=True), - } - - def __init__( - self, - *, - message: "bytes", - address_n: Optional[List["int"]] = None, - ) -> None: - self.address_n = address_n if address_n is not None else [] - self.message = message - - -class LiskMessageSignature(protobuf.MessageType): - MESSAGE_WIRE_TYPE = 119 - FIELDS = { - 1: protobuf.Field("public_key", "bytes", repeated=False, required=True), - 2: protobuf.Field("signature", "bytes", repeated=False, required=True), - } - - def __init__( - self, - *, - public_key: "bytes", - signature: "bytes", - ) -> None: - self.public_key = public_key - self.signature = signature - - -class LiskVerifyMessage(protobuf.MessageType): - MESSAGE_WIRE_TYPE = 120 - FIELDS = { - 1: protobuf.Field("public_key", "bytes", repeated=False, required=True), - 2: protobuf.Field("signature", "bytes", repeated=False, required=True), - 3: protobuf.Field("message", "bytes", repeated=False, required=True), - } - - def __init__( - self, - *, - public_key: "bytes", - signature: "bytes", - message: "bytes", - ) -> None: - self.public_key = public_key - self.signature = signature - self.message = message - - -class LiskTransactionCommon(protobuf.MessageType): - MESSAGE_WIRE_TYPE = None - FIELDS = { - 1: protobuf.Field("type", "LiskTransactionType", repeated=False, required=False), - 2: protobuf.Field("amount", "uint64", repeated=False, required=False), - 3: protobuf.Field("fee", "uint64", repeated=False, required=False), - 4: protobuf.Field("recipient_id", "string", repeated=False, required=False), - 5: protobuf.Field("sender_public_key", "bytes", repeated=False, required=False), - 6: protobuf.Field("requester_public_key", "bytes", repeated=False, required=False), - 7: protobuf.Field("signature", "bytes", repeated=False, required=False), - 8: protobuf.Field("timestamp", "uint32", repeated=False, required=False), - 9: protobuf.Field("asset", "LiskTransactionAsset", repeated=False, required=False), - } - - def __init__( - self, - *, - type: Optional["LiskTransactionType"] = None, - amount: Optional["int"] = None, - fee: Optional["int"] = None, - recipient_id: Optional["str"] = None, - sender_public_key: Optional["bytes"] = None, - requester_public_key: Optional["bytes"] = None, - signature: Optional["bytes"] = None, - timestamp: Optional["int"] = None, - asset: Optional["LiskTransactionAsset"] = None, - ) -> None: - self.type = type - self.amount = amount - self.fee = fee - self.recipient_id = recipient_id - self.sender_public_key = sender_public_key - self.requester_public_key = requester_public_key - self.signature = signature - self.timestamp = timestamp - self.asset = asset - - -class LiskTransactionAsset(protobuf.MessageType): - MESSAGE_WIRE_TYPE = None - FIELDS = { - 1: protobuf.Field("signature", "LiskSignatureType", repeated=False, required=False), - 2: protobuf.Field("delegate", "LiskDelegateType", repeated=False, required=False), - 3: protobuf.Field("votes", "string", repeated=True, required=False), - 4: protobuf.Field("multisignature", "LiskMultisignatureType", repeated=False, required=False), - 5: protobuf.Field("data", "string", repeated=False, required=False), - } - - def __init__( - self, - *, - votes: Optional[List["str"]] = None, - signature: Optional["LiskSignatureType"] = None, - delegate: Optional["LiskDelegateType"] = None, - multisignature: Optional["LiskMultisignatureType"] = None, - data: Optional["str"] = None, - ) -> None: - self.votes = votes if votes is not None else [] - self.signature = signature - self.delegate = delegate - self.multisignature = multisignature - self.data = data - - -class LiskSignatureType(protobuf.MessageType): - MESSAGE_WIRE_TYPE = None - FIELDS = { - 1: protobuf.Field("public_key", "bytes", repeated=False, required=False), - } - - def __init__( - self, - *, - public_key: Optional["bytes"] = None, - ) -> None: - self.public_key = public_key - - -class LiskDelegateType(protobuf.MessageType): - MESSAGE_WIRE_TYPE = None - FIELDS = { - 1: protobuf.Field("username", "string", repeated=False, required=False), - } - - def __init__( - self, - *, - username: Optional["str"] = None, - ) -> None: - self.username = username - - -class LiskMultisignatureType(protobuf.MessageType): - MESSAGE_WIRE_TYPE = None - FIELDS = { - 1: protobuf.Field("min", "uint32", repeated=False, required=False), - 2: protobuf.Field("life_time", "uint32", repeated=False, required=False), - 3: protobuf.Field("keys_group", "string", repeated=True, required=False), - } - - def __init__( - self, - *, - keys_group: Optional[List["str"]] = None, - min: Optional["int"] = None, - life_time: Optional["int"] = None, - ) -> None: - self.keys_group = keys_group if keys_group is not None else [] - self.min = min - self.life_time = life_time - - class MoneroTransactionSourceEntry(protobuf.MessageType): MESSAGE_WIRE_TYPE = None FIELDS = {