async def request_pin_on_display(ctx: wire.Context, code: int=None) -> str: from trezor.messages.ButtonRequest import ButtonRequest from trezor.messages.ButtonRequestType import ProtectCall from trezor.messages.FailureType import PinCancelled from trezor.messages.wire_types import ButtonAck from trezor.ui.confirm import ConfirmDialog, CONFIRMED from trezor.ui.pin import PinMatrix if __debug__: global matrix _, label = _get_code_and_label(code) await ctx.call(ButtonRequest(code=ProtectCall), ButtonAck) ui.display.clear() matrix = PinMatrix(label) dialog = ConfirmDialog(matrix) pin = matrix.pin matrix = None if await dialog != CONFIRMED: raise wire.FailureError(PinCancelled, 'PIN cancelled') return pin
async def request_pin(code: int = None) -> str: from trezor.ui.confirm import ConfirmDialog, CONFIRMED from trezor.ui.pin import PinMatrix label = _get_label(code) def onchange(): c = dialog.cancel if matrix.pin: c.content = res.load(ui.ICON_CLEAR) else: c.content = res.load(ui.ICON_LOCK) c.taint() c.render() ui.display.clear() matrix = PinMatrix(label, with_zero=True) matrix.onchange = onchange dialog = ConfirmDialog(matrix) dialog.cancel.area = ui.grid(12) dialog.confirm.area = ui.grid(14) matrix.onchange() while True: result = await dialog if result == CONFIRMED: return matrix.pin elif result != CONFIRMED and matrix.pin: matrix.change('') continue else: raise PinCancelled()
async def request_pin_on_client(ctx: wire.Context, code: int = None) -> str: from trezor.messages.FailureType import PinCancelled from trezor.messages.PinMatrixRequest import PinMatrixRequest from trezor.messages.wire_types import PinMatrixAck, Cancel from trezor.ui.pin import PinMatrix if __debug__: global matrix code, label = _get_code_and_label(code) ui.display.clear() matrix = PinMatrix(label) matrix.render() ack = await ctx.call(PinMatrixRequest(type=code), PinMatrixAck, Cancel) digits = matrix.digits matrix = None if ack.MESSAGE_WIRE_TYPE == Cancel: raise wire.FailureError(PinCancelled, 'PIN cancelled') return _decode_pin(ack.pin, digits)
async def request_pin(label=None, attempts_remaining=None, cancellable: bool = True) -> str: def onchange(): c = dialog.cancel if matrix.pin: back = res.load(ui.ICON_BACK) if c.content is not back: c.normal_style = ui.BTN_CLEAR["normal"] c.content = back c.enable() c.taint() else: lock = res.load(ui.ICON_LOCK) if not cancellable and c.content: c.content = "" c.disable() c.taint() elif c.content is not lock: c.normal_style = ui.BTN_CANCEL["normal"] c.content = lock c.enable() c.taint() c.render() if label is None: label = "Enter your PIN" sublabel = None if attempts_remaining: if attempts_remaining == 1: sublabel = "This is your last attempt" else: sublabel = "{} attempts remaining".format(attempts_remaining) matrix = PinMatrix(label, sublabel) matrix.onchange = onchange dialog = ConfirmDialog(matrix) dialog.cancel.area = ui.grid(12) dialog.confirm.area = ui.grid(14) matrix.onchange() while True: if __debug__: result = await loop.spawn(dialog, input_signal) if isinstance(result, str): return result else: result = await dialog if result == CONFIRMED: return matrix.pin elif matrix.pin: # reset matrix.change("") continue else: # cancel raise PinCancelled()
async def request_pin(label=None, cancellable: bool=True) -> str: def onchange(): c = dialog.cancel if matrix.pin: back = res.load(ui.ICON_BACK) if c.content is not back: c.normal_style = ui.BTN_CLEAR['normal'] c.content = back c.enable() c.taint() else: lock = res.load(ui.ICON_LOCK) if not cancellable and c.content: c.content = '' c.disable() c.taint() elif c.content is not lock: c.normal_style = ui.BTN_CANCEL['normal'] c.content = lock c.enable() c.taint() c.render() if label is None: label = 'Enter your PIN' matrix = PinMatrix(label) matrix.onchange = onchange dialog = ConfirmDialog(matrix) dialog.cancel.area = ui.grid(12) dialog.confirm.area = ui.grid(14) matrix.onchange() while True: if __debug__: result = await loop.wait(dialog, input_signal) if isinstance(result, str): return result else: result = await dialog if result == CONFIRMED: return matrix.pin elif matrix.pin: # reset matrix.change('') continue else: # cancel raise PinCancelled()
async def request_pin_on_display(ctx: wire.Context, code: int = None) -> str: from trezor.messages.ButtonRequest import ButtonRequest from trezor.messages.ButtonRequestType import ProtectCall from trezor.messages.FailureType import PinCancelled from trezor.messages.wire_types import ButtonAck from trezor.ui.confirm import ConfirmDialog, CONFIRMED from trezor.ui.pin import PinMatrix if __debug__: global matrix _, label = _get_code_and_label(code) await ctx.call(ButtonRequest(code=ProtectCall), ButtonAck) def onchange(): c = dialog.cancel if matrix.pin: c.content = DEFAULT_CANCEL else: c.content = DEFAULT_LOCK c.taint() c.render() ui.display.clear() matrix = PinMatrix(label, with_zero=True) matrix.onchange = onchange dialog = ConfirmDialog(matrix) dialog.cancel.area = (0, 240 - 48, 80, 48) dialog.confirm.area = (240 - 80, 240 - 48, 80, 48) matrix.onchange() while True: res = await dialog pin = matrix.pin if res == CONFIRMED: matrix = None return pin elif res != CONFIRMED and pin: matrix.change('') continue else: matrix = None raise wire.FailureError(PinCancelled, 'PIN cancelled')
async def request_pin(code=None, cancellable: bool = True) -> str: def onchange(): c = dialog.cancel if matrix.pin: back = res.load(ui.ICON_BACK) if c.content is not back: c.normal_style = ui.BTN_CLEAR['normal'] c.content = back c.enable() c.taint() else: lock = res.load(ui.ICON_LOCK) if not cancellable and c.content: c.content = '' c.disable() c.taint() elif c.content is not lock: c.normal_style = ui.BTN_CANCEL['normal'] c.content = lock c.enable() c.taint() c.render() label = _get_label(code) matrix = PinMatrix(label, with_zero=True) matrix.onchange = onchange dialog = ConfirmDialog(matrix) dialog.cancel.area = ui.grid(12) dialog.confirm.area = ui.grid(14) matrix.onchange() while True: result = await dialog if result == CONFIRMED: return matrix.pin elif result != CONFIRMED and matrix.pin: matrix.change('') continue else: raise PinCancelled()