hos: refactor keyblob to eks and kb to mkey

Use the official name for keyblob which is EKS.
For that reason the keyblob version enum is renamed to master key version.
This commit is contained in:
CTCaer
2025-08-08 15:29:02 +03:00
parent f083dcd280
commit 885cc195c0
16 changed files with 334 additions and 322 deletions

View File

@@ -1,6 +1,6 @@
/*
* Copyright (c) 2018 naehrwert
* Copyright (c) 2022-2024 CTCaer
* Copyright (c) 2022-2025 CTCaer
*
* This program is free software; you can redistribute it and/or modify it
* under the terms and conditions of the GNU General Public License,
@@ -29,7 +29,7 @@
#define PKG1_BOOTLOADER_SIZE SZ_256K
#define PKG1_BOOTLOADER_MAIN_OFFSET 0x100000
#define PKG1_BOOTLOADER_BACKUP_OFFSET 0x140000
#define PKG1_HOS_KEYBLOBS_OFFSET 0x180000
#define PKG1_HOS_EKS_OFFSET 0x180000
#define PKG1_ERISTA_ON_MARIKO_MAGIC 0xE59FD00C // For 4.0.0 Erista and up.
#define PKG1_MARIKO_ON_ERISTA_MAGIC 0x40010040 // Mariko pkg1 entrypoint.
@@ -59,6 +59,21 @@ typedef struct _bl_hdr_t210b01_t
/* 0x160 */ u8 rsvd[0x10];
} bl_hdr_t210b01_t;
typedef struct _eks_keys_t
{
u8 master_kekseed[SE_KEY_128_SIZE];
u8 random_data[0x70];
u8 package1_key[SE_KEY_128_SIZE];
} eks_keys_t;
typedef struct _pkg1_eks_t
{
u8 cmac[SE_KEY_128_SIZE];
u8 ctr[SE_AES_IV_SIZE];
eks_keys_t keys;
u8 padding[0x150];
} pkg1_eks_t;
typedef struct _pk1_hdr_t
{
/* 0x00 */ u32 si_sha256; // Secure Init.
@@ -73,7 +88,7 @@ typedef struct _pk1_hdr_t
typedef struct _pkg1_id_t
{
const char *id;
u16 kb;
u16 mkey;
u16 fuses;
u16 tsec_off;
u16 pkg11_off;
@@ -84,14 +99,14 @@ typedef struct _pkg1_id_t
typedef struct _pk11_hdr_t
{
u32 magic;
u32 wb_size;
u32 wb_off;
u32 pad;
u32 ldr_size;
u32 ldr_off;
u32 sm_size;
u32 sm_off;
/* 0x00 */ u32 magic;
/* 0x04 */ u32 wb_size;
/* 0x08 */ u32 wb_off;
/* 0x0C */ u32 pad;
/* 0x10 */ u32 ldr_size;
/* 0x14 */ u32 ldr_off;
/* 0x18 */ u32 sm_size;
/* 0x1C */ u32 sm_off;
} pk11_hdr_t;
const pkg1_id_t *pkg1_get_latest();
@@ -100,7 +115,7 @@ int pkg1_decrypt(const pkg1_id_t *id, u8 *pkg1);
const u8 *pkg1_unpack(void *wm_dst, u32 *wb_sz, void *sm_dst, void *ldr_dst, const pkg1_id_t *id, u8 *pkg1);
void pkg1_secmon_patch(void *hos_ctxt, u32 secmon_base, bool t210b01);
void pkg1_warmboot_patch(void *hos_ctxt);
int pkg1_warmboot_config(void *hos_ctxt, u32 warmboot_base, u32 fuses_fw, u8 kb);
int pkg1_warmboot_config(void *hos_ctxt, u32 warmboot_base, u32 fuses_fw, u8 mkey);
void pkg1_warmboot_rsa_mod(u32 warmboot_base);
#endif