hwi.c関連以外はacsignライブラリをリンクしないように修正、

hwi.c関連はcryptoライブラリをリンクしないように修正 (TWLHWInfo.cでcryptoの方を使うようにすべき)

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@976 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
yutaka 2008-03-27 05:16:09 +00:00
parent fc8597b10a
commit 6005d7e993
7 changed files with 318 additions and 308 deletions

View File

@ -69,7 +69,6 @@ SYSMENU_LIBS ?= \
libsysmenu$(TWL_LIBSUFFIX).a \ libsysmenu$(TWL_LIBSUFFIX).a \
libsysmmcu$(TWL_LIBSUFFIX).a \ libsysmmcu$(TWL_LIBSUFFIX).a \
libmbloader$(TWL_LIBSUFFIX).a \ libmbloader$(TWL_LIBSUFFIX).a \
libacsign$(TWL_LIBSUFFIX).a \
libboot$(TWL_LIBSUFFIX).a \ libboot$(TWL_LIBSUFFIX).a \
libds$(TWL_LIBSUFFIX).a \ libds$(TWL_LIBSUFFIX).a \

View File

@ -44,7 +44,8 @@ SRCS = main.c HWInfoWriter.c hwi.c \
LINCLUDES = $(MISC_DIR)/include \ LINCLUDES = $(MISC_DIR)/include \
$(ROOT)/build/libraries/lcfg/ARM9.TWL/include $(ROOT)/build/libraries/lcfg/ARM9.TWL/include
LLIBRARIES = libacsign_enc$(TWL_LIBSUFFIX).a LLIBRARIES = libacsign$(TWL_LIBSUFFIX).a \
libacsign_enc$(TWL_LIBSUFFIX).a
ifneq ($(TWL_IPL_RED_PRIVATE_ROOT),) ifneq ($(TWL_IPL_RED_PRIVATE_ROOT),)
ifdef USE_PRODUCT_KEY ifdef USE_PRODUCT_KEY
@ -65,6 +66,8 @@ include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs
MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe
GLIBRARIES := $(filter-out libcrypto$(TWL_LIBSUFFIX).a,$(GLIBRARIES))
LDIRT_CLEAN = $(TARGET_TAD) LDIRT_CLEAN = $(TARGET_TAD)
INSTALL_TARGETS = $(TARGET_TAD) INSTALL_TARGETS = $(TARGET_TAD)
INSTALL_DIR = $(SDK_NMENU_DATADIR) INSTALL_DIR = $(SDK_NMENU_DATADIR)

View File

@ -17,15 +17,16 @@
#include <twl.h> #include <twl.h>
#include <sysmenu.h> #include <sysmenu.h>
#include <sysmenu/acsign.h>
#include "TWLHWInfo_api.h" #include "TWLHWInfo_api.h"
#include "TWLSettings_api.h" #include "TWLSettings_api.h"
#include "hwi.h" #include "hwi.h"
// define data------------------------------------------ // define data------------------------------------------
#ifdef USE_PRODUCT_KEY // 鍵選択スイッチ #ifdef USE_PRODUCT_KEY // 鍵選択スイッチ
#define HWINFO_PRIVKEY_PATH "rom:key/private_HWInfo.der" // 製品用秘密鍵 #define HWINFO_PRIVKEY_PATH "rom:key/private_HWInfo.der" // 製品用秘密鍵
#else #else
#define HWINFO_PRIVKEY_PATH "rom:key/private_HWInfo_dev.der" // 開発用秘密鍵 #define HWINFO_PRIVKEY_PATH "rom:key/private_HWInfo_dev.der" // 開発用秘密鍵
#endif #endif
// extern data------------------------------------------ // extern data------------------------------------------
@ -52,32 +53,32 @@ static void (*spFree)( void *ptr );
// const data ----------------------------------------- // const data -----------------------------------------
static const u32 s_langBitmapList[ OS_TWL_REGION_MAX ] = { static const u32 s_langBitmapList[ OS_TWL_REGION_MAX ] = {
LCFG_TWL_LANG_BITMAP_JAPAN, LCFG_TWL_LANG_BITMAP_JAPAN,
LCFG_TWL_LANG_BITMAP_AMERICA, LCFG_TWL_LANG_BITMAP_AMERICA,
LCFG_TWL_LANG_BITMAP_EUROPE, LCFG_TWL_LANG_BITMAP_EUROPE,
LCFG_TWL_LANG_BITMAP_AUSTRALIA, LCFG_TWL_LANG_BITMAP_AUSTRALIA,
LCFG_TWL_LANG_BITMAP_CHINA, LCFG_TWL_LANG_BITMAP_CHINA,
LCFG_TWL_LANG_BITMAP_KOREA, LCFG_TWL_LANG_BITMAP_KOREA,
}; };
static char *strLanguage[] = { static char *strLanguage[] = {
(char *)"LANG_JAPANESE", (char *)"LANG_JAPANESE",
(char *)"LANG_ENGLISH", (char *)"LANG_ENGLISH",
(char *)"LANG_FRENCH", (char *)"LANG_FRENCH",
(char *)"LANG_GERMAN", (char *)"LANG_GERMAN",
(char *)"LANG_ITALIAN", (char *)"LANG_ITALIAN",
(char *)"LANG_SPANISH", (char *)"LANG_SPANISH",
(char *)"LANG_CHINESE", (char *)"LANG_CHINESE",
(char *)"LANG_KOREAN", (char *)"LANG_KOREAN",
}; };
static const char *strLauncherGameCode[] = { static const char *strLauncherGameCode[] = {
"LNCJ", "LNCJ",
"LNCE", "LNCE",
"LNCP", "LNCP",
"LNCO", "LNCO",
"LNCC", "LNCC",
"LNCK", "LNCK",
}; };
//====================================================== //======================================================
@ -95,143 +96,143 @@ static const char *strLauncherGameCode[] = {
*---------------------------------------------------------------------------*/ *---------------------------------------------------------------------------*/
HwiInitResult HWI_Init( void *(*pAlloc)( u32 ), void (*pFree)( void * ) ) HwiInitResult HWI_Init( void *(*pAlloc)( u32 ), void (*pFree)( void * ) )
{ {
HwiInitResult result; HwiInitResult result;
spAlloc = pAlloc; spAlloc = pAlloc;
spFree = pFree; spFree = pFree;
ACSign_SetAllocFunc( pAlloc, pFree ); ACSign_SetAllocFunc( pAlloc, pFree );
result = ReadPrivateKey(); result = ReadPrivateKey();
ReadHWInfoFile(); ReadHWInfoFile();
// VerifyHWInfo(); // VerifyHWInfo();
if( 1 ) { if( 1 ) {
u8 sign[ RSA_KEY_LENGTH ]; u8 sign[ RSA_KEY_LENGTH ];
if( !LCFG_ReadHWID_Signature( sign ) || if( !LCFG_ReadHWID_Signature( sign ) ||
!LCFG_CheckHWID_Signature( sign ) !LCFG_CheckHWID_Signature( sign )
) { ) {
OS_TPrintf( "HWID Signature check failed.\n" ); OS_TPrintf( "HWID Signature check failed.\n" );
}else { }else {
OS_TPrintf( "HWID Signature check succeeded.\n" ); OS_TPrintf( "HWID Signature check succeeded.\n" );
} }
} }
// ※LanguageBitmapを判定で使用するので、必ずReadHWInfoの後で実行する必要がある。 // ※LanguageBitmapを判定で使用するので、必ずReadHWInfoの後で実行する必要がある。
ReadTWLSettings(); ReadTWLSettings();
return result; return result;
} }
// TWL設定データのリード // TWL設定データのリード
static void ReadTWLSettings( void ) static void ReadTWLSettings( void )
{ {
u8 *pBuffer = spAlloc( LCFG_READ_TEMP ); u8 *pBuffer = spAlloc( LCFG_READ_TEMP );
s_isReadTSD = FALSE; s_isReadTSD = FALSE;
if( pBuffer ) { if( pBuffer ) {
s_isReadTSD = LCFG_ReadTWLSettings( (u8 (*)[ LCFG_READ_TEMP ] )pBuffer ); s_isReadTSD = LCFG_ReadTWLSettings( (u8 (*)[ LCFG_READ_TEMP ] )pBuffer );
spFree( pBuffer ); spFree( pBuffer );
} }
if( s_isReadTSD ) { if( s_isReadTSD ) {
OS_TPrintf( "TSD read succeeded.\n" ); OS_TPrintf( "TSD read succeeded.\n" );
}else { }else {
OS_TPrintf( "TSD read failed.\n" ); OS_TPrintf( "TSD read failed.\n" );
} }
} }
// 秘密鍵のリード // 秘密鍵のリード
HwiInitResult ReadPrivateKey( void ) HwiInitResult ReadPrivateKey( void )
{ {
BOOL result = FALSE; BOOL result = FALSE;
u32 keyLength; u32 keyLength;
FSFile file; FSFile file;
OSTick start = OS_GetTick(); OSTick start = OS_GetTick();
FS_InitFile( &file ); FS_InitFile( &file );
if( !FS_OpenFileEx( &file, HWINFO_PRIVKEY_PATH, FS_FILEMODE_R ) ) if( !FS_OpenFileEx( &file, HWINFO_PRIVKEY_PATH, FS_FILEMODE_R ) )
{ {
OS_TPrintf( "PrivateKey read failed.\n" ); OS_TPrintf( "PrivateKey read failed.\n" );
} }
else else
{ {
keyLength = FS_GetFileLength( &file ); keyLength = FS_GetFileLength( &file );
if( keyLength > 0 ) { if( keyLength > 0 ) {
s_pPrivKeyBuffer = spAlloc( keyLength ); s_pPrivKeyBuffer = spAlloc( keyLength );
if( FS_ReadFile( &file, s_pPrivKeyBuffer, (s32)keyLength ) == keyLength ) { if( FS_ReadFile( &file, s_pPrivKeyBuffer, (s32)keyLength ) == keyLength ) {
OS_TPrintf( "PrivateKey read succeeded.\n" ); OS_TPrintf( "PrivateKey read succeeded.\n" );
result = TRUE; result = TRUE;
}else { }else {
OS_TPrintf( "PrivateKey read failed.\n" ); OS_TPrintf( "PrivateKey read failed.\n" );
} }
} }
FS_CloseFile( &file ); FS_CloseFile( &file );
} }
if( !result && s_pPrivKeyBuffer ) { if( !result && s_pPrivKeyBuffer ) {
spFree( s_pPrivKeyBuffer ); spFree( s_pPrivKeyBuffer );
s_pPrivKeyBuffer = NULL; s_pPrivKeyBuffer = NULL;
} }
OS_TPrintf( "PrivKey read time = %dms\n", OS_TicksToMilliSeconds( OS_GetTick() - start ) ); OS_TPrintf( "PrivKey read time = %dms\n", OS_TicksToMilliSeconds( OS_GetTick() - start ) );
if (result) { if (result) {
#ifdef USE_PRODUCT_KEY #ifdef USE_PRODUCT_KEY
return HWI_INIT_SUCCESS_PRO_SIGNATURE_MODE; return HWI_INIT_SUCCESS_PRO_SIGNATURE_MODE;
#else #else
return HWI_INIT_SUCCESS_DEV_SIGNATURE_MODE; return HWI_INIT_SUCCESS_DEV_SIGNATURE_MODE;
#endif #endif
}else { }else {
return HWI_INIT_SUCCESS_NO_SIGNATRUE_MODE; return HWI_INIT_SUCCESS_NO_SIGNATRUE_MODE;
} }
} }
// HW情報全体のリード // HW情報全体のリード
static void ReadHWInfoFile( void ) static void ReadHWInfoFile( void )
{ {
LCFGReadResult retval; LCFGReadResult retval;
OSTick start = OS_GetTick(); OSTick start = OS_GetTick();
retval = LCFGi_THW_ReadNormalInfo(); retval = LCFGi_THW_ReadNormalInfo();
if( retval == LCFG_TSF_READ_RESULT_SUCCEEDED ) { if( retval == LCFG_TSF_READ_RESULT_SUCCEEDED ) {
OS_TPrintf( "HW Normal Info read succeeded.\n" ); OS_TPrintf( "HW Normal Info read succeeded.\n" );
}else { }else {
OS_TPrintf( "HW Normal Info read failed.\n" ); OS_TPrintf( "HW Normal Info read failed.\n" );
} }
OS_TPrintf( "HW Normal Info read time = %dms\n", OS_TicksToMilliSeconds( OS_GetTick() - start ) ); OS_TPrintf( "HW Normal Info read time = %dms\n", OS_TicksToMilliSeconds( OS_GetTick() - start ) );
start = OS_GetTick(); start = OS_GetTick();
retval = LCFGi_THW_ReadSecureInfo(); retval = LCFGi_THW_ReadSecureInfo();
if( retval == LCFG_TSF_READ_RESULT_SUCCEEDED ) { if( retval == LCFG_TSF_READ_RESULT_SUCCEEDED ) {
OS_TPrintf( "HW Secure Info read succeeded.\n" ); OS_TPrintf( "HW Secure Info read succeeded.\n" );
}else { }else {
OS_TPrintf( "HW Secure Info read failed.\n" ); OS_TPrintf( "HW Secure Info read failed.\n" );
} }
OS_TPrintf( "HW Secure Info read time = %dms\n", OS_TicksToMilliSeconds( OS_GetTick() - start ) ); OS_TPrintf( "HW Secure Info read time = %dms\n", OS_TicksToMilliSeconds( OS_GetTick() - start ) );
} }
// HWInfoファイルのベリファイ // HWInfoファイルのベリファイ
static void VerifyHWInfo( void ) static void VerifyHWInfo( void )
{ {
if( VerifyData( (const u8 *)LCFG_THW_GetNormalInfo(), (const u8 *)LCFG_THW_GetDefaultNormalInfo(), sizeof(LCFGTWLHWNormalInfo) ) ) { if( VerifyData( (const u8 *)LCFG_THW_GetNormalInfo(), (const u8 *)LCFG_THW_GetDefaultNormalInfo(), sizeof(LCFGTWLHWNormalInfo) ) ) {
OS_TPrintf( "HW normal Info verify succeeded.\n" ); OS_TPrintf( "HW normal Info verify succeeded.\n" );
}else { }else {
OS_TPrintf( "HW normal Info verify failed.\n" ); OS_TPrintf( "HW normal Info verify failed.\n" );
} }
if( VerifyData( (const u8 *)LCFG_THW_GetSecureInfo(), (const u8 *)LCFG_THW_GetDefaultSecureInfo(), sizeof(LCFGTWLHWSecureInfo) ) ) { if( VerifyData( (const u8 *)LCFG_THW_GetSecureInfo(), (const u8 *)LCFG_THW_GetDefaultSecureInfo(), sizeof(LCFGTWLHWSecureInfo) ) ) {
OS_TPrintf( "HW secure Info verify succeeded.\n" ); OS_TPrintf( "HW secure Info verify succeeded.\n" );
}else { }else {
OS_TPrintf( "HW secure Info verify failed.\n" ); OS_TPrintf( "HW secure Info verify failed.\n" );
} }
} }
// メモリ上のデータベリファイ // メモリ上のデータベリファイ
static BOOL VerifyData( const u8 *pTgt, const u8 *pOrg, u32 len ) static BOOL VerifyData( const u8 *pTgt, const u8 *pOrg, u32 len )
{ {
while( len-- ) { while( len-- ) {
if( *pTgt++ != *pOrg++ ) { if( *pTgt++ != *pOrg++ ) {
return FALSE; return FALSE;
} }
} }
return TRUE; return TRUE;
} }
/*---------------------------------------------------------------------------* /*---------------------------------------------------------------------------*
@ -246,42 +247,42 @@ static BOOL VerifyData( const u8 *pTgt, const u8 *pOrg, u32 len )
void HWI_ModifyLanguage( u8 region ) void HWI_ModifyLanguage( u8 region )
{ {
#pragma unused( region ) #pragma unused( region )
u32 langBitmap = LCFG_THW_GetValidLanguageBitmap(); u32 langBitmap = LCFG_THW_GetValidLanguageBitmap();
u8 nowLanguage = LCFG_TSD_GetLanguage(); u8 nowLanguage = LCFG_TSD_GetLanguage();
// TSDが読み込めていないなら、何もせずリターン // TSDが読み込めていないなら、何もせずリターン
if( !s_isReadTSD ) { if( !s_isReadTSD ) {
return; return;
} }
if( langBitmap & ( 0x0001 << nowLanguage ) ) { if( langBitmap & ( 0x0001 << nowLanguage ) ) {
OS_TPrintf( "Language no change.\n" ); OS_TPrintf( "Language no change.\n" );
}else { }else {
int i; int i;
for( i = 0; i < LCFG_TWL_LANG_CODE_MAX; i++ ) { for( i = 0; i < LCFG_TWL_LANG_CODE_MAX; i++ ) {
if( langBitmap & ( 0x0001 << i ) ) { if( langBitmap & ( 0x0001 << i ) ) {
break; break;
} }
} }
LCFG_TSD_SetLanguage( (LCFGTWLLangCode)i ); LCFG_TSD_SetLanguage( (LCFGTWLLangCode)i );
OS_TPrintf( "Language Change \"%s\" -> \"%s\"\n", OS_TPrintf( "Language Change \"%s\" -> \"%s\"\n",
strLanguage[ nowLanguage ], strLanguage[ LCFG_TSD_GetLanguage() ] ); strLanguage[ nowLanguage ], strLanguage[ LCFG_TSD_GetLanguage() ] );
} }
// 国コードもクリアしておく。 // 国コードもクリアしておく。
LCFG_TSD_SetCountry( LCFG_TWL_COUNTRY_UNDEFINED ); LCFG_TSD_SetCountry( LCFG_TWL_COUNTRY_UNDEFINED );
// ペアレンタルコントロール情報もクリアしておく // ペアレンタルコントロール情報もクリアしておく
MI_CpuClearFast( (void *)LCFG_TSD_GetPCTLPtr(), sizeof(LCFGTWLParentalControl) ); MI_CpuClearFast( (void *)LCFG_TSD_GetPCTLPtr(), sizeof(LCFGTWLParentalControl) );
// regionが変わった場合は、LANGUAGE_BITMAPも必ず変わるので、それをNTR側に反映させるために必ずTWL設定データの書き込みも行う。 // regionが変わった場合は、LANGUAGE_BITMAPも必ず変わるので、それをNTR側に反映させるために必ずTWL設定データの書き込みも行う。
{ {
u8 *pBuffer = spAlloc( LCFG_WRITE_TEMP ); u8 *pBuffer = spAlloc( LCFG_WRITE_TEMP );
if( pBuffer ) { if( pBuffer ) {
(void)LCFG_WriteTWLSettings( (u8 (*)[ LCFG_WRITE_TEMP ] )pBuffer ); (void)LCFG_WriteTWLSettings( (u8 (*)[ LCFG_WRITE_TEMP ] )pBuffer );
spFree( pBuffer ); spFree( pBuffer );
} }
} }
} }
/*---------------------------------------------------------------------------* /*---------------------------------------------------------------------------*
@ -296,52 +297,52 @@ void HWI_ModifyLanguage( u8 region )
BOOL HWI_WriteHWNormalInfoFile( void ) BOOL HWI_WriteHWNormalInfoFile( void )
{ {
const char* CAMERA_VOLATILE_INFO_PATH = "rom:/data/camera_volatile_info.bin"; const char* CAMERA_VOLATILE_INFO_PATH = "rom:/data/camera_volatile_info.bin";
LCFGTWLHWNormalInfo Info; LCFGTWLHWNormalInfo Info;
FSFile file; FSFile file;
LCFGReadResult result; LCFGReadResult result;
BOOL open_is_ok; BOOL open_is_ok;
BOOL read_is_ok; BOOL read_is_ok;
result = LCFGi_THW_ReadNormalInfo(); result = LCFGi_THW_ReadNormalInfo();
if( result != LCFG_TSF_READ_RESULT_SUCCEEDED ) { if( result != LCFG_TSF_READ_RESULT_SUCCEEDED ) {
if( !LCFGi_THW_RecoveryNormalInfo( result ) ) { if( !LCFGi_THW_RecoveryNormalInfo( result ) ) {
OS_TPrintf( "HW Normal Info Recovery failed.\n" ); OS_TPrintf( "HW Normal Info Recovery failed.\n" );
return FALSE; return FALSE;
} }
} }
Info.rtcAdjust = LCFG_THW_GetRTCAdjust(); Info.rtcAdjust = LCFG_THW_GetRTCAdjust();
// ROMファイルオープン(カメラ情報) // ROMファイルオープン(カメラ情報)
FS_InitFile(&file); FS_InitFile(&file);
open_is_ok = FS_OpenFile(&file, CAMERA_VOLATILE_INFO_PATH); open_is_ok = FS_OpenFile(&file, CAMERA_VOLATILE_INFO_PATH);
if (!open_is_ok) if (!open_is_ok)
{ {
OS_Printf("FS_OpenFile(\"%s\") ... ERROR!\n", CAMERA_VOLATILE_INFO_PATH); OS_Printf("FS_OpenFile(\"%s\") ... ERROR!\n", CAMERA_VOLATILE_INFO_PATH);
return FALSE; return FALSE;
} }
// ROMファイルリード // ROMファイルリード
read_is_ok = FS_ReadFile( &file, Info.camera, (s32)sizeof( Info.camera ) ); read_is_ok = FS_ReadFile( &file, Info.camera, (s32)sizeof( Info.camera ) );
if (!read_is_ok) if (!read_is_ok)
{ {
OS_Printf("FS_ReadFile(\"%s\") ... ERROR!\n", CAMERA_VOLATILE_INFO_PATH); OS_Printf("FS_ReadFile(\"%s\") ... ERROR!\n", CAMERA_VOLATILE_INFO_PATH);
FS_CloseFile(&file); FS_CloseFile(&file);
return FALSE; return FALSE;
} }
FS_FlushFile(&file); FS_FlushFile(&file);
// ROMファイルクローズ // ROMファイルクローズ
FS_CloseFile(&file); FS_CloseFile(&file);
if (!LCFGi_THW_WriteNormalInfoDirect( &Info )) if (!LCFGi_THW_WriteNormalInfoDirect( &Info ))
{ {
OS_TPrintf( "HW Normal Info Write failed.\n" ); OS_TPrintf( "HW Normal Info Write failed.\n" );
return FALSE; return FALSE;
} }
return TRUE; return TRUE;
} }
/*---------------------------------------------------------------------------* /*---------------------------------------------------------------------------*
@ -355,64 +356,64 @@ BOOL HWI_WriteHWNormalInfoFile( void )
*---------------------------------------------------------------------------*/ *---------------------------------------------------------------------------*/
BOOL HWI_WriteHWSecureInfoFile( u8 region, const u8 *pSerialNo, BOOL isDisableWireless ) BOOL HWI_WriteHWSecureInfoFile( u8 region, const u8 *pSerialNo, BOOL isDisableWireless )
{ {
BOOL isWrite = TRUE; BOOL isWrite = TRUE;
LCFGReadResult result; LCFGReadResult result;
// ファイルのリード // ファイルのリード
result = LCFGi_THW_ReadSecureInfo(); result = LCFGi_THW_ReadSecureInfo();
// リードに失敗したらリカバリ // リードに失敗したらリカバリ
if( result != LCFG_TSF_READ_RESULT_SUCCEEDED ) { if( result != LCFG_TSF_READ_RESULT_SUCCEEDED ) {
if( !LCFGi_THW_RecoverySecureInfo( result ) ) { if( !LCFGi_THW_RecoverySecureInfo( result ) ) {
OS_TPrintf( "HW Secure Info Recovery failed.\n" ); OS_TPrintf( "HW Secure Info Recovery failed.\n" );
isWrite = FALSE; isWrite = FALSE;
} }
} }
LCFG_THW_SetFlagForceDisableWireless( isDisableWireless ); LCFG_THW_SetFlagForceDisableWireless( isDisableWireless );
// リージョンのセット // リージョンのセット
LCFG_THW_SetRegion( region ); LCFG_THW_SetRegion( region );
// 対応言語ビットマップのセット // 対応言語ビットマップのセット
LCFG_THW_SetValidLanguageBitmap( s_langBitmapList[ region ] ); LCFG_THW_SetValidLanguageBitmap( s_langBitmapList[ region ] );
// シリアルNo.のセット // シリアルNo.のセット
if( pSerialNo == NULL ) { if( pSerialNo == NULL ) {
// 量産工程でないとシリアルNo.は用意できないので、ここではMACアドレスをもとに適当な値をセットする。 // 量産工程でないとシリアルNo.は用意できないので、ここではMACアドレスをもとに適当な値をセットする。
u8 buffer[ 12 ] = "SERIAL"; // 適当な文字列をMACアドレスと結合してSHA1を取り、仮SerialNoとする。 u8 buffer[ 12 ] = "SERIAL"; // 適当な文字列をMACアドレスと結合してSHA1を取り、仮SerialNoとする。
u8 serialNo[ SVC_SHA1_DIGEST_SIZE ]; u8 serialNo[ SVC_SHA1_DIGEST_SIZE ];
int i; int i;
int len = ( LCFG_THW_GetRegion() == OS_TWL_REGION_AMERICA ) ? int len = ( LCFG_THW_GetRegion() == OS_TWL_REGION_AMERICA ) ?
LCFG_TWL_HWINFO_SERIALNO_LEN_AMERICA : LCFG_TWL_HWINFO_SERIALNO_LEN_OTHERS; LCFG_TWL_HWINFO_SERIALNO_LEN_AMERICA : LCFG_TWL_HWINFO_SERIALNO_LEN_OTHERS;
OS_GetMacAddress( buffer + 6 ); OS_GetMacAddress( buffer + 6 );
SVC_CalcSHA1( serialNo, buffer, sizeof(buffer) ); SVC_CalcSHA1( serialNo, buffer, sizeof(buffer) );
for( i = 3; i < SVC_SHA1_DIGEST_SIZE; i++ ) { for( i = 3; i < SVC_SHA1_DIGEST_SIZE; i++ ) {
serialNo[ i ] = (u8)( ( serialNo[ i ] % 10 ) + 0x30 ); serialNo[ i ] = (u8)( ( serialNo[ i ] % 10 ) + 0x30 );
} }
MI_CpuCopy8( "SRN", serialNo, 3 ); MI_CpuCopy8( "SRN", serialNo, 3 );
MI_CpuClear8( &serialNo[ len ], sizeof(serialNo) - len ); MI_CpuClear8( &serialNo[ len ], sizeof(serialNo) - len );
// OS_TPrintf( "serialNo : %s\n", serialNo ); // OS_TPrintf( "serialNo : %s\n", serialNo );
LCFG_THW_SetSerialNo( serialNo ); LCFG_THW_SetSerialNo( serialNo );
}else { }else {
LCFG_THW_SetSerialNo( pSerialNo ); LCFG_THW_SetSerialNo( pSerialNo );
} }
// ランチャーTitleID_Loのセット // ランチャーTitleID_Loのセット
{ {
int i; int i;
u8 titleID_Lo[4]; u8 titleID_Lo[4];
for( i = 0; i < 4; i++ ) titleID_Lo[ i ] = (u8)strLauncherGameCode[ region ][ 4 - i - 1 ]; for( i = 0; i < 4; i++ ) titleID_Lo[ i ] = (u8)strLauncherGameCode[ region ][ 4 - i - 1 ];
LCFG_THW_SetLauncherTitleID_Lo( (const u8 *)titleID_Lo ); LCFG_THW_SetLauncherTitleID_Lo( (const u8 *)titleID_Lo );
} }
// ライト // ライト
if( isWrite && if( isWrite &&
!LCFGi_THW_WriteSecureInfo( s_pPrivKeyBuffer ) ) { !LCFGi_THW_WriteSecureInfo( s_pPrivKeyBuffer ) ) {
isWrite = FALSE; isWrite = FALSE;
OS_TPrintf( "HW Secure Info Write failed.\n" ); OS_TPrintf( "HW Secure Info Write failed.\n" );
} }
return isWrite; return isWrite;
} }
@ -427,17 +428,17 @@ BOOL HWI_WriteHWSecureInfoFile( u8 region, const u8 *pSerialNo, BOOL isDisableWi
*---------------------------------------------------------------------------*/ *---------------------------------------------------------------------------*/
BOOL HWI_WriteHWIDSignFile( void ) BOOL HWI_WriteHWIDSignFile( void )
{ {
BOOL retval; BOOL retval;
(void)FS_DeleteFile( (char *)LCFG_TWL_HWID_SIGN_PATH ); (void)FS_DeleteFile( (char *)LCFG_TWL_HWID_SIGN_PATH );
if( !FS_CreateFile( LCFG_TWL_HWID_SIGN_PATH, FS_PERMIT_R | FS_PERMIT_W ) ) { if( !FS_CreateFile( LCFG_TWL_HWID_SIGN_PATH, FS_PERMIT_R | FS_PERMIT_W ) ) {
OS_TPrintf( "file create error. %s\n", LCFG_TWL_HWID_SIGN_PATH ); OS_TPrintf( "file create error. %s\n", LCFG_TWL_HWID_SIGN_PATH );
} }
retval = LCFG_WriteHWID_Signature( s_pPrivKeyBuffer ); retval = LCFG_WriteHWID_Signature( s_pPrivKeyBuffer );
if( !retval ) { if( !retval ) {
OS_TPrintf( "HWID Signature Write failed.\n" ); OS_TPrintf( "HWID Signature Write failed.\n" );
} }
return retval; return retval;
} }
/*---------------------------------------------------------------------------* /*---------------------------------------------------------------------------*
@ -451,16 +452,16 @@ BOOL HWI_WriteHWIDSignFile( void )
*---------------------------------------------------------------------------*/ *---------------------------------------------------------------------------*/
BOOL HWI_DeleteHWNormalInfoFile( void ) BOOL HWI_DeleteHWNormalInfoFile( void )
{ {
if (FS_DeleteFile( (char *)LCFG_TWL_HWINFO_NORMAL_PATH )) if (FS_DeleteFile( (char *)LCFG_TWL_HWINFO_NORMAL_PATH ))
{ {
OS_TPrintf( "%s delete succeeded.\n", (char *)LCFG_TWL_HWINFO_NORMAL_PATH ); OS_TPrintf( "%s delete succeeded.\n", (char *)LCFG_TWL_HWINFO_NORMAL_PATH );
return TRUE; return TRUE;
} }
else else
{ {
OS_TPrintf( "%s delete failed.\n", (char *)LCFG_TWL_HWINFO_NORMAL_PATH ); OS_TPrintf( "%s delete failed.\n", (char *)LCFG_TWL_HWINFO_NORMAL_PATH );
return FALSE; return FALSE;
} }
} }
/*---------------------------------------------------------------------------* /*---------------------------------------------------------------------------*
@ -474,16 +475,16 @@ BOOL HWI_DeleteHWNormalInfoFile( void )
*---------------------------------------------------------------------------*/ *---------------------------------------------------------------------------*/
BOOL HWI_DeleteHWSecureInfoFile( void ) BOOL HWI_DeleteHWSecureInfoFile( void )
{ {
if (FS_DeleteFile( (char *)LCFG_TWL_HWINFO_SECURE_PATH )) if (FS_DeleteFile( (char *)LCFG_TWL_HWINFO_SECURE_PATH ))
{ {
OS_TPrintf( "%s delete succeeded.\n", (char *)LCFG_TWL_HWINFO_SECURE_PATH ); OS_TPrintf( "%s delete succeeded.\n", (char *)LCFG_TWL_HWINFO_SECURE_PATH );
return TRUE; return TRUE;
} }
else else
{ {
OS_TPrintf( "%s delete failed.\n", (char *)LCFG_TWL_HWINFO_SECURE_PATH ); OS_TPrintf( "%s delete failed.\n", (char *)LCFG_TWL_HWINFO_SECURE_PATH );
return FALSE; return FALSE;
} }
} }
/*---------------------------------------------------------------------------* /*---------------------------------------------------------------------------*
@ -497,14 +498,14 @@ BOOL HWI_DeleteHWSecureInfoFile( void )
*---------------------------------------------------------------------------*/ *---------------------------------------------------------------------------*/
BOOL HWI_DeleteHWIDSignFile( void ) BOOL HWI_DeleteHWIDSignFile( void )
{ {
if (FS_DeleteFile( (char *)LCFG_TWL_HWID_SIGN_PATH )) if (FS_DeleteFile( (char *)LCFG_TWL_HWID_SIGN_PATH ))
{ {
OS_TPrintf( "%s delete succeeded.\n", (char *)LCFG_TWL_HWID_SIGN_PATH ); OS_TPrintf( "%s delete succeeded.\n", (char *)LCFG_TWL_HWID_SIGN_PATH );
return TRUE; return TRUE;
} }
else else
{ {
OS_TPrintf( "%s delete failed.\n", (char *)LCFG_TWL_HWID_SIGN_PATH ); OS_TPrintf( "%s delete failed.\n", (char *)LCFG_TWL_HWID_SIGN_PATH );
return FALSE; return FALSE;
} }
} }

View File

@ -88,6 +88,7 @@ LLIBRARIES += libes$(TWL_LIBSUFFIX).a \
libboc$(TWL_LIBSUFFIX).a \ libboc$(TWL_LIBSUFFIX).a \
libnam$(TWL_LIBSUFFIX).a \ libnam$(TWL_LIBSUFFIX).a \
libsea$(TWL_LIBSUFFIX).a \ libsea$(TWL_LIBSUFFIX).a \
libacsign$(TWL_LIBSUFFIX).a \
libacsign_enc$(TWL_LIBSUFFIX).a \ libacsign_enc$(TWL_LIBSUFFIX).a \
libnamut$(TWL_LIBSUFFIX).a libnamut$(TWL_LIBSUFFIX).a
@ -96,6 +97,8 @@ include $(TWLSDK_ROOT)/build/buildtools/commondefs.gx.demolib
MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe
GLIBRARIES := $(filter-out libcrypto$(TWL_LIBSUFFIX).a,$(GLIBRARIES))
LDIRT_CLEAN = $(TARGET_TAD) LDIRT_CLEAN = $(TARGET_TAD)
#INSTALL_TARGETS = $(TARGET_TAD) #INSTALL_TARGETS = $(TARGET_TAD)
#INSTALL_DIR = $(SDK_NMENU_DATADIR) #INSTALL_DIR = $(SDK_NMENU_DATADIR)

View File

@ -86,6 +86,7 @@ LLIBRARIES += libes$(TWL_LIBSUFFIX).a \
libboc$(TWL_LIBSUFFIX).a \ libboc$(TWL_LIBSUFFIX).a \
libnam$(TWL_LIBSUFFIX).a \ libnam$(TWL_LIBSUFFIX).a \
libsea$(TWL_LIBSUFFIX).a \ libsea$(TWL_LIBSUFFIX).a \
libacsign$(TWL_LIBSUFFIX).a \
libacsign_enc$(TWL_LIBSUFFIX).a \ libacsign_enc$(TWL_LIBSUFFIX).a \
libnamut$(TWL_LIBSUFFIX).a libnamut$(TWL_LIBSUFFIX).a
@ -94,6 +95,7 @@ include $(TWLSDK_ROOT)/build/buildtools/commondefs.gx.demolib
MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe
GLIBRARIES := $(filter-out libcrypto$(TWL_LIBSUFFIX).a,$(GLIBRARIES))
LDIRT_CLEAN = $(TARGET_TAD) LDIRT_CLEAN = $(TARGET_TAD)
#INSTALL_TARGETS = $(TARGET_TAD) #INSTALL_TARGETS = $(TARGET_TAD)

View File

@ -39,7 +39,7 @@ TWL_ARCHGEN = LIMITED
TITLEID_LO = NINA TITLEID_LO = NINA
TARGET_TAD = $(BINDIR)/$(TITLEID_LO).$(TWL_BUILD_DIR)$(CODEGEN_ARCH).tad TARGET_TAD = $(BINDIR)/$(TITLEID_LO).$(TWL_BUILD_DIR)$(CODEGEN_ARCH).tad
TARGET_BIN = NandFormatterAuto.srl TARGET_BIN = NandInitializerAuto.srl
LCFILE_SPEC = ../../NandInitializer/ARM9.TWL/ARM9-TS.lsf LCFILE_SPEC = ../../NandInitializer/ARM9.TWL/ARM9-TS.lsf
ROM_SPEC = ../../NandInitializer/ARM9.TWL/main.rsf ROM_SPEC = ../../NandInitializer/ARM9.TWL/main.rsf
@ -93,6 +93,7 @@ LLIBRARIES += libes$(TWL_LIBSUFFIX).a \
libboc$(TWL_LIBSUFFIX).a \ libboc$(TWL_LIBSUFFIX).a \
libnam$(TWL_LIBSUFFIX).a \ libnam$(TWL_LIBSUFFIX).a \
libsea$(TWL_LIBSUFFIX).a \ libsea$(TWL_LIBSUFFIX).a \
libacsign$(TWL_LIBSUFFIX).a \
libacsign_enc$(TWL_LIBSUFFIX).a \ libacsign_enc$(TWL_LIBSUFFIX).a \
libnamut$(TWL_LIBSUFFIX).a libnamut$(TWL_LIBSUFFIX).a
@ -101,6 +102,8 @@ include $(TWLSDK_ROOT)/build/buildtools/commondefs.gx.demolib
MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe
GLIBRARIES := $(filter-out libcrypto$(TWL_LIBSUFFIX).a,$(GLIBRARIES))
LDIRT_CLEAN = $(TARGET_TAD) LDIRT_CLEAN = $(TARGET_TAD)
#INSTALL_TARGETS = $(TARGET_TAD) #INSTALL_TARGETS = $(TARGET_TAD)
#INSTALL_DIR = $(SDK_NMENU_DATADIR) #INSTALL_DIR = $(SDK_NMENU_DATADIR)

View File

@ -18,7 +18,7 @@
#define SYSMENU_H_ #define SYSMENU_H_
// Compile switch---------------------- // Compile switch----------------------
//#define DEBUG_USED_CARD_SLOT_B_ // デバッグ用でカードスロットBを使用する場合に有効にする。 //#define DEBUG_USED_CARD_SLOT_B_ // デバッグ用でカードスロットBを使用する場合に有効にする。
//------------------------------------- //-------------------------------------
@ -32,7 +32,6 @@
#include <sysmenu/boot.h> #include <sysmenu/boot.h>
#include <sysmenu/memorymap.h> #include <sysmenu/memorymap.h>
#include <sysmenu/hotsw.h> #include <sysmenu/hotsw.h>
#include <sysmenu/acsign.h>
#include <sysmenu/mb_loader.h> #include <sysmenu/mb_loader.h>
/* SYSMENU_H_ */ /* SYSMENU_H_ */