mirror of
https://github.com/trezor/trezor-firmware.git
synced 2025-07-04 13:52:35 +00:00
Implemented ButtonRequestType
This commit is contained in:
parent
b81c5be4c3
commit
39f4ade40b
@ -147,7 +147,11 @@ class TrezorClient(object):
|
|||||||
self.debug_button = button
|
self.debug_button = button
|
||||||
self.debug_pin = pin_correct
|
self.debug_pin = pin_correct
|
||||||
|
|
||||||
def call(self, msg, expected = None):
|
def _get_buttonrequest_value(self, code):
|
||||||
|
return [ k for k, v in types.ButtonRequestType.items() if v == code][0]
|
||||||
|
|
||||||
|
def call(self, msg, expected=None, expected_buttonrequests=None):
|
||||||
|
# TODO split this into normal and debug mode
|
||||||
if self.debug:
|
if self.debug:
|
||||||
print '----------------------'
|
print '----------------------'
|
||||||
print "Sending", self._pprint(msg)
|
print "Sending", self._pprint(msg)
|
||||||
@ -159,6 +163,18 @@ class TrezorClient(object):
|
|||||||
resp = self.transport.read_blocking()
|
resp = self.transport.read_blocking()
|
||||||
|
|
||||||
if isinstance(resp, proto.ButtonRequest):
|
if isinstance(resp, proto.ButtonRequest):
|
||||||
|
if expected_buttonrequests != None:
|
||||||
|
try:
|
||||||
|
exp = expected_buttonrequests.pop(0)
|
||||||
|
if resp.code != exp:
|
||||||
|
raise CallException("Expected %s, got %s" % \
|
||||||
|
(self._get_buttonrequest_value(exp),
|
||||||
|
self._get_buttonrequest_value(resp.code)))
|
||||||
|
except IndexError:
|
||||||
|
raise CallException("Got %s, but no ButtonRequest has been expected" % \
|
||||||
|
self._get_buttonrequest_value(resp.code))
|
||||||
|
|
||||||
|
print "ButtonRequest code:", self._get_buttonrequest_value(resp.code)
|
||||||
if self.debuglink and self.debug_button:
|
if self.debuglink and self.debug_button:
|
||||||
print "Pressing button", self.debug_button
|
print "Pressing button", self.debug_button
|
||||||
self.debuglink.press_button(self.debug_button)
|
self.debuglink.press_button(self.debug_button)
|
||||||
@ -179,12 +195,12 @@ class TrezorClient(object):
|
|||||||
pin = self.pin_func("PIN required: ", resp.message)
|
pin = self.pin_func("PIN required: ", resp.message)
|
||||||
msg2 = proto.PinMatrixAck(pin=pin)
|
msg2 = proto.PinMatrixAck(pin=pin)
|
||||||
|
|
||||||
return self.call(msg2)
|
return self.call(msg2, expected=expected, expected_buttonrequests=expected_buttonrequests)
|
||||||
|
|
||||||
if isinstance(resp, proto.PassphraseRequest):
|
if isinstance(resp, proto.PassphraseRequest):
|
||||||
passphrase = self.passphrase_func("Passphrase required: ")
|
passphrase = self.passphrase_func("Passphrase required: ")
|
||||||
msg2 = proto.PassphraseAck(passphrase=passphrase)
|
msg2 = proto.PassphraseAck(passphrase=passphrase)
|
||||||
return self.call(msg2)
|
return self.call(msg2, expected=expected, expected_buttonrequests=expected_buttonrequests)
|
||||||
|
|
||||||
finally:
|
finally:
|
||||||
self.transport.session_end()
|
self.transport.session_end()
|
||||||
|
Loading…
Reference in New Issue
Block a user