diff --git a/build/libraries/aes/ARM7/aes_init.c b/build/libraries/aes/ARM7/aes_init.c index c9146fca..c48f3027 100644 --- a/build/libraries/aes/ARM7/aes_init.c +++ b/build/libraries/aes/ARM7/aes_init.c @@ -15,6 +15,7 @@ $Author$ *---------------------------------------------------------------------------*/ +#include #include #include @@ -23,6 +24,25 @@ #define AES_IDS_ID0_D(c) (((unsigned long)c[3] << 0) | ((unsigned long)c[2] << 8) | ((unsigned long)c[1] << 16) | ((unsigned long)c[0] << 24)) +/*---------------------------------------------------------------------------* + Name: AESi_PreInitKeys + + Description: reset IDs preset by bootrom. + you SHOULD NOT touch any ID registers after this call. + + Arguments: None + + Returns: None + *---------------------------------------------------------------------------*/ +void AESi_PreInitKeys( void ) +{ + AES_WaitKey(); + + reg_AES_AES_ID_B2 = reg_OS_CHIP_ID1 ^ *(const u32*)&OSi_GetFromFirmAddr()->aes_key[2][0]; + reg_AES_AES_ID_D1 = reg_OS_CHIP_ID0 ^ *(const u32*)&OSi_GetFromFirmAddr()->aes_key[2][8]; + reg_AES_AES_ID_D2 = reg_OS_CHIP_ID1 ^ *(const u32*)&OSi_GetFromFirmAddr()->aes_key[2][4]; +} + /*---------------------------------------------------------------------------* Name: AESi_InitKeysForApp diff --git a/build/libraries/os/common/os_boot.c b/build/libraries/os/common/os_boot.c index ce1c2462..f3a68145 100644 --- a/build/libraries/os/common/os_boot.c +++ b/build/libraries/os/common/os_boot.c @@ -79,7 +79,8 @@ void OS_BootWithRomHeaderFromFIRM( ROM_Header* rom_header ) mem_list[i++] = stack_bottom - code_buf_end; } /* 一部鍵バッファのクリア (鍵管理.xls参照) */ - // 該当無し + mem_list[i++] = (u32)OSi_GetFromFirmAddr()->aes_key[2]; + mem_list[i++] = ACS_AES_LEN; #endif // SDK_ARM7 mem_list[i++] = NULL; // copy forward diff --git a/build/nandfirm/menu-launcher/ARM7/main.c b/build/nandfirm/menu-launcher/ARM7/main.c index f9ebb98d..13e16368 100644 --- a/build/nandfirm/menu-launcher/ARM7/main.c +++ b/build/nandfirm/menu-launcher/ARM7/main.c @@ -122,6 +122,15 @@ static void PreInit(void) { OS_Terminate(); } + /* + AES関連 (NAND暗号化の鍵変更を含む) + */ +#ifndef SDK_FINALROM + if ( !*(u8*)HW_TWL_RED_LAUNCHER_VER ) +#endif + { + AESi_PreInitKeys(); + } /* リセットパラメータ(1バイト)を共有領域(1バイト)にコピー */ diff --git a/build/nandfirm/sdmc-launcher/ARM7/main.c b/build/nandfirm/sdmc-launcher/ARM7/main.c index ab865092..fe92f161 100644 --- a/build/nandfirm/sdmc-launcher/ARM7/main.c +++ b/build/nandfirm/sdmc-launcher/ARM7/main.c @@ -122,6 +122,15 @@ static void PreInit(void) { OS_Terminate(); } + /* + AES関連 (NAND暗号化の鍵変更を含む) + */ +#ifndef SDK_FINALROM + if ( !*(u8*)HW_TWL_RED_LAUNCHER_VER ) +#endif + { + AESi_PreInitKeys(); + } /* リセットパラメータ(1バイト)を共有領域(1バイト)にコピー */ diff --git a/docs/骰オ邂。逅.xls b/docs/骰オ邂。逅.xls index 642e42d1..3da5edc6 100644 Binary files a/docs/骰オ邂。逅.xls and b/docs/骰オ邂。逅.xls differ diff --git a/include/firm/aes/ARM7/aes_init.h b/include/firm/aes/ARM7/aes_init.h index 9924c773..000c2540 100644 --- a/include/firm/aes/ARM7/aes_init.h +++ b/include/firm/aes/ARM7/aes_init.h @@ -27,6 +27,18 @@ extern "C" { /*---------------------------------------------------------------------------* 関数定義 *---------------------------------------------------------------------------*/ +/*---------------------------------------------------------------------------* + Name: AESi_PreInitKeys + + Description: reset IDs preset by bootrom. + you SHOULD NOT touch any ID registers after this call. + + Arguments: None + + Returns: None + *---------------------------------------------------------------------------*/ +void AESi_PreInitKeys( void ); + /*---------------------------------------------------------------------------* Name: AESi_InitKeysForApp