SDK rev.7025対応。

HWID署名を2048bitに変更したことに対応。
署名にacsignライブラリを使わず、SDKのcryptoライブラリを使用するように変更。

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@1792 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
yosiokat 2008-07-04 09:53:39 +00:00
parent c45fa3c09e
commit 4731b2fe39
12 changed files with 77 additions and 67 deletions

View File

@ -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)

View File

@ -202,5 +202,5 @@ RomSpec
File *.*
HostRoot $(PRIVKEY_PATH)
Root /key
File $(HWINFO_PRIVKEY)
File $(HWINFO_PRIVKEY) $(HWID_PRIVKEY)
}

View File

@ -16,6 +16,7 @@
*---------------------------------------------------------------------------*/
#include <twl.h>
#include <nitro/crypto.h>
#include <sysmenu.h>
#include <sysmenu/acsign.h>
#include <sysmenu/namut.h>
@ -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<49><44>¼ÌŠm”F
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" );
}

View File

@ -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)

View File

@ -220,5 +220,5 @@ RomSpec
Segment ALL
HostRoot $(PRIVKEY_PATH)
Root /key
File $(HWINFO_PRIVKEY)
File $(HWINFO_PRIVKEY) $(HWID_PRIVKEY)
}

View File

@ -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

View File

@ -223,5 +223,5 @@ RomSpec
File *.*
HostRoot $(PRIVKEY_PATH)
Root /key
File $(HWINFO_PRIVKEY)
File $(HWINFO_PRIVKEY) $(HWID_PRIVKEY)
}

View File

@ -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)

View File

@ -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)

View File

@ -228,5 +228,5 @@ RomSpec
File *.*
HostRoot $(PRIVKEY_PATH)
Root /key
File $(HWINFO_PRIVKEY)
File $(HWINFO_PRIVKEY) $(HWID_PRIVKEY)
}

View File

@ -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)

View File

@ -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