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:
yosiokat 2008-04-22 04:53:09 +00:00
parent 51f3d75cfe
commit 3d124962ed
5 changed files with 39 additions and 29 deletions

View File

@ -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();

View File

@ -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;

View File

@ -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
}
}

View File

@ -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