From 3dc7cc8bf2baab616abeab37f37990751bf550a2 Mon Sep 17 00:00:00 2001 From: yoshida_teruhisa Date: Fri, 15 Feb 2008 05:08:23 +0000 Subject: [PATCH] =?UTF-8?q?=E3=82=AB=E3=83=BC=E3=83=89=E3=83=96=E3=83=BC?= =?UTF-8?q?=E3=83=88=E6=99=82=E3=81=AEARM9FLX=E3=83=A2=E3=82=B8=E3=83=A5?= =?UTF-8?q?=E3=83=BC=E3=83=AB=E3=83=8F=E3=83=83=E3=82=B7=E3=83=A5=E3=83=81?= =?UTF-8?q?=E3=82=A7=E3=83=83=E3=82=AF=E7=94=A8=E3=81=AE=E6=BA=96=E5=82=99?= =?UTF-8?q?=EF=BC=88work2=EF=BC=89=E5=AE=8C=E4=BA=86?= 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@672 b08762b0-b915-fc4b-9d8c-17b2551a87ff --- .../sysmenu/ARM9/src/title.c | 20 +++++++++++++++---- .../sysmenu/sysmenu_lib/common/sysmenu_work.h | 5 +++++ 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/build/libraries_sysmenu/sysmenu/ARM9/src/title.c b/build/libraries_sysmenu/sysmenu/ARM9/src/title.c index d9eb6668..9eb9635e 100644 --- a/build/libraries_sysmenu/sysmenu/ARM9/src/title.c +++ b/build/libraries_sysmenu/sysmenu/ARM9/src/title.c @@ -29,6 +29,7 @@ #define SIGN_HEAP_ADDR 0x023c0000 // 署名計算のためのヒープ領域開始アドレス #define SIGN_HEAP_SIZE 0x1000 // 署名計算のためのヒープサイズ +#define ARM9_ENCRYPT_DEF_SIZE 0x800 // ARM9FLXの先頭暗号化部分のサイズ #define DIGEST_HASH_BLOCK_SIZE_SHA1 (512/8) #define ROM_HEADER_HASH_CALC_DATA_LEN 0xe00 // ROMヘッダのハッシュ計算する部分の長さ @@ -696,8 +697,6 @@ static AuthResult SYSMi_AuthenticateHeader( TitleProperty *pBootTitle ) for( l=0; lflags.bootType == LAUNCHER_BOOTTYPE_ROM && l == 0) continue; prev = OS_GetTick(); // 一時的に格納位置をずらしている場合は、再配置情報からモジュール格納アドレスを取得 if( SYSMi_GetWork()->romRelocateInfo[l].src != NULL ) @@ -705,8 +704,21 @@ static AuthResult SYSMi_AuthenticateHeader( TitleProperty *pBootTitle ) module_addr[l] = (u32 *)SYSMi_GetWork()->romRelocateInfo[l].src; } // ハッシュ計算 - SVC_CalcHMACSHA1( &calculated_hash, (const void*)module_addr[l], module_size[l], - (void *)s_digestDefaultKey, DIGEST_HASH_BLOCK_SIZE_SHA1 ); + if( pBootTitle->flags.bootType == LAUNCHER_BOOTTYPE_ROM && l == 0) + { + // [TODO:]カードの場合のARM9_STATICハッシュチェック + // カード読み込み時、work2に暗号化オブジェクト部分のハッシュ計算済みのコンテキストが保存されるので + // それを用いてARM9_STATIC残りの部分を計算 + continue; + SVC_HMACSHA1Update( &(SYSMi_GetWork2()->hmac_sha1_context), + (const void*)(module_addr[l] + ARM9_ENCRYPT_DEF_SIZE), + (module_size[l] - ARM9_ENCRYPT_DEF_SIZE) ); + SVC_HMACSHA1GetHash( &(SYSMi_GetWork2()->hmac_sha1_context), &calculated_hash ); + }else + { + SVC_CalcHMACSHA1( &calculated_hash, (const void*)module_addr[l], module_size[l], + (void *)s_digestDefaultKey, DIGEST_HASH_BLOCK_SIZE_SHA1 ); + } // 比較 if(!SVC_CompareSHA1((const void *)hash_addr[l], (const void *)&calculated_hash)) { diff --git a/include/sysmenu/sysmenu_lib/common/sysmenu_work.h b/include/sysmenu/sysmenu_lib/common/sysmenu_work.h index 00944da7..91f486e3 100644 --- a/include/sysmenu/sysmenu_lib/common/sysmenu_work.h +++ b/include/sysmenu/sysmenu_lib/common/sysmenu_work.h @@ -127,6 +127,10 @@ typedef struct SYSM_work { u8 rtcStatus; }SYSM_work; +typedef struct SYSM_work2 { + SVCHMACSHA1Context hmac_sha1_context; +}SYSM_work2; + // NTRにおける仕様を継承する必要のあるワーク typedef struct SDKBootCheckInfo{ u32 nCardID; // NORMALカードID // SDKではここだけ見ているっぽい ※最終的にはランチャーでここにカードIDをセットする @@ -153,6 +157,7 @@ typedef struct SDKBootCheckInfo{ // SYSM共有ワークの取得 #define SYSMi_GetWork() ( (SYSM_work *)HW_TWL_MAIN_MEM_SHARED ) +#define SYSMi_GetWork2() ( (SYSM_work2 *)HW_MAIN_MEM_SHARED ) // SDKブートチェック(アプリ起動時にカードIDをセットする必要がある。) #define SYSMi_GetSDKBootCheckInfo() ( (SDKBootCheckInfo *)HW_BOOT_CHECK_INFO_BUF )