1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2024-12-23 14:58:09 +00:00

core/sd_salt: ensure ProcessErrors are propagated properly

This commit is contained in:
matejcik 2019-11-11 13:58:52 +01:00
parent 8225e5d8b2
commit dee47a06f2
3 changed files with 9 additions and 6 deletions

View File

@ -7,7 +7,7 @@ from trezor.ui.pin import CANCELLED, PinDialog
from trezor.ui.popup import Popup from trezor.ui.popup import Popup
from trezor.ui.text import Text from trezor.ui.text import Text
from apps.common.sd_salt import request_sd_salt from apps.common.sd_salt import SdProtectCancelled, request_sd_salt
if False: if False:
from typing import Any, Optional, Tuple from typing import Any, Optional, Tuple
@ -93,7 +93,10 @@ async def request_pin_and_sd_salt(
async def verify_user_pin( async def verify_user_pin(
prompt: str = "Enter your PIN", allow_cancel: bool = True, retry: bool = True prompt: str = "Enter your PIN", allow_cancel: bool = True, retry: bool = True
) -> None: ) -> None:
try:
salt = await request_sd_salt() salt = await request_sd_salt()
except SdProtectCancelled:
raise PinCancelled
if not config.has_pin() and not config.check_pin(pin_to_int(""), salt): if not config.has_pin() and not config.check_pin(pin_to_int(""), salt):
raise RuntimeError raise RuntimeError

View File

@ -9,7 +9,7 @@ if False:
from typing import Optional from typing import Optional
class SdProtectCancelled(Exception): class SdProtectCancelled(wire.ProcessError):
pass pass
@ -55,7 +55,7 @@ async def ensure_sd_card(ctx: wire.GenericContext) -> None:
sd = io.SDCard() sd = io.SDCard()
while not sd.present(): while not sd.present():
if not await insert_card_dialog(ctx): if not await insert_card_dialog(ctx):
raise SdProtectCancelled raise SdProtectCancelled("SD card required.")
async def request_sd_salt( async def request_sd_salt(
@ -67,7 +67,7 @@ async def request_sd_salt(
return storage.sd_salt.load_sd_salt() return storage.sd_salt.load_sd_salt()
except storage.sd_salt.WrongSdCard: except storage.sd_salt.WrongSdCard:
if not await _wrong_card_dialog(ctx): if not await _wrong_card_dialog(ctx):
raise SdProtectCancelled raise SdProtectCancelled("Wrong SD card.")
except OSError: except OSError:
# Either the SD card did not power on, or the filesystem could not be # Either the SD card did not power on, or the filesystem could not be
# mounted (card is not formatted?), or there is a staged salt file and # mounted (card is not formatted?), or there is a staged salt file and

View File

@ -37,7 +37,7 @@ async def _set_salt(
return storage.sd_salt.set_sd_salt(salt, salt_tag, stage) return storage.sd_salt.set_sd_salt(salt, salt_tag, stage)
except OSError: except OSError:
if not await sd_problem_dialog(ctx): if not await sd_problem_dialog(ctx):
raise raise wire.ProcessError("SD card I/O error.")
async def sd_protect(ctx: wire.Context, msg: SdProtect) -> Success: async def sd_protect(ctx: wire.Context, msg: SdProtect) -> Success: