mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
フォント変更によるハッシュ値の更新。 SystemMenu Versionの仕様変更に伴うハッシュ値の更新。 項目にWhiteListを追加。 InstalledContentVersionの表記を"(major).(minor)"に変更 git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@2120 b08762b0-b915-fc4b-9d8c-17b2551a87ff
122 lines
3.3 KiB
C
122 lines
3.3 KiB
C
#include <twl.h>
|
|
#include <twl/os/common/sharedFont.h>
|
|
|
|
#include "misc.h"
|
|
#include "viewSystemInfo.h"
|
|
#include "strResource.h"
|
|
#include "getInformation.h"
|
|
#include "util.h"
|
|
|
|
#define NUM_FONT_HASHDATA 3
|
|
|
|
const static char* s_strFontHash[] = {
|
|
"07381F6C1FF7421BA309196FA9FC750706B031AD",
|
|
"EF271DAD8B67EDB3DDE2655C6C35288D1334132D",
|
|
"28e68d0496ab28d7f082b70fc8f4f9081dee2ccc"
|
|
};
|
|
|
|
FontInfo gFontInfo[ OS_SHARED_FONT_MAX ];
|
|
|
|
void loadFontName( OSSharedFontIndex idx );
|
|
void loadFont( OSSharedFontIndex idx );
|
|
BOOL checkFontHash( OSSharedFontIndex idx );
|
|
|
|
|
|
void getFontInfo( void )
|
|
{
|
|
u32 time;
|
|
int tableSize = 0;
|
|
u8 *tableBuf;
|
|
OSSharedFontIndex fontIdx;
|
|
|
|
OS_InitSharedFont();
|
|
|
|
// フォントテーブルバッファの確保
|
|
tableSize = OS_GetSharedFontTableSize();
|
|
tableBuf = (u8*) Alloc ( (u32)tableSize );
|
|
|
|
time = OS_GetSharedFontTimestamp();
|
|
OS_TPrintf("SharedFont Time Stamp %08lx\n", time );
|
|
gAllInfo[MENU_FONT][FONT_TIMESTAMP].iValue = (int) time;
|
|
gAllInfo[MENU_FONT][FONT_TIMESTAMP].isNumData = TRUE;
|
|
|
|
if( ! OS_LoadSharedFontTable( (void*)tableBuf ) )
|
|
{
|
|
OS_TPrintf("Loading shared font table failed.\n");
|
|
return;
|
|
}
|
|
|
|
for( fontIdx = (OSSharedFontIndex) 0; fontIdx < OS_SHARED_FONT_MAX; fontIdx++ )
|
|
{
|
|
loadFontName( fontIdx );
|
|
|
|
// サイズ取得
|
|
gFontInfo[fontIdx].size = (u32) OS_GetSharedFontSize( (OSSharedFontIndex)fontIdx );
|
|
|
|
loadFont( fontIdx );
|
|
|
|
gFontInfo[fontIdx].isHashOK = checkFontHash( fontIdx );
|
|
}
|
|
|
|
Free(tableBuf);
|
|
s_numMenu[MENU_FONT] = FONT_INFO + ( NUM_FONT_INFO * OS_SHARED_FONT_MAX );
|
|
}
|
|
|
|
void loadFontName( OSSharedFontIndex idx )
|
|
{
|
|
// 名前取得
|
|
const u8* fontName = OS_GetSharedFontName( (OSSharedFontIndex)idx );
|
|
int fontNameLength = STD_StrLen( (char*)fontName );
|
|
|
|
if( gFontInfo[idx].name == NULL ||
|
|
( sizeof( gFontInfo[idx].name ) <= fontNameLength ))
|
|
{
|
|
// 名前のところにメモリが割り当てられてなかったり、
|
|
// 小さかったりした場合は割り当てなおす。
|
|
|
|
// NsysのFreeはNULLを渡すと落ちる仕様・・・
|
|
if( gFontInfo[idx].name != NULL )
|
|
{
|
|
Free( gFontInfo[idx].name );
|
|
}
|
|
|
|
gFontInfo[idx].name = (u8*) Alloc ( sizeof(u8) * (fontNameLength + 1) );
|
|
}
|
|
|
|
SDK_ASSERT( gFontInfo[idx].name );
|
|
STD_StrLCpy( (char*)gFontInfo[idx].name, (char*)fontName, fontNameLength + 1 );
|
|
}
|
|
|
|
void loadFont( OSSharedFontIndex idx )
|
|
{
|
|
// でも別に普段必要なわけじゃないからメモリ確保のためにも
|
|
// ハッシュ値取り終わったら開放するようにするかな?
|
|
if( gFontInfo[idx].data == NULL ||
|
|
( sizeof( gFontInfo[idx].data ) <= gFontInfo[idx].size ))
|
|
{
|
|
// データバッファにメモリが割り当てられてなかったり、
|
|
// 小さかったりした場合は割り当てなおす。
|
|
|
|
if( gFontInfo[idx].data != NULL )
|
|
{
|
|
Free( gFontInfo[idx].data );
|
|
}
|
|
|
|
|
|
gFontInfo[idx].data = (u8*) Alloc ( gFontInfo[idx].size );
|
|
}
|
|
|
|
SDK_ASSERT( gFontInfo[idx].data );
|
|
OS_LoadSharedFont( idx, (void*)gFontInfo[idx].data );
|
|
}
|
|
|
|
BOOL checkFontHash( OSSharedFontIndex idx )
|
|
{
|
|
u8 digestBuf[MATH_SHA1_DIGEST_SIZE], cmpBuf[MATH_SHA1_DIGEST_SIZE];
|
|
|
|
// 実態、検証用それぞれのハッシュを算出
|
|
strToHexa( s_strFontHash[idx], cmpBuf, MATH_SHA1_DIGEST_SIZE );
|
|
MATH_CalcSHA1( digestBuf, gFontInfo[idx].data , gFontInfo[idx].size );
|
|
|
|
return MI_CpuComp8( cmpBuf, digestBuf, MATH_SHA1_DIGEST_SIZE ) == 0;
|
|
} |