async def verify_user_pin(prompt: str = "Enter your PIN", allow_cancel: bool = True, retry: bool = True) -> None: if config.has_pin(): pin = await request_pin(prompt, config.get_pin_rem(), allow_cancel) config.ensure_not_wipe_code(pin_to_int(pin)) else: pin = "" try: salt = await request_sd_salt() except SdCardUnavailable: raise PinCancelled if config.unlock(pin_to_int(pin), salt): return elif not config.has_pin(): raise RuntimeError while retry: pin = await request_pin("Wrong PIN, enter again", config.get_pin_rem(), allow_cancel) if config.unlock(pin_to_int(pin), salt): return raise PinInvalid
async def request_pin_and_sd_salt( ctx: wire.Context, prompt: str = "Enter your PIN", allow_cancel: bool = True ) -> tuple[str, bytearray | None]: if config.has_pin(): pin = await request_pin(ctx, prompt, config.get_pin_rem(), allow_cancel) config.ensure_not_wipe_code(pin) else: pin = "" salt = await request_sd_salt(ctx) return pin, salt
async def verify_user_pin( ctx: wire.GenericContext = wire.DUMMY_CONTEXT, prompt: str = "Enter your PIN", allow_cancel: bool = True, retry: bool = True, cache_time_ms: int = 0, ) -> None: last_unlock = _get_last_unlock_time() if ( cache_time_ms and last_unlock and utime.ticks_ms() - last_unlock <= cache_time_ms and config.is_unlocked() ): return if config.has_pin(): from trezor.ui.layouts import request_pin_on_device pin = await request_pin_on_device( ctx, prompt, config.get_pin_rem(), allow_cancel ) config.ensure_not_wipe_code(pin) else: pin = "" try: salt = await request_sd_salt(ctx) except SdCardUnavailable: raise wire.PinCancelled("SD salt is unavailable") if config.unlock(pin, salt): _set_last_unlock_time() return elif not config.has_pin(): raise RuntimeError while retry: pin = await request_pin_on_device( ctx, "Wrong PIN, enter again", config.get_pin_rem(), allow_cancel ) if config.unlock(pin, salt): _set_last_unlock_time() return raise wire.PinInvalid