diff --git a/build/components/hyena.TWL/src/main.c b/build/components/hyena.TWL/src/main.c index e90f8302..3851b2ba 100644 --- a/build/components/hyena.TWL/src/main.c +++ b/build/components/hyena.TWL/src/main.c @@ -182,7 +182,7 @@ TwlSpMain(void) #ifndef SDK_NOCRYPTO AES_Init(); // AES 初期化 - SYSMi_SetAESKeysForAccessControl( (ROM_Header *)HW_TWL_ROM_HEADER_BUF, (u8 *)SDK_SEA_KEY_STORE, NULL, NULL ); + SYSMi_SetAESKeysForAccessControlCore( (ROM_Header *)HW_TWL_ROM_HEADER_BUF, (u8 *)SDK_SEA_KEY_STORE, NULL, NULL ); #ifdef SDK_SEA SEA_Init(); diff --git a/build/libraries_sysmenu/boot/ARM7/src/bootAPI.c b/build/libraries_sysmenu/boot/ARM7/src/bootAPI.c index a78fa40b..793d3ef2 100644 --- a/build/libraries_sysmenu/boot/ARM7/src/bootAPI.c +++ b/build/libraries_sysmenu/boot/ARM7/src/bootAPI.c @@ -131,32 +131,8 @@ BOOL BOOT_WaitStart( void ) // 鍵情報の引渡しを行う。 // ブートアプリのROMヘッダのaccessKeyControl情報を見て判定 - // 引渡しは、IRQスタック領域を使うので、割り込みを禁止してからセットする。 - { - BOOL isClearSlotB = TRUE; - BOOL isClearSlotC = TRUE; - - MI_CpuClearFast( (void *)HW_LAUNCHER_DELIVER_PARAM_BUF, HW_LAUNCHER_DELIVER_PARAM_BUF_SIZE ); - if( ! isNtrMode ) { - if( th->s.titleID_Hi & TITLE_ID_HI_SECURE_FLAG_MASK ) { - SYSMi_SetAESKeysForAccessControl( th, (u8 *)HW_LAUNCHER_DELIVER_PARAM_BUF, &isClearSlotB, &isClearSlotC ); - } - } - // ブートするアプリに応じて、AESキースロットのクリアを行う。 - AESi_ResetAesKeyA(); - if( isClearSlotB ) AESi_ResetAesKeyB(); - if( isClearSlotC ) AESi_ResetAesKeyC(); - - // [TODO:]本当にこの後NANDにアクセスしない保証があるか確認する。 - // NANDにアクセスしないアプリは、スロットDの鍵をクリアする -// if( th->s.access_control.nand_access == 0 ) AESi_ResetAesKeyD(); - - // 鍵は不要になるので、消しておく - { - OSFromFirmBuf* fromFirm = (void*)HW_FIRM_FROM_FIRM_BUF; - MI_CpuClearFast(fromFirm, sizeof(OSFromFirmBuf)); - } - } + SYSMi_SetAESKeysForAccessControl( isNtrMode, th ); + // SDK共通リブート { REBOOTTarget target = REBOOT_TARGET_TWL_SYSTEM; diff --git a/build/libraries_sysmenu/sysmenu/ARM7/src/setAESKey.c b/build/libraries_sysmenu/sysmenu/ARM7/src/setAESKey.c index a734803d..3b486725 100644 --- a/build/libraries_sysmenu/sysmenu/ARM7/src/setAESKey.c +++ b/build/libraries_sysmenu/sysmenu/ARM7/src/setAESKey.c @@ -59,8 +59,37 @@ static const u8 dev_seedSlotC[] = { // // ============================================================================ +void SYSMi_SetAESKeysForAccessControl( BOOL isNtrMode, ROM_Header *pROMH ) +{ + BOOL isClearSlotB = TRUE; + BOOL isClearSlotC = TRUE; + + // 鍵のセット + MI_CpuClearFast( (void *)HW_LAUNCHER_DELIVER_PARAM_BUF, HW_LAUNCHER_DELIVER_PARAM_BUF_SIZE ); + if( !isNtrMode && + ( pROMH->s.titleID_Hi & TITLE_ID_HI_SECURE_FLAG_MASK ) ) { + SYSMi_SetAESKeysForAccessControlCore( pROMH, (u8 *)HW_LAUNCHER_DELIVER_PARAM_BUF, &isClearSlotB, &isClearSlotC ); + } + + // ブートするアプリに応じて、AESキースロットのクリアを行う。 + { + AESi_ResetAesKeyA(); + if( isClearSlotB ) AESi_ResetAesKeyB(); + if( isClearSlotC ) AESi_ResetAesKeyC(); + + // NANDにアクセスしないアプリは、スロットDの鍵をクリアする  +// if( th->s.access_control.nand_access == 0 ) AESi_ResetAesKeyD(); ※rebootの中のREBOOTi_DetachAllDrivesでNANDにアクセスする場合があるので、ここでクリアはできない。やるならその後ろで。 + } + + // その他の鍵は不要になるので、消しておく + { + OSFromFirmBuf* fromFirm = (void*)HW_FIRM_FROM_FIRM_BUF; + MI_CpuClearFast(fromFirm, sizeof(OSFromFirmBuf)); + } +} -void SYSMi_SetAESKeysForAccessControl( ROM_Header *pROMH, u8 *pDst, BOOL *pIsClearSlotB, BOOL *pIsClearSlotC ) + +void SYSMi_SetAESKeysForAccessControlCore( ROM_Header *pROMH, u8 *pDst, BOOL *pIsClearSlotB, BOOL *pIsClearSlotC ) { // commonClientKey if( pROMH->s.access_control.common_client_key ) { @@ -100,3 +129,4 @@ void SYSMi_SetAESKeysForAccessControl( ROM_Header *pROMH, u8 *pDst, BOOL *pIsCle } } + diff --git a/build/libraries_sysmenu/sysmenu/common/include/internal_api.h b/build/libraries_sysmenu/sysmenu/common/include/internal_api.h index 9db4d3f8..ff5eaa1b 100644 --- a/build/libraries_sysmenu/sysmenu/common/include/internal_api.h +++ b/build/libraries_sysmenu/sysmenu/common/include/internal_api.h @@ -91,7 +91,11 @@ void SYSMi_EnableHotSW( BOOL enable ); //------------------------------------------------------- // AES鍵設定 //------------------------------------------------------- -void SYSMi_SetAESKeysForAccessControl( ROM_Header *pROMH, u8 *pDst, BOOL *pIsClearSlotB, BOOL *pIsClearSlotC ); +// アプリブート用 +void SYSMi_SetAESKeysForAccessControl( BOOL isNtrMode, ROM_Header *pROMH ); + +// ランチャー自身用 +void SYSMi_SetAESKeysForAccessControlCore( ROM_Header *pROMH, u8 *pDst, BOOL *pIsClearSlotB, BOOL *pIsClearSlotC ); #endif // SDK_ARM7 diff --git a/docs/繝ェ繝ェ繝シ繧ケ_SDK_5_0_FC_plus2/SDK_5_0_FC_plus2_繝ゥ繝ウ繝√Ε繝シ繝ェ繝ェ繝シ繧ケ繧ソ繧ケ繧ッ.mmap b/docs/繝ェ繝ェ繝シ繧ケ_SDK_5_0_FC_plus2/SDK_5_0_FC_plus2_繝ゥ繝ウ繝√Ε繝シ繝ェ繝ェ繝シ繧ケ繧ソ繧ケ繧ッ.mmap index 386ea428..d30f999d 100644 Binary files a/docs/繝ェ繝ェ繝シ繧ケ_SDK_5_0_FC_plus2/SDK_5_0_FC_plus2_繝ゥ繝ウ繝√Ε繝シ繝ェ繝ェ繝シ繧ケ繧ソ繧ケ繧ッ.mmap and b/docs/繝ェ繝ェ繝シ繧ケ_SDK_5_0_FC_plus2/SDK_5_0_FC_plus2_繝ゥ繝ウ繝√Ε繝シ繝ェ繝ェ繝シ繧ケ繧ソ繧ケ繧ッ.mmap differ