def test_passphrase(self): # Enable passphrase self.do_command(self.dev_args + ['togglepassphrase']) # A passphrase will need to be sent result = self.do_command(self.dev_args + ['enumerate']) for dev in result: if dev['type'] == 'keepkey' and dev[ 'path'] == 'udp:127.0.0.1:21324': self.assertTrue(dev['needs_passphrase_sent']) result = self.do_command(self.dev_args + ['-p', 'pass', 'enumerate']) for dev in result: if dev['type'] == 'keepkey' and dev[ 'path'] == 'udp:127.0.0.1:21324': self.assertFalse(dev['needs_passphrase_sent']) fpr = dev['fingerprint'] # A different passphrase will change the fingerprint result = self.do_command(self.dev_args + ['-p', 'pass2', 'enumerate']) for dev in result: if dev['type'] == 'keepkey' and dev[ 'path'] == 'udp:127.0.0.1:21324': self.assertFalse(dev['needs_passphrase_sent']) self.assertNotEqual(dev['fingerprint'], fpr) # Clearing the session and starting a new one with a new passphrase should change the passphrase self.client.call(messages.LockDevice()) result = self.do_command(self.dev_args + ['-p', 'pass3', 'enumerate']) for dev in result: if dev['type'] == 'keepkey' and dev[ 'path'] == 'udp:127.0.0.1:21324': self.assertFalse(dev['needs_passphrase_sent']) self.assertNotEqual(dev['fingerprint'], fpr) # Disable passphrase self.do_command(self.dev_args + ['togglepassphrase']) # There's no passphrase result = self.do_command(self.dev_args + ['enumerate']) for dev in result: if dev['type'] == 'keepkey' and dev[ 'path'] == 'udp:127.0.0.1:21324': self.assertFalse(dev['needs_passphrase_sent']) self.assertEquals(dev['fingerprint'], '95d8f670') # Setting a passphrase won't change the fingerprint result = self.do_command(self.dev_args + ['-p', 'pass', 'enumerate']) for dev in result: if dev['type'] == 'keepkey' and dev[ 'path'] == 'udp:127.0.0.1:21324': self.assertFalse(dev['needs_passphrase_sent']) self.assertEquals(dev['fingerprint'], '95d8f670')
def test_pins(self): # There's no PIN result = self.do_command(self.dev_args + ['--debug', 'promptpin']) self.assertEqual(result['error'], 'This device does not need a PIN') self.assertEqual(result['code'], -11) result = self.do_command(self.dev_args + ['sendpin', '1234']) self.assertEqual(result['error'], 'This device does not need a PIN') self.assertEqual(result['code'], -11) result = self.do_command(self.dev_args + ['enumerate']) for dev in result: if dev['type'] == 'trezor' and dev['path'] == 'udp:127.0.0.1:21324': self.assertFalse(dev['needs_pin_sent']) # Set a PIN device.wipe(self.client) load_device_by_mnemonic( client=self.client, mnemonic= 'alcohol woman abuse must during monitor noble actual mixed trade anger aisle', pin='1234', passphrase_protection=False, label='test') self.client.call(messages.LockDevice()) result = self.do_command(self.dev_args + ['enumerate']) for dev in result: if dev['type'] == 'trezor' and dev['path'] == 'udp:127.0.0.1:21324': self.assertTrue(dev['needs_pin_sent']) result = self.do_command(self.dev_args + ['promptpin']) self.assertTrue(result['success']) # Invalid pins result = self.do_command(self.dev_args + ['sendpin', 'notnum']) self.assertEqual(result['error'], 'Non-numeric PIN provided') self.assertEqual(result['code'], -7) result = self.do_command(self.dev_args + ['sendpin', '00000']) self.assertFalse(result["success"]) # Make sure we get a needs pin message result = self.do_command(self.dev_args + ['getxpub', 'm/0h']) self.assertEqual(result['code'], -12) self.assertEqual( result['error'], 'Keepkey is locked. Unlock by using \'promptpin\' and then \'sendpin\'.' ) # Prompt pin self.client.call(messages.LockDevice()) result = self.do_command(self.dev_args + ['promptpin']) self.assertTrue(result['success']) # Send the PIN self.client.open() pin = self.client.debug.encode_pin('1234') result = self.do_command(self.dev_args + ['sendpin', pin]) self.assertTrue(result['success']) result = self.do_command(self.dev_args + ['enumerate']) for dev in result: if dev['type'] == 'trezor' and dev['path'] == 'udp:127.0.0.1:21324': self.assertFalse(dev['needs_pin_sent']) # Sending PIN after unlock result = self.do_command(self.dev_args + ['promptpin']) self.assertEqual(result['error'], 'The PIN has already been sent to this device') self.assertEqual(result['code'], -11) result = self.do_command(self.dev_args + ['sendpin', '1234']) self.assertEqual(result['error'], 'The PIN has already been sent to this device') self.assertEqual(result['code'], -11)