From 95d7418f97137c5ab92587d823bb20aa9b8379cd Mon Sep 17 00:00:00 2001 From: yutaka Date: Mon, 6 Apr 2009 07:54:14 +0000 Subject: [PATCH] =?UTF-8?q?=E3=83=9B=E3=83=AF=E3=82=A4=E3=83=88=E3=83=AA?= =?UTF-8?q?=E3=82=B9=E3=83=88=E5=91=A8=E3=82=8A=E3=81=AE=E3=83=90=E3=82=B0?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@2790 b08762b0-b915-fc4b-9d8c-17b2551a87ff --- .../sysmenu/ARM9/src/title.c | 24 +++++++++++++------ 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/build/libraries_sysmenu/sysmenu/ARM9/src/title.c b/build/libraries_sysmenu/sysmenu/ARM9/src/title.c index cc3eddc8..fb0201b8 100644 --- a/build/libraries_sysmenu/sysmenu/ARM9/src/title.c +++ b/build/libraries_sysmenu/sysmenu/ARM9/src/title.c @@ -344,7 +344,7 @@ static BOOL PrepareDHTDatabase(void) #endif } // 個別対応データベース - s_dht.dhtah = (void*)((u32)s_dht.buffer + DHT_GetDatabaseExLength(s_dht.dhtex)); + s_dht.dhtah = (void*)((u32)s_dht.buffer + DHT_GetDatabaseLength(s_dht.dht) + DHT_GetDatabaseExLength(s_dht.dhtex)); if ( sizeof(DHTHeader) != FS_ReadFile(&file, &s_dht.dhtah->header, sizeof(DHTHeader)) ) { s_dht.dhtah = NULL; @@ -1465,7 +1465,7 @@ static BOOL SYSMi_AuthenticateNTRDownloadTitle( TitleProperty *pBootTitle) UTL_SetFatalError(FATAL_ERROR_DL_SIGN_DECRYPTION_FAILED); return FALSE; } - + // それぞれheader,ARM9FLX,ARM7FLXについてハッシュを計算して、それら3つを並べたものに対してまたハッシュをとる if(s_calc_hash) { @@ -1479,7 +1479,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)) { @@ -1492,7 +1492,7 @@ static BOOL SYSMi_AuthenticateNTRDownloadTitle( TitleProperty *pBootTitle) } } OS_TPrintf("Authenticate : total %d ms.\n", OS_TicksToMilliSeconds(OS_GetTick() - start) ); - + return TRUE; } @@ -1719,18 +1719,28 @@ static BOOL SYSMi_AuthenticateNTRCardTitle( TitleProperty *pBootTitle) // DHTチェックphase3 (バナーチェック) OS_TPrintf("DHT Phase3..."); - if ( !s_dht.hash3 || !DHT_CheckHashPhase3(s_dht.hash3, (NTRBannerFile*)&s_card_bannerBuf) ) + if ( !s_dht.hash3 ) + { + if(!s_b_dev){ + // デバグ用。ERRORLOG_Init()がすでに呼ばれている事前提 + ERRORLOG_Printf( "DHT_PAHSE3_FAILED (sub info): no database no hash\n" ); +#ifndef SYSM_IGNORE_DHT_EX_NOT_FOUND + SYSM_Free(p2work); + UTL_SetFatalError(FATAL_ERROR_DHT_PHASE3_FAILED); + return FALSE; +#endif + } + } + else if ( !DHT_CheckHashPhase3(s_dht.hash3, (NTRBannerFile*)&s_card_bannerBuf) ) { OS_TPrintf(" DHT Phase3 : Failed.\n"); if(!s_b_dev){ // デバグ用。ERRORLOG_Init()がすでに呼ばれている事前提 ERRORLOG_Printf( "DHT_PAHSE3_FAILED (sub info): hash3Addr-%08x\n", s_dht.hash3 ); -#ifndef SYSM_IGNORE_DHT_EX_NOT_FOUND #ifndef SYSM_IGNORE_DHT_PHASE_3 SYSM_Free(p2work); UTL_SetFatalError(FATAL_ERROR_DHT_PHASE3_FAILED); return FALSE; -#endif #endif } }