1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2024-11-22 15:38:11 +00:00

python/debuglink: make pin sequences configurable

This commit is contained in:
matejcik 2020-02-08 11:21:37 +01:00
parent f947fe97cc
commit 94b85efba1
2 changed files with 12 additions and 19 deletions

View File

@ -221,8 +221,12 @@ class DebugUI:
self.input_flow = self.INPUT_FLOW_DONE
def get_pin(self, code=None):
if self.pin:
return self.pin
if isinstance(self.pin, str):
return self.debuglink.encode_pin(self.pin)
elif self.pin == []:
raise AssertionError("PIN sequence ended prematurely")
elif self.pin:
return self.debuglink.encode_pin(self.pin.pop(0))
else:
return self.debuglink.read_pin_encoded()
@ -261,9 +265,6 @@ class TrezorClientDebugLink(TrezorClient):
self.filters = {}
# Always press Yes and provide correct pin
self.setup_debuglink(True, True)
# Do not expect any specific response from device
self.expected_responses = None
self.current_response = None
@ -342,12 +343,11 @@ class TrezorClientDebugLink(TrezorClient):
self.expected_responses = expected
self.current_response = 0
def setup_debuglink(self, button, pin_correct):
# self.button = button # True -> YES button, False -> NO button
if pin_correct:
self.ui.pin = None
def set_pin(self, pin):
if isinstance(pin, str):
self.ui.pin = pin
else:
self.ui.pin = "444222"
self.ui.pin = list(pin)
def set_passphrase(self, passphrase):
self.ui.passphrase = Mnemonic.normalize_string(passphrase)

View File

@ -41,25 +41,18 @@ class TestProtectCall:
def test_pin(self, client):
with client:
assert client.debug.read_pin()[0] == "1234"
client.setup_debuglink(button=True, pin_correct=True)
client.set_expected_responses([proto.PinMatrixRequest(), proto.Address()])
self._some_protected_call(client)
@pytest.mark.setup_client(pin="1234")
def test_incorrect_pin(self, client):
client.setup_debuglink(button=True, pin_correct=False)
with pytest.raises(PinException):
self._some_protected_call(client)
@pytest.mark.setup_client(pin="1234")
def test_cancelled_pin(self, client):
client.setup_debuglink(button=True, pin_correct=False) # PIN cancel
client.set_pin("5678")
with pytest.raises(PinException):
self._some_protected_call(client)
@pytest.mark.setup_client(pin="1234", passphrase=True)
def test_exponential_backoff_with_reboot(self, client):
client.setup_debuglink(button=True, pin_correct=False)
client.set_pin("5678")
def test_backoff(attempts, start):
if attempts <= 1: