AESデクリプト処理のタイミングを変更(署名チェック直後)

デクリプト範囲判定の厳密化

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@1088 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
yoshida_teruhisa 2008-04-09 02:05:11 +00:00
parent 2c5239e87d
commit 4e63f543f8
2 changed files with 6 additions and 5 deletions

View File

@ -702,6 +702,10 @@ static AuthResult SYSMi_AuthenticateTWLHeader( TitleProperty *pBootTitle )
OS_TPrintf("Authenticate : Sign check succeed. %dms.\n", OS_TicksToMilliSeconds(OS_GetTick() - prev)); OS_TPrintf("Authenticate : Sign check succeed. %dms.\n", OS_TicksToMilliSeconds(OS_GetTick() - prev));
} }
// TWL以降のアプリはモジュールの特定領域がAES暗号化されているので、ハッシュチェック前にデクリプトする必要がある。
// ヘッダのデータを使うので、署名チェック後が望ましい。よってこのタイミング。
SYSM_StartDecryptAESRegion( &(head->s) );
// それぞれARM9,7のFLXおよびLTDについてハッシュを計算してヘッダに格納されているハッシュと比較 // それぞれARM9,7のFLXおよびLTDについてハッシュを計算してヘッダに格納されているハッシュと比較
module_addr[ARM9_STATIC] = head->s.main_ram_address; module_addr[ARM9_STATIC] = head->s.main_ram_address;
module_addr[ARM7_STATIC] = head->s.sub_ram_address; module_addr[ARM7_STATIC] = head->s.sub_ram_address;
@ -887,10 +891,6 @@ static AuthResult SYSMi_AuthenticateHeader( TitleProperty *pBootTitle)
if( hs->platform_code & PLATFORM_CODE_FLAG_TWL ) if( hs->platform_code & PLATFORM_CODE_FLAG_TWL )
{ {
// TWLアプリ // TWLアプリ
// TWLアプリの場合はAES暗号化されている部分をデクリプトする
SYSM_StartDecryptAESRegion( hs );
// 認証処理 // 認証処理
switch( pBootTitle->flags.bootType ) switch( pBootTitle->flags.bootType )
{ {

View File

@ -85,8 +85,9 @@ void SYSM_StartDecryptAESRegion( ROM_Header_Short *hs )
} }
for( l=0; l<4; l++ ) for( l=0; l<4; l++ )
{ {
// モジュール配置先の領域サイズは32バイト単位に補正に、復号指定領域が含まれているか
if( module_offset[l] <= region_offset[m] && if( module_offset[l] <= region_offset[m] &&
region_offset[m] < module_offset[l] + module_size[l] ) region_offset[m] + region_size[m] <= module_offset[l] + MATH_ROUNDUP( module_size[l], SYSM_ALIGNMENT_LOAD_MODULE ) )
{ {
region_addr[m] = (void *)( (u32)module_addr[l] + (region_offset[m] - module_offset[l]) ); region_addr[m] = (void *)( (u32)module_addr[l] + (region_offset[m] - module_offset[l]) );
break; break;