mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
エラー表示の強化
git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@1479 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
9a90633b51
commit
3ffb5057a7
@ -972,23 +972,23 @@ static AuthResult SYSMi_AuthenticateHeaderWithSign( TitleProperty *pBootTitle, R
|
|||||||
if( !SVC_DecryptSign( &con, sigbuf.digest, head->signature, key ))
|
if( !SVC_DecryptSign( &con, sigbuf.digest, head->signature, key ))
|
||||||
{
|
{
|
||||||
OS_TPrintf("Authenticate_Header failed: Sign decryption failed.\n");
|
OS_TPrintf("Authenticate_Header failed: Sign decryption failed.\n");
|
||||||
if(!s_b_dev) return AUTH_RESULT_AUTHENTICATE_FAILED;
|
if(!s_b_dev) return AUTH_RESULT_SIGN_DECRYPTION_FAILED;
|
||||||
}
|
}
|
||||||
if(s_calc_hash)
|
if(s_calc_hash)
|
||||||
{
|
{
|
||||||
// 署名のハッシュ値とヘッダのハッシュ値を比較
|
// 署名のハッシュ値とヘッダのハッシュ値を比較
|
||||||
if(!SVC_CompareSHA1(sigbuf.digest, (const void *)&s_calc_hash[0]))
|
if(!SVC_CompareSHA1(sigbuf.digest, (const void *)&s_calc_hash[0]))
|
||||||
{
|
{
|
||||||
OS_TPrintf("Authenticate_Header failed: Sign check failed.\n");
|
OS_TPrintf("Authenticate_Header failed: Sign compare failed.\n");
|
||||||
if(!s_b_dev) return AUTH_RESULT_AUTHENTICATE_FAILED;
|
if(!s_b_dev) return AUTH_RESULT_SIGN_COMPARE_FAILED;
|
||||||
}else
|
}else
|
||||||
{
|
{
|
||||||
OS_TPrintf("Authenticate_Header : Sign check succeed. %dms.\n", OS_TicksToMilliSeconds(OS_GetTick() - prev));
|
OS_TPrintf("Authenticate_Header : Sign check succeed. %dms.\n", OS_TicksToMilliSeconds(OS_GetTick() - prev));
|
||||||
}
|
}
|
||||||
}else
|
}else
|
||||||
{
|
{
|
||||||
OS_TPrintf("Authenticate_Header failed: Sign calc failed.\n");
|
OS_TPrintf("Authenticate_Header failed: Header Hash calc failed.\n");
|
||||||
if(!s_b_dev) return AUTH_RESULT_AUTHENTICATE_FAILED;
|
if(!s_b_dev) return AUTH_RESULT_HEADER_HASH_CALC_FAILED;
|
||||||
}
|
}
|
||||||
OS_TPrintf("Authenticate_Header : total %d ms.\n", OS_TicksToMilliSeconds(OS_GetTick() - start) );
|
OS_TPrintf("Authenticate_Header : total %d ms.\n", OS_TicksToMilliSeconds(OS_GetTick() - start) );
|
||||||
|
|
||||||
@ -1006,7 +1006,7 @@ static AuthResult SYSMi_AuthenticateTWLHeader( TitleProperty *pBootTitle, ROM_He
|
|||||||
OS_TPrintf( "Authenticate_Header failed: header TitleID error\n" );
|
OS_TPrintf( "Authenticate_Header failed: header TitleID error\n" );
|
||||||
OS_TPrintf( "Authenticate_Header failed: selectedTitleID=%.16llx\n", pBootTitle->titleID );
|
OS_TPrintf( "Authenticate_Header failed: selectedTitleID=%.16llx\n", pBootTitle->titleID );
|
||||||
OS_TPrintf( "Authenticate_Header failed: headerTitleID=%.16llx\n", head->s.titleID );
|
OS_TPrintf( "Authenticate_Header failed: headerTitleID=%.16llx\n", head->s.titleID );
|
||||||
return AUTH_RESULT_AUTHENTICATE_FAILED;
|
return AUTH_RESULT_TITLEID_COMPARE_FAILED;
|
||||||
}else
|
}else
|
||||||
{
|
{
|
||||||
OS_TPrintf( "Authenticate_Header : header TitleID check succeed.\n" );
|
OS_TPrintf( "Authenticate_Header : header TitleID check succeed.\n" );
|
||||||
@ -1019,7 +1019,7 @@ static AuthResult SYSMi_AuthenticateTWLHeader( TitleProperty *pBootTitle, ROM_He
|
|||||||
{
|
{
|
||||||
// 署名有効フラグが立っていない 且つ デバッガが有効でTLFを読み込んでいるのでなければFAILED
|
// 署名有効フラグが立っていない 且つ デバッガが有効でTLFを読み込んでいるのでなければFAILED
|
||||||
OS_TPrintf("Authenticate_Header failed: Sign check flag is OFF!\n");
|
OS_TPrintf("Authenticate_Header failed: Sign check flag is OFF!\n");
|
||||||
return AUTH_RESULT_AUTHENTICATE_FAILED;
|
return AUTH_RESULT_VALID_SIGN_FLAG_OFF;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1039,7 +1039,7 @@ static AuthResult SYSMi_AuthenticateTWLTitle( TitleProperty *pBootTitle )
|
|||||||
if( NAM_OK != result)
|
if( NAM_OK != result)
|
||||||
{
|
{
|
||||||
OS_TPrintf("Authenticate failed: NAM_CheckTitleLaunchRights failed. %d \n",result);
|
OS_TPrintf("Authenticate failed: NAM_CheckTitleLaunchRights failed. %d \n",result);
|
||||||
return AUTH_RESULT_AUTHENTICATE_FAILED;
|
return AUTH_RESULT_CHECK_TITLE_LAUNCH_RIGHTS_FAILED;
|
||||||
}else
|
}else
|
||||||
{
|
{
|
||||||
OS_TPrintf("Authenticate : NAM_CheckTitleLaunchRights succeed. %d ms.\n", OS_TicksToMilliSeconds(OS_GetTick() - start) );
|
OS_TPrintf("Authenticate : NAM_CheckTitleLaunchRights succeed. %d ms.\n", OS_TicksToMilliSeconds(OS_GetTick() - start) );
|
||||||
@ -1087,7 +1087,7 @@ static AuthResult SYSMi_AuthenticateTWLTitle( TitleProperty *pBootTitle )
|
|||||||
if(!SVC_CompareSHA1((const void *)hash_addr[l], (const void *)&s_calc_hash[(l+1) * SVC_SHA1_DIGEST_SIZE]))
|
if(!SVC_CompareSHA1((const void *)hash_addr[l], (const void *)&s_calc_hash[(l+1) * SVC_SHA1_DIGEST_SIZE]))
|
||||||
{
|
{
|
||||||
OS_TPrintf("Authenticate failed: %s module hash check failed.\n", str[l]);
|
OS_TPrintf("Authenticate failed: %s module hash check failed.\n", str[l]);
|
||||||
if(!s_b_dev) return AUTH_RESULT_AUTHENTICATE_FAILED;
|
if(!s_b_dev) return AUTH_RESULT_MODULE_HASH_CHECK_FAILED;
|
||||||
}else
|
}else
|
||||||
{
|
{
|
||||||
OS_TPrintf("Authenticate : %s module hash check succeed. %dms.\n", str[l], OS_TicksToMilliSeconds(OS_GetTick() - prev));
|
OS_TPrintf("Authenticate : %s module hash check succeed. %dms.\n", str[l], OS_TicksToMilliSeconds(OS_GetTick() - prev));
|
||||||
@ -1095,7 +1095,7 @@ static AuthResult SYSMi_AuthenticateTWLTitle( TitleProperty *pBootTitle )
|
|||||||
}else
|
}else
|
||||||
{
|
{
|
||||||
OS_TPrintf("Authenticate failed: %s module hash calc failed.\n", str[l]);
|
OS_TPrintf("Authenticate failed: %s module hash calc failed.\n", str[l]);
|
||||||
if(!s_b_dev) return AUTH_RESULT_AUTHENTICATE_FAILED;
|
if(!s_b_dev) return AUTH_RESULT_MODULE_HASH_CALC_FAILED;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1108,7 +1108,7 @@ static AuthResult SYSMi_AuthenticateTWLTitle( TitleProperty *pBootTitle )
|
|||||||
pBootTitle->flags.bootType == LAUNCHER_BOOTTYPE_TEMP) && !(head->s.titleID_Hi & TITLE_ID_HI_MEDIA_MASK) ) ||
|
pBootTitle->flags.bootType == LAUNCHER_BOOTTYPE_TEMP) && !(head->s.titleID_Hi & TITLE_ID_HI_MEDIA_MASK) ) ||
|
||||||
(pBootTitle->flags.bootType == LAUNCHER_BOOTTYPE_ROM && (head->s.titleID_Hi & TITLE_ID_HI_MEDIA_MASK) ) )
|
(pBootTitle->flags.bootType == LAUNCHER_BOOTTYPE_ROM && (head->s.titleID_Hi & TITLE_ID_HI_MEDIA_MASK) ) )
|
||||||
{
|
{
|
||||||
return AUTH_RESULT_AUTHENTICATE_FAILED;
|
return AUTH_RESULT_MEDIA_CHECK_FAILED;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1156,7 +1156,7 @@ static AuthResult SYSMi_AuthenticateNTRDownloadTitle( TitleProperty *pBootTitle)
|
|||||||
// NTRダウンロードアプリ署名のマジックコードチェック
|
// NTRダウンロードアプリ署名のマジックコードチェック
|
||||||
if( s_authcode.magic_code[0] != 'a' || s_authcode.magic_code[1] != 'c' ) {
|
if( s_authcode.magic_code[0] != 'a' || s_authcode.magic_code[1] != 'c' ) {
|
||||||
OS_TPrintf("Authenticate failed: Invalid AuthCode.\n");
|
OS_TPrintf("Authenticate failed: Invalid AuthCode.\n");
|
||||||
return AUTH_RESULT_AUTHENTICATE_FAILED;
|
return AUTH_RESULT_DL_MAGICCODE_CHECK_FAILED;
|
||||||
}
|
}
|
||||||
|
|
||||||
// NTRダウンロードアプリ署名(DERフォーマット)の計算、ハッシュの取得。
|
// NTRダウンロードアプリ署名(DERフォーマット)の計算、ハッシュの取得。
|
||||||
@ -1165,7 +1165,7 @@ static AuthResult SYSMi_AuthenticateNTRDownloadTitle( TitleProperty *pBootTitle)
|
|||||||
if( !SVC_DecryptSignDER( &con, buf, s_authcode.sign, nitro_dl_sign_key ))
|
if( !SVC_DecryptSignDER( &con, buf, s_authcode.sign, nitro_dl_sign_key ))
|
||||||
{
|
{
|
||||||
OS_TPrintf("Authenticate failed: Sign decryption failed.\n");
|
OS_TPrintf("Authenticate failed: Sign decryption failed.\n");
|
||||||
return AUTH_RESULT_AUTHENTICATE_FAILED;
|
return AUTH_RESULT_DL_SIGN_DECRYPTION_FAILED;
|
||||||
}
|
}
|
||||||
|
|
||||||
// それぞれheader,ARM9FLX,ARM7FLXについてハッシュを計算して、それら3つを並べたものに対してまたハッシュをとる
|
// それぞれheader,ARM9FLX,ARM7FLXについてハッシュを計算して、それら3つを並べたものに対してまたハッシュをとる
|
||||||
@ -1177,15 +1177,15 @@ static AuthResult SYSMi_AuthenticateNTRDownloadTitle( TitleProperty *pBootTitle)
|
|||||||
SVC_CalcSHA1( final_hash, s_calc_hash, SVC_SHA1_DIGEST_SIZE * 3 + sizeof(u32));
|
SVC_CalcSHA1( final_hash, s_calc_hash, SVC_SHA1_DIGEST_SIZE * 3 + sizeof(u32));
|
||||||
}else
|
}else
|
||||||
{
|
{
|
||||||
OS_TPrintf("Authenticate failed: hash check failed.\n");
|
OS_TPrintf("Authenticate failed: hash calc failed.\n");
|
||||||
return AUTH_RESULT_AUTHENTICATE_FAILED;
|
return AUTH_RESULT_DL_HASH_CALC_FAILED;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 計算した最終ハッシュと、署名から得たハッシュとを比較
|
// 計算した最終ハッシュと、署名から得たハッシュとを比較
|
||||||
if(!SVC_CompareSHA1((const void *)buf, (const void *)final_hash))
|
if(!SVC_CompareSHA1((const void *)buf, (const void *)final_hash))
|
||||||
{
|
{
|
||||||
OS_TPrintf("Authenticate failed: hash check failed.\n");
|
OS_TPrintf("Authenticate failed: hash check failed.\n");
|
||||||
return AUTH_RESULT_AUTHENTICATE_FAILED;
|
return AUTH_RESULT_DL_SIGN_COMPARE_FAILED;
|
||||||
}else
|
}else
|
||||||
{
|
{
|
||||||
OS_TPrintf("Authenticate : hash check succeed.\n");
|
OS_TPrintf("Authenticate : hash check succeed.\n");
|
||||||
@ -1224,14 +1224,14 @@ static AuthResult SYSMi_AuthenticateNTRCardAppHeader( TitleProperty *pBootTitle,
|
|||||||
if(!dht)
|
if(!dht)
|
||||||
{
|
{
|
||||||
OS_TPrintf(" Search DHT : database init Failed.\n");
|
OS_TPrintf(" Search DHT : database init Failed.\n");
|
||||||
return AUTH_RESULT_AUTHENTICATE_FAILED;
|
return AUTH_RESULT_WHITELIST_INITDB_FAILED;
|
||||||
}
|
}
|
||||||
OS_TPrintf("Searching DHT for %.4s(%02X)...", head->s.game_code, head->s.rom_version);
|
OS_TPrintf("Searching DHT for %.4s(%02X)...", head->s.game_code, head->s.rom_version);
|
||||||
db = DHT_GetDatabase(dht, &head->s);
|
db = DHT_GetDatabase(dht, &head->s);
|
||||||
if ( !db )
|
if ( !db )
|
||||||
{
|
{
|
||||||
OS_TPrintf(" Search DHT : Failed.\n");
|
OS_TPrintf(" Search DHT : Failed.\n");
|
||||||
return AUTH_RESULT_AUTHENTICATE_FAILED;
|
return AUTH_RESULT_WHITELIST_NOTFOUND;
|
||||||
}
|
}
|
||||||
hash0 = db->hash[0];
|
hash0 = db->hash[0];
|
||||||
hash1 = db->hash[1];
|
hash1 = db->hash[1];
|
||||||
@ -1262,7 +1262,7 @@ static AuthResult SYSMi_AuthenticateNTRCardTitle( TitleProperty *pBootTitle)
|
|||||||
if ( !DHT_CheckHashPhase1Final(&ctx, hash0) )
|
if ( !DHT_CheckHashPhase1Final(&ctx, hash0) )
|
||||||
{
|
{
|
||||||
OS_TPrintf(" DHT Phase1 : Failed.\n");
|
OS_TPrintf(" DHT Phase1 : Failed.\n");
|
||||||
return AUTH_RESULT_AUTHENTICATE_FAILED;
|
return AUTH_RESULT_DHT_PHASE1_FAILED;
|
||||||
}
|
}
|
||||||
|
|
||||||
// DHTチェックphase2(phase1はstaticの読み込み時に平行処理)
|
// DHTチェックphase2(phase1はstaticの読み込み時に平行処理)
|
||||||
@ -1272,7 +1272,7 @@ static AuthResult SYSMi_AuthenticateNTRCardTitle( TitleProperty *pBootTitle)
|
|||||||
{
|
{
|
||||||
OS_TPrintf(" DHT Phase2 : Failed.\n");
|
OS_TPrintf(" DHT Phase2 : Failed.\n");
|
||||||
SYSM_Free(p2work);
|
SYSM_Free(p2work);
|
||||||
return AUTH_RESULT_AUTHENTICATE_FAILED;
|
return AUTH_RESULT_DHT_PHASE2_FAILED;
|
||||||
}
|
}
|
||||||
SYSM_Free(p2work);
|
SYSM_Free(p2work);
|
||||||
|
|
||||||
@ -1301,11 +1301,11 @@ static AuthResult SYSMi_AuthenticateHeader( TitleProperty *pBootTitle, ROM_Heade
|
|||||||
if (!hs->permit_landing_tmp_jump)
|
if (!hs->permit_landing_tmp_jump)
|
||||||
{
|
{
|
||||||
OS_TPrintf("Authenticate failed: TMP flag error.\n");
|
OS_TPrintf("Authenticate failed: TMP flag error.\n");
|
||||||
return AUTH_RESULT_AUTHENTICATE_FAILED;
|
return AUTH_RESULT_LANDING_TMP_JUMP_FLAG_OFF;
|
||||||
}
|
}
|
||||||
return SYSMi_AuthenticateTWLHeader( pBootTitle, head );
|
return SYSMi_AuthenticateTWLHeader( pBootTitle, head );
|
||||||
default:
|
default:
|
||||||
return AUTH_RESULT_AUTHENTICATE_FAILED;
|
return AUTH_RESULT_TWL_BOOTTYPE_UNKNOWN;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -1314,7 +1314,7 @@ static AuthResult SYSMi_AuthenticateHeader( TitleProperty *pBootTitle, ROM_Heade
|
|||||||
{
|
{
|
||||||
// TWLでもNTRでもない不正なアプリ
|
// TWLでもNTRでもない不正なアプリ
|
||||||
OS_TPrintf( "Authenticate_Header failed :NOT NTR NOT TWL.\n" );
|
OS_TPrintf( "Authenticate_Header failed :NOT NTR NOT TWL.\n" );
|
||||||
return AUTH_RESULT_AUTHENTICATE_FAILED;
|
return AUTH_RESULT_PLATFORM_UNKNOWN;
|
||||||
}
|
}
|
||||||
// NTRアプリ
|
// NTRアプリ
|
||||||
switch( pBootTitle->flags.bootType )
|
switch( pBootTitle->flags.bootType )
|
||||||
@ -1327,14 +1327,14 @@ static AuthResult SYSMi_AuthenticateHeader( TitleProperty *pBootTitle, ROM_Heade
|
|||||||
if (!hs->permit_landing_tmp_jump)
|
if (!hs->permit_landing_tmp_jump)
|
||||||
{
|
{
|
||||||
OS_TPrintf("Authenticate_Header failed : TMP flag error.\n");
|
OS_TPrintf("Authenticate_Header failed : TMP flag error.\n");
|
||||||
return AUTH_RESULT_AUTHENTICATE_FAILED;
|
return AUTH_RESULT_LANDING_TMP_JUMP_FLAG_OFF;
|
||||||
}
|
}
|
||||||
return SYSMi_AuthenticateNTRDownloadAppHeader( pBootTitle, head );
|
return SYSMi_AuthenticateNTRDownloadAppHeader( pBootTitle, head );
|
||||||
case LAUNCHER_BOOTTYPE_ROM:
|
case LAUNCHER_BOOTTYPE_ROM:
|
||||||
OS_TPrintf( "Authenticate_Header :NTR_ROM start.\n" );
|
OS_TPrintf( "Authenticate_Header :NTR_ROM start.\n" );
|
||||||
return SYSMi_AuthenticateNTRCardAppHeader( pBootTitle, head );
|
return SYSMi_AuthenticateNTRCardAppHeader( pBootTitle, head );
|
||||||
default:
|
default:
|
||||||
return AUTH_RESULT_AUTHENTICATE_FAILED;
|
return AUTH_RESULT_NTR_BOOTTYPE_UNKNOWN;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1361,11 +1361,11 @@ static AuthResult SYSMi_AuthenticateTitleCore( TitleProperty *pBootTitle)
|
|||||||
if (!hs->permit_landing_tmp_jump)
|
if (!hs->permit_landing_tmp_jump)
|
||||||
{
|
{
|
||||||
OS_TPrintf("Authenticate failed: TMP flag error.\n");
|
OS_TPrintf("Authenticate failed: TMP flag error.\n");
|
||||||
return AUTH_RESULT_AUTHENTICATE_FAILED;
|
return AUTH_RESULT_LANDING_TMP_JUMP_FLAG_OFF;
|
||||||
}
|
}
|
||||||
return SYSMi_AuthenticateTWLTitle( pBootTitle );
|
return SYSMi_AuthenticateTWLTitle( pBootTitle );
|
||||||
default:
|
default:
|
||||||
return AUTH_RESULT_AUTHENTICATE_FAILED;
|
return AUTH_RESULT_TWL_BOOTTYPE_UNKNOWN;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -1374,7 +1374,7 @@ static AuthResult SYSMi_AuthenticateTitleCore( TitleProperty *pBootTitle)
|
|||||||
{
|
{
|
||||||
// TWLでもNTRでもない不正なアプリ
|
// TWLでもNTRでもない不正なアプリ
|
||||||
OS_TPrintf( "Authenticate :NOT NTR NOT TWL.\n" );
|
OS_TPrintf( "Authenticate :NOT NTR NOT TWL.\n" );
|
||||||
return AUTH_RESULT_AUTHENTICATE_FAILED;
|
return AUTH_RESULT_PLATFORM_UNKNOWN;
|
||||||
}
|
}
|
||||||
// NTRアプリ
|
// NTRアプリ
|
||||||
switch( pBootTitle->flags.bootType )
|
switch( pBootTitle->flags.bootType )
|
||||||
@ -1387,14 +1387,14 @@ static AuthResult SYSMi_AuthenticateTitleCore( TitleProperty *pBootTitle)
|
|||||||
if (!hs->permit_landing_tmp_jump)
|
if (!hs->permit_landing_tmp_jump)
|
||||||
{
|
{
|
||||||
OS_TPrintf("Authenticate failed: TMP flag error.\n");
|
OS_TPrintf("Authenticate failed: TMP flag error.\n");
|
||||||
return AUTH_RESULT_AUTHENTICATE_FAILED;
|
return AUTH_RESULT_LANDING_TMP_JUMP_FLAG_OFF;
|
||||||
}
|
}
|
||||||
return SYSMi_AuthenticateNTRDownloadTitle( pBootTitle );
|
return SYSMi_AuthenticateNTRDownloadTitle( pBootTitle );
|
||||||
case LAUNCHER_BOOTTYPE_ROM:
|
case LAUNCHER_BOOTTYPE_ROM:
|
||||||
OS_TPrintf( "Authenticate :NTR_ROM start.\n" );
|
OS_TPrintf( "Authenticate :NTR_ROM start.\n" );
|
||||||
return SYSMi_AuthenticateNTRCardTitle( pBootTitle );
|
return SYSMi_AuthenticateNTRCardTitle( pBootTitle );
|
||||||
default:
|
default:
|
||||||
return AUTH_RESULT_AUTHENTICATE_FAILED;
|
return AUTH_RESULT_NTR_BOOTTYPE_UNKNOWN;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -112,6 +112,8 @@ static fx32 s_selected_banner_size;
|
|||||||
static BOOL s_wavstop = FALSE;
|
static BOOL s_wavstop = FALSE;
|
||||||
static BannerCounter banner_counter[LAUNCHER_TITLE_LIST_NUM];
|
static BannerCounter banner_counter[LAUNCHER_TITLE_LIST_NUM];
|
||||||
|
|
||||||
|
static BOOL s_launcher_initialized = FALSE;
|
||||||
|
|
||||||
//static StreamInfo strm; // stream info
|
//static StreamInfo strm; // stream info
|
||||||
|
|
||||||
// const data -----------------------------------------
|
// const data -----------------------------------------
|
||||||
@ -385,7 +387,12 @@ static void BannerDraw(int selected, TitleProperty *titleprop)
|
|||||||
void LauncherInit( TitleProperty *pTitleList )
|
void LauncherInit( TitleProperty *pTitleList )
|
||||||
{
|
{
|
||||||
#pragma unused( pTitleList )
|
#pragma unused( pTitleList )
|
||||||
|
if(s_launcher_initialized)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
s_launcher_initialized = TRUE;
|
||||||
InitBG(); // BG<42>‰Šú‰»
|
InitBG(); // BG<42>‰Šú‰»
|
||||||
|
|
||||||
GX_DispOff();
|
GX_DispOff();
|
||||||
|
|||||||
@ -45,6 +45,38 @@ static StreamInfo s_strm; // stream info
|
|||||||
|
|
||||||
const char filename[] = "data/fanfare.32.wav";
|
const char filename[] = "data/fanfare.32.wav";
|
||||||
|
|
||||||
|
static const char *error_msg[AUTH_RESULT_MAX] =
|
||||||
|
{
|
||||||
|
"SUCCEEDED",
|
||||||
|
"PROCESSING",
|
||||||
|
"TITLE_LOAD_FAILED",
|
||||||
|
"TITLE_POINTER_ERROR",
|
||||||
|
"AUTHENTICATE_FAILED",
|
||||||
|
"ENTRY_ADDRESS_ERROR",
|
||||||
|
"TITLE_BOOTTYPE_ERROR",
|
||||||
|
"SIGN_DECRYPTION_FAILED",
|
||||||
|
"SIGN_COMPARE_FAILED",
|
||||||
|
"HEADER_HASH_CALC_FAILED",
|
||||||
|
"TITLEID_COMPARE_FAILED",
|
||||||
|
"VALID_SIGN_FLAG_OFF",
|
||||||
|
"CHECK_TITLE_LAUNCH_RIGHTS_FAILED",
|
||||||
|
"MODULE_HASH_CHECK_FAILED",
|
||||||
|
"MODULE_HASH_CALC_FAILED",
|
||||||
|
"MEDIA_CHECK_FAILED",
|
||||||
|
"DL_MAGICCODE_CHECK_FAILED",
|
||||||
|
"DL_SIGN_DECRYPTION_FAILED",
|
||||||
|
"DL_HASH_CALC_FAILED",
|
||||||
|
"DL_SIGN_COMPARE_FAILED",
|
||||||
|
"WHITELIST_INITDB_FAILED",
|
||||||
|
"WHITELIST_NOTFOUND",
|
||||||
|
"DHT_PHASE1_FAILED",
|
||||||
|
"DHT_PHASE2_FAILED",
|
||||||
|
"LANDING_TMP_JUMP_FLAG_OFF",
|
||||||
|
"TWL_BOOTTYPE_UNKNOWN",
|
||||||
|
"NTR_BOOTTYPE_UNKNOWN",
|
||||||
|
"PLATFORM_UNKNOWN"
|
||||||
|
};
|
||||||
|
|
||||||
//#define DEBUG_LAUNCHER_DUMP
|
//#define DEBUG_LAUNCHER_DUMP
|
||||||
#ifdef DEBUG_LAUNCHER_DUMP
|
#ifdef DEBUG_LAUNCHER_DUMP
|
||||||
// デバグ用。SDに0x02ffc000から0x02ffe000までdump.datというダンプを吐く
|
// デバグ用。SDに0x02ffc000から0x02ffe000までdump.datというダンプを吐く
|
||||||
@ -308,16 +340,18 @@ void TwlMain( void )
|
|||||||
case AUTH_RESULT_TITLE_POINTER_ERROR:
|
case AUTH_RESULT_TITLE_POINTER_ERROR:
|
||||||
case AUTH_RESULT_AUTHENTICATE_FAILED:
|
case AUTH_RESULT_AUTHENTICATE_FAILED:
|
||||||
case AUTH_RESULT_ENTRY_ADDRESS_ERROR:
|
case AUTH_RESULT_ENTRY_ADDRESS_ERROR:
|
||||||
|
default:
|
||||||
state = STOP;
|
state = STOP;
|
||||||
// [TODO:]クリアしたほうが良いデータ(鍵など)があれば消す
|
// [TODO:]クリアしたほうが良いデータ(鍵など)があれば消す
|
||||||
|
|
||||||
// デバグ表示
|
// デバグ表示
|
||||||
if( !SYSM_IsLauncherHidden() )
|
if( !SYSM_IsLauncherHidden() )
|
||||||
{
|
{
|
||||||
|
LauncherInit( s_titleList );
|
||||||
NNS_G2dCharCanvasClear( &gCanvas, TXT_COLOR_NULL );
|
NNS_G2dCharCanvasClear( &gCanvas, TXT_COLOR_NULL );
|
||||||
G2_ChangeBlendAlpha( 0, 31 );
|
G2_ChangeBlendAlpha( 0, 31 );
|
||||||
PrintfSJIS( 1, 38, TXT_COLOR_RED," LAUNCHER : ERROR OCCURRED!\n" );
|
PrintfSJIS( 1, 25, TXT_COLOR_RED," LAUNCHER : ERROR OCCURRED!\n" );
|
||||||
PrintfSJIS( 1, 24, TXT_COLOR_RED," ERROR CODE = 0x%0.8x\n",res );
|
PrintfSJIS( 1, 40, TXT_COLOR_RED," %s",error_msg[res] );
|
||||||
GX_DispOn();
|
GX_DispOn();
|
||||||
GXS_DispOn();
|
GXS_DispOn();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -65,7 +65,30 @@ typedef enum AuthResult {
|
|||||||
AUTH_RESULT_TITLE_POINTER_ERROR = 3,
|
AUTH_RESULT_TITLE_POINTER_ERROR = 3,
|
||||||
AUTH_RESULT_AUTHENTICATE_FAILED = 4,
|
AUTH_RESULT_AUTHENTICATE_FAILED = 4,
|
||||||
AUTH_RESULT_ENTRY_ADDRESS_ERROR = 5,
|
AUTH_RESULT_ENTRY_ADDRESS_ERROR = 5,
|
||||||
AUTH_RESULT_TITLE_BOOTTYPE_ERROR = 6
|
AUTH_RESULT_TITLE_BOOTTYPE_ERROR = 6,
|
||||||
|
AUTH_RESULT_SIGN_DECRYPTION_FAILED = 7,
|
||||||
|
AUTH_RESULT_SIGN_COMPARE_FAILED = 8,
|
||||||
|
AUTH_RESULT_HEADER_HASH_CALC_FAILED = 9,
|
||||||
|
AUTH_RESULT_TITLEID_COMPARE_FAILED = 10,
|
||||||
|
AUTH_RESULT_VALID_SIGN_FLAG_OFF = 11,
|
||||||
|
AUTH_RESULT_CHECK_TITLE_LAUNCH_RIGHTS_FAILED = 12,
|
||||||
|
AUTH_RESULT_MODULE_HASH_CHECK_FAILED = 13,
|
||||||
|
AUTH_RESULT_MODULE_HASH_CALC_FAILED = 14,
|
||||||
|
AUTH_RESULT_MEDIA_CHECK_FAILED = 15,
|
||||||
|
AUTH_RESULT_DL_MAGICCODE_CHECK_FAILED = 16,
|
||||||
|
AUTH_RESULT_DL_SIGN_DECRYPTION_FAILED = 17,
|
||||||
|
AUTH_RESULT_DL_HASH_CALC_FAILED = 18,
|
||||||
|
AUTH_RESULT_DL_SIGN_COMPARE_FAILED = 19,
|
||||||
|
AUTH_RESULT_WHITELIST_INITDB_FAILED = 20,
|
||||||
|
AUTH_RESULT_WHITELIST_NOTFOUND = 21,
|
||||||
|
AUTH_RESULT_DHT_PHASE1_FAILED = 22,
|
||||||
|
AUTH_RESULT_DHT_PHASE2_FAILED = 23,
|
||||||
|
AUTH_RESULT_LANDING_TMP_JUMP_FLAG_OFF = 24,
|
||||||
|
AUTH_RESULT_TWL_BOOTTYPE_UNKNOWN = 25,
|
||||||
|
AUTH_RESULT_NTR_BOOTTYPE_UNKNOWN = 26,
|
||||||
|
AUTH_RESULT_PLATFORM_UNKNOWN = 27,
|
||||||
|
|
||||||
|
AUTH_RESULT_MAX = 28
|
||||||
}AuthResult;
|
}AuthResult;
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user