DSダウンロードアプリ署名検証時に、FSのキャッシュ関係不具合で失敗するのをバッファのアライメント調整で回避。

HWInfoの強制ロゴデモスキップ起動フラグを見て強制ロゴデモスキップ発動するよう変更。
これにともない、強制ロゴデモスキップフラグフラグをSDKの branch-5_0rcplus_UIG_plus rev.10247 に追加。これ以降のものでないとビルド通りません。
また、強制ロゴデモスキップ起動フラグの設定をnandinitializer.iniで指定できるように変更。
これにともない、関連する関数を使っているツール類のソース変更。

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@2769 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
yoshida_teruhisa 2009-03-26 01:53:57 +00:00
parent 6fc7987341
commit 42eee63f27
10 changed files with 50 additions and 25 deletions

View File

@ -438,7 +438,8 @@ static TitleProperty *SYSMi_CheckShortcutBoot1( void )
// 量産工程用ショートカットキー or
// 検査カード起動
//-----------------------------------------------------
if( SYSM_IsInspectCard() ||
if( LCFG_THW_IsForceLogoDemoSkip() ||
SYSM_IsInspectCard() ||
( ( PAD_Read() == SYSM_PAD_PRODUCTION_SHORTCUT_CARD_BOOT ) &&
( !LCFG_TSD_IsFinishedBrokenTWLSettings() || !LCFG_TSD_IsFinishedInitialSetting() || !LCFG_TSD_IsFinishedInitialSetting_Launcher() ) )
){

View File

@ -105,7 +105,9 @@ static OSThread s_thread;
static OSThread s_auth_thread;
static TWLBannerFile s_card_bannerBuf;
static MbAuthCode s_authcode;
static u8 s_authcode[MATH_ROUNDUP32(sizeof(MbAuthCode))] ATTRIBUTE_ALIGN(32);
static MbAuthCode *sp_authcode = (MbAuthCode *)s_authcode;
static MbAuthCode bup_num;
static BOOL s_loadstart = FALSE;
@ -820,10 +822,10 @@ OS_TPrintf("RebootSystem failed: cant seek file(0)\n");
UTL_SetFatalError(FATAL_ERROR_LOAD_SEEKFILE_FAILED);
goto ERROR;
}
readLen = FS_ReadFile(file, &s_authcode, (s32)sizeof(s_authcode));
if( readLen != (s32)sizeof(s_authcode) )
readLen = FS_ReadFile(file, sp_authcode, (s32)sizeof(MbAuthCode));
if( readLen != (s32)sizeof(MbAuthCode) )
{
OS_TPrintf("RebootSystem failed: cant read file(%p, %d, %d, %d)\n", &s_authcode, 0, sizeof(s_authcode), readLen);
OS_TPrintf("RebootSystem failed: cant read file(%p, %d, %d, %d)\n", sp_authcode, 0, sizeof(MbAuthCode), readLen);
UTL_SetFatalError(FATAL_ERROR_LOAD_READDLSIGN_FAILED);
goto ERROR;
}
@ -1457,7 +1459,7 @@ static BOOL SYSMi_AuthenticateNTRDownloadTitle( TitleProperty *pBootTitle)
u8 final_hash[SVC_SHA1_DIGEST_SIZE];
// NTRダウンロードアプリ署名のマジックコードチェック
if( s_authcode.magic_code[0] != 'a' || s_authcode.magic_code[1] != 'c' ) {
if( sp_authcode->magic_code[0] != 'a' || sp_authcode->magic_code[1] != 'c' ) {
OS_TPrintf("Authenticate failed: Invalid AuthCode.\n");
UTL_SetFatalError(FATAL_ERROR_DL_MAGICCODE_CHECK_FAILED);
return FALSE;
@ -1466,18 +1468,18 @@ static BOOL SYSMi_AuthenticateNTRDownloadTitle( TitleProperty *pBootTitle)
// NTRダウンロードアプリ署名DERフォーマットの計算、ハッシュの取得。
MI_CpuClear8( buf, 0x80 );
SVC_InitSignHeap( &con, (void *)SIGN_HEAP_ADDR, SIGN_HEAP_SIZE );// ヒープの初期化
if( !SVC_DecryptSignDER( &con, buf, s_authcode.sign, nitro_dl_sign_key ))
if( !SVC_DecryptSignDER( &con, buf, sp_authcode->sign, nitro_dl_sign_key ))
{
OS_TPrintf("Authenticate failed: Sign decryption failed.\n");
UTL_SetFatalError(FATAL_ERROR_DL_SIGN_DECRYPTION_FAILED);
return FALSE;
}
// それぞれheader,ARM9FLX,ARM7FLXについてハッシュを計算して、それら3つを並べたものに対してまたハッシュをとる
if(s_calc_hash)
{
// シリアルナンバー付加
*(u32 *)(&(s_calc_hash[SVC_SHA1_DIGEST_SIZE * 3])) = s_authcode.serial_number;
*(u32 *)(&(s_calc_hash[SVC_SHA1_DIGEST_SIZE * 3])) = sp_authcode->serial_number;
// 最終ハッシュ計算
SVC_CalcSHA1( final_hash, s_calc_hash, SVC_SHA1_DIGEST_SIZE * 3 + sizeof(u32));
}else
@ -1486,7 +1488,7 @@ static BOOL SYSMi_AuthenticateNTRDownloadTitle( TitleProperty *pBootTitle)
UTL_SetFatalError(FATAL_ERROR_DL_HASH_CALC_FAILED);
return FALSE;
}
// 計算した最終ハッシュと、署名から得たハッシュとを比較
if(!SVC_CompareSHA1((const void *)buf, (const void *)final_hash))
{
@ -1499,7 +1501,7 @@ static BOOL SYSMi_AuthenticateNTRDownloadTitle( TitleProperty *pBootTitle)
}
}
OS_TPrintf("Authenticate : total %d ms.\n", OS_TicksToMilliSeconds(OS_GetTick() - start) );
return TRUE;
}

View File

@ -204,7 +204,7 @@ static void WriteHWInfoFile( u8 region, BOOL isDisableWireless )
// -------------------------------------
(void)PutStringUTF16( MSG_X * 8, ( MSG_Y + 2 ) * 8, TXT_COLOR_BLACK, pMsgSecureWriting );
if( HWI_WriteHWSecureInfoFile( region, NULL, isDisableWireless ) ) {
if( HWI_WriteHWSecureInfoFile( region, NULL, isDisableWireless, FALSE ) ) {
(void)PutStringUTF16( ( MSG_X + 20 ) * 8, ( MSG_Y + 2 ) * 8, TXT_COLOR_BLUE, pMsgSucceeded );
}else {
(void)PutStringUTF16( ( MSG_X + 20 ) * 8, ( MSG_Y + 2 ) * 8, TXT_COLOR_RED, pMsgFailed );

View File

@ -417,7 +417,7 @@ BOOL HWI_WriteHWNormalInfoFile( void )
Returns: None.
*---------------------------------------------------------------------------*/
BOOL HWI_WriteHWSecureInfoFile( u8 region, const u8 *pSerialNo, BOOL isDisableWireless )
BOOL HWI_WriteHWSecureInfoFile( u8 region, const u8 *pSerialNo, BOOL isDisableWireless, BOOL logoDemoSkipForce )
{
BOOL isWrite = TRUE;
LCFGReadResult result;
@ -435,6 +435,7 @@ BOOL HWI_WriteHWSecureInfoFile( u8 region, const u8 *pSerialNo, BOOL isDisableWi
}
LCFG_THW_SetFlagForceDisableWireless( isDisableWireless );
LCFG_THW_SetFlagForceLogoDemoSkip( logoDemoSkipForce );
// 旧リージョンを保存
old_region = OS_GetRegion();

View File

@ -39,7 +39,7 @@ HwiInitResult;
HwiInitResult HWI_Init( void *(*pAlloc)( u32 ), void (*pFree)( void * ) );
BOOL HWI_ModifyLanguage( u8 region );
BOOL HWI_WriteHWNormalInfoFile( void );
BOOL HWI_WriteHWSecureInfoFile( u8 region, const u8 *pSerialNo, BOOL isDisableWireless );
BOOL HWI_WriteHWSecureInfoFile( u8 region, const u8 *pSerialNo, BOOL isDisableWireless, BOOL logoDemoSkipForce );
BOOL HWI_WriteHWIDSignFile( void );
BOOL HWI_DeleteHWNormalInfoFile( void );
BOOL HWI_DeleteHWSecureInfoFile( void );

View File

@ -52,7 +52,7 @@ void* HWInfoProcess4(void);
Returns: None.
*---------------------------------------------------------------------------*/
BOOL WriteHWInfoFile( u8 region, BOOL wirelessForceOff );
BOOL WriteHWInfoFile( u8 region, BOOL wirelessForceOff, BOOL logoDemoSkipForce );
/*===========================================================================*/

View File

@ -71,6 +71,7 @@ enum {
static s8 sMenuSelectNo;
static BOOL sWirelessForceOff;
static BOOL sLogoDemoSkipForce;
/*---------------------------------------------------------------------------*
@ -79,7 +80,7 @@ static BOOL sWirelessForceOff;
static BOOL WriteHWNormalInfoFile( void );
static BOOL WriteHWSecureInfoFile( u8 region );
//static BOOL DeleteHWInfoFile( void );
static BOOL GetNandInitializerSetting(u8* region, u8* wireless);
static BOOL GetNandInitializerSetting(u8* region, u8* wireless, u8* logodemoskip);
/*---------------------------------------------------------------------------*
@ -210,11 +211,12 @@ void* HWInfoProcess2(void)
if (gAutoFlag)
{
// SDカードのnandinitializer.iniより設定を取得
if (!GetNandInitializerSetting((u8 *)&sMenuSelectNo, (u8 *)&sWirelessForceOff))
if (!GetNandInitializerSetting((u8 *)&sMenuSelectNo, (u8 *)&sWirelessForceOff, (u8 *)&sLogoDemoSkipForce))
{
// 設定の取得に失敗した場合はデフォルト設定(REGION_JAPAN/WIRELESS_ENABLE)
sMenuSelectNo = 0;
sWirelessForceOff = FALSE;
sLogoDemoSkipForce = FALSE;
}
}
else
@ -232,7 +234,7 @@ void* HWInfoProcess2(void)
case MENU_REGION_CHINA:
case MENU_REGION_KOREA:
result = WriteHWInfoFile( (u8)sMenuSelectNo, sWirelessForceOff );
result = WriteHWInfoFile( (u8)sMenuSelectNo, sWirelessForceOff, sLogoDemoSkipForce );
// 全リージョンの結果をクリア
for (i=0;i<NUM_OF_MENU_SELECT;i++)
@ -290,7 +292,7 @@ void* HWInfoProcess2(void)
Returns: None.
*---------------------------------------------------------------------------*/
BOOL WriteHWInfoFile( u8 region, BOOL wirelessForceOff )
BOOL WriteHWInfoFile( u8 region, BOOL wirelessForceOff, BOOL logoDemoSkipForce )
{
static const char *pMsgSecureWriting = "Writing Secure File...";
static const char *pMsgNormalWriting = "Writing Normal File...";
@ -313,7 +315,7 @@ BOOL WriteHWInfoFile( u8 region, BOOL wirelessForceOff )
// セキュアファイルのライト
kamiFontPrintfConsoleEx(CONSOLE_ORANGE, pMsgSecureWriting );
if( HWI_WriteHWSecureInfoFile( region, NULL, wirelessForceOff ) ) {
if( HWI_WriteHWSecureInfoFile( region, NULL, wirelessForceOff, logoDemoSkipForce ) ) {
kamiFontPrintfConsoleEx(CONSOLE_ORANGE, pMsgSucceeded );
}else {
kamiFontPrintfConsoleEx(CONSOLE_RED, pMsgFailed );
@ -392,7 +394,7 @@ static BOOL DeleteHWInfoFile( void )
Returns: None.
*---------------------------------------------------------------------------*/
static BOOL GetNandInitializerSetting(u8* region, u8* wireless)
static BOOL GetNandInitializerSetting(u8* region, u8* wireless, u8* logodemoskip)
{
FSFile file;
BOOL open_is_ok;
@ -401,6 +403,7 @@ static BOOL GetNandInitializerSetting(u8* region, u8* wireless)
char* pStr;
u8 temp_region;
u8 temp_wireless;
u8 temp_logodemoskip;
u32 file_size;
u32 alloc_size;
@ -430,6 +433,24 @@ static BOOL GetNandInitializerSetting(u8* region, u8* wireless)
// ROMファイルクローズ
FS_CloseFile(&file);
// 強制ロゴデモスキップ設定を読み取る
pStr = STD_SearchString( pTempBuf, "LOGO_DEMO_SKIP_FORCE:");
if (pStr != NULL)
{
pStr += STD_GetStringLength("LOGO_DEMO_SKIP_FORCE:");
temp_logodemoskip = (u8)(*pStr - '0');
if ( temp_logodemoskip == 1 )
{
*logodemoskip = temp_logodemoskip;
}
else
{
*logodemoskip = 0;
}
}
// REGION: を読み取る
pStr = STD_SearchString( pTempBuf, "REGION:");

View File

@ -175,7 +175,7 @@ void* WirelessSettingProcess2(void)
switch( sMenuSelectNo )
{
case MENU_WIRELESS_ENABLE:
result = WriteHWInfoFile( OS_GetRegion(), FALSE );
result = WriteHWInfoFile( OS_GetRegion(), FALSE, FALSE );
if ( result == TRUE )
{
kamiFontPrintf(26, (s16)(MENU_TOP_LINE+MENU_WIRELESS_ENABLE*CHAR_OF_MENU_SPACE), FONT_COLOR_GREEN, "OK ");
@ -189,7 +189,7 @@ void* WirelessSettingProcess2(void)
break;
case MENU_WIRELESS_FORCE_OFF:
result = WriteHWInfoFile( OS_GetRegion(), TRUE );
result = WriteHWInfoFile( OS_GetRegion(), TRUE, FALSE );
if ( result == TRUE )
{
kamiFontPrintf(26, (s16)(MENU_TOP_LINE+MENU_WIRELESS_ENABLE*CHAR_OF_MENU_SPACE), FONT_COLOR_GREEN, " ");

View File

@ -70,7 +70,7 @@ BOOL WriteHWInfoFile( u8 region, BOOL wirelessForceOff )
BOOL result = TRUE;
// セキュアファイルのライト
if( HWI_WriteHWSecureInfoFile( region, NULL, wirelessForceOff ) ) { // とりあえず無線は有効で。
if( HWI_WriteHWSecureInfoFile( region, NULL, wirelessForceOff, FALSE ) ) { // とりあえず無線は有効で。
// kamiFontPrintfConsoleEx(CONSOLE_ORANGE, pMsgSucceeded );
}else {
kamiFontPrintfConsoleEx(CONSOLE_RED, pMsgFailed );

View File

@ -70,7 +70,7 @@ BOOL WriteHWInfoFile( u8 region, BOOL wirelessForceOff )
BOOL result = TRUE;
// セキュアファイルのライト
if( HWI_WriteHWSecureInfoFile( region, NULL, wirelessForceOff ) ) { // とりあえず無線は有効で。
if( HWI_WriteHWSecureInfoFile( region, NULL, wirelessForceOff, FALSE ) ) { // とりあえず無線は有効で。
// kamiFontPrintfConsoleEx(CONSOLE_ORANGE, pMsgSucceeded );
}else {
kamiFontPrintfConsoleEx(CONSOLE_RED, pMsgFailed );