From 147e7e21cbc88e6d7ce2ee8147d2ac12df08a7a2 Mon Sep 17 00:00:00 2001 From: Tomas Susanka Date: Tue, 26 Jun 2018 14:17:53 +0200 Subject: [PATCH] ripple: get address command including tests --- trezorctl | 13 +++++ trezorlib/client.py | 7 +++ .../test_msg_ripple_get_address.py | 54 +++++++++++++++++++ 3 files changed, 74 insertions(+) create mode 100644 trezorlib/tests/device_tests/test_msg_ripple_get_address.py diff --git a/trezorctl b/trezorctl index 37f5032ae7..51380f30be 100755 --- a/trezorctl +++ b/trezorctl @@ -1050,6 +1050,19 @@ def stellar_sign_transaction(connect, b64envelope, address, network_passphrase): return base64.b64encode(resp.signature) + +# +# Ripple functions +# +@cli.command(help='Get Ripple address') +@click.option('-n', '--address', required=True, help="BIP-32 path to key, e.g. m/44'/144'/0'/0/0") +@click.option('-d', '--show-display', is_flag=True) +@click.pass_obj +def ripple_get_address(connect, address, show_display): + client = connect() + address_n = tools.parse_path(address) + return client.ripple_get_address(address_n, show_display) + # # Main # diff --git a/trezorlib/client.py b/trezorlib/client.py index e8cc4d67a0..b519d5d9b9 100644 --- a/trezorlib/client.py +++ b/trezorlib/client.py @@ -1082,6 +1082,13 @@ class ProtocolMixin(object): return self.call(proto.SelfTest(payload=b'\x00\xFF\x55\xAA\x66\x99\x33\xCCABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!\x00\xFF\x55\xAA\x66\x99\x33\xCC')) + @field('address') + @expect(proto.RippleAddress) + def ripple_get_address(self, address_n, show_display=False): + return self.call( + proto.RippleGetAddress( + address_n=address_n, show_display=show_display)) + @field('public_key') @expect(proto.StellarPublicKey) def stellar_get_public_key(self, address_n, show_display=False): diff --git a/trezorlib/tests/device_tests/test_msg_ripple_get_address.py b/trezorlib/tests/device_tests/test_msg_ripple_get_address.py new file mode 100644 index 0000000000..bed741ebca --- /dev/null +++ b/trezorlib/tests/device_tests/test_msg_ripple_get_address.py @@ -0,0 +1,54 @@ +# This file is part of the Trezor project. +# +# Copyright (C) 2012-2018 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 pytest + +from .common import TrezorTest +from .conftest import TREZOR_VERSION +from binascii import hexlify +from trezorlib import messages as proto +from trezorlib.client import CallException +from trezorlib.tools import parse_path + + +@pytest.mark.ripple +@pytest.mark.skip_t1 # T1 support is not planned +@pytest.mark.xfail(TREZOR_VERSION == 2, reason="T2 support is not yet finished") +class TestMsgRippleGetAddress(TrezorTest): + + def test_ripple_get_address(self): + # data from https://iancoleman.io/bip39/#english + self.setup_mnemonic_allallall() + + address = self.client.ripple_get_address(parse_path("m/44'/144'/0'/0/0")) + assert address == 'rNaqKtKrMSwpwZSzRckPf7S96DkimjkF4H' + address = self.client.ripple_get_address(parse_path("m/44'/144'/0'/0/1")) + assert address == 'rBKz5MC2iXdoS3XgnNSYmF69K1Yo4NS3Ws' + address = self.client.ripple_get_address(parse_path("m/44'/144'/1'/0/0")) + assert address == 'rJX2KwzaLJDyFhhtXKi3htaLfaUH2tptEX' + + def test_ripple_get_address_other(self): + # data from https://github.com/you21979/node-ripple-bip32/blob/master/test/test.js + self.client.load_device_by_mnemonic( + mnemonic='armed bundle pudding lazy strategy impulse where identify submit weekend physical antenna flight social acoustic absurd whip snack decide blur unfold fiction pumpkin athlete', + pin='', + passphrase_protection=False, + label='test', + language='english') + address = self.client.ripple_get_address(parse_path("m/44'/144'/0'/0/0")) + assert address == 'r4ocGE47gm4G4LkA9mriVHQqzpMLBTgnTY' + address = self.client.ripple_get_address(parse_path("m/44'/144'/0'/0/1")) + assert address == 'rUt9ULSrUvfCmke8HTFU1szbmFpWzVbBXW'