forked from CTCaer/hekate
nyx: info: make cal0 dumping public
This commit is contained in:
parent
25b181bf36
commit
dc8f6beb8d
@ -33,7 +33,7 @@ extern volatile nyx_storage_t *nyx_str;
|
||||
extern lv_res_t launch_payload(lv_obj_t *list);
|
||||
extern char *emmcsn_path_impl(char *path, char *sub_dir, char *filename, sdmmc_storage_t *storage);
|
||||
|
||||
static u8 *cal0_buf = NULL;
|
||||
u8 *cal0_buf = NULL;
|
||||
|
||||
static lv_res_t _create_window_dump_done(int error, char *dump_filenames)
|
||||
{
|
||||
@ -237,6 +237,55 @@ static lv_res_t _kfuse_dump_window_action(lv_obj_t * btn)
|
||||
return LV_RES_OK;
|
||||
}
|
||||
|
||||
int dump_cal0()
|
||||
{
|
||||
// Init eMMC.
|
||||
if (!emmc_initialize(false))
|
||||
return 1;
|
||||
|
||||
// Generate BIS keys
|
||||
hos_bis_keygen();
|
||||
|
||||
if (!cal0_buf)
|
||||
cal0_buf = malloc(SZ_64K);
|
||||
|
||||
// Read and decrypt CAL0.
|
||||
emmc_set_partition(EMMC_GPP);
|
||||
LIST_INIT(gpt);
|
||||
emmc_gpt_parse(&gpt);
|
||||
emmc_part_t *cal0_part = emmc_part_find(&gpt, "PRODINFO"); // check if null
|
||||
nx_emmc_bis_init(cal0_part, false, 0);
|
||||
nx_emmc_bis_read(0, 0x40, cal0_buf);
|
||||
nx_emmc_bis_end();
|
||||
emmc_gpt_free(&gpt);
|
||||
|
||||
emmc_end();
|
||||
|
||||
// Clear BIS keys slots.
|
||||
hos_bis_keys_clear();
|
||||
|
||||
nx_emmc_cal0_t *cal0 = (nx_emmc_cal0_t *)cal0_buf;
|
||||
|
||||
// Check keys validity.
|
||||
if (memcmp(&cal0->magic, "CAL0", 4))
|
||||
{
|
||||
free(cal0_buf);
|
||||
cal0_buf = NULL;
|
||||
|
||||
// Clear EKS keys.
|
||||
hos_eks_clear(KB_FIRMWARE_VERSION_MAX);
|
||||
|
||||
return 2;
|
||||
}
|
||||
|
||||
u32 hash[8];
|
||||
se_calc_sha256_oneshot(hash, (u8 *)cal0 + 0x40, cal0->body_size);
|
||||
if (memcmp(hash, cal0->body_sha256, 0x20))
|
||||
return 3;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static lv_res_t _create_mbox_cal0(lv_obj_t *btn)
|
||||
{
|
||||
lv_obj_t *dark_bg = lv_obj_create(lv_scr_act(), NULL);
|
||||
@ -261,48 +310,24 @@ static lv_res_t _create_mbox_cal0(lv_obj_t *btn)
|
||||
|
||||
sd_mount();
|
||||
|
||||
// Init eMMC.
|
||||
if (!emmc_initialize(false))
|
||||
// Dump CAL0.
|
||||
int cal0_res = dump_cal0();
|
||||
|
||||
// Check result. Don't error if hash doesn't match.
|
||||
if (cal0_res == 1)
|
||||
{
|
||||
lv_label_set_text(lb_desc, "#FFDD00 Failed to init eMMC!#");
|
||||
|
||||
goto out;
|
||||
}
|
||||
|
||||
// Generate BIS keys
|
||||
hos_bis_keygen();
|
||||
|
||||
if (!cal0_buf)
|
||||
cal0_buf = malloc(SZ_64K);
|
||||
|
||||
// Read and decrypt CAL0.
|
||||
emmc_set_partition(EMMC_GPP);
|
||||
LIST_INIT(gpt);
|
||||
emmc_gpt_parse(&gpt);
|
||||
emmc_part_t *cal0_part = emmc_part_find(&gpt, "PRODINFO"); // check if null
|
||||
nx_emmc_bis_init(cal0_part, false, 0);
|
||||
nx_emmc_bis_read(0, 0x40, cal0_buf);
|
||||
nx_emmc_bis_end();
|
||||
emmc_gpt_free(&gpt);
|
||||
|
||||
// Clear BIS keys slots.
|
||||
hos_bis_keys_clear();
|
||||
|
||||
nx_emmc_cal0_t *cal0 = (nx_emmc_cal0_t *)cal0_buf;
|
||||
|
||||
// Check keys validity.
|
||||
if (memcmp(&cal0->magic, "CAL0", 4))
|
||||
else if (cal0_res == 2)
|
||||
{
|
||||
free(cal0_buf);
|
||||
cal0_buf = NULL;
|
||||
|
||||
// Clear EKS keys.
|
||||
hos_eks_clear(KB_FIRMWARE_VERSION_MAX);
|
||||
|
||||
lv_label_set_text(lb_desc, "#FFDD00 CAL0 is corrupt or wrong keys!#\n");
|
||||
goto out;
|
||||
}
|
||||
|
||||
nx_emmc_cal0_t *cal0 = (nx_emmc_cal0_t *)cal0_buf;
|
||||
|
||||
u32 hash[8];
|
||||
se_calc_sha256_oneshot(hash, (u8 *)cal0 + 0x40, cal0->body_size);
|
||||
|
||||
@ -376,7 +401,6 @@ static lv_res_t _create_mbox_cal0(lv_obj_t *btn)
|
||||
out:
|
||||
free(txt_buf);
|
||||
sd_unmount();
|
||||
emmc_end();
|
||||
|
||||
lv_mbox_add_btns(mbox, mbox_btn_map, _cal0_dump_window_action);
|
||||
|
||||
|
@ -20,5 +20,6 @@
|
||||
#include <libs/lvgl/lvgl.h>
|
||||
|
||||
void create_tab_info(lv_theme_t *th, lv_obj_t *parent);
|
||||
int dump_cal0();
|
||||
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user