示例#1
0
def enter_dfu(msg=0):
    # enter DFU while showing a message
    #   0 = normal DFU
    #   1 = downgrade attack detected
    #   2 = blankish
    #   3 = i am bricked
    #
    system.dispatch(CMD_UPGRADE_FIRMWARE, msg)
示例#2
0
def get_bootloader_version():
    # version string and related details
    # something like:   ('1.0.0', [('time', '20180220.092345'), ('git', 'master@f8d1758')])
    rv = bytearray(64)
    ln = system.dispatch(0, rv, 0)
    ver, *args = str(rv[0:ln], 'utf8').split(' ')
    return ver, [tuple(i.split('=', 1)) for i in args]
示例#3
0
    def pin_control(self, method_num, **kws):

        self.marshal(self.buf, **kws)

        # print("> tx: %s" % b2a_hex(self.buf))

        err = system.dispatch(CMD_PIN_CONTROL, self.buf, method_num)

        # print("[%d] rx: %s" % (err, b2a_hex(self.buf)))

        if err <= -100:
            #print("[%d] req: %s" % (err, b2a_hex(self.buf)))
            if err == EPIN_I_AM_BRICK:
                # don't try to continue!
                pass
                # enter_dfu(3)

            print('ERROR: {} ({})'.format(PA_ERROR_CODES[err], err))
            raise BootloaderError(PA_ERROR_CODES[err], err)
        elif err:
            raise RuntimeError(err)

        return self.unmarshal(self.buf)
示例#4
0
def get_supply_chain_validation_words(buf):
    return system.dispatch(CMD_GET_SUPPLY_CHAIN_VALIDATION_WORDS, buf, len(buf))
示例#5
0
def get_anti_phishing_words(pin_buf):
    return system.dispatch(CMD_GET_ANTI_PHISHING_WORDS, pin_buf, len(pin_buf))
示例#6
0
def set_firmware_highwater(ts):
    arg = bytearray(ts)
    return system.dispatch(CMD_FIRMWARE_CONTROL, arg, UPDATE_HIGH_WATERMARK)
示例#7
0
def get_firmware_highwater():
    arg = bytearray(8)
    system.dispatch(CMD_FIRMWARE_CONTROL, arg, GET_MIN_FIRMWARE_VERSION)
    return arg
示例#8
0
def get_is_bricked():
    # see if we are a brick?
    return system.dispatch(CMD_IS_BRICKED, None, 0) != 0
示例#9
0
def fill_random(buf):
    system.dispatch(CMD_GET_RANDOM_BYTES, buf, 0)
示例#10
0
def set_genuine():
    # does checksum over firmware, and might set green
    return system.dispatch(CMD_LED_CONTROL, None, LED_ATTEMPT_TO_SET_GREEN)
示例#11
0
def clear_genuine():
    system.dispatch(CMD_LED_CONTROL, None, LED_RED)
示例#12
0
def get_genuine():
    system.dispatch(CMD_LED_CONTROL, None, LED_READ)
示例#13
0
def show_logout(dont_clear=0):
    # wipe memory and die, shows standard message
    # dont_clear=1 => don't clear OLED
    # 2=> restart system after wipe
    system.dispatch(CMD_RESET, dont_clear)
示例#14
0
def get_firmware_hash(salt=0):
    # salted hash over code
    rv = bytearray(32)
    system.dispatch(CMD_GET_FIRMWARE_HASH, rv, salt)
    return rv