def __init__(self): self.is_secondary = False self.pin = None self.secret = None self.is_empty = None self.magic_value = PA_MAGIC_V2 if version.has_608 else PA_MAGIC_V1 self.delay_achieved = 0 # so far, how much time wasted? self.delay_required = 0 # how much will be needed? self.num_fails = 0 # for UI: number of fails PINs self.attempts_left = 0 # ignore in mk1/2 case, only valid for mk3 self.state_flags = 0 # useful readback self.private_state = 0 # opaque data, but preserve self.cached_main_pin = bytearray(32) assert MAX_PIN_LEN == 32 # update FMT otherwise assert ustruct.calcsize(PIN_ATTEMPT_FMT_V1) == PIN_ATTEMPT_SIZE_V1, \ ustruct.calcsize(PIN_ATTEMPT_FMT) assert ustruct.calcsize(PIN_ATTEMPT_FMT_V2_ADDITIONS ) == PIN_ATTEMPT_SIZE - PIN_ATTEMPT_SIZE_V1 self.buf = bytearray( PIN_ATTEMPT_SIZE if version.has_608 else PIN_ATTEMPT_SIZE_V1) # check for bricked system early import callgate if callgate.get_is_bricked(): # die right away if it's not going to work callgate.enter_dfu(3)
async def test_ae508a(): assert not get_is_bricked(), "AE508a is bricked" for ph in range(5): gg = get_genuine() dis.clear() if gg: dis.text(-1, 8, "Green ON? -->") else: dis.text(-1, 50, "Red ON? -->") dis.show() k = await ux_wait_keyup('xy') assert k == 'y', "LED bust" if ph and gg: # stop once it's on and we've tested both states return # attempt to switch to other state if gg: clear_genuine() else: # very slow! dis.text(0, 0, "Wait") dis.show() set_genuine() ux_clear_keys() ng = get_genuine() assert ng != gg, "Could not invert LED"
async def test_secure_element(): assert not get_is_bricked() # bricked already # test right chips installed is_fat = ckcc.is_stm32l496() if is_fat: assert version.has_608 # expect 608a assert version.hw_label == 'mk3' else: assert not version.has_608 # expect 508a assert version.hw_label != 'mk3' if ckcc.is_simulator(): return for ph in range(5): gg = get_genuine() dis.clear() if gg: dis.text(-1, 8, "Green ON? -->") else: dis.text(-1,50, "Red ON? -->") dis.show() k = await ux_wait_keyup('xy') assert k == 'y' # "LED bust" if ph and gg: # stop once it's on and we've tested both states return # attempt to switch to other state if gg: clear_genuine() else: # very slow! dis.text(0,0, "Wait") dis.show() set_genuine() ux_clear_keys() ng = get_genuine() assert ng != gg # "Could not invert LED"
def __init__(self): self.is_secondary = False self.pin = None self.secret = None self.is_empty = None self.delay_achieved = 0 # so far, how much time wasted? self.delay_required = 0 # how much will be needed? self.num_fails = 0 # for UI: number of fails PINs self.attempt_target = 0 # counter number from chip self.state_flags = 0 # useful readback self.private_state = 0 # opaque data, but preserve assert MAX_PIN_LEN == 32 # update FMT otherwise assert ustruct.calcsize( PIN_ATTEMPT_FMT) == PIN_ATTEMPT_SIZE, ustruct.calcsize( PIN_ATTEMPT_FMT) self.buf = bytearray(PIN_ATTEMPT_SIZE) # check for bricked system early import callgate if callgate.get_is_bricked(): # die right away if it's not going to work callgate.enter_dfu(3)