From f88d4aaa4984d9d8630364975977f087c52652fa Mon Sep 17 00:00:00 2001 From: yosiokat Date: Wed, 14 May 2008 07:44:11 +0000 Subject: [PATCH] =?UTF-8?q?=E3=83=97=E3=83=AA=E3=83=AD=E3=83=BC=E3=83=89?= =?UTF-8?q?=E3=83=91=E3=83=A9=E3=83=A1=E3=83=BC=E3=82=BF=E3=82=92reboot?= =?UTF-8?q?=E5=86=85=E3=81=A7WL=E3=83=AC=E3=82=B8=E3=82=B9=E3=82=BF?= =?UTF-8?q?=E3=81=AE=E5=88=A4=E5=AE=9A=E3=82=92=E3=81=97=E3=81=9F=E5=BE=8C?= =?UTF-8?q?=E3=81=ABHW=5FPARAM=5FTWL=5FSETTINGS=5FDATA=5FDEFAULT=20?= =?UTF-8?q?=E3=81=AB=E3=82=B3=E3=83=94=E3=83=BC=E3=81=99=E3=82=8B=E3=82=88?= =?UTF-8?q?=E3=81=86=E5=A4=89=E6=9B=B4=E3=80=82?= 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@1341 b08762b0-b915-fc4b-9d8c-17b2551a87ff --- .../sysmenu/ARM9/src/sysmenu_lib.c | 13 +++- build/systemMenu_RED/Launcher/ARM9/src/main.c | 75 +++++++++++++++++++ 2 files changed, 84 insertions(+), 4 deletions(-) diff --git a/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c b/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c index c207c3ee..0ccb862e 100644 --- a/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c +++ b/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c @@ -27,7 +27,7 @@ extern void LCFG_VerifyAndRecoveryNTRSettings( void ); // function's prototype------------------------------------------------------- -static void SYSMi_CopyLCFGData( void ); +static void SYSMi_CopyLCFGData( u32 dst_addr ); static TitleProperty *SYSMi_CheckDebuggerBannerViewModeBoot( void ); static TitleProperty *SYSMi_CheckShortcutBoot1( void ); static TitleProperty *SYSMi_CheckShortcutBoot2( void ); @@ -45,6 +45,9 @@ SYSM_work *pSysm; // ROM_Header_Short *pRomHeader; #endif // static variable------------------------------------------------------------- +static u8 s_lcfgBuffer[ HW_PARAM_TWL_SETTINGS_DATA_SIZE // 0x01fc + + HW_PARAM_WIRELESS_FIRMWARE_DATA_SIZE // 0x0004 + + HW_PARAM_TWL_HW_NORMAL_INFO_SIZE ] ATTRIBUTE_ALIGN(32); // 0x1000 static TitleProperty s_bootTitleBuf; @@ -63,7 +66,7 @@ void SYSM_Init( void *(*pAlloc)(u32), void (*pFree)(void*) ) pSysm = SYSMi_GetWork(); pRomHeader = (ROM_Header_Short *)0x027fc000; #endif /* SYSM_DEBUG_ */ - + // ARM7で使用する分の鍵を渡す SYSMi_SendKeysToARM7(); @@ -174,7 +177,7 @@ TitleProperty *SYSM_ReadParameters( void ) //----------------------------------------------------- // NTRカードアプリARM9コードのロード領域とメモリがかち合うが、先頭0x4000はセキュア領域で別バッファに格納されるので、 // ここでこれらのパラメータをロードしても大丈夫。 - SYSMi_CopyLCFGData(); + SYSMi_CopyLCFGData( (u32)s_lcfgBuffer ); //----------------------------------------------------- // 無線ON/OFFフラグをもとに、LEDを設定する。 @@ -292,8 +295,10 @@ TitleProperty *SYSM_ReadParameters( void ) // 本体設定データなどのメモリ展開。 -static void SYSMi_CopyLCFGData( void ) +static void SYSMi_CopyLCFGData( u32 dst_addr ) { + *(u32 *)HW_PRELOAD_PARAMETER_ADDR = dst_addr; + // 本体設定データ、HWノーマル情報、HWセキュア情報をメモリに展開しておく MI_CpuCopyFast( LCFGi_GetTSD(), (void *)HW_PARAM_TWL_SETTINGS_DATA, sizeof(LCFGTWLSettingsData) ); MI_CpuCopyFast( LCFGi_GetHWN(), (void *)HW_PARAM_TWL_HW_NORMAL_INFO, sizeof(LCFGTWLHWNormalInfo) ); diff --git a/build/systemMenu_RED/Launcher/ARM9/src/main.c b/build/systemMenu_RED/Launcher/ARM9/src/main.c index 3cd79bbb..33e10020 100644 --- a/build/systemMenu_RED/Launcher/ARM9/src/main.c +++ b/build/systemMenu_RED/Launcher/ARM9/src/main.c @@ -357,3 +357,78 @@ static void deleteTmp() } } } + +#define OS_SHARED_FONT_FILE_NAME_LENGTH 0x20 + +typedef struct OSSharedFontHeader { + u32 timestamp; + u16 fontNum; + u8 pad[ 6 ]; + u8 digest[ SVC_SHA1_DIGEST_SIZE ]; +}OSSharedFontHeader; + +typedef struct OSSharedFontInfo { + u8 fileName[ OS_SHARED_FONT_FILE_NAME_LENGTH ]; + u8 pad[ 4 ]; + u32 offset; + u32 length; + u8 digest[ SVC_SHA1_DIGEST_SIZE ]; +}OSSharedFontInfo; + +#if 0 +BOOL ReadSharedFontTable( void ) +{ +#define SIGN_SIZE 0x80 +#define HEADER_SIZE 0x20 + const char *pPath = "sdmc:/TWLFontTable.dat"; + FSFile file[1]; + u8 signature[ SIGN_SIZE ]; + OSSharedFontHeader header; + u8 calc_digest[ SVC_SHA1_DIGEST_SIZE ]; + u8 sign_digest[ SVC_SHA1_DIGEST_SIZE ]; + static u32 heap[ 4096 / sizeof(u32) ]; + SVCSignHeapContext acmemoryPool; + u32 len = 0; + + if( !FS_OpenFileEx( file, pPath, FS_FILEMODE_R ) ) { + return FALSE; + } + + // 署名リード + if( FS_ReadFile( file, signature, SIGN_SIZE ) != SIGN_SIZE ){ + goto ERROR; + } + + // ヘッダリード + if( FS_ReadFile( file, header, HEADER_SIZE ) != HEADER_SIZE ){ + goto ERROR; + } + + // ヘッダ署名チェック + SVC_InitSignHeap( &acmemoryPool, heap, 4096 ); + if( !SVC_DecryptSign( &acmemoryPool, sign_digest, signature, pPubKey ) ) { + goto ERROR; + } + + // フォントInfoテーブルリード + len = sizeof(OSSHaredFontInfo) * header->fontNum; + if( FS_ReadFile( file, infoTable, len ) != len ){ + goto ERROR; + } + + // フォントInfoテーブル ハッシュチェック + SVC_CalcSHA1( calc_digest, infoTable, len ); + if( !SVC_CompareSHA1( calc_digest, header->digest ) ) { + return FALSE; + } + + + + FS_CloseFile( file ); + + +ERROR: + FS_CloseFile( file ); + return FALSE; +} +#endif