|
|
|
@ -402,7 +402,7 @@ static void hid_rx_callback(usbd_device *dev, uint8_t ep)
|
|
|
|
|
// restore metadata from backup
|
|
|
|
|
erase_metadata_sectors();
|
|
|
|
|
restore_metadata(meta_backup);
|
|
|
|
|
memset(meta_backup, 0, sizeof(meta_backup));
|
|
|
|
|
explicit_bzero(meta_backup, sizeof(meta_backup));
|
|
|
|
|
|
|
|
|
|
// compare against known hash computed via the following Python3 script:
|
|
|
|
|
// hashlib.sha256(binascii.unhexlify('0F5A693C' * 8192)).hexdigest()
|
|
|
|
@ -599,7 +599,7 @@ static void hid_rx_callback(usbd_device *dev, uint8_t ep)
|
|
|
|
|
// 2) firmware restore flag isn't set
|
|
|
|
|
// 3) signatures are not ok
|
|
|
|
|
if (old_was_unsigned || (flags & 0x01) == 0 || !signatures_ok(NULL)) {
|
|
|
|
|
memset(meta_backup, 0, sizeof(meta_backup));
|
|
|
|
|
explicit_bzero(meta_backup, sizeof(meta_backup));
|
|
|
|
|
}
|
|
|
|
|
// copy new firmware header
|
|
|
|
|
memcpy(meta_backup, (void *)FLASH_META_START, FLASH_META_DESC_LEN);
|
|
|
|
@ -607,12 +607,12 @@ static void hid_rx_callback(usbd_device *dev, uint8_t ep)
|
|
|
|
|
if (hash_check_ok) {
|
|
|
|
|
memcpy(meta_backup, FIRMWARE_MAGIC, 4);
|
|
|
|
|
} else {
|
|
|
|
|
memset(meta_backup, 0, 4);
|
|
|
|
|
explicit_bzero(meta_backup, 4);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// no need to erase, because we are not changing any already flashed byte.
|
|
|
|
|
restore_metadata(meta_backup);
|
|
|
|
|
memset(meta_backup, 0, sizeof(meta_backup));
|
|
|
|
|
explicit_bzero(meta_backup, sizeof(meta_backup));
|
|
|
|
|
|
|
|
|
|
flash_state = STATE_END;
|
|
|
|
|
if (hash_check_ok) {
|
|
|
|
|