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

Implementation of ChangePin

This commit is contained in:
slush0 2014-01-31 19:48:19 +01:00
parent e34874b7c1
commit fe0e409e77
5 changed files with 43 additions and 7 deletions

8
cmd.py
View File

@ -107,6 +107,9 @@ class Commands(object):
def set_label(self, args): def set_label(self, args):
return self.client.apply_settings(label=args.label) return self.client.apply_settings(label=args.label)
def change_pin(self, args):
return self.client.change_pin(args.remove)
def load_device(self, args): def load_device(self, args):
if not args.mnemonic and not args.xprv: if not args.mnemonic and not args.xprv:
raise Exception("Please provide mnemonic or xprv") raise Exception("Please provide mnemonic or xprv")
@ -146,6 +149,7 @@ class Commands(object):
get_features.help = 'Retrieve device features and settings' get_features.help = 'Retrieve device features and settings'
get_public_node.help = 'Get public node of given path' get_public_node.help = 'Get public node of given path'
set_label.help = 'Set new wallet label' set_label.help = 'Set new wallet label'
change_pin.help = 'Change new PIN or remove existing'
list_coins.help = 'List all supported coin types by the device' list_coins.help = 'List all supported coin types by the device'
load_device.help = 'Load custom configuration to the device' load_device.help = 'Load custom configuration to the device'
reset_device.help = 'Perform factory reset of the device and generate new seed' reset_device.help = 'Perform factory reset of the device and generate new seed'
@ -176,6 +180,10 @@ class Commands(object):
# (('-c', '--clear'), {'action': 'store_true', 'default': False}) # (('-c', '--clear'), {'action': 'store_true', 'default': False})
) )
change_pin.arguments = (
(('-r', '--remove'), {'action': 'store_true', 'default': False}),
)
load_device.arguments = ( load_device.arguments = (
(('-m', '--mnemonic'), {'type': str, 'nargs': '+'}), (('-m', '--mnemonic'), {'type': str, 'nargs': '+'}),
(('-x', '--xprv'), {'type': str}), (('-x', '--xprv'), {'type': str}),

View File

@ -5,8 +5,8 @@ from trezorlib.transport_pipe import PipeTransport
from trezorlib.transport_hid import HidTransport from trezorlib.transport_hid import HidTransport
from trezorlib.transport_socket import SocketTransportClient from trezorlib.transport_socket import SocketTransportClient
use_real = True use_real = False
use_pipe = False use_pipe = True
if use_real: if use_real:

View File

@ -1,4 +1,25 @@
#!/usr/bin/python #!/usr/bin/python
'''
* ApplySettings workflow, zistit cez Features ci sa zmeny aplikovali
* WipeDevice workflow, zistit cez Features ci to prebehlo
* LoadDevice workflow, zistit cez Features ci to prebehlo
* ResetDevice workflow
- zrejme v sucinnosti s inymi testami
* ButtonRequest/ButtonAck workflow (vyvolat napr. pomocou GetEntropy, myslim ze ten GetEntropy vyzaduje PIN, ale ja by som to dal na button)
* PinMatrixRequest/PinMatrixAck workflow (vyvolat napr. pomocou ChangePin)
* PassphraseRequest/PassphraseAck workflow (vyvolat napr. pomocou GetAddress)
* rozsirit test_sign.tx o viac transakcii (zlozitejsich)
- chceme v tomto release(?)
* SignMessage workflow
* VerifyMessage workflow
* otestovat session handling (tento test bude zrejme failovat na RPi)
'''
''' '''
import sys import sys
sys.path = ['../',] + sys.path sys.path = ['../',] + sys.path

View File

@ -123,6 +123,11 @@ class TrezorClient(object):
return out return out
def change_pin(self, remove=False):
ret = self.call(proto.ChangePin(remove=remove))
self.init_device() # Re-read features
return ret
def _pprint(self, msg): def _pprint(self, msg):
return "<%s>:\n%s" % (msg.__class__.__name__, msg) return "<%s>:\n%s" % (msg.__class__.__name__, msg)

View File

@ -15,6 +15,7 @@ class PinButton(QPushButton):
def _pressed(self): def _pressed(self):
self.password.setText(self.password.text() + str(self.encoded_value)) self.password.setText(self.password.text() + str(self.encoded_value))
print self.encoded_value
self.password.setFocus() self.password.setFocus()
class PinMatrixWidget(QWidget): class PinMatrixWidget(QWidget):
@ -40,11 +41,12 @@ class PinMatrixWidget(QWidget):
grid = QGridLayout() grid = QGridLayout()
grid.setSpacing(0) grid.setSpacing(0)
for x in range(9): for y in range(3)[::-1]:
button = PinButton(self.password, x + 1) for x in range(3):
button.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) button = PinButton(self.password, x + y * 3 + 1)
button.setFocusPolicy(Qt.NoFocus) button.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
grid.addWidget(button, x / 3, x % 3) button.setFocusPolicy(Qt.NoFocus)
grid.addWidget(button, 3 - y, x)
hbox = QHBoxLayout() hbox = QHBoxLayout()
hbox.addWidget(self.password) hbox.addWidget(self.password)