HWInfoWriterの鍵運用を整理する。

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@494 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
yosiokat 2008-01-21 06:13:21 +00:00
parent 47f1ca4ee6
commit 0deab36684
19 changed files with 46 additions and 20 deletions

View File

@ -24,7 +24,7 @@ SPACE ?= $(EMPTY) $(EMPTY)
ifndef TWL_KEYSDIR ifndef TWL_KEYSDIR
DUMMY_KEYS_SUFFIX = .dummykey DUMMY_KEYS_SUFFIX = .dummykey
endif endif
TWL_KEYSDIR ?= $(FIRM_ROOT)/keys/rsa/dummy TWL_KEYSDIR ?= $(FIRM_ROOT)/keys/dummy
TARGET_BIN ?= $(subst .,$(DUMMY_KEYS_SUFFIX).,$(TARGET_FIRM_BIN)) TARGET_BIN ?= $(subst .,$(DUMMY_KEYS_SUFFIX).,$(TARGET_FIRM_BIN))

View File

@ -23,7 +23,7 @@ NITRO_NO_STD_PCHDR = TRUE #
EMPTY ?= EMPTY ?=
SPACE ?= $(EMPTY) $(EMPTY) SPACE ?= $(EMPTY) $(EMPTY)
TWL_KEYSDIR ?= $(SYSMENU_ROOT)/keys/rsa/dummy TWL_KEYSDIR ?= $(SYSMENU_ROOT)/keys/dummy
#---------------------------------------------------------------------------- #----------------------------------------------------------------------------
# TWL-SYSTEM-MENU path settings # TWL-SYSTEM-MENU path settings

View File

@ -17,10 +17,11 @@
#---------------------------------------------------------------------------- #----------------------------------------------------------------------------
SUBDIRS = \ SUBDIRS = \
# ../../../libraries_sysmenu/sysmenu
#---------------------------------------------------------------------------- #----------------------------------------------------------------------------
USE_PRODUCT_KEY = TRUE
TARGET_FIRM = SYSTEMMENU TARGET_FIRM = SYSTEMMENU
TARGET_PLATFORM = TWL TARGET_PLATFORM = TWL
TWL_ARCHGEN = LIMITED TWL_ARCHGEN = LIMITED
@ -41,8 +42,16 @@ 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_enc$(TWL_LIBSUFFIX).a
MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)' MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)' \
MAKETAD_FLAGS += -s -DHWINFO_PRIVKEY='private_HWInfo.der'
MAKETAD_FLAGS += -s
ifdef USE_PRODUCT_KEY
MAKEROM_FLAGS += -DPRIVKEY_PATH='$(TWL_KEYSDIR)/rsa'
MACRO_FLAGS += -DUSE_PRODUCT_KEY
else
MAKEROM_FLAGS += -DPRIVKEY_PATH='../../../../keys/dummy/rsa'
endif
include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs

View File

@ -176,7 +176,8 @@ RomSpec
HostRoot ../../data HostRoot ../../data
Root /data Root /data
File NTR_IPL_font_m.NFTR File NTR_IPL_font_m.NFTR
HostRoot ../../../../keys/HWInfo HostRoot $(PRIVKEY_PATH)
Root /key Root /key
# File privKeyHWInfo.der File $(HWINFO_PRIVKEY)
} }

View File

@ -118,6 +118,15 @@ static const char *strRegion[] = {
"KOREA", "KOREA",
}; };
static const char *strLauncherGameCode[] = {
"LNCJ",
"LNCE",
"LNCP",
"LNCO",
"LNCC",
"LNCK",
};
//====================================================== //======================================================
// HW情報ライター // HW情報ライター
//====================================================== //======================================================
@ -125,6 +134,8 @@ static const char *strRegion[] = {
// HW情報ライターの初期化 // HW情報ライターの初期化
void HWInfoWriterInit( void ) void HWInfoWriterInit( void )
{ {
u8 gameCode[ 5 ] = { 0, 0, 0, 0, 0 };
GX_DispOff(); GX_DispOff();
GXS_DispOff(); GXS_DispOff();
@ -141,8 +152,10 @@ void HWInfoWriterInit( void )
ReadHWInfoFile(); ReadHWInfoFile();
// VerifyHWInfo(); // VerifyHWInfo();
OS_TPrintf( "region = %d\n", LCFG_THW_GetRegion() ); OS_TPrintf( "region = %d\n", LCFG_THW_GetRegion() );
PrintfSJISSub( 2 * 8, 18 * 8, TXT_COLOR_BLACK, "Region = %s", strRegion[ LCFG_THW_GetRegion() ] ); PrintfSJISSub( 2 * 8, 16 * 8, TXT_COLOR_BLACK, "Region = %s", strRegion[ LCFG_THW_GetRegion() ] );
PrintfSJISSub( 2 * 8, 20 * 8, TXT_COLOR_BLACK, "SerialNo = %s", LCFG_THW_GetSerialNoPtr() ); PrintfSJISSub( 2 * 8, 18 * 8, TXT_COLOR_BLACK, "SerialNo = %s", LCFG_THW_GetSerialNoPtr() );
// LCFG_THW_GetLauncherGameCode( gameCode );
// PrintfSJISSub( 2 * 8, 20 * 8, TXT_COLOR_BLACK, "LauncherGameCode = %s", gameCode );
s_region_old = LCFG_THW_GetRegion(); s_region_old = LCFG_THW_GetRegion();
s_csr = 0; s_csr = 0;
DrawMenu( s_csr, &s_writerParam ); DrawMenu( s_csr, &s_writerParam );
@ -235,7 +248,7 @@ static void ReadPrivateKey( void )
OSTick start = OS_GetTick(); OSTick start = OS_GetTick();
FS_InitFile( &file ); FS_InitFile( &file );
if( !FS_OpenFileEx( &file, "rom:key/privKeyHWInfo.der", FS_FILEMODE_R ) ) { if( !FS_OpenFileEx( &file, "rom:key/private_HWInfo.der", 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 );
@ -257,14 +270,14 @@ static void ReadPrivateKey( void )
} }
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( s_pPrivKeyBuffer ) { #ifdef USE_PRODUCT_KEY
// 秘密鍵が有効なら、署名ありのアクセス // 製品用秘密鍵が有効なら、署名ありのアクセス
s_pReadSecureInfoFunc = LCFGi_THW_ReadSecureInfo; s_pReadSecureInfoFunc = LCFGi_THW_ReadSecureInfo;
}else { #else
// 秘密鍵が無効なら、署名なしのアクセス // そうでないなら、署名なしのアクセス
s_pReadSecureInfoFunc = LCFGi_THW_ReadSecureInfo_NoCheck; s_pReadSecureInfoFunc = LCFGi_THW_ReadSecureInfo_NoCheck;
PutStringUTF16( 14 * 8, 0 * 8, TXT_COLOR_RED, (const u16 *)L"[No Signature MODE]" ); PutStringUTF16( 14 * 8, 0 * 8, TXT_COLOR_RED, (const u16 *)L"[No Signature MODE]" );
} #endif
} }
@ -327,8 +340,8 @@ static void WriteHWInfoFile( u8 region )
NNS_G2dCharCanvasClearArea( &gCanvas, TXT_COLOR_WHITE, NNS_G2dCharCanvasClearArea( &gCanvas, TXT_COLOR_WHITE,
MSG_X * 8 , MSG_Y * 8, ( 32 - MSG_X ) * 8, ( MSG_Y + 4 ) * 8 ); MSG_X * 8 , MSG_Y * 8, ( 32 - MSG_X ) * 8, ( MSG_Y + 4 ) * 8 );
PrintfSJISSub( 2 * 8, 18 * 8, TXT_COLOR_WHITE, "Region = %s", strRegion[ s_region_old ] ); PrintfSJISSub( 2 * 8, 16 * 8, TXT_COLOR_WHITE, "Region = %s", strRegion[ s_region_old ] );
PrintfSJISSub( 2 * 8, 18 * 8, TXT_COLOR_BLACK, "Region = %s", strRegion[ LCFG_THW_GetRegion() ] ); PrintfSJISSub( 2 * 8, 16 * 8, TXT_COLOR_BLACK, "Region = %s", strRegion[ LCFG_THW_GetRegion() ] );
s_region_old = LCFG_THW_GetRegion(); s_region_old = LCFG_THW_GetRegion();
} }
@ -397,6 +410,9 @@ static BOOL WriteHWSecureInfoFile( u8 region )
LCFG_THW_SetSerialNo( serialNo ); LCFG_THW_SetSerialNo( serialNo );
} }
// ランチャーゲームコード
LCFG_THW_SetLauncherGameCode( (const u8 *)strLauncherGameCode[ region ] );
// ライト // ライト
if( isWrite && if( isWrite &&
!LCFGi_THW_WriteSecureInfo( s_pPrivKeyBuffer ) ) { !LCFGi_THW_WriteSecureInfo( s_pPrivKeyBuffer ) ) {