1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2024-12-16 03:18:09 +00:00

Merge pull request #602 from trezor/andrewkozlik/change-pin-only-when-initialized

core, legacy: Don't allow change_pin if device is not initialized.
This commit is contained in:
Andrew Kozlik 2019-10-04 16:02:03 +02:00 committed by GitHub
commit 9ccde8d853
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 14 additions and 12 deletions

View File

@ -39,7 +39,7 @@ async def _get_passphrase(ctx: wire.Context) -> bytes:
async def get_keychain(ctx: wire.Context) -> Keychain:
if not storage.is_initialized():
raise wire.ProcessError("Device is not initialized")
raise wire.NotInitialized("Device is not initialized")
if mnemonic.is_bip39():
# derive the root node from mnemonic and passphrase

View File

@ -108,7 +108,7 @@ class Keychain:
async def get_keychain(ctx: wire.Context, namespaces: list) -> Keychain:
if not storage.is_initialized():
raise wire.ProcessError("Device is not initialized")
raise wire.NotInitialized("Device is not initialized")
seed = cache.get_seed()
if seed is None:
passphrase = cache.get_passphrase()

View File

@ -7,7 +7,7 @@ from apps.management.reset_device import backup_seed, layout
async def backup_device(ctx, msg):
if not storage.is_initialized():
raise wire.ProcessError("Device is not initialized")
raise wire.NotInitialized("Device is not initialized")
if not storage.device.needs_backup():
raise wire.ProcessError("Seed already backed up")

View File

@ -10,12 +10,16 @@ from apps.common.request_pin import (
request_pin_confirm,
show_pin_invalid,
)
from apps.common.storage import is_initialized
if False:
from trezor.messages.ChangePin import ChangePin
async def change_pin(ctx: wire.Context, msg: ChangePin) -> Success:
if not is_initialized():
raise wire.NotInitialized("Device is not initialized")
# confirm that user wants to change the pin
await require_confirm_change_pin(ctx, msg)

View File

@ -60,7 +60,7 @@ def _check_state(msg: RecoveryDevice) -> None:
if not msg.dry_run and storage.is_initialized():
raise wire.UnexpectedMessage("Already initialized")
if msg.dry_run and not storage.is_initialized():
raise wire.UnexpectedMessage("Device is not initialized")
raise wire.NotInitialized("Device is not initialized")
if storage.recovery.is_in_progress():
raise RuntimeError(

View File

@ -27,11 +27,11 @@ async def reset_device(ctx: wire.Context, msg: ResetDevice) -> Success:
# make sure user knows they're setting up a new wallet
await layout.show_reset_device_warning(ctx, msg.backup_type)
# request new PIN
# request and set new PIN
if msg.pin_protection:
newpin = await request_pin_confirm(ctx)
else:
newpin = ""
if not config.change_pin(pin_to_int(""), pin_to_int(newpin), None, None):
raise wire.ProcessError("Failed to set PIN")
# generate and display internal entropy
int_entropy = random.bytes(32)
@ -70,10 +70,6 @@ async def reset_device(ctx: wire.Context, msg: ResetDevice) -> Success:
if perform_backup:
await backup_seed(ctx, msg.backup_type, secret)
# write PIN into storage
if not config.change_pin(pin_to_int(""), pin_to_int(newpin), None, None):
raise wire.ProcessError("Could not change PIN")
# write settings and master secret into storage
storage.device.load_settings(
label=msg.label, use_passphrase=msg.passphrase_protection

View File

@ -30,7 +30,7 @@ if False:
async def sd_protect(ctx: wire.Context, msg: SdProtect) -> Success:
if not is_initialized():
raise wire.ProcessError("Device is not initialized")
raise wire.NotInitialized("Device is not initialized")
if msg.operation == SdProtectOperationType.ENABLE:
return await sd_protect_enable(ctx, msg)

View File

@ -136,6 +136,8 @@ void fsm_msgPing(const Ping *msg) {
}
void fsm_msgChangePin(const ChangePin *msg) {
CHECK_INITIALIZED
bool removal = msg->has_remove && msg->remove;
if (removal) {
if (config_hasPin()) {