diff --git a/build/systemMenu_tools/HWInfoWriter/ARM9/Makefile b/build/systemMenu_tools/HWInfoWriter/ARM9/Makefile index 92c9e585..b85840a0 100644 --- a/build/systemMenu_tools/HWInfoWriter/ARM9/Makefile +++ b/build/systemMenu_tools/HWInfoWriter/ARM9/Makefile @@ -47,10 +47,6 @@ SRCS = main.c HWInfoWriter.c hwi.c \ LINCLUDES = $(MISC_DIR)/include \ $(ROOT)/build/libraries/lcfg/ARM9.TWL/include -SYSMENU_LIBS = \ - libacsign$(TWL_LIBSUFFIX).a \ - libacsign_enc$(TWL_LIBSUFFIX).a \ - SDK_APPEND_LIBS = \ liblcfg$(TWL_LIBSUFFIX).a @@ -69,9 +65,11 @@ include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs ifneq ($(TWL_IPL_RED_PRIVATE_ROOT),) ifdef FIRM_USE_PRODUCT_KEYS -MAKEROM_FLAGS += -DHWINFO_PRIVKEY='private_HWInfo.der' +MAKEROM_FLAGS += -DHWINFO_PRIVKEY='private_HWInfo.der' \ + -DHWID_PRIVKEY='private_HWID.der' else -MAKEROM_FLAGS += -DHWINFO_PRIVKEY='private_HWInfo_dev.der' +MAKEROM_FLAGS += -DHWINFO_PRIVKEY='private_HWInfo_dev.der' \ + -DHWID_PRIVKEY='private_HWID_dev.der' endif endif @@ -82,8 +80,6 @@ MAKETAD_FLAGS += -s MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe -GLIBRARIES := $(filter-out libcrypto$(TWL_LIBSUFFIX).a,$(GLIBRARIES)) - #LDIRT_CLEAN = #INSTALL_TARGETS = INSTALL_DIR = $(SDK_NMENU_DATADIR) diff --git a/build/systemMenu_tools/HWInfoWriter/ARM9/main.rsf b/build/systemMenu_tools/HWInfoWriter/ARM9/main.rsf index 902d644d..71bbbea2 100644 --- a/build/systemMenu_tools/HWInfoWriter/ARM9/main.rsf +++ b/build/systemMenu_tools/HWInfoWriter/ARM9/main.rsf @@ -202,5 +202,5 @@ RomSpec File *.* HostRoot $(PRIVKEY_PATH) Root /key - File $(HWINFO_PRIVKEY) + File $(HWINFO_PRIVKEY) $(HWID_PRIVKEY) } diff --git a/build/systemMenu_tools/HWInfoWriter/ARM9/src/hwi.c b/build/systemMenu_tools/HWInfoWriter/ARM9/src/hwi.c index a0dcc925..7c285ef8 100644 --- a/build/systemMenu_tools/HWInfoWriter/ARM9/src/hwi.c +++ b/build/systemMenu_tools/HWInfoWriter/ARM9/src/hwi.c @@ -16,6 +16,7 @@ *---------------------------------------------------------------------------*/ #include +#include #include #include #include @@ -26,8 +27,10 @@ // define data------------------------------------------ #ifdef FIRM_USE_PRODUCT_KEYS // 鍵選択スイッチ #define HWINFO_PRIVKEY_PATH "rom:key/private_HWInfo.der" // 製品用秘密鍵 +#define HWID_PRIVKEY_PATH "rom:key/private_HWID.der" #else #define HWINFO_PRIVKEY_PATH "rom:key/private_HWInfo_dev.der" // 開発用秘密鍵 +#define HWID_PRIVKEY_PATH "rom:key/private_HWID_dev.der" #endif // extern data------------------------------------------ @@ -37,9 +40,10 @@ const LCFGTWLHWNormalInfo *LCFG_THW_GetNormalInfo( void ); const LCFGTWLHWSecureInfo *LCFG_THW_GetSecureInfo( void ); // function's prototype declaration--------------------- -static HwiInitResult ReadPrivateKey( void ); +static HwiInitResult ReadPrivateKey( void **ppBuffer, u32 *pKeyFileLen, char *pPath ); static void VerifyHWInfo( void ); static BOOL VerifyData( const u8 *pTgt, const u8 *pOrg, u32 len ); +static BOOL CheckHWID_Signature( BOOL isPrintf ); static BOOL ReadHWInfoFile( void ); static BOOL ReadTWLSettings( void ); static u8 HWIi_CalcCheckCode(u8 src[8]); @@ -47,7 +51,10 @@ static u8 HWIi_CalcCheckCode(u8 src[8]); // global variable ------------------------------------- // static variable ------------------------------------- -static u8 *s_pPrivKeyBuffer = NULL; +static void *s_pPrivKeyBuffer = NULL; +static void *s_pPrivKeyBufferHWID = NULL; +static u32 s_privKeyBufferLen; +static u32 s_privKeyBufferLenHWID; static void *(*spAlloc)( u32 length ); static void (*spFree)( void *ptr ); @@ -111,20 +118,16 @@ HwiInitResult HWI_Init( void *(*pAlloc)( u32 ), void (*pFree)( void * ) ) spAlloc = pAlloc; spFree = pFree; - ACSign_SetAllocFunc( pAlloc, pFree ); - result = ReadPrivateKey(); + CRYPTO_SetMemAllocator( pAlloc, pFree, NULL ); + + result = ReadPrivateKey( &s_pPrivKeyBuffer, &s_privKeyBufferLen, HWINFO_PRIVKEY_PATH ); + if( result != HWI_INIT_SUCCESS_NO_SIGNATRUE_MODE ) { + result = ReadPrivateKey( &s_pPrivKeyBufferHWID, &s_privKeyBufferLenHWID, HWID_PRIVKEY_PATH ); + } ReadHWInfoFile(); // VerifyHWInfo(); - if( 1 ) { - u8 sign[ RSA_KEY_LENGTH ]; - if( !LCFG_ReadHWID_Signature( sign ) || - !LCFG_CheckHWID_Signature( sign ) - ) { - OS_TPrintf( "HWID Signature check failed.\n" ); - }else { - OS_TPrintf( "HWID Signature check succeeded.\n" ); - } - } + (void)CheckHWID_Signature( TRUE ); + // ※LanguageBitmapを判定で使用するので、必ずReadHWInfoの後で実行する必要がある。 ReadTWLSettings(); @@ -157,24 +160,23 @@ static BOOL ReadTWLSettings( void ) } // 秘密鍵のリード -HwiInitResult ReadPrivateKey( void ) +static HwiInitResult ReadPrivateKey( void **ppBuffer, u32 *pKeyFileLen, char *pPath ) { BOOL result = FALSE; - u32 keyLength; FSFile file; OSTick start = OS_GetTick(); FS_InitFile( &file ); - if( !FS_OpenFileEx( &file, HWINFO_PRIVKEY_PATH, FS_FILEMODE_R ) ) + if( !FS_OpenFileEx( &file, pPath, FS_FILEMODE_R ) ) { OS_TPrintf( "PrivateKey read failed.\n" ); } else { - keyLength = FS_GetFileLength( &file ); - if( keyLength > 0 ) { - s_pPrivKeyBuffer = spAlloc( keyLength ); - if( FS_ReadFile( &file, s_pPrivKeyBuffer, (s32)keyLength ) == keyLength ) { + *pKeyFileLen = FS_GetFileLength( &file ); + if( *pKeyFileLen > 0 ) { + *ppBuffer = spAlloc( *pKeyFileLen ); + if( FS_ReadFile( &file, *ppBuffer, (s32)*pKeyFileLen ) == *pKeyFileLen ) { OS_TPrintf( "PrivateKey read succeeded.\n" ); result = TRUE; }else { @@ -184,9 +186,9 @@ HwiInitResult ReadPrivateKey( void ) FS_CloseFile( &file ); } - if( !result && s_pPrivKeyBuffer ) { - spFree( s_pPrivKeyBuffer ); - s_pPrivKeyBuffer = NULL; + if( !result && *ppBuffer ) { + spFree( *ppBuffer ); + *ppBuffer = NULL; } // OS_TPrintf( "PrivKey read time = %dms\n", OS_TicksToMilliSeconds( OS_GetTick() - start ) ); @@ -241,6 +243,7 @@ static void VerifyHWInfo( void ) } } + // メモリ上のデータベリファイ static BOOL VerifyData( const u8 *pTgt, const u8 *pOrg, u32 len ) { @@ -252,6 +255,23 @@ static BOOL VerifyData( const u8 *pTgt, const u8 *pOrg, u32 len ) return TRUE; } + +// HWID署名の確認 +static BOOL CheckHWID_Signature( BOOL isPrintf ) +{ + u8 sign[ LCFG_TWL_HWID_SIGN_LENGTH ]; + if( !LCFG_ReadHWID_Signature( sign ) || + !LCFG_CheckHWID_Signature( sign ) + ) { + if( isPrintf ) OS_TPrintf( "HWID Signature check failed.\n" ); + return FALSE; + }else { + if( isPrintf ) OS_TPrintf( "HWID Signature check succeeded.\n" ); + return TRUE; + } +} + + /*---------------------------------------------------------------------------* Name: HWI_ModifyLanguage @@ -530,7 +550,7 @@ BOOL HWI_WriteHWSecureInfoFile( u8 region, const u8 *pSerialNo, BOOL isDisableWi // ライト if( isWrite && - !LCFGi_THW_WriteSecureInfo( s_pPrivKeyBuffer ) ) { + !LCFGi_THW_WriteSecureInfo( s_pPrivKeyBuffer, s_privKeyBufferLen ) ) { isWrite = FALSE; OS_TPrintf( "HW Secure Info Write failed.\n" ); } @@ -552,13 +572,14 @@ BOOL HWI_WriteHWSecureInfoFile( u8 region, const u8 *pSerialNo, BOOL isDisableWi *---------------------------------------------------------------------------*/ BOOL HWI_WriteHWIDSignFile( void ) { - BOOL retval; + BOOL retval = TRUE; (void)FS_DeleteFile( (char *)LCFG_TWL_HWID_SIGN_PATH ); 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 ); } - retval = LCFG_WriteHWID_Signature( s_pPrivKeyBuffer ); + retval &= LCFG_WriteHWID_Signature( s_pPrivKeyBufferHWID, s_privKeyBufferLenHWID ); + retval &= CheckHWID_Signature( FALSE ); if( !retval ) { OS_TPrintf( "HWID Signature Write failed.\n" ); } diff --git a/build/systemMenu_tools/ImportJump/ARM9.TWL/Makefile b/build/systemMenu_tools/ImportJump/ARM9.TWL/Makefile index 6097024a..9ae63be9 100644 --- a/build/systemMenu_tools/ImportJump/ARM9.TWL/Makefile +++ b/build/systemMenu_tools/ImportJump/ARM9.TWL/Makefile @@ -65,9 +65,11 @@ include $(TWLSDK_ROOT)/build/buildtools/commondefs.gx.demolib ifneq ($(TWL_IPL_RED_PRIVATE_ROOT),) ifdef FIRM_USE_PRODUCT_KEYS -MAKEROM_FLAGS += -DHWINFO_PRIVKEY='private_HWInfo.der' +MAKEROM_FLAGS += -DHWINFO_PRIVKEY='private_HWInfo.der' \ + -DHWID_PRIVKEY='private_HWID.der' else -MAKEROM_FLAGS += -DHWINFO_PRIVKEY='private_HWInfo_dev.der' +MAKEROM_FLAGS += -DHWINFO_PRIVKEY='private_HWInfo_dev.der' \ + -DHWID_PRIVKEY='private_HWID_dev.der' endif endif @@ -76,7 +78,6 @@ MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)' \ MAKETAD_FLAGS += -s SYSMENU_LIBS = \ - libacsign$(TWL_LIBSUFFIX).a \ libnamut$(TWL_LIBSUFFIX).a SDK_APPEND_LIBS = \ @@ -92,8 +93,6 @@ LLIBRARIES += $(SYSMENU_LIBS) $(SDK_APPEND_LIBS) MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe -GLIBRARIES := $(filter-out libcrypto$(TWL_LIBSUFFIX).a,$(GLIBRARIES)) - #LDIRT_CLEAN = #INSTALL_TARGETS = INSTALL_DIR = $(SDK_NMENU_DATADIR) diff --git a/build/systemMenu_tools/ImportJump/ARM9.TWL/main.rsf b/build/systemMenu_tools/ImportJump/ARM9.TWL/main.rsf index 87d88242..35d468dc 100644 --- a/build/systemMenu_tools/ImportJump/ARM9.TWL/main.rsf +++ b/build/systemMenu_tools/ImportJump/ARM9.TWL/main.rsf @@ -220,5 +220,5 @@ RomSpec Segment ALL HostRoot $(PRIVKEY_PATH) Root /key - File $(HWINFO_PRIVKEY) + File $(HWINFO_PRIVKEY) $(HWID_PRIVKEY) } diff --git a/build/systemMenu_tools/NandInitializer/ARM9.TWL/Makefile b/build/systemMenu_tools/NandInitializer/ARM9.TWL/Makefile index b4cd070f..e6c9dbe2 100644 --- a/build/systemMenu_tools/NandInitializer/ARM9.TWL/Makefile +++ b/build/systemMenu_tools/NandInitializer/ARM9.TWL/Makefile @@ -114,9 +114,11 @@ include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs ifneq ($(TWL_IPL_RED_PRIVATE_ROOT),) ifdef FIRM_USE_PRODUCT_KEYS -MAKEROM_FLAGS += -DHWINFO_PRIVKEY='private_HWInfo.der' +MAKEROM_FLAGS += -DHWINFO_PRIVKEY='private_HWInfo.der' \ + -DHWID_PRIVKEY='private_HWID.der' else -MAKEROM_FLAGS += -DHWINFO_PRIVKEY='private_HWInfo_dev.der' +MAKEROM_FLAGS += -DHWINFO_PRIVKEY='private_HWInfo_dev.der' \ + -DHWID_PRIVKEY='private_HWID_dev.der' endif endif @@ -128,8 +130,6 @@ MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)' \ MAKETAD_FLAGS += -s SYSMENU_LIBS = \ - libacsign$(TWL_LIBSUFFIX).a \ - libacsign_enc$(TWL_LIBSUFFIX).a \ libnamut$(TWL_LIBSUFFIX).a SDK_APPEND_LIBS = \ @@ -144,8 +144,6 @@ LLIBRARIES += $(SYSMENU_LIBS) $(SDK_APPEND_LIBS) MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe -GLIBRARIES := $(filter-out libcrypto$(TWL_LIBSUFFIX).a,$(GLIBRARIES)) - # インストール設定 ifeq ($(TWL_BUILD_TYPE),FINALROM) INSTALL_DIR = $(ROOT)/bin/ARM9-TS/Rom diff --git a/build/systemMenu_tools/NandInitializer/ARM9.TWL/main.rsf b/build/systemMenu_tools/NandInitializer/ARM9.TWL/main.rsf index b2ad7456..7fb60ce4 100644 --- a/build/systemMenu_tools/NandInitializer/ARM9.TWL/main.rsf +++ b/build/systemMenu_tools/NandInitializer/ARM9.TWL/main.rsf @@ -223,5 +223,5 @@ RomSpec File *.* HostRoot $(PRIVKEY_PATH) Root /key - File $(HWINFO_PRIVKEY) + File $(HWINFO_PRIVKEY) $(HWID_PRIVKEY) } diff --git a/build/systemMenu_tools/NandInitializerProduction/ARM9.TWL/Makefile b/build/systemMenu_tools/NandInitializerProduction/ARM9.TWL/Makefile index a32c4f4e..d17d361f 100644 --- a/build/systemMenu_tools/NandInitializerProduction/ARM9.TWL/Makefile +++ b/build/systemMenu_tools/NandInitializerProduction/ARM9.TWL/Makefile @@ -98,9 +98,11 @@ include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs ifneq ($(TWL_IPL_RED_PRIVATE_ROOT),) ifdef FIRM_USE_PRODUCT_KEYS -MAKEROM_FLAGS += -DHWINFO_PRIVKEY='private_HWInfo.der' +MAKEROM_FLAGS += -DHWINFO_PRIVKEY='private_HWInfo.der' \ + -DHWID_PRIVKEY='private_HWID.der' else -MAKEROM_FLAGS += -DHWINFO_PRIVKEY='private_HWInfo_dev.der' +MAKEROM_FLAGS += -DHWINFO_PRIVKEY='private_HWInfo_dev.der' \ + -DHWID_PRIVKEY='private_HWID_dev.der' endif endif @@ -112,8 +114,6 @@ MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)' \ MAKETAD_FLAGS += -s SYSMENU_LIBS = \ - libacsign$(TWL_LIBSUFFIX).a \ - libacsign_enc$(TWL_LIBSUFFIX).a \ libnamut$(TWL_LIBSUFFIX).a SDK_APPEND_LIBS = \ @@ -128,8 +128,6 @@ LLIBRARIES += $(SYSMENU_LIBS) $(SDK_APPEND_LIBS) MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe -GLIBRARIES := $(filter-out libcrypto$(TWL_LIBSUFFIX).a,$(GLIBRARIES)) - #LDIRT_CLEAN = #INSTALL_TARGETS = #INSTALL_DIR = $(SDK_NMENU_DATADIR) diff --git a/build/systemMenu_tools/NandInitializerRed/ARM9.TWL/Makefile b/build/systemMenu_tools/NandInitializerRed/ARM9.TWL/Makefile index 7d1fa653..feb6323c 100644 --- a/build/systemMenu_tools/NandInitializerRed/ARM9.TWL/Makefile +++ b/build/systemMenu_tools/NandInitializerRed/ARM9.TWL/Makefile @@ -93,9 +93,11 @@ include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs ifneq ($(TWL_IPL_RED_PRIVATE_ROOT),) ifdef FIRM_USE_PRODUCT_KEYS -MAKEROM_FLAGS += -DHWINFO_PRIVKEY='private_HWInfo.der' +MAKEROM_FLAGS += -DHWINFO_PRIVKEY='private_HWInfo.der' \ + -DHWID_PRIVKEY='private_HWID.der' else -MAKEROM_FLAGS += -DHWINFO_PRIVKEY='private_HWInfo_dev.der' +MAKEROM_FLAGS += -DHWINFO_PRIVKEY='private_HWInfo_dev.der' \ + -DHWID_PRIVKEY='private_HWID_dev.der' endif endif @@ -107,8 +109,6 @@ MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)' \ MAKETAD_FLAGS += -s SYSMENU_LIBS = \ - libacsign$(TWL_LIBSUFFIX).a \ - libacsign_enc$(TWL_LIBSUFFIX).a \ libnamut$(TWL_LIBSUFFIX).a SDK_APPEND_LIBS = \ @@ -123,8 +123,6 @@ LLIBRARIES += $(SYSMENU_LIBS) $(SDK_APPEND_LIBS) MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe -GLIBRARIES := $(filter-out libcrypto$(TWL_LIBSUFFIX).a,$(GLIBRARIES)) - #LDIRT_CLEAN = #INSTALL_TARGETS = INSTALL_DIR = $(SDK_NMENU_DATADIR) diff --git a/build/systemMenu_tools/NandInitializerRed/ARM9.TWL/main.rsf b/build/systemMenu_tools/NandInitializerRed/ARM9.TWL/main.rsf index 6633d9b8..f8244d56 100644 --- a/build/systemMenu_tools/NandInitializerRed/ARM9.TWL/main.rsf +++ b/build/systemMenu_tools/NandInitializerRed/ARM9.TWL/main.rsf @@ -228,5 +228,5 @@ RomSpec File *.* HostRoot $(PRIVKEY_PATH) Root /key - File $(HWINFO_PRIVKEY) + File $(HWINFO_PRIVKEY) $(HWID_PRIVKEY) } diff --git a/build/systemMenu_tools/SystemUpdater/ARM9.TWL/Makefile b/build/systemMenu_tools/SystemUpdater/ARM9.TWL/Makefile index 87a8cd1a..c09900e4 100644 --- a/build/systemMenu_tools/SystemUpdater/ARM9.TWL/Makefile +++ b/build/systemMenu_tools/SystemUpdater/ARM9.TWL/Makefile @@ -75,9 +75,11 @@ include $(TWLSDK_ROOT)/build/buildtools/commondefs.gx.demolib ifneq ($(TWL_IPL_RED_PRIVATE_ROOT),) ifdef FIRM_USE_PRODUCT_KEYS -MAKEROM_FLAGS += -DHWINFO_PRIVKEY='private_HWInfo.der' +MAKEROM_FLAGS += -DHWINFO_PRIVKEY='private_HWInfo.der' \ + -DHWID_PRIVKEY='private_HWID.der' else -MAKEROM_FLAGS += -DHWINFO_PRIVKEY='private_HWInfo_dev.der' +MAKEROM_FLAGS += -DHWINFO_PRIVKEY='private_HWInfo_dev.der' \ + -DHWID_PRIVKEY='private_HWID_dev.der' endif endif @@ -113,8 +115,6 @@ LLIBRARIES += $(SYSMENU_LIBS) $(SDK_APPEND_LIBS) MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe -GLIBRARIES := $(filter-out libcrypto$(TWL_LIBSUFFIX).a,$(GLIBRARIES)) - #LDIRT_CLEAN = #INSTALL_TARGETS = INSTALL_DIR = $(SDK_NMENU_DATADIR) diff --git a/build/systemMenu_tools/SystemUpdater/ARM9.TWL/main.rsf b/build/systemMenu_tools/SystemUpdater/ARM9.TWL/main.rsf index bccb6e90..f825b4f5 100644 --- a/build/systemMenu_tools/SystemUpdater/ARM9.TWL/main.rsf +++ b/build/systemMenu_tools/SystemUpdater/ARM9.TWL/main.rsf @@ -225,7 +225,7 @@ RomSpec File *.* HostRoot $(PRIVKEY_PATH) Root /key - File $(HWINFO_PRIVKEY) + File $(HWINFO_PRIVKEY) $(HWID_PRIVKEY) HostRoot $(TWL_IPL_RED_ROOT)/build/systemMenu_tools/NandInitializerRed/data Root /data File TWLFontTable.dat