mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
AES鍵情報の引渡し関数として、SYSMi_SetAESKeysForAccessControl関数を用意。
ドキュメント更新。 git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@1211 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
51f3d75cfe
commit
3d124962ed
@ -182,7 +182,7 @@ TwlSpMain(void)
|
||||
#ifndef SDK_NOCRYPTO
|
||||
AES_Init(); // AES <20>‰Šú‰»
|
||||
|
||||
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();
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -91,7 +91,11 @@ void SYSMi_EnableHotSW( BOOL enable );
|
||||
//-------------------------------------------------------
|
||||
// AESŒ®<C592>Ý’è
|
||||
//-------------------------------------------------------
|
||||
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
|
||||
|
||||
|
||||
Binary file not shown.
Loading…
Reference in New Issue
Block a user