From 9dc8105e9cbc2480287fde00d6a3af7ec77cd33f Mon Sep 17 00:00:00 2001 From: d0k3 Date: Mon, 9 Oct 2017 16:51:39 +0200 Subject: [PATCH] Improved / fixed SetupSecretKey() --- source/game/firm.c | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/source/game/firm.c b/source/game/firm.c index 29a86be..412eef3 100644 --- a/source/game/firm.c +++ b/source/game/firm.c @@ -133,19 +133,30 @@ u32 GetArm9BinarySize(FirmA9LHeader* a9l) { } u32 SetupSecretKey(u32 keynum) { - // try to get key from sector 0x96 static u8 __attribute__((aligned(32))) sector[0x200]; - ReadNandSectors(sector, 0x96, 1, 0x11, NAND_SYSNAND); - if ((keynum < 0x200/0x10) && (ValidateSecretSector(sector) == 0)) { - setup_aeskey(0x11, sector + (keynum*0x10)); + static u32 got_keys = 0; + u8* key = sector + (keynum*0x10); + + if (keynum >= 0x200/0x10) + return 1; // safety + + // try to load full secret sector or key from file + if (!(got_keys & (0x1< got them all + } else if ((keynum < 2) && (LoadKeyFromFile(key, 0x11, 'N', (keynum == 0) ? "95" : "96"))) { + got_keys |= (0x1<