diff --git a/tests/device_tests/common.py b/tests/device_tests/common.py index f7202cc157..24fe344a62 100644 --- a/tests/device_tests/common.py +++ b/tests/device_tests/common.py @@ -19,6 +19,8 @@ from __future__ import print_function import unittest +import hashlib + from trezorlib.client import TrezorClient, TrezorDebugClient from trezorlib import tx_api import config @@ -28,6 +30,7 @@ tx_api.cache_dir = '../txcache' class TrezorTest(unittest.TestCase): + def setUp(self): transport = config.TRANSPORT(*config.TRANSPORT_ARGS, **config.TRANSPORT_KWARGS) if hasattr(config, 'DEBUG_TRANSPORT'): @@ -68,3 +71,32 @@ class TrezorTest(unittest.TestCase): def tearDown(self): self.client.close() + + +def generate_entropy(strength, internal_entropy, external_entropy): + ''' + strength - length of produced seed. One of 128, 192, 256 + random - binary stream of random data from external HRNG + ''' + if strength not in (128, 192, 256): + raise Exception("Invalid strength") + + if not internal_entropy: + raise Exception("Internal entropy is not provided") + + if len(internal_entropy) < 32: + raise Exception("Internal entropy too short") + + if not external_entropy: + raise Exception("External entropy is not provided") + + if len(external_entropy) < 32: + raise Exception("External entropy too short") + + entropy = hashlib.sha256(internal_entropy + external_entropy).digest() + entropy_stripped = entropy[:strength // 8] + + if len(entropy_stripped) * 8 != strength: + raise Exception("Entropy length mismatch") + + return entropy_stripped diff --git a/tests/device_tests/test_msg_resetdevice.py b/tests/device_tests/test_msg_resetdevice.py index ab646e3869..1d00ff00fe 100644 --- a/tests/device_tests/test_msg_resetdevice.py +++ b/tests/device_tests/test_msg_resetdevice.py @@ -17,45 +17,16 @@ # along with this library. If not, see . import unittest -import hashlib import common from trezorlib import messages_pb2 as proto from mnemonic import Mnemonic -def generate_entropy(strength, internal_entropy, external_entropy): - ''' - strength - length of produced seed. One of 128, 192, 256 - random - binary stream of random data from external HRNG - ''' - if strength not in (128, 192, 256): - raise Exception("Invalid strength") - - if not internal_entropy: - raise Exception("Internal entropy is not provided") - - if len(internal_entropy) < 32: - raise Exception("Internal entropy too short") - - if not external_entropy: - raise Exception("External entropy is not provided") - - if len(external_entropy) < 32: - raise Exception("External entropy too short") - - entropy = hashlib.sha256(internal_entropy + external_entropy).digest() - entropy_stripped = entropy[:strength // 8] - - if len(entropy_stripped) * 8 != strength: - raise Exception("Entropy length mismatch") - - return entropy_stripped - - class TestDeviceReset(common.TrezorTest): def test_reset_device(self): + # No PIN, no passphrase external_entropy = b'zlutoucky kun upel divoke ody' * 2 strength = 128 @@ -75,7 +46,7 @@ class TestDeviceReset(common.TrezorTest): ret = self.client.call_raw(proto.EntropyAck(entropy=external_entropy)) # Generate mnemonic locally - entropy = generate_entropy(strength, internal_entropy, external_entropy) + entropy = common.generate_entropy(strength, internal_entropy, external_entropy) expected_mnemonic = Mnemonic('english').to_mnemonic(entropy) mnemonic = [] @@ -106,6 +77,8 @@ class TestDeviceReset(common.TrezorTest): # Check if device is properly initialized resp = self.client.call_raw(proto.Initialize()) + self.assertTrue(resp.initialized) + self.assertFalse(resp.needs_backup) self.assertFalse(resp.pin_protection) self.assertFalse(resp.passphrase_protection) @@ -151,7 +124,7 @@ class TestDeviceReset(common.TrezorTest): ret = self.client.call_raw(proto.EntropyAck(entropy=external_entropy)) # Generate mnemonic locally - entropy = generate_entropy(strength, internal_entropy, external_entropy) + entropy = common.generate_entropy(strength, internal_entropy, external_entropy) expected_mnemonic = Mnemonic('english').to_mnemonic(entropy) mnemonic = [] @@ -182,6 +155,8 @@ class TestDeviceReset(common.TrezorTest): # Check if device is properly initialized resp = self.client.call_raw(proto.Initialize()) + self.assertTrue(resp.initialized) + self.assertFalse(resp.needs_backup) self.assertTrue(resp.pin_protection) self.assertTrue(resp.passphrase_protection) diff --git a/tests/device_tests/test_msg_resetdevice_skipbackup.py b/tests/device_tests/test_msg_resetdevice_skipbackup.py new file mode 100644 index 0000000000..da827893af --- /dev/null +++ b/tests/device_tests/test_msg_resetdevice_skipbackup.py @@ -0,0 +1,98 @@ +# This file is part of the TREZOR project. +# +# Copyright (C) 2012-2016 Marek Palatinus +# Copyright (C) 2012-2016 Pavol Rusnak +# +# This library is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# 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 GNU Lesser General Public License +# along with this library. If not, see . + +import unittest +import common + +from trezorlib import messages_pb2 as proto +from mnemonic import Mnemonic + + +class TestDeviceResetSkipBackup(common.TrezorTest): + + def test_reset_device_skip_backup(self): + + external_entropy = b'zlutoucky kun upel divoke ody' * 2 + strength = 128 + + ret = self.client.call_raw(proto.ResetDevice( + display_random=False, + strength=strength, + passphrase_protection=False, + pin_protection=False, + language='english', + label='test', + skip_backup=True + )) + + # Provide entropy + self.assertIsInstance(ret, proto.EntropyRequest) + internal_entropy = self.client.debug.read_reset_entropy() + ret = self.client.call_raw(proto.EntropyAck(entropy=external_entropy)) + self.assertIsInstance(ret, proto.Success) + + # Check if device is properly initialized + resp = self.client.call_raw(proto.Initialize()) + self.assertTrue(resp.initialized) + self.assertTrue(resp.needs_backup) + + # Generate mnemonic locally + entropy = common.generate_entropy(strength, internal_entropy, external_entropy) + expected_mnemonic = Mnemonic('english').to_mnemonic(entropy) + + # start Backup workflow + ret = self.client.call_raw(proto.BackupDevice()) + + mnemonic = [] + for _ in range(strength // 32 * 3): + self.assertIsInstance(ret, proto.ButtonRequest) + mnemonic.append(self.client.debug.read_reset_word()) + self.client.debug.press_yes() + self.client.call_raw(proto.ButtonAck()) + + mnemonic = ' '.join(mnemonic) + + # Compare that device generated proper mnemonic for given entropies + self.assertEqual(mnemonic, expected_mnemonic) + + mnemonic = [] + for _ in range(strength // 32 * 3): + self.assertIsInstance(ret, proto.ButtonRequest) + mnemonic.append(self.client.debug.read_reset_word()) + self.client.debug.press_yes() + resp = self.client.call_raw(proto.ButtonAck()) + + self.assertIsInstance(resp, proto.Success) + + mnemonic = ' '.join(mnemonic) + + # Compare that second pass printed out the same mnemonic once again + self.assertEqual(mnemonic, expected_mnemonic) + + # start backup again - should fail + ret = self.client.call_raw(proto.BackupDevice()) + self.assertIsInstance(ret, proto.Failure) + + def test_initialized_device_backup_fail(self): + self.setup_mnemonic_nopin_nopassphrase() + ret = self.client.call_raw(proto.BackupDevice()) + self.assertIsInstance(ret, proto.Failure) + + +if __name__ == '__main__': + unittest.main() diff --git a/trezorlib/messages_pb2.py b/trezorlib/messages_pb2.py index dbdf1f975c..2d85cc6cf8 100644 --- a/trezorlib/messages_pb2.py +++ b/trezorlib/messages_pb2.py @@ -1,7 +1,7 @@ # Generated by the protocol buffer compiler. DO NOT EDIT! # source: messages.proto # libprotoc 3.3.0 -# trezor-common e04ecf819bf5e00413408b735f446431e28428e1 +# trezor-common 654ee5d8ec575331b6be15343617a8fcfdd66cdd import sys _b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) @@ -23,7 +23,7 @@ DESCRIPTOR = _descriptor.FileDescriptor( name='messages.proto', package='', syntax='proto2', - serialized_pb=_b('\n\x0emessages.proto\x1a\x0btypes.proto\"\x0c\n\nInitialize\"\r\n\x0bGetFeatures\"\x98\x03\n\x08\x46\x65\x61tures\x12\x0e\n\x06vendor\x18\x01 \x01(\t\x12\x15\n\rmajor_version\x18\x02 \x01(\r\x12\x15\n\rminor_version\x18\x03 \x01(\r\x12\x15\n\rpatch_version\x18\x04 \x01(\r\x12\x17\n\x0f\x62ootloader_mode\x18\x05 \x01(\x08\x12\x11\n\tdevice_id\x18\x06 \x01(\t\x12\x16\n\x0epin_protection\x18\x07 \x01(\x08\x12\x1d\n\x15passphrase_protection\x18\x08 \x01(\x08\x12\x10\n\x08language\x18\t \x01(\t\x12\r\n\x05label\x18\n \x01(\t\x12\x18\n\x05\x63oins\x18\x0b \x03(\x0b\x32\t.CoinType\x12\x13\n\x0binitialized\x18\x0c \x01(\x08\x12\x10\n\x08revision\x18\r \x01(\x0c\x12\x17\n\x0f\x62ootloader_hash\x18\x0e \x01(\x0c\x12\x10\n\x08imported\x18\x0f \x01(\x08\x12\x12\n\npin_cached\x18\x10 \x01(\x08\x12\x19\n\x11passphrase_cached\x18\x11 \x01(\x08\x12\x18\n\x10\x66irmware_present\x18\x12 \x01(\x08\"\x0e\n\x0c\x43learSession\"\\\n\rApplySettings\x12\x10\n\x08language\x18\x01 \x01(\t\x12\r\n\x05label\x18\x02 \x01(\t\x12\x16\n\x0euse_passphrase\x18\x03 \x01(\x08\x12\x12\n\nhomescreen\x18\x04 \x01(\x0c\"\x1b\n\tChangePin\x12\x0e\n\x06remove\x18\x01 \x01(\x08\"i\n\x04Ping\x12\x0f\n\x07message\x18\x01 \x01(\t\x12\x19\n\x11\x62utton_protection\x18\x02 \x01(\x08\x12\x16\n\x0epin_protection\x18\x03 \x01(\x08\x12\x1d\n\x15passphrase_protection\x18\x04 \x01(\x08\"\x1a\n\x07Success\x12\x0f\n\x07message\x18\x01 \x01(\t\"6\n\x07\x46\x61ilure\x12\x1a\n\x04\x63ode\x18\x01 \x01(\x0e\x32\x0c.FailureType\x12\x0f\n\x07message\x18\x02 \x01(\t\"?\n\rButtonRequest\x12 \n\x04\x63ode\x18\x01 \x01(\x0e\x32\x12.ButtonRequestType\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\t\"\x0b\n\tButtonAck\"7\n\x10PinMatrixRequest\x12#\n\x04type\x18\x01 \x01(\x0e\x32\x15.PinMatrixRequestType\"\x1b\n\x0cPinMatrixAck\x12\x0b\n\x03pin\x18\x01 \x02(\t\"\x08\n\x06\x43\x61ncel\"\x13\n\x11PassphraseRequest\"#\n\rPassphraseAck\x12\x12\n\npassphrase\x18\x01 \x02(\t\"\x1a\n\nGetEntropy\x12\x0c\n\x04size\x18\x01 \x02(\r\"\x1a\n\x07\x45ntropy\x12\x0f\n\x07\x65ntropy\x18\x01 \x02(\x0c\"m\n\x0cGetPublicKey\x12\x11\n\taddress_n\x18\x01 \x03(\r\x12\x18\n\x10\x65\x63\x64sa_curve_name\x18\x02 \x01(\t\x12\x14\n\x0cshow_display\x18\x03 \x01(\x08\x12\x1a\n\tcoin_name\x18\x04 \x01(\t:\x07\x42itcoin\"4\n\tPublicKey\x12\x19\n\x04node\x18\x01 \x02(\x0b\x32\x0b.HDNodeType\x12\x0c\n\x04xpub\x18\x02 \x01(\t\"\xb3\x01\n\nGetAddress\x12\x11\n\taddress_n\x18\x01 \x03(\r\x12\x1a\n\tcoin_name\x18\x02 \x01(\t:\x07\x42itcoin\x12\x14\n\x0cshow_display\x18\x03 \x01(\x08\x12+\n\x08multisig\x18\x04 \x01(\x0b\x32\x19.MultisigRedeemScriptType\x12\x33\n\x0bscript_type\x18\x05 \x01(\x0e\x32\x10.InputScriptType:\x0cSPENDADDRESS\"=\n\x12\x45thereumGetAddress\x12\x11\n\taddress_n\x18\x01 \x03(\r\x12\x14\n\x0cshow_display\x18\x02 \x01(\x08\"\x1a\n\x07\x41\x64\x64ress\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x02(\t\"\"\n\x0f\x45thereumAddress\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x02(\x0c\"\x0c\n\nWipeDevice\"\xbb\x01\n\nLoadDevice\x12\x10\n\x08mnemonic\x18\x01 \x01(\t\x12\x19\n\x04node\x18\x02 \x01(\x0b\x32\x0b.HDNodeType\x12\x0b\n\x03pin\x18\x03 \x01(\t\x12\x1d\n\x15passphrase_protection\x18\x04 \x01(\x08\x12\x19\n\x08language\x18\x05 \x01(\t:\x07\x65nglish\x12\r\n\x05label\x18\x06 \x01(\t\x12\x15\n\rskip_checksum\x18\x07 \x01(\x08\x12\x13\n\x0bu2f_counter\x18\x08 \x01(\r\"\xc7\x01\n\x0bResetDevice\x12\x16\n\x0e\x64isplay_random\x18\x01 \x01(\x08\x12\x15\n\x08strength\x18\x02 \x01(\r:\x03\x32\x35\x36\x12\x1d\n\x15passphrase_protection\x18\x03 \x01(\x08\x12\x16\n\x0epin_protection\x18\x04 \x01(\x08\x12\x19\n\x08language\x18\x05 \x01(\t:\x07\x65nglish\x12\r\n\x05label\x18\x06 \x01(\t\x12\x13\n\x0bu2f_counter\x18\x07 \x01(\r\x12\x13\n\x0bskip_backup\x18\x08 \x01(\x08\"\x0e\n\x0c\x42\x61\x63kupDevice\"\x10\n\x0e\x45ntropyRequest\"\x1d\n\nEntropyAck\x12\x0f\n\x07\x65ntropy\x18\x01 \x01(\x0c\"\xd3\x01\n\x0eRecoveryDevice\x12\x12\n\nword_count\x18\x01 \x01(\r\x12\x1d\n\x15passphrase_protection\x18\x02 \x01(\x08\x12\x16\n\x0epin_protection\x18\x03 \x01(\x08\x12\x19\n\x08language\x18\x04 \x01(\t:\x07\x65nglish\x12\r\n\x05label\x18\x05 \x01(\t\x12\x18\n\x10\x65nforce_wordlist\x18\x06 \x01(\x08\x12\x0c\n\x04type\x18\x08 \x01(\r\x12\x13\n\x0bu2f_counter\x18\t \x01(\r\x12\x0f\n\x07\x64ry_run\x18\n \x01(\x08\"-\n\x0bWordRequest\x12\x1e\n\x04type\x18\x01 \x01(\x0e\x32\x10.WordRequestType\"\x17\n\x07WordAck\x12\x0c\n\x04word\x18\x01 \x02(\t\"M\n\x0bSignMessage\x12\x11\n\taddress_n\x18\x01 \x03(\r\x12\x0f\n\x07message\x18\x02 \x02(\x0c\x12\x1a\n\tcoin_name\x18\x03 \x01(\t:\x07\x42itcoin\"`\n\rVerifyMessage\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\t\x12\x11\n\tsignature\x18\x02 \x01(\x0c\x12\x0f\n\x07message\x18\x03 \x01(\x0c\x12\x1a\n\tcoin_name\x18\x04 \x01(\t:\x07\x42itcoin\"6\n\x10MessageSignature\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\t\x12\x11\n\tsignature\x18\x02 \x01(\x0c\"v\n\x0e\x45ncryptMessage\x12\x0e\n\x06pubkey\x18\x01 \x01(\x0c\x12\x0f\n\x07message\x18\x02 \x01(\x0c\x12\x14\n\x0c\x64isplay_only\x18\x03 \x01(\x08\x12\x11\n\taddress_n\x18\x04 \x03(\r\x12\x1a\n\tcoin_name\x18\x05 \x01(\t:\x07\x42itcoin\"@\n\x10\x45ncryptedMessage\x12\r\n\x05nonce\x18\x01 \x01(\x0c\x12\x0f\n\x07message\x18\x02 \x01(\x0c\x12\x0c\n\x04hmac\x18\x03 \x01(\x0c\"Q\n\x0e\x44\x65\x63ryptMessage\x12\x11\n\taddress_n\x18\x01 \x03(\r\x12\r\n\x05nonce\x18\x02 \x01(\x0c\x12\x0f\n\x07message\x18\x03 \x01(\x0c\x12\x0c\n\x04hmac\x18\x04 \x01(\x0c\"4\n\x10\x44\x65\x63ryptedMessage\x12\x0f\n\x07message\x18\x01 \x01(\x0c\x12\x0f\n\x07\x61\x64\x64ress\x18\x02 \x01(\t\"\x8c\x01\n\x0e\x43ipherKeyValue\x12\x11\n\taddress_n\x18\x01 \x03(\r\x12\x0b\n\x03key\x18\x02 \x01(\t\x12\r\n\x05value\x18\x03 \x01(\x0c\x12\x0f\n\x07\x65ncrypt\x18\x04 \x01(\x08\x12\x16\n\x0e\x61sk_on_encrypt\x18\x05 \x01(\x08\x12\x16\n\x0e\x61sk_on_decrypt\x18\x06 \x01(\x08\x12\n\n\x02iv\x18\x07 \x01(\x0c\"!\n\x10\x43ipheredKeyValue\x12\r\n\x05value\x18\x01 \x01(\x0c\"Y\n\x0e\x45stimateTxSize\x12\x15\n\routputs_count\x18\x01 \x02(\r\x12\x14\n\x0cinputs_count\x18\x02 \x02(\r\x12\x1a\n\tcoin_name\x18\x03 \x01(\t:\x07\x42itcoin\"\x19\n\x06TxSize\x12\x0f\n\x07tx_size\x18\x01 \x01(\r\"{\n\x06SignTx\x12\x15\n\routputs_count\x18\x01 \x02(\r\x12\x14\n\x0cinputs_count\x18\x02 \x02(\r\x12\x1a\n\tcoin_name\x18\x03 \x01(\t:\x07\x42itcoin\x12\x12\n\x07version\x18\x04 \x01(\r:\x01\x31\x12\x14\n\tlock_time\x18\x05 \x01(\r:\x01\x30\"\xba\x01\n\x0cSimpleSignTx\x12\x1c\n\x06inputs\x18\x01 \x03(\x0b\x32\x0c.TxInputType\x12\x1e\n\x07outputs\x18\x02 \x03(\x0b\x32\r.TxOutputType\x12&\n\x0ctransactions\x18\x03 \x03(\x0b\x32\x10.TransactionType\x12\x1a\n\tcoin_name\x18\x04 \x01(\t:\x07\x42itcoin\x12\x12\n\x07version\x18\x05 \x01(\r:\x01\x31\x12\x14\n\tlock_time\x18\x06 \x01(\r:\x01\x30\"\x85\x01\n\tTxRequest\x12\"\n\x0crequest_type\x18\x01 \x01(\x0e\x32\x0c.RequestType\x12&\n\x07\x64\x65tails\x18\x02 \x01(\x0b\x32\x15.TxRequestDetailsType\x12,\n\nserialized\x18\x03 \x01(\x0b\x32\x18.TxRequestSerializedType\"%\n\x05TxAck\x12\x1c\n\x02tx\x18\x01 \x01(\x0b\x32\x10.TransactionType\"\xb6\x01\n\x0e\x45thereumSignTx\x12\x11\n\taddress_n\x18\x01 \x03(\r\x12\r\n\x05nonce\x18\x02 \x01(\x0c\x12\x11\n\tgas_price\x18\x03 \x01(\x0c\x12\x11\n\tgas_limit\x18\x04 \x01(\x0c\x12\n\n\x02to\x18\x05 \x01(\x0c\x12\r\n\x05value\x18\x06 \x01(\x0c\x12\x1a\n\x12\x64\x61ta_initial_chunk\x18\x07 \x01(\x0c\x12\x13\n\x0b\x64\x61ta_length\x18\x08 \x01(\r\x12\x10\n\x08\x63hain_id\x18\t \x01(\r\"g\n\x11\x45thereumTxRequest\x12\x13\n\x0b\x64\x61ta_length\x18\x01 \x01(\r\x12\x13\n\x0bsignature_v\x18\x02 \x01(\r\x12\x13\n\x0bsignature_r\x18\x03 \x01(\x0c\x12\x13\n\x0bsignature_s\x18\x04 \x01(\x0c\"#\n\rEthereumTxAck\x12\x12\n\ndata_chunk\x18\x01 \x01(\x0c\"}\n\x0cSignIdentity\x12\x1f\n\x08identity\x18\x01 \x01(\x0b\x32\r.IdentityType\x12\x18\n\x10\x63hallenge_hidden\x18\x02 \x01(\x0c\x12\x18\n\x10\x63hallenge_visual\x18\x03 \x01(\t\x12\x18\n\x10\x65\x63\x64sa_curve_name\x18\x04 \x01(\t\"H\n\x0eSignedIdentity\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\t\x12\x12\n\npublic_key\x18\x02 \x01(\x0c\x12\x11\n\tsignature\x18\x03 \x01(\x0c\"g\n\x11GetECDHSessionKey\x12\x1f\n\x08identity\x18\x01 \x01(\x0b\x32\r.IdentityType\x12\x17\n\x0fpeer_public_key\x18\x02 \x01(\x0c\x12\x18\n\x10\x65\x63\x64sa_curve_name\x18\x03 \x01(\t\"%\n\x0e\x45\x43\x44HSessionKey\x12\x13\n\x0bsession_key\x18\x01 \x01(\x0c\"$\n\rSetU2FCounter\x12\x13\n\x0bu2f_counter\x18\x01 \x01(\r\"\x1f\n\rFirmwareErase\x12\x0e\n\x06length\x18\x01 \x01(\r\"1\n\x0f\x46irmwareRequest\x12\x0e\n\x06offset\x18\x01 \x01(\r\x12\x0e\n\x06length\x18\x02 \x01(\r\"/\n\x0e\x46irmwareUpload\x12\x0f\n\x07payload\x18\x01 \x02(\x0c\x12\x0c\n\x04hash\x18\x02 \x01(\x0c\"#\n\x11\x44\x65\x62ugLinkDecision\x12\x0e\n\x06yes_no\x18\x01 \x02(\x08\"\x13\n\x11\x44\x65\x62ugLinkGetState\"\xeb\x01\n\x0e\x44\x65\x62ugLinkState\x12\x0e\n\x06layout\x18\x01 \x01(\x0c\x12\x0b\n\x03pin\x18\x02 \x01(\t\x12\x0e\n\x06matrix\x18\x03 \x01(\t\x12\x10\n\x08mnemonic\x18\x04 \x01(\t\x12\x19\n\x04node\x18\x05 \x01(\x0b\x32\x0b.HDNodeType\x12\x1d\n\x15passphrase_protection\x18\x06 \x01(\x08\x12\x12\n\nreset_word\x18\x07 \x01(\t\x12\x15\n\rreset_entropy\x18\x08 \x01(\x0c\x12\x1a\n\x12recovery_fake_word\x18\t \x01(\t\x12\x19\n\x11recovery_word_pos\x18\n \x01(\r\"\x0f\n\rDebugLinkStop\";\n\x0c\x44\x65\x62ugLinkLog\x12\r\n\x05level\x18\x01 \x01(\r\x12\x0e\n\x06\x62ucket\x18\x02 \x01(\t\x12\x0c\n\x04text\x18\x03 \x01(\t\"6\n\x13\x44\x65\x62ugLinkMemoryRead\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\r\x12\x0e\n\x06length\x18\x02 \x01(\r\"!\n\x0f\x44\x65\x62ugLinkMemory\x12\x0e\n\x06memory\x18\x01 \x01(\x0c\"F\n\x14\x44\x65\x62ugLinkMemoryWrite\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\r\x12\x0e\n\x06memory\x18\x02 \x01(\x0c\x12\r\n\x05\x66lash\x18\x03 \x01(\x08\"%\n\x13\x44\x65\x62ugLinkFlashErase\x12\x0e\n\x06sector\x18\x01 \x01(\r*\xd9\x13\n\x0bMessageType\x12 \n\x16MessageType_Initialize\x10\x00\x1a\x04\x90\xb5\x18\x01\x12\x1a\n\x10MessageType_Ping\x10\x01\x1a\x04\x90\xb5\x18\x01\x12\x1d\n\x13MessageType_Success\x10\x02\x1a\x04\x98\xb5\x18\x01\x12\x1d\n\x13MessageType_Failure\x10\x03\x1a\x04\x98\xb5\x18\x01\x12\x1f\n\x15MessageType_ChangePin\x10\x04\x1a\x04\x90\xb5\x18\x01\x12 \n\x16MessageType_WipeDevice\x10\x05\x1a\x04\x90\xb5\x18\x01\x12\'\n\x19MessageType_FirmwareErase\x10\x06\x1a\x08\x90\xb5\x18\x01\xb8\xb5\x18\x01\x12(\n\x1aMessageType_FirmwareUpload\x10\x07\x1a\x08\x90\xb5\x18\x01\xb8\xb5\x18\x01\x12)\n\x1bMessageType_FirmwareRequest\x10\x08\x1a\x08\x98\xb5\x18\x01\xb8\xb5\x18\x01\x12 \n\x16MessageType_GetEntropy\x10\t\x1a\x04\x90\xb5\x18\x01\x12\x1d\n\x13MessageType_Entropy\x10\n\x1a\x04\x98\xb5\x18\x01\x12\"\n\x18MessageType_GetPublicKey\x10\x0b\x1a\x04\x90\xb5\x18\x01\x12\x1f\n\x15MessageType_PublicKey\x10\x0c\x1a\x04\x98\xb5\x18\x01\x12 \n\x16MessageType_LoadDevice\x10\r\x1a\x04\x90\xb5\x18\x01\x12!\n\x17MessageType_ResetDevice\x10\x0e\x1a\x04\x90\xb5\x18\x01\x12\x1c\n\x12MessageType_SignTx\x10\x0f\x1a\x04\x90\xb5\x18\x01\x12$\n\x18MessageType_SimpleSignTx\x10\x10\x1a\x06\x08\x01\x90\xb5\x18\x01\x12\x1e\n\x14MessageType_Features\x10\x11\x1a\x04\x98\xb5\x18\x01\x12&\n\x1cMessageType_PinMatrixRequest\x10\x12\x1a\x04\x98\xb5\x18\x01\x12&\n\x18MessageType_PinMatrixAck\x10\x13\x1a\x08\x90\xb5\x18\x01\xb0\xb5\x18\x01\x12\x1c\n\x12MessageType_Cancel\x10\x14\x1a\x04\x90\xb5\x18\x01\x12\x1f\n\x15MessageType_TxRequest\x10\x15\x1a\x04\x98\xb5\x18\x01\x12\x1b\n\x11MessageType_TxAck\x10\x16\x1a\x04\x90\xb5\x18\x01\x12$\n\x1aMessageType_CipherKeyValue\x10\x17\x1a\x04\x90\xb5\x18\x01\x12\"\n\x18MessageType_ClearSession\x10\x18\x1a\x04\x90\xb5\x18\x01\x12#\n\x19MessageType_ApplySettings\x10\x19\x1a\x04\x90\xb5\x18\x01\x12#\n\x19MessageType_ButtonRequest\x10\x1a\x1a\x04\x98\xb5\x18\x01\x12#\n\x15MessageType_ButtonAck\x10\x1b\x1a\x08\x90\xb5\x18\x01\xb0\xb5\x18\x01\x12 \n\x16MessageType_GetAddress\x10\x1d\x1a\x04\x90\xb5\x18\x01\x12\x1d\n\x13MessageType_Address\x10\x1e\x1a\x04\x98\xb5\x18\x01\x12\"\n\x18MessageType_BackupDevice\x10\"\x1a\x04\x90\xb5\x18\x01\x12$\n\x1aMessageType_EntropyRequest\x10#\x1a\x04\x98\xb5\x18\x01\x12 \n\x16MessageType_EntropyAck\x10$\x1a\x04\x90\xb5\x18\x01\x12!\n\x17MessageType_SignMessage\x10&\x1a\x04\x90\xb5\x18\x01\x12#\n\x19MessageType_VerifyMessage\x10\'\x1a\x04\x90\xb5\x18\x01\x12&\n\x1cMessageType_MessageSignature\x10(\x1a\x04\x98\xb5\x18\x01\x12\'\n\x1dMessageType_PassphraseRequest\x10)\x1a\x04\x98\xb5\x18\x01\x12\'\n\x19MessageType_PassphraseAck\x10*\x1a\x08\x90\xb5\x18\x01\xb0\xb5\x18\x01\x12$\n\x1aMessageType_EstimateTxSize\x10+\x1a\x04\x90\xb5\x18\x01\x12\x1c\n\x12MessageType_TxSize\x10,\x1a\x04\x98\xb5\x18\x01\x12$\n\x1aMessageType_RecoveryDevice\x10-\x1a\x04\x90\xb5\x18\x01\x12!\n\x17MessageType_WordRequest\x10.\x1a\x04\x98\xb5\x18\x01\x12\x1d\n\x13MessageType_WordAck\x10/\x1a\x04\x90\xb5\x18\x01\x12&\n\x1cMessageType_CipheredKeyValue\x10\x30\x1a\x04\x98\xb5\x18\x01\x12&\n\x1aMessageType_EncryptMessage\x10\x31\x1a\x06\x08\x01\x90\xb5\x18\x01\x12(\n\x1cMessageType_EncryptedMessage\x10\x32\x1a\x06\x08\x01\x98\xb5\x18\x01\x12&\n\x1aMessageType_DecryptMessage\x10\x33\x1a\x06\x08\x01\x90\xb5\x18\x01\x12(\n\x1cMessageType_DecryptedMessage\x10\x34\x1a\x06\x08\x01\x98\xb5\x18\x01\x12\"\n\x18MessageType_SignIdentity\x10\x35\x1a\x04\x90\xb5\x18\x01\x12$\n\x1aMessageType_SignedIdentity\x10\x36\x1a\x04\x98\xb5\x18\x01\x12!\n\x17MessageType_GetFeatures\x10\x37\x1a\x04\x90\xb5\x18\x01\x12(\n\x1eMessageType_EthereumGetAddress\x10\x38\x1a\x04\x90\xb5\x18\x01\x12%\n\x1bMessageType_EthereumAddress\x10\x39\x1a\x04\x98\xb5\x18\x01\x12$\n\x1aMessageType_EthereumSignTx\x10:\x1a\x04\x90\xb5\x18\x01\x12\'\n\x1dMessageType_EthereumTxRequest\x10;\x1a\x04\x98\xb5\x18\x01\x12#\n\x19MessageType_EthereumTxAck\x10<\x1a\x04\x90\xb5\x18\x01\x12\'\n\x1dMessageType_GetECDHSessionKey\x10=\x1a\x04\x90\xb5\x18\x01\x12$\n\x1aMessageType_ECDHSessionKey\x10>\x1a\x04\x98\xb5\x18\x01\x12#\n\x19MessageType_SetU2FCounter\x10?\x1a\x04\x90\xb5\x18\x01\x12+\n\x1dMessageType_DebugLinkDecision\x10\x64\x1a\x08\xa0\xb5\x18\x01\xb0\xb5\x18\x01\x12\'\n\x1dMessageType_DebugLinkGetState\x10\x65\x1a\x04\xa0\xb5\x18\x01\x12$\n\x1aMessageType_DebugLinkState\x10\x66\x1a\x04\xa8\xb5\x18\x01\x12#\n\x19MessageType_DebugLinkStop\x10g\x1a\x04\xa0\xb5\x18\x01\x12\"\n\x18MessageType_DebugLinkLog\x10h\x1a\x04\xa8\xb5\x18\x01\x12)\n\x1fMessageType_DebugLinkMemoryRead\x10n\x1a\x04\xa0\xb5\x18\x01\x12%\n\x1bMessageType_DebugLinkMemory\x10o\x1a\x04\xa8\xb5\x18\x01\x12*\n MessageType_DebugLinkMemoryWrite\x10p\x1a\x04\xa0\xb5\x18\x01\x12)\n\x1fMessageType_DebugLinkFlashErase\x10q\x1a\x04\xa0\xb5\x18\x01\x42\x30\n\x1f\x63om.satoshilabs.trezor.protobufB\rTrezorMessage') + serialized_pb=_b('\n\x0emessages.proto\x1a\x0btypes.proto\"\x0c\n\nInitialize\"\r\n\x0bGetFeatures\"\xae\x03\n\x08\x46\x65\x61tures\x12\x0e\n\x06vendor\x18\x01 \x01(\t\x12\x15\n\rmajor_version\x18\x02 \x01(\r\x12\x15\n\rminor_version\x18\x03 \x01(\r\x12\x15\n\rpatch_version\x18\x04 \x01(\r\x12\x17\n\x0f\x62ootloader_mode\x18\x05 \x01(\x08\x12\x11\n\tdevice_id\x18\x06 \x01(\t\x12\x16\n\x0epin_protection\x18\x07 \x01(\x08\x12\x1d\n\x15passphrase_protection\x18\x08 \x01(\x08\x12\x10\n\x08language\x18\t \x01(\t\x12\r\n\x05label\x18\n \x01(\t\x12\x18\n\x05\x63oins\x18\x0b \x03(\x0b\x32\t.CoinType\x12\x13\n\x0binitialized\x18\x0c \x01(\x08\x12\x10\n\x08revision\x18\r \x01(\x0c\x12\x17\n\x0f\x62ootloader_hash\x18\x0e \x01(\x0c\x12\x10\n\x08imported\x18\x0f \x01(\x08\x12\x12\n\npin_cached\x18\x10 \x01(\x08\x12\x19\n\x11passphrase_cached\x18\x11 \x01(\x08\x12\x18\n\x10\x66irmware_present\x18\x12 \x01(\x08\x12\x14\n\x0cneeds_backup\x18\x13 \x01(\x08\"\x0e\n\x0c\x43learSession\"\\\n\rApplySettings\x12\x10\n\x08language\x18\x01 \x01(\t\x12\r\n\x05label\x18\x02 \x01(\t\x12\x16\n\x0euse_passphrase\x18\x03 \x01(\x08\x12\x12\n\nhomescreen\x18\x04 \x01(\x0c\"\x1b\n\tChangePin\x12\x0e\n\x06remove\x18\x01 \x01(\x08\"i\n\x04Ping\x12\x0f\n\x07message\x18\x01 \x01(\t\x12\x19\n\x11\x62utton_protection\x18\x02 \x01(\x08\x12\x16\n\x0epin_protection\x18\x03 \x01(\x08\x12\x1d\n\x15passphrase_protection\x18\x04 \x01(\x08\"\x1a\n\x07Success\x12\x0f\n\x07message\x18\x01 \x01(\t\"6\n\x07\x46\x61ilure\x12\x1a\n\x04\x63ode\x18\x01 \x01(\x0e\x32\x0c.FailureType\x12\x0f\n\x07message\x18\x02 \x01(\t\"?\n\rButtonRequest\x12 \n\x04\x63ode\x18\x01 \x01(\x0e\x32\x12.ButtonRequestType\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\t\"\x0b\n\tButtonAck\"7\n\x10PinMatrixRequest\x12#\n\x04type\x18\x01 \x01(\x0e\x32\x15.PinMatrixRequestType\"\x1b\n\x0cPinMatrixAck\x12\x0b\n\x03pin\x18\x01 \x02(\t\"\x08\n\x06\x43\x61ncel\"\x13\n\x11PassphraseRequest\"#\n\rPassphraseAck\x12\x12\n\npassphrase\x18\x01 \x02(\t\"\x1a\n\nGetEntropy\x12\x0c\n\x04size\x18\x01 \x02(\r\"\x1a\n\x07\x45ntropy\x12\x0f\n\x07\x65ntropy\x18\x01 \x02(\x0c\"m\n\x0cGetPublicKey\x12\x11\n\taddress_n\x18\x01 \x03(\r\x12\x18\n\x10\x65\x63\x64sa_curve_name\x18\x02 \x01(\t\x12\x14\n\x0cshow_display\x18\x03 \x01(\x08\x12\x1a\n\tcoin_name\x18\x04 \x01(\t:\x07\x42itcoin\"4\n\tPublicKey\x12\x19\n\x04node\x18\x01 \x02(\x0b\x32\x0b.HDNodeType\x12\x0c\n\x04xpub\x18\x02 \x01(\t\"\xb3\x01\n\nGetAddress\x12\x11\n\taddress_n\x18\x01 \x03(\r\x12\x1a\n\tcoin_name\x18\x02 \x01(\t:\x07\x42itcoin\x12\x14\n\x0cshow_display\x18\x03 \x01(\x08\x12+\n\x08multisig\x18\x04 \x01(\x0b\x32\x19.MultisigRedeemScriptType\x12\x33\n\x0bscript_type\x18\x05 \x01(\x0e\x32\x10.InputScriptType:\x0cSPENDADDRESS\"=\n\x12\x45thereumGetAddress\x12\x11\n\taddress_n\x18\x01 \x03(\r\x12\x14\n\x0cshow_display\x18\x02 \x01(\x08\"\x1a\n\x07\x41\x64\x64ress\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x02(\t\"\"\n\x0f\x45thereumAddress\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x02(\x0c\"\x0c\n\nWipeDevice\"\xbb\x01\n\nLoadDevice\x12\x10\n\x08mnemonic\x18\x01 \x01(\t\x12\x19\n\x04node\x18\x02 \x01(\x0b\x32\x0b.HDNodeType\x12\x0b\n\x03pin\x18\x03 \x01(\t\x12\x1d\n\x15passphrase_protection\x18\x04 \x01(\x08\x12\x19\n\x08language\x18\x05 \x01(\t:\x07\x65nglish\x12\r\n\x05label\x18\x06 \x01(\t\x12\x15\n\rskip_checksum\x18\x07 \x01(\x08\x12\x13\n\x0bu2f_counter\x18\x08 \x01(\r\"\xc7\x01\n\x0bResetDevice\x12\x16\n\x0e\x64isplay_random\x18\x01 \x01(\x08\x12\x15\n\x08strength\x18\x02 \x01(\r:\x03\x32\x35\x36\x12\x1d\n\x15passphrase_protection\x18\x03 \x01(\x08\x12\x16\n\x0epin_protection\x18\x04 \x01(\x08\x12\x19\n\x08language\x18\x05 \x01(\t:\x07\x65nglish\x12\r\n\x05label\x18\x06 \x01(\t\x12\x13\n\x0bu2f_counter\x18\x07 \x01(\r\x12\x13\n\x0bskip_backup\x18\x08 \x01(\x08\"\x0e\n\x0c\x42\x61\x63kupDevice\"\x10\n\x0e\x45ntropyRequest\"\x1d\n\nEntropyAck\x12\x0f\n\x07\x65ntropy\x18\x01 \x01(\x0c\"\xd3\x01\n\x0eRecoveryDevice\x12\x12\n\nword_count\x18\x01 \x01(\r\x12\x1d\n\x15passphrase_protection\x18\x02 \x01(\x08\x12\x16\n\x0epin_protection\x18\x03 \x01(\x08\x12\x19\n\x08language\x18\x04 \x01(\t:\x07\x65nglish\x12\r\n\x05label\x18\x05 \x01(\t\x12\x18\n\x10\x65nforce_wordlist\x18\x06 \x01(\x08\x12\x0c\n\x04type\x18\x08 \x01(\r\x12\x13\n\x0bu2f_counter\x18\t \x01(\r\x12\x0f\n\x07\x64ry_run\x18\n \x01(\x08\"-\n\x0bWordRequest\x12\x1e\n\x04type\x18\x01 \x01(\x0e\x32\x10.WordRequestType\"\x17\n\x07WordAck\x12\x0c\n\x04word\x18\x01 \x02(\t\"M\n\x0bSignMessage\x12\x11\n\taddress_n\x18\x01 \x03(\r\x12\x0f\n\x07message\x18\x02 \x02(\x0c\x12\x1a\n\tcoin_name\x18\x03 \x01(\t:\x07\x42itcoin\"`\n\rVerifyMessage\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\t\x12\x11\n\tsignature\x18\x02 \x01(\x0c\x12\x0f\n\x07message\x18\x03 \x01(\x0c\x12\x1a\n\tcoin_name\x18\x04 \x01(\t:\x07\x42itcoin\"6\n\x10MessageSignature\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\t\x12\x11\n\tsignature\x18\x02 \x01(\x0c\"v\n\x0e\x45ncryptMessage\x12\x0e\n\x06pubkey\x18\x01 \x01(\x0c\x12\x0f\n\x07message\x18\x02 \x01(\x0c\x12\x14\n\x0c\x64isplay_only\x18\x03 \x01(\x08\x12\x11\n\taddress_n\x18\x04 \x03(\r\x12\x1a\n\tcoin_name\x18\x05 \x01(\t:\x07\x42itcoin\"@\n\x10\x45ncryptedMessage\x12\r\n\x05nonce\x18\x01 \x01(\x0c\x12\x0f\n\x07message\x18\x02 \x01(\x0c\x12\x0c\n\x04hmac\x18\x03 \x01(\x0c\"Q\n\x0e\x44\x65\x63ryptMessage\x12\x11\n\taddress_n\x18\x01 \x03(\r\x12\r\n\x05nonce\x18\x02 \x01(\x0c\x12\x0f\n\x07message\x18\x03 \x01(\x0c\x12\x0c\n\x04hmac\x18\x04 \x01(\x0c\"4\n\x10\x44\x65\x63ryptedMessage\x12\x0f\n\x07message\x18\x01 \x01(\x0c\x12\x0f\n\x07\x61\x64\x64ress\x18\x02 \x01(\t\"\x8c\x01\n\x0e\x43ipherKeyValue\x12\x11\n\taddress_n\x18\x01 \x03(\r\x12\x0b\n\x03key\x18\x02 \x01(\t\x12\r\n\x05value\x18\x03 \x01(\x0c\x12\x0f\n\x07\x65ncrypt\x18\x04 \x01(\x08\x12\x16\n\x0e\x61sk_on_encrypt\x18\x05 \x01(\x08\x12\x16\n\x0e\x61sk_on_decrypt\x18\x06 \x01(\x08\x12\n\n\x02iv\x18\x07 \x01(\x0c\"!\n\x10\x43ipheredKeyValue\x12\r\n\x05value\x18\x01 \x01(\x0c\"Y\n\x0e\x45stimateTxSize\x12\x15\n\routputs_count\x18\x01 \x02(\r\x12\x14\n\x0cinputs_count\x18\x02 \x02(\r\x12\x1a\n\tcoin_name\x18\x03 \x01(\t:\x07\x42itcoin\"\x19\n\x06TxSize\x12\x0f\n\x07tx_size\x18\x01 \x01(\r\"{\n\x06SignTx\x12\x15\n\routputs_count\x18\x01 \x02(\r\x12\x14\n\x0cinputs_count\x18\x02 \x02(\r\x12\x1a\n\tcoin_name\x18\x03 \x01(\t:\x07\x42itcoin\x12\x12\n\x07version\x18\x04 \x01(\r:\x01\x31\x12\x14\n\tlock_time\x18\x05 \x01(\r:\x01\x30\"\xba\x01\n\x0cSimpleSignTx\x12\x1c\n\x06inputs\x18\x01 \x03(\x0b\x32\x0c.TxInputType\x12\x1e\n\x07outputs\x18\x02 \x03(\x0b\x32\r.TxOutputType\x12&\n\x0ctransactions\x18\x03 \x03(\x0b\x32\x10.TransactionType\x12\x1a\n\tcoin_name\x18\x04 \x01(\t:\x07\x42itcoin\x12\x12\n\x07version\x18\x05 \x01(\r:\x01\x31\x12\x14\n\tlock_time\x18\x06 \x01(\r:\x01\x30\"\x85\x01\n\tTxRequest\x12\"\n\x0crequest_type\x18\x01 \x01(\x0e\x32\x0c.RequestType\x12&\n\x07\x64\x65tails\x18\x02 \x01(\x0b\x32\x15.TxRequestDetailsType\x12,\n\nserialized\x18\x03 \x01(\x0b\x32\x18.TxRequestSerializedType\"%\n\x05TxAck\x12\x1c\n\x02tx\x18\x01 \x01(\x0b\x32\x10.TransactionType\"\xb6\x01\n\x0e\x45thereumSignTx\x12\x11\n\taddress_n\x18\x01 \x03(\r\x12\r\n\x05nonce\x18\x02 \x01(\x0c\x12\x11\n\tgas_price\x18\x03 \x01(\x0c\x12\x11\n\tgas_limit\x18\x04 \x01(\x0c\x12\n\n\x02to\x18\x05 \x01(\x0c\x12\r\n\x05value\x18\x06 \x01(\x0c\x12\x1a\n\x12\x64\x61ta_initial_chunk\x18\x07 \x01(\x0c\x12\x13\n\x0b\x64\x61ta_length\x18\x08 \x01(\r\x12\x10\n\x08\x63hain_id\x18\t \x01(\r\"g\n\x11\x45thereumTxRequest\x12\x13\n\x0b\x64\x61ta_length\x18\x01 \x01(\r\x12\x13\n\x0bsignature_v\x18\x02 \x01(\r\x12\x13\n\x0bsignature_r\x18\x03 \x01(\x0c\x12\x13\n\x0bsignature_s\x18\x04 \x01(\x0c\"#\n\rEthereumTxAck\x12\x12\n\ndata_chunk\x18\x01 \x01(\x0c\"}\n\x0cSignIdentity\x12\x1f\n\x08identity\x18\x01 \x01(\x0b\x32\r.IdentityType\x12\x18\n\x10\x63hallenge_hidden\x18\x02 \x01(\x0c\x12\x18\n\x10\x63hallenge_visual\x18\x03 \x01(\t\x12\x18\n\x10\x65\x63\x64sa_curve_name\x18\x04 \x01(\t\"H\n\x0eSignedIdentity\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\t\x12\x12\n\npublic_key\x18\x02 \x01(\x0c\x12\x11\n\tsignature\x18\x03 \x01(\x0c\"g\n\x11GetECDHSessionKey\x12\x1f\n\x08identity\x18\x01 \x01(\x0b\x32\r.IdentityType\x12\x17\n\x0fpeer_public_key\x18\x02 \x01(\x0c\x12\x18\n\x10\x65\x63\x64sa_curve_name\x18\x03 \x01(\t\"%\n\x0e\x45\x43\x44HSessionKey\x12\x13\n\x0bsession_key\x18\x01 \x01(\x0c\"$\n\rSetU2FCounter\x12\x13\n\x0bu2f_counter\x18\x01 \x01(\r\"\x1f\n\rFirmwareErase\x12\x0e\n\x06length\x18\x01 \x01(\r\"1\n\x0f\x46irmwareRequest\x12\x0e\n\x06offset\x18\x01 \x01(\r\x12\x0e\n\x06length\x18\x02 \x01(\r\"/\n\x0e\x46irmwareUpload\x12\x0f\n\x07payload\x18\x01 \x02(\x0c\x12\x0c\n\x04hash\x18\x02 \x01(\x0c\"#\n\x11\x44\x65\x62ugLinkDecision\x12\x0e\n\x06yes_no\x18\x01 \x02(\x08\"\x13\n\x11\x44\x65\x62ugLinkGetState\"\xeb\x01\n\x0e\x44\x65\x62ugLinkState\x12\x0e\n\x06layout\x18\x01 \x01(\x0c\x12\x0b\n\x03pin\x18\x02 \x01(\t\x12\x0e\n\x06matrix\x18\x03 \x01(\t\x12\x10\n\x08mnemonic\x18\x04 \x01(\t\x12\x19\n\x04node\x18\x05 \x01(\x0b\x32\x0b.HDNodeType\x12\x1d\n\x15passphrase_protection\x18\x06 \x01(\x08\x12\x12\n\nreset_word\x18\x07 \x01(\t\x12\x15\n\rreset_entropy\x18\x08 \x01(\x0c\x12\x1a\n\x12recovery_fake_word\x18\t \x01(\t\x12\x19\n\x11recovery_word_pos\x18\n \x01(\r\"\x0f\n\rDebugLinkStop\";\n\x0c\x44\x65\x62ugLinkLog\x12\r\n\x05level\x18\x01 \x01(\r\x12\x0e\n\x06\x62ucket\x18\x02 \x01(\t\x12\x0c\n\x04text\x18\x03 \x01(\t\"6\n\x13\x44\x65\x62ugLinkMemoryRead\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\r\x12\x0e\n\x06length\x18\x02 \x01(\r\"!\n\x0f\x44\x65\x62ugLinkMemory\x12\x0e\n\x06memory\x18\x01 \x01(\x0c\"F\n\x14\x44\x65\x62ugLinkMemoryWrite\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\r\x12\x0e\n\x06memory\x18\x02 \x01(\x0c\x12\r\n\x05\x66lash\x18\x03 \x01(\x08\"%\n\x13\x44\x65\x62ugLinkFlashErase\x12\x0e\n\x06sector\x18\x01 \x01(\r*\xd9\x13\n\x0bMessageType\x12 \n\x16MessageType_Initialize\x10\x00\x1a\x04\x90\xb5\x18\x01\x12\x1a\n\x10MessageType_Ping\x10\x01\x1a\x04\x90\xb5\x18\x01\x12\x1d\n\x13MessageType_Success\x10\x02\x1a\x04\x98\xb5\x18\x01\x12\x1d\n\x13MessageType_Failure\x10\x03\x1a\x04\x98\xb5\x18\x01\x12\x1f\n\x15MessageType_ChangePin\x10\x04\x1a\x04\x90\xb5\x18\x01\x12 \n\x16MessageType_WipeDevice\x10\x05\x1a\x04\x90\xb5\x18\x01\x12\'\n\x19MessageType_FirmwareErase\x10\x06\x1a\x08\x90\xb5\x18\x01\xb8\xb5\x18\x01\x12(\n\x1aMessageType_FirmwareUpload\x10\x07\x1a\x08\x90\xb5\x18\x01\xb8\xb5\x18\x01\x12)\n\x1bMessageType_FirmwareRequest\x10\x08\x1a\x08\x98\xb5\x18\x01\xb8\xb5\x18\x01\x12 \n\x16MessageType_GetEntropy\x10\t\x1a\x04\x90\xb5\x18\x01\x12\x1d\n\x13MessageType_Entropy\x10\n\x1a\x04\x98\xb5\x18\x01\x12\"\n\x18MessageType_GetPublicKey\x10\x0b\x1a\x04\x90\xb5\x18\x01\x12\x1f\n\x15MessageType_PublicKey\x10\x0c\x1a\x04\x98\xb5\x18\x01\x12 \n\x16MessageType_LoadDevice\x10\r\x1a\x04\x90\xb5\x18\x01\x12!\n\x17MessageType_ResetDevice\x10\x0e\x1a\x04\x90\xb5\x18\x01\x12\x1c\n\x12MessageType_SignTx\x10\x0f\x1a\x04\x90\xb5\x18\x01\x12$\n\x18MessageType_SimpleSignTx\x10\x10\x1a\x06\x08\x01\x90\xb5\x18\x01\x12\x1e\n\x14MessageType_Features\x10\x11\x1a\x04\x98\xb5\x18\x01\x12&\n\x1cMessageType_PinMatrixRequest\x10\x12\x1a\x04\x98\xb5\x18\x01\x12&\n\x18MessageType_PinMatrixAck\x10\x13\x1a\x08\x90\xb5\x18\x01\xb0\xb5\x18\x01\x12\x1c\n\x12MessageType_Cancel\x10\x14\x1a\x04\x90\xb5\x18\x01\x12\x1f\n\x15MessageType_TxRequest\x10\x15\x1a\x04\x98\xb5\x18\x01\x12\x1b\n\x11MessageType_TxAck\x10\x16\x1a\x04\x90\xb5\x18\x01\x12$\n\x1aMessageType_CipherKeyValue\x10\x17\x1a\x04\x90\xb5\x18\x01\x12\"\n\x18MessageType_ClearSession\x10\x18\x1a\x04\x90\xb5\x18\x01\x12#\n\x19MessageType_ApplySettings\x10\x19\x1a\x04\x90\xb5\x18\x01\x12#\n\x19MessageType_ButtonRequest\x10\x1a\x1a\x04\x98\xb5\x18\x01\x12#\n\x15MessageType_ButtonAck\x10\x1b\x1a\x08\x90\xb5\x18\x01\xb0\xb5\x18\x01\x12 \n\x16MessageType_GetAddress\x10\x1d\x1a\x04\x90\xb5\x18\x01\x12\x1d\n\x13MessageType_Address\x10\x1e\x1a\x04\x98\xb5\x18\x01\x12\"\n\x18MessageType_BackupDevice\x10\"\x1a\x04\x90\xb5\x18\x01\x12$\n\x1aMessageType_EntropyRequest\x10#\x1a\x04\x98\xb5\x18\x01\x12 \n\x16MessageType_EntropyAck\x10$\x1a\x04\x90\xb5\x18\x01\x12!\n\x17MessageType_SignMessage\x10&\x1a\x04\x90\xb5\x18\x01\x12#\n\x19MessageType_VerifyMessage\x10\'\x1a\x04\x90\xb5\x18\x01\x12&\n\x1cMessageType_MessageSignature\x10(\x1a\x04\x98\xb5\x18\x01\x12\'\n\x1dMessageType_PassphraseRequest\x10)\x1a\x04\x98\xb5\x18\x01\x12\'\n\x19MessageType_PassphraseAck\x10*\x1a\x08\x90\xb5\x18\x01\xb0\xb5\x18\x01\x12$\n\x1aMessageType_EstimateTxSize\x10+\x1a\x04\x90\xb5\x18\x01\x12\x1c\n\x12MessageType_TxSize\x10,\x1a\x04\x98\xb5\x18\x01\x12$\n\x1aMessageType_RecoveryDevice\x10-\x1a\x04\x90\xb5\x18\x01\x12!\n\x17MessageType_WordRequest\x10.\x1a\x04\x98\xb5\x18\x01\x12\x1d\n\x13MessageType_WordAck\x10/\x1a\x04\x90\xb5\x18\x01\x12&\n\x1cMessageType_CipheredKeyValue\x10\x30\x1a\x04\x98\xb5\x18\x01\x12&\n\x1aMessageType_EncryptMessage\x10\x31\x1a\x06\x08\x01\x90\xb5\x18\x01\x12(\n\x1cMessageType_EncryptedMessage\x10\x32\x1a\x06\x08\x01\x98\xb5\x18\x01\x12&\n\x1aMessageType_DecryptMessage\x10\x33\x1a\x06\x08\x01\x90\xb5\x18\x01\x12(\n\x1cMessageType_DecryptedMessage\x10\x34\x1a\x06\x08\x01\x98\xb5\x18\x01\x12\"\n\x18MessageType_SignIdentity\x10\x35\x1a\x04\x90\xb5\x18\x01\x12$\n\x1aMessageType_SignedIdentity\x10\x36\x1a\x04\x98\xb5\x18\x01\x12!\n\x17MessageType_GetFeatures\x10\x37\x1a\x04\x90\xb5\x18\x01\x12(\n\x1eMessageType_EthereumGetAddress\x10\x38\x1a\x04\x90\xb5\x18\x01\x12%\n\x1bMessageType_EthereumAddress\x10\x39\x1a\x04\x98\xb5\x18\x01\x12$\n\x1aMessageType_EthereumSignTx\x10:\x1a\x04\x90\xb5\x18\x01\x12\'\n\x1dMessageType_EthereumTxRequest\x10;\x1a\x04\x98\xb5\x18\x01\x12#\n\x19MessageType_EthereumTxAck\x10<\x1a\x04\x90\xb5\x18\x01\x12\'\n\x1dMessageType_GetECDHSessionKey\x10=\x1a\x04\x90\xb5\x18\x01\x12$\n\x1aMessageType_ECDHSessionKey\x10>\x1a\x04\x98\xb5\x18\x01\x12#\n\x19MessageType_SetU2FCounter\x10?\x1a\x04\x90\xb5\x18\x01\x12+\n\x1dMessageType_DebugLinkDecision\x10\x64\x1a\x08\xa0\xb5\x18\x01\xb0\xb5\x18\x01\x12\'\n\x1dMessageType_DebugLinkGetState\x10\x65\x1a\x04\xa0\xb5\x18\x01\x12$\n\x1aMessageType_DebugLinkState\x10\x66\x1a\x04\xa8\xb5\x18\x01\x12#\n\x19MessageType_DebugLinkStop\x10g\x1a\x04\xa0\xb5\x18\x01\x12\"\n\x18MessageType_DebugLinkLog\x10h\x1a\x04\xa8\xb5\x18\x01\x12)\n\x1fMessageType_DebugLinkMemoryRead\x10n\x1a\x04\xa0\xb5\x18\x01\x12%\n\x1bMessageType_DebugLinkMemory\x10o\x1a\x04\xa8\xb5\x18\x01\x12*\n MessageType_DebugLinkMemoryWrite\x10p\x1a\x04\xa0\xb5\x18\x01\x12)\n\x1fMessageType_DebugLinkFlashErase\x10q\x1a\x04\xa0\xb5\x18\x01\x42\x30\n\x1f\x63om.satoshilabs.trezor.protobufB\rTrezorMessage') , dependencies=[types__pb2.DESCRIPTOR,]) @@ -308,8 +308,8 @@ _MESSAGETYPE = _descriptor.EnumDescriptor( ], containing_type=None, options=None, - serialized_start=5081, - serialized_end=7602, + serialized_start=5103, + serialized_end=7624, ) _sym_db.RegisterEnumDescriptor(_MESSAGETYPE) @@ -566,6 +566,13 @@ _FEATURES = _descriptor.Descriptor( message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, options=None), + _descriptor.FieldDescriptor( + name='needs_backup', full_name='Features.needs_backup', index=18, + number=19, type=8, cpp_type=7, label=1, + has_default_value=False, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), ], extensions=[ ], @@ -579,7 +586,7 @@ _FEATURES = _descriptor.Descriptor( oneofs=[ ], serialized_start=61, - serialized_end=469, + serialized_end=491, ) @@ -602,8 +609,8 @@ _CLEARSESSION = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=471, - serialized_end=485, + serialized_start=493, + serialized_end=507, ) @@ -654,8 +661,8 @@ _APPLYSETTINGS = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=487, - serialized_end=579, + serialized_start=509, + serialized_end=601, ) @@ -685,8 +692,8 @@ _CHANGEPIN = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=581, - serialized_end=608, + serialized_start=603, + serialized_end=630, ) @@ -737,8 +744,8 @@ _PING = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=610, - serialized_end=715, + serialized_start=632, + serialized_end=737, ) @@ -768,8 +775,8 @@ _SUCCESS = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=717, - serialized_end=743, + serialized_start=739, + serialized_end=765, ) @@ -806,8 +813,8 @@ _FAILURE = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=745, - serialized_end=799, + serialized_start=767, + serialized_end=821, ) @@ -844,8 +851,8 @@ _BUTTONREQUEST = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=801, - serialized_end=864, + serialized_start=823, + serialized_end=886, ) @@ -868,8 +875,8 @@ _BUTTONACK = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=866, - serialized_end=877, + serialized_start=888, + serialized_end=899, ) @@ -899,8 +906,8 @@ _PINMATRIXREQUEST = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=879, - serialized_end=934, + serialized_start=901, + serialized_end=956, ) @@ -930,8 +937,8 @@ _PINMATRIXACK = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=936, - serialized_end=963, + serialized_start=958, + serialized_end=985, ) @@ -954,8 +961,8 @@ _CANCEL = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=965, - serialized_end=973, + serialized_start=987, + serialized_end=995, ) @@ -978,8 +985,8 @@ _PASSPHRASEREQUEST = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=975, - serialized_end=994, + serialized_start=997, + serialized_end=1016, ) @@ -1009,8 +1016,8 @@ _PASSPHRASEACK = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=996, - serialized_end=1031, + serialized_start=1018, + serialized_end=1053, ) @@ -1040,8 +1047,8 @@ _GETENTROPY = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=1033, - serialized_end=1059, + serialized_start=1055, + serialized_end=1081, ) @@ -1071,8 +1078,8 @@ _ENTROPY = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=1061, - serialized_end=1087, + serialized_start=1083, + serialized_end=1109, ) @@ -1123,8 +1130,8 @@ _GETPUBLICKEY = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=1089, - serialized_end=1198, + serialized_start=1111, + serialized_end=1220, ) @@ -1161,8 +1168,8 @@ _PUBLICKEY = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=1200, - serialized_end=1252, + serialized_start=1222, + serialized_end=1274, ) @@ -1220,8 +1227,8 @@ _GETADDRESS = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=1255, - serialized_end=1434, + serialized_start=1277, + serialized_end=1456, ) @@ -1258,8 +1265,8 @@ _ETHEREUMGETADDRESS = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=1436, - serialized_end=1497, + serialized_start=1458, + serialized_end=1519, ) @@ -1289,8 +1296,8 @@ _ADDRESS = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=1499, - serialized_end=1525, + serialized_start=1521, + serialized_end=1547, ) @@ -1320,8 +1327,8 @@ _ETHEREUMADDRESS = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=1527, - serialized_end=1561, + serialized_start=1549, + serialized_end=1583, ) @@ -1344,8 +1351,8 @@ _WIPEDEVICE = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=1563, - serialized_end=1575, + serialized_start=1585, + serialized_end=1597, ) @@ -1424,8 +1431,8 @@ _LOADDEVICE = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=1578, - serialized_end=1765, + serialized_start=1600, + serialized_end=1787, ) @@ -1504,8 +1511,8 @@ _RESETDEVICE = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=1768, - serialized_end=1967, + serialized_start=1790, + serialized_end=1989, ) @@ -1528,8 +1535,8 @@ _BACKUPDEVICE = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=1969, - serialized_end=1983, + serialized_start=1991, + serialized_end=2005, ) @@ -1552,8 +1559,8 @@ _ENTROPYREQUEST = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=1985, - serialized_end=2001, + serialized_start=2007, + serialized_end=2023, ) @@ -1583,8 +1590,8 @@ _ENTROPYACK = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=2003, - serialized_end=2032, + serialized_start=2025, + serialized_end=2054, ) @@ -1670,8 +1677,8 @@ _RECOVERYDEVICE = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=2035, - serialized_end=2246, + serialized_start=2057, + serialized_end=2268, ) @@ -1701,8 +1708,8 @@ _WORDREQUEST = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=2248, - serialized_end=2293, + serialized_start=2270, + serialized_end=2315, ) @@ -1732,8 +1739,8 @@ _WORDACK = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=2295, - serialized_end=2318, + serialized_start=2317, + serialized_end=2340, ) @@ -1777,8 +1784,8 @@ _SIGNMESSAGE = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=2320, - serialized_end=2397, + serialized_start=2342, + serialized_end=2419, ) @@ -1829,8 +1836,8 @@ _VERIFYMESSAGE = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=2399, - serialized_end=2495, + serialized_start=2421, + serialized_end=2517, ) @@ -1867,8 +1874,8 @@ _MESSAGESIGNATURE = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=2497, - serialized_end=2551, + serialized_start=2519, + serialized_end=2573, ) @@ -1926,8 +1933,8 @@ _ENCRYPTMESSAGE = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=2553, - serialized_end=2671, + serialized_start=2575, + serialized_end=2693, ) @@ -1971,8 +1978,8 @@ _ENCRYPTEDMESSAGE = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=2673, - serialized_end=2737, + serialized_start=2695, + serialized_end=2759, ) @@ -2023,8 +2030,8 @@ _DECRYPTMESSAGE = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=2739, - serialized_end=2820, + serialized_start=2761, + serialized_end=2842, ) @@ -2061,8 +2068,8 @@ _DECRYPTEDMESSAGE = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=2822, - serialized_end=2874, + serialized_start=2844, + serialized_end=2896, ) @@ -2134,8 +2141,8 @@ _CIPHERKEYVALUE = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=2877, - serialized_end=3017, + serialized_start=2899, + serialized_end=3039, ) @@ -2165,8 +2172,8 @@ _CIPHEREDKEYVALUE = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=3019, - serialized_end=3052, + serialized_start=3041, + serialized_end=3074, ) @@ -2210,8 +2217,8 @@ _ESTIMATETXSIZE = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=3054, - serialized_end=3143, + serialized_start=3076, + serialized_end=3165, ) @@ -2241,8 +2248,8 @@ _TXSIZE = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=3145, - serialized_end=3170, + serialized_start=3167, + serialized_end=3192, ) @@ -2300,8 +2307,8 @@ _SIGNTX = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=3172, - serialized_end=3295, + serialized_start=3194, + serialized_end=3317, ) @@ -2366,8 +2373,8 @@ _SIMPLESIGNTX = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=3298, - serialized_end=3484, + serialized_start=3320, + serialized_end=3506, ) @@ -2411,8 +2418,8 @@ _TXREQUEST = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=3487, - serialized_end=3620, + serialized_start=3509, + serialized_end=3642, ) @@ -2442,8 +2449,8 @@ _TXACK = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=3622, - serialized_end=3659, + serialized_start=3644, + serialized_end=3681, ) @@ -2529,8 +2536,8 @@ _ETHEREUMSIGNTX = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=3662, - serialized_end=3844, + serialized_start=3684, + serialized_end=3866, ) @@ -2581,8 +2588,8 @@ _ETHEREUMTXREQUEST = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=3846, - serialized_end=3949, + serialized_start=3868, + serialized_end=3971, ) @@ -2612,8 +2619,8 @@ _ETHEREUMTXACK = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=3951, - serialized_end=3986, + serialized_start=3973, + serialized_end=4008, ) @@ -2664,8 +2671,8 @@ _SIGNIDENTITY = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=3988, - serialized_end=4113, + serialized_start=4010, + serialized_end=4135, ) @@ -2709,8 +2716,8 @@ _SIGNEDIDENTITY = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=4115, - serialized_end=4187, + serialized_start=4137, + serialized_end=4209, ) @@ -2754,8 +2761,8 @@ _GETECDHSESSIONKEY = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=4189, - serialized_end=4292, + serialized_start=4211, + serialized_end=4314, ) @@ -2785,8 +2792,8 @@ _ECDHSESSIONKEY = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=4294, - serialized_end=4331, + serialized_start=4316, + serialized_end=4353, ) @@ -2816,8 +2823,8 @@ _SETU2FCOUNTER = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=4333, - serialized_end=4369, + serialized_start=4355, + serialized_end=4391, ) @@ -2847,8 +2854,8 @@ _FIRMWAREERASE = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=4371, - serialized_end=4402, + serialized_start=4393, + serialized_end=4424, ) @@ -2885,8 +2892,8 @@ _FIRMWAREREQUEST = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=4404, - serialized_end=4453, + serialized_start=4426, + serialized_end=4475, ) @@ -2923,8 +2930,8 @@ _FIRMWAREUPLOAD = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=4455, - serialized_end=4502, + serialized_start=4477, + serialized_end=4524, ) @@ -2954,8 +2961,8 @@ _DEBUGLINKDECISION = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=4504, - serialized_end=4539, + serialized_start=4526, + serialized_end=4561, ) @@ -2978,8 +2985,8 @@ _DEBUGLINKGETSTATE = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=4541, - serialized_end=4560, + serialized_start=4563, + serialized_end=4582, ) @@ -3072,8 +3079,8 @@ _DEBUGLINKSTATE = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=4563, - serialized_end=4798, + serialized_start=4585, + serialized_end=4820, ) @@ -3096,8 +3103,8 @@ _DEBUGLINKSTOP = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=4800, - serialized_end=4815, + serialized_start=4822, + serialized_end=4837, ) @@ -3141,8 +3148,8 @@ _DEBUGLINKLOG = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=4817, - serialized_end=4876, + serialized_start=4839, + serialized_end=4898, ) @@ -3179,8 +3186,8 @@ _DEBUGLINKMEMORYREAD = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=4878, - serialized_end=4932, + serialized_start=4900, + serialized_end=4954, ) @@ -3210,8 +3217,8 @@ _DEBUGLINKMEMORY = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=4934, - serialized_end=4967, + serialized_start=4956, + serialized_end=4989, ) @@ -3255,8 +3262,8 @@ _DEBUGLINKMEMORYWRITE = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=4969, - serialized_end=5039, + serialized_start=4991, + serialized_end=5061, ) @@ -3286,8 +3293,8 @@ _DEBUGLINKFLASHERASE = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=5041, - serialized_end=5078, + serialized_start=5063, + serialized_end=5100, ) _FEATURES.fields_by_name['coins'].message_type = types__pb2._COINTYPE diff --git a/trezorlib/types_pb2.py b/trezorlib/types_pb2.py index b70030c86f..77202af7ca 100644 --- a/trezorlib/types_pb2.py +++ b/trezorlib/types_pb2.py @@ -1,7 +1,7 @@ # Generated by the protocol buffer compiler. DO NOT EDIT! # source: types.proto # libprotoc 3.3.0 -# trezor-common e04ecf819bf5e00413408b735f446431e28428e1 +# trezor-common 654ee5d8ec575331b6be15343617a8fcfdd66cdd import sys _b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))