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

add Storage to reset_device, stub session support in config

This commit is contained in:
Jan Pochyla 2016-09-26 12:27:14 +02:00 committed by Pavol Rusnak
parent d1ff96af04
commit dd713fe6e2
No known key found for this signature in database
GPG Key ID: 91F3B339B9A02A3D
2 changed files with 67 additions and 44 deletions

View File

@ -1,4 +1,4 @@
from trezor import wire, ui
from trezor import wire, ui, config
from trezor.workflows.request_pin import request_new_pin
from trezor.messages.wire_types import EntropyAck
from trezor.ui.button import Button, CONFIRM_BUTTON, CONFIRM_BUTTON_ACTIVE
@ -7,20 +7,49 @@ from trezor.crypto import hashlib, random, bip39
from trezor.utils import unimport, chunks
APP_MANAGEMENT = const(1)
CFG_STORAGE = const(1)
@unimport
async def layout_reset_device(message, session_id):
from trezor.messages.Success import Success
from trezor.messages.Storage import Storage
mnemonic = await generate_mnemonic(
message.strength, message.display_random, session_id)
await show_mnemonic(mnemonic)
if message.pin_protection:
pin = await request_new_pin(session_id)
else:
pin = ''
storage = Storage(
version=1, pin=pin, mnemonic=mnemonic,
passphrase_protection=message.passphrase_protection,
language=message.language, label=message.label)
config.set(session_id, APP_MANAGEMENT, CFG_STORAGE, await storage.dumps())
return Success()
@unimport
async def generate_mnemonic(strength, display_random, session_id):
from trezor.messages.EntropyRequest import EntropyRequest
from trezor.messages.FailureType import Other
if strength not in (128, 192, 256):
raise wire.FailureError(Other, 'Invalid seed strength')
raise wire.FailureError(
Other, 'Invalid strength (has to be 128, 192 or 256 bits)')
# if display_random:
# raise wire.FailureError(Other, 'Entropy display not implemented')
ack = await wire.reply_message(session_id,
EntropyRequest(),
EntropyAck)
ack = await wire.reply_message(
session_id, EntropyRequest(), EntropyAck)
strength_bytes = strength // 8
ctx = hashlib.sha256()
@ -31,28 +60,6 @@ async def generate_mnemonic(strength, display_random, session_id):
return bip39.from_data(entropy)
async def show_mnemonic_page(page, page_count, mnemonic):
ui.clear()
ui.display.text(10, 30, 'Write down your seed',
ui.BOLD, ui.LIGHT_GREEN, ui.BLACK)
render_scrollbar(page, page_count)
for pi, (wi, word) in enumerate(mnemonic[page]):
top = pi * 30 + 74
pos = wi + 1
ui.display.text_right(40, top, '%d.' % pos,
ui.BOLD, ui.LIGHT_GREEN, ui.BLACK)
ui.display.text(45, top, '%s' % word,
ui.BOLD, ui.WHITE, ui.BLACK)
if page + 1 == page_count:
await Button((0, 240 - 48, 240, 48), 'Finish',
normal_style=CONFIRM_BUTTON,
active_style=CONFIRM_BUTTON_ACTIVE)
else:
await animate_swipe()
async def show_mnemonic(mnemonic):
first_page = const(0)
words_per_page = const(4)
@ -61,18 +68,24 @@ async def show_mnemonic(mnemonic):
await paginate(show_mnemonic_page, len(pages), first_page, pages)
@unimport
async def layout_reset_device(message, session_id):
from trezor.messages.Success import Success
async def show_mnemonic_page(page, page_count, mnemonic):
ui.clear()
ui.display.text(
10, 30, 'Write down your seed', ui.BOLD, ui.LIGHT_GREEN, ui.BLACK)
render_scrollbar(page, page_count)
mnemonic = await generate_mnemonic(message.strength,
message.display_random,
session_id)
# await show_mnemonic(mnemonic)
for pi, (wi, word) in enumerate(mnemonic[page]):
top = pi * 30 + 74
pos = wi + 1
ui.display.text_right(
40, top, '%d.' % pos, ui.BOLD, ui.LIGHT_GREEN, ui.BLACK)
ui.display.text(
45, top, '%s' % word, ui.BOLD, ui.WHITE, ui.BLACK)
if message.pin_protection:
pin = await request_new_pin(session_id)
if page + 1 == page_count:
await Button(
(0, 240 - 48, 240, 48), 'Finish',
normal_style=CONFIRM_BUTTON,
active_style=CONFIRM_BUTTON_ACTIVE)
else:
pin = None
return Success()
await animate_swipe()

View File

@ -10,6 +10,7 @@ if sys.platform in ['trezor', 'pyboard']: # stmhal
else:
_file = '/var/tmp/trezor.config'
def _load():
try:
with open(_file, 'rb') as f:
@ -23,6 +24,7 @@ def _load():
except OSError:
pass
def _save():
with open(_file, 'wb') as f:
for k, v in _mock.items():
@ -31,10 +33,18 @@ def _save():
_load()
def get(app, key, default=None):
return _mock.get((app << 8) | key, default)
def set(app, key, value):
_mock[(app << 8) | key] = value
def get(session_id, app_id, key, default=None):
# TODO: session_id
return _mock.get((app_id << 8) | key, default)
def set(session_id, app_id, key, value):
# TODO: session_id
_mock[(app_id << 8) | key] = value
_save()
return True
def commit(session_id):
pass