diff --git a/source/keys/keys.c b/source/keys/keys.c index d49be51..781596f 100644 --- a/source/keys/keys.c +++ b/source/keys/keys.c @@ -234,7 +234,7 @@ void dump_keys() { if (!reboot_to_sept((u8 *)tsec_ctxt.fw, tsec_ctxt.size, pkg1_id->kb)) goto out_wait; } else { - se_aes_key_read(12, master_key[KB_FIRMWARE_VERSION_MAX], 0x10); + se_aes_key_read(se_key_acc_ctrl_get(12) == 0x6A ? 13 : 12, master_key[KB_FIRMWARE_VERSION_MAX], 0x10); } } diff --git a/source/sec/se.c b/source/sec/se.c index 768d772..0fad5a8 100644 --- a/source/sec/se.c +++ b/source/sec/se.c @@ -230,6 +230,11 @@ void se_key_acc_ctrl(u32 ks, u32 flags) SE(SE_KEY_TABLE_ACCESS_LOCK_OFFSET) &= ~(1 << ks); } +u32 se_key_acc_ctrl_get(u32 ks) +{ + return SE(SE_KEY_TABLE_ACCESS_REG_OFFSET + 4 * ks); +} + void se_aes_key_set(u32 ks, const void *key, u32 size) { u32 *data = (u32 *)key; diff --git a/source/sec/se.h b/source/sec/se.h index 211c279..5172403 100644 --- a/source/sec/se.h +++ b/source/sec/se.h @@ -24,6 +24,7 @@ void se_rsa_key_set(u32 ks, const void *mod, u32 mod_size, const void *exp, u32 void se_rsa_key_clear(u32 ks); int se_rsa_exp_mod(u32 ks, void *dst, u32 dst_size, const void *src, u32 src_size); void se_key_acc_ctrl(u32 ks, u32 flags); +u32 se_key_acc_ctrl_get(u32 ks); void se_aes_key_set(u32 ks, const void *key, u32 size); void se_aes_iv_set(u32 ks, const void *iv, u32 size); void se_aes_key_read(u32 ks, void *key, u32 size);