HMAC初期値を別APIではなくLoadStaticの引数で設定するようにした(使ってないが)、

システムアプリかどうかでRSA鍵を切り替えられるようにした


git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@718 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
yutaka 2008-02-22 06:47:54 +00:00
parent b4ca66d9b1
commit 06b38f1271
8 changed files with 90 additions and 73 deletions

View File

@ -16,10 +16,12 @@
*---------------------------------------------------------------------------*/
#include <firm.h>
#define RSA_KEY_ADDR rsa_key
#define RSA_KEY1_ADDR rsa_key1
#define RSA_KEY2_ADDR rsa_key2
#ifndef FIRM_USE_TWLSDK_KEYS
static const u8 rsa_key[128] =
static const u8* rsa_key1 = NULL; // not acceptable
static const u8 rsa_key2[128] =
{
0xC7, 0x94, 0x50, 0x00, 0x3A, 0xE1, 0x0E, 0x6C, 0xA8, 0xD1, 0xC0, 0x2D, 0x77, 0xB7, 0x6D, 0xBC,
0x31, 0xDB, 0x12, 0x08, 0x09, 0x0D, 0x2A, 0xE8, 0xC9, 0x1A, 0x2B, 0x6E, 0x6C, 0x85, 0x78, 0xD7,
@ -31,7 +33,7 @@ static const u8 rsa_key[128] =
0x27, 0x75, 0x2B, 0x04, 0xD7, 0x26, 0xA8, 0x8A, 0x55, 0x2A, 0x76, 0xE5, 0x68, 0x80, 0x57, 0x85
};
#else
static const u8 rsa_key[128] =
static const u8 rsa_key1[128] =
{
0xAC, 0x93, 0xBB,
0x3C, 0x15, 0x5C, 0x5F, 0x25, 0xB0, 0x4C, 0x37, 0xA4, 0x2D, 0x85, 0x29, 0x1D, 0x7A, 0x9D, 0x2D,
@ -43,6 +45,17 @@ static const u8 rsa_key[128] =
0x62, 0x39, 0xFB, 0x10, 0x7E, 0x48, 0x7F, 0xDD, 0x82, 0x38, 0x38, 0x76, 0xB5, 0xCE, 0x21, 0x4B,
0xC9, 0x6F, 0x31, 0x8D, 0x23, 0x57, 0x3D, 0xB6, 0x6C, 0xEE, 0xC2, 0x0D, 0x11
};
static const u8 rsa_key2[128] =
{
0xe9, 0x9e, 0xa7, 0x9f, 0x59, 0x4d, 0xf4, 0xa7, 0x60, 0x04, 0xbd, 0x47, 0xf2, 0xb3, 0x64, 0xcd,
0x16, 0x79, 0xc1, 0x47, 0x39, 0xf6, 0xa9, 0xf8, 0xee, 0x1a, 0xd0, 0x72, 0xcf, 0x43, 0x97, 0x0c,
0x93, 0xa1, 0x38, 0x4e, 0x13, 0x40, 0x6c, 0x10, 0x59, 0x43, 0xe2, 0x71, 0x29, 0x54, 0x14, 0x2c,
0xc5, 0xda, 0x59, 0x4d, 0xb4, 0x6a, 0xef, 0x85, 0x61, 0x6f, 0x7f, 0x1c, 0x59, 0x34, 0x2c, 0xc6,
0x24, 0xf3, 0x7b, 0xc3, 0xb7, 0x40, 0xd1, 0x46, 0xf8, 0x90, 0xb7, 0xc2, 0x98, 0x50, 0xaf, 0x95,
0x52, 0x42, 0xdb, 0xac, 0xd6, 0x7e, 0xa9, 0xc3, 0x3d, 0x1b, 0x51, 0x56, 0x07, 0x06, 0xd0, 0x0b,
0x01, 0xbb, 0x58, 0x93, 0xea, 0xa0, 0x2c, 0xc7, 0x7d, 0x6a, 0x31, 0x7e, 0xc9, 0xe2, 0xda, 0xfe,
0x1f, 0x2e, 0x9d, 0xa7, 0x54, 0x84, 0xdc, 0x28, 0xb9, 0x18, 0xea, 0x16, 0xf2, 0x95, 0x55, 0x6d,
};
#endif
#define RSA_HEAP_SIZE (4*1024) // RSA用ヒープサイズ (サイズ調整必要)
@ -135,8 +148,6 @@ static void PostInit(void)
{
// RSA用ヒープ設定
SVC_InitSignHeap( &acPool, acHeap, sizeof(acHeap) );
// HMAC—pŒ®<C592>€”õ
FS_SetDigestKey( NULL );
// FS/FATFS初期化
FS_InitFIRM();
}
@ -259,7 +270,7 @@ void TwlMain( void )
// 5: after PXI
PUSH_PROFILE();
if ( !FS_LoadHeader(&acPool, RSA_KEY_ADDR ) || !CheckHeader() )
if ( !FS_LoadHeader( &acPool, RSA_KEY1_ADDR, RSA_KEY2_ADDR ) || !CheckHeader() )
{
OS_TPrintf("Failed to call FS_LoadHeader() and/or CheckHeader().\n");
goto end;
@ -271,7 +282,7 @@ void TwlMain( void )
// 7: after PXI
PUSH_PROFILE();
if ( !FS_LoadStatic() )
if ( !FS_LoadStatic( NULL ) )
{
OS_TPrintf("Failed to call FS_LoadStatic().\n");
goto end;

View File

@ -65,7 +65,7 @@ static const u8 defaultKey[ SVC_SHA1_BLOCK_SIZE ] =
Returns: TRUE if success
*---------------------------------------------------------------------------*/
void FS_SetDigestKey( const u8* digestKey )
static inline void FS_SetDigestKey( const u8* digestKey )
{
if ( digestKey )
{
@ -287,13 +287,16 @@ BOOL FS_LoadModule( u8* dest, u32 offset, u32 size, const u8 digest[SVC_SHA1_DIG
and verify signature
Arguments: pool heap context to call SVC_DecryptSign
rsa_key public key to verify the signature
rsa_key1 public key to verify the signature
rsa_key2 public key to verify the signature
for system applications
Returns: TRUE if success
*---------------------------------------------------------------------------*/
BOOL FS_LoadHeader( SVCSignHeapContext* pool, const void* rsa_key )
BOOL FS_LoadHeader( SVCSignHeapContext* pool, const void* rsa_key1, const void* rsa_key2 )
{
#ifndef NO_SECURITY_CHECK
const void* rsa_key;
SVCSHA1Context ctx;
u8 md[SVC_SHA1_DIGEST_SIZE];
SignatureData sd;
@ -309,6 +312,9 @@ BOOL FS_LoadHeader( SVCSignHeapContext* pool, const void* rsa_key )
return FALSE;
}
// Œ®ÌŠmè
rsa_key = (rh->s.titleID_Hi & 0x1) ? rsa_key2 : rsa_key1;
// ƒRƒ“ƒeƒ“ƒc<C692>ؾ<E28093>
if ( CheckRomCertificate( pool, &rh->certificate, rsa_key, *(u32*)rh->s.game_code ) )
{
@ -348,12 +354,14 @@ BOOL FS_LoadHeader( SVCSignHeapContext* pool, const void* rsa_key )
Description: receive static regions from ARM6 via WRAM-B and store them
specified by ROM header at HW_TWL_ROM_HEADER_BUF
Arguments: None
Arguments: digestKey pointer to key for HMAC-SHA1
if NULL, use default key
Returns: TRUE if success
*---------------------------------------------------------------------------*/
BOOL FS_LoadStatic( void )
BOOL FS_LoadStatic( const u8* digestKey )
{
FS_SetDigestKey( digestKey );
if ( rh->s.main_size > 0 )
{
if ( !FS_LoadModule( rh->s.main_ram_address, rh->s.main_rom_offset, rh->s.main_size, rh->s.main_static_digest ) )

View File

@ -71,7 +71,7 @@ static u8* const aesBuffer = (u8*)HW_FIRM_FS_AES_BUFFER; // 0x2ff3800
Returns: TRUE if success
*---------------------------------------------------------------------------*/
void FS2_SetDigestKey( const u8* digestKey )
static inline void FS2_SetDigestKey( const u8* digestKey )
{
if ( digestKey )
{
@ -312,12 +312,15 @@ BOOL FS2_OpenSrl( FSFile *pFile )
Arguments: pFile pointer to FSFile streucture
pool heap context to call SVC_DecryptSign
rsa_key public key to verify the signature
rsa_key1 public key to verify the signature
rsa_key2 public key to verify the signature
for system applications
Returns: TRUE if success
*---------------------------------------------------------------------------*/
BOOL FS2_LoadHeader( FSFile *pFile, SVCSignHeapContext* pool, const void* rsa_key )
BOOL FS2_LoadHeader( FSFile *pFile, SVCSignHeapContext* pool, const void* rsa_key1, const void* rsa_key2 )
{
const void* rsa_key;
u8 md[SVC_SHA1_DIGEST_SIZE];
SignatureData sd;
@ -331,6 +334,9 @@ BOOL FS2_LoadHeader( FSFile *pFile, SVCSignHeapContext* pool, const void* rsa_ke
}
SVC_CalcSHA1( md, rh, FS_HEADER_AUTH_SIZE );
// Œ®ÌŠmè
rsa_key = (rh->s.titleID_Hi & 0x1) ? rsa_key2 : rsa_key1;
// ƒRƒ“ƒeƒ“ƒc<C692>ؾ<E28093>
if ( CheckRomCertificate( pool, &rh->certificate, rsa_key, *(u32*)rh->s.game_code ) )
{
@ -366,11 +372,14 @@ BOOL FS2_LoadHeader( FSFile *pFile, SVCSignHeapContext* pool, const void* rsa_ke
specified by ROM header at HW_TWL_ROM_HEADER_BUF
Arguments: pFile pointer to FSFile streucture
digestKey pointer to key for HMAC-SHA1
if NULL, use default key
Returns: TRUE if success
*---------------------------------------------------------------------------*/
BOOL FS2_LoadStatic( FSFile *pFile )
BOOL FS2_LoadStatic( FSFile *pFile, const u8* digestKey )
{
FS2_SetDigestKey( digestKey );
if ( rh->s.main_size > 0 )
{
if ( !FS2_LoadModule( pFile, rh->s.main_ram_address, rh->s.main_rom_offset, rh->s.main_size, rh->s.main_static_digest ) )

View File

@ -54,7 +54,7 @@ static SVCSignHeapContext acPool;
PRINT_MEMORY_ADDR SPrintfを行います()
FINALROM版でもコードが残るので注意してください
*/
#define PRINT_MEMORY_ADDR 0x02FFC000
#define PRINT_MEMORY_ADDR 0x02FFC200
//#ifdef SDK_FINALROM // FINALROMで無効化
//#undef PROFILE_ENABLE
@ -117,8 +117,6 @@ static void PostInit(void)
{
// RSA用ヒープ設定
SVC_InitSignHeap( &acPool, acHeap, sizeof(acHeap) );
// HMAC—pŒ®<C592>€”õ
FS_SetDigestKey( NULL );
// FS/FATFS初期化
FS_InitFIRM();
}
@ -281,7 +279,7 @@ void TwlMain( void )
// 6: after PXI
PUSH_PROFILE();
if ( !FS_LoadHeader(&acPool, RSA_KEY_ADDR ) || !CheckHeader() )
if ( !FS_LoadHeader( &acPool, NULL, RSA_KEY_ADDR ) || !CheckHeader() )
{
OS_TPrintf("Failed to call FS_LoadHeader() and/or CheckHeader().\n");
goto end;
@ -293,7 +291,7 @@ void TwlMain( void )
// 8: after PXI
PUSH_PROFILE();
if ( !FS_LoadStatic() )
if ( !FS_LoadStatic( NULL ) )
{
OS_TPrintf("Failed to call FS_LoadStatic().\n");
goto end;

View File

@ -24,15 +24,14 @@
#define RSA_KEY_ADDR rsa_key
static const u8 rsa_key[128] =
{
0xAC, 0x93, 0xBB,
0x3C, 0x15, 0x5C, 0x5F, 0x25, 0xB0, 0x4C, 0x37, 0xA4, 0x2D, 0x85, 0x29, 0x1D, 0x7A, 0x9D, 0x2D,
0xD5, 0x79, 0xB5, 0x5D, 0xB1, 0x08, 0x20, 0x9C, 0xF0, 0x4C, 0x56, 0x27, 0x97, 0xF8, 0x7E, 0x3E,
0xCB, 0x94, 0x06, 0x05, 0x94, 0x00, 0x92, 0x9B, 0xB0, 0x5B, 0x06, 0xF6, 0xAF, 0xAA, 0x9C, 0xA5,
0xF0, 0x11, 0xA7, 0x8A, 0xCB, 0x0C, 0x11, 0xD6, 0x0C, 0x3D, 0x30, 0xAC, 0x51, 0x79, 0x5A, 0xB5,
0x7F, 0x11, 0x92, 0x74, 0x48, 0x82, 0x81, 0xBF, 0x3B, 0xFA, 0x93, 0xBF, 0x6B, 0x5B, 0x3F, 0x86,
0x96, 0x4F, 0xCC, 0x90, 0x12, 0xB2, 0x39, 0x8D, 0x68, 0x16, 0x7B, 0xC6, 0x87, 0xF1, 0xF5, 0x60,
0x62, 0x39, 0xFB, 0x10, 0x7E, 0x48, 0x7F, 0xDD, 0x82, 0x38, 0x38, 0x76, 0xB5, 0xCE, 0x21, 0x4B,
0xC9, 0x6F, 0x31, 0x8D, 0x23, 0x57, 0x3D, 0xB6, 0x6C, 0xEE, 0xC2, 0x0D, 0x11
0xe9, 0x9e, 0xa7, 0x9f, 0x59, 0x4d, 0xf4, 0xa7, 0x60, 0x04, 0xbd, 0x47, 0xf2, 0xb3, 0x64, 0xcd,
0x16, 0x79, 0xc1, 0x47, 0x39, 0xf6, 0xa9, 0xf8, 0xee, 0x1a, 0xd0, 0x72, 0xcf, 0x43, 0x97, 0x0c,
0x93, 0xa1, 0x38, 0x4e, 0x13, 0x40, 0x6c, 0x10, 0x59, 0x43, 0xe2, 0x71, 0x29, 0x54, 0x14, 0x2c,
0xc5, 0xda, 0x59, 0x4d, 0xb4, 0x6a, 0xef, 0x85, 0x61, 0x6f, 0x7f, 0x1c, 0x59, 0x34, 0x2c, 0xc6,
0x24, 0xf3, 0x7b, 0xc3, 0xb7, 0x40, 0xd1, 0x46, 0xf8, 0x90, 0xb7, 0xc2, 0x98, 0x50, 0xaf, 0x95,
0x52, 0x42, 0xdb, 0xac, 0xd6, 0x7e, 0xa9, 0xc3, 0x3d, 0x1b, 0x51, 0x56, 0x07, 0x06, 0xd0, 0x0b,
0x01, 0xbb, 0x58, 0x93, 0xea, 0xa0, 0x2c, 0xc7, 0x7d, 0x6a, 0x31, 0x7e, 0xc9, 0xe2, 0xda, 0xfe,
0x1f, 0x2e, 0x9d, 0xa7, 0x54, 0x84, 0xdc, 0x28, 0xb9, 0x18, 0xea, 0x16, 0xf2, 0x95, 0x55, 0x6d,
};
#endif
@ -56,7 +55,7 @@ static SVCSignHeapContext acPool;
PRINT_MEMORY_ADDR SPrintfを行います()
FINALROM版でもコードが残るので注意してください
*/
#define PRINT_MEMORY_ADDR 0x02FFC000
#define PRINT_MEMORY_ADDR 0x02FFC200
//#ifdef SDK_FINALROM // FINALROMで無効化
//#undef PROFILE_ENABLE
@ -120,8 +119,6 @@ static void PostInit(void)
AES_Init();
// RSA用ヒープ設定
SVC_InitSignHeap( &acPool, acHeap, sizeof(acHeap) );
// HMAC用鍵準備
FS2_SetDigestKey( NULL );
// FS/FATFS初期化
FS_InitFIRM();
}
@ -291,7 +288,7 @@ void TwlMain( void )
// 6: after FS_OpenSrl
PUSH_PROFILE();
if ( !FS2_LoadHeader( &file, &acPool, RSA_KEY_ADDR ) || !CheckHeader() )
if ( !FS2_LoadHeader( &file, &acPool, NULL, RSA_KEY_ADDR ) || !CheckHeader() )
{
OS_TPrintf("Failed to call FS2_LoadHeader() and/or CheckHeader().\n");
goto end;
@ -303,7 +300,7 @@ void TwlMain( void )
// 8: after PXI
PUSH_PROFILE();
if ( !FS2_LoadStatic( &file ) )
if ( !FS2_LoadStatic( &file, NULL ) )
{
OS_TPrintf("Failed to call FS2_LoadStatic().\n");
goto end;

View File

@ -16,10 +16,12 @@
*---------------------------------------------------------------------------*/
#include <firm.h>
#define RSA_KEY_ADDR rsa_key
#define RSA_KEY1_ADDR rsa_key1
#define RSA_KEY2_ADDR rsa_key2
#ifndef FIRM_USE_TWLSDK_KEYS
static const u8 rsa_key[128] =
static const u8* rsa_key1 = NULL; // not acceptable
static const u8 rsa_key2[128] =
{
0xC7, 0x94, 0x50, 0x00, 0x3A, 0xE1, 0x0E, 0x6C, 0xA8, 0xD1, 0xC0, 0x2D, 0x77, 0xB7, 0x6D, 0xBC,
0x31, 0xDB, 0x12, 0x08, 0x09, 0x0D, 0x2A, 0xE8, 0xC9, 0x1A, 0x2B, 0x6E, 0x6C, 0x85, 0x78, 0xD7,
@ -31,7 +33,7 @@ static const u8 rsa_key[128] =
0x27, 0x75, 0x2B, 0x04, 0xD7, 0x26, 0xA8, 0x8A, 0x55, 0x2A, 0x76, 0xE5, 0x68, 0x80, 0x57, 0x85
};
#else
static const u8 rsa_key[128] =
static const u8 rsa_key1[128] =
{
0xAC, 0x93, 0xBB,
0x3C, 0x15, 0x5C, 0x5F, 0x25, 0xB0, 0x4C, 0x37, 0xA4, 0x2D, 0x85, 0x29, 0x1D, 0x7A, 0x9D, 0x2D,
@ -43,6 +45,17 @@ static const u8 rsa_key[128] =
0x62, 0x39, 0xFB, 0x10, 0x7E, 0x48, 0x7F, 0xDD, 0x82, 0x38, 0x38, 0x76, 0xB5, 0xCE, 0x21, 0x4B,
0xC9, 0x6F, 0x31, 0x8D, 0x23, 0x57, 0x3D, 0xB6, 0x6C, 0xEE, 0xC2, 0x0D, 0x11
};
static const u8 rsa_key2[128] =
{
0xe9, 0x9e, 0xa7, 0x9f, 0x59, 0x4d, 0xf4, 0xa7, 0x60, 0x04, 0xbd, 0x47, 0xf2, 0xb3, 0x64, 0xcd,
0x16, 0x79, 0xc1, 0x47, 0x39, 0xf6, 0xa9, 0xf8, 0xee, 0x1a, 0xd0, 0x72, 0xcf, 0x43, 0x97, 0x0c,
0x93, 0xa1, 0x38, 0x4e, 0x13, 0x40, 0x6c, 0x10, 0x59, 0x43, 0xe2, 0x71, 0x29, 0x54, 0x14, 0x2c,
0xc5, 0xda, 0x59, 0x4d, 0xb4, 0x6a, 0xef, 0x85, 0x61, 0x6f, 0x7f, 0x1c, 0x59, 0x34, 0x2c, 0xc6,
0x24, 0xf3, 0x7b, 0xc3, 0xb7, 0x40, 0xd1, 0x46, 0xf8, 0x90, 0xb7, 0xc2, 0x98, 0x50, 0xaf, 0x95,
0x52, 0x42, 0xdb, 0xac, 0xd6, 0x7e, 0xa9, 0xc3, 0x3d, 0x1b, 0x51, 0x56, 0x07, 0x06, 0xd0, 0x0b,
0x01, 0xbb, 0x58, 0x93, 0xea, 0xa0, 0x2c, 0xc7, 0x7d, 0x6a, 0x31, 0x7e, 0xc9, 0xe2, 0xda, 0xfe,
0x1f, 0x2e, 0x9d, 0xa7, 0x54, 0x84, 0xdc, 0x28, 0xb9, 0x18, 0xea, 0x16, 0xf2, 0x95, 0x55, 0x6d,
};
#endif
#define RSA_HEAP_SIZE (4*1024) // RSA用ヒープサイズ (サイズ調整必要)
@ -139,8 +152,6 @@ static void PostInit(void)
{
// RSA用ヒープ設定
SVC_InitSignHeap( &acPool, acHeap, sizeof(acHeap) );
// HMAC—pŒ®<C592>€”õ
FS_SetDigestKey( NULL );
// FS/FATFS初期化
FS_InitFIRM();
}
@ -283,7 +294,7 @@ void TwlMain( void )
// 5: after PXI
PUSH_PROFILE();
if ( !FS_LoadHeader(&acPool, RSA_KEY_ADDR ) || !CheckHeader() )
if ( !FS_LoadHeader( &acPool, RSA_KEY1_ADDR, RSA_KEY2_ADDR ) || !CheckHeader() )
{
OS_TPrintf("Failed to call FS_LoadHeader() and/or CheckHeader().\n");
goto end;
@ -295,7 +306,7 @@ void TwlMain( void )
// 7: after PXI
PUSH_PROFILE();
if ( !FS_LoadStatic() )
if ( !FS_LoadStatic( NULL ) )
{
OS_TPrintf("Failed to call FS_LoadStatic().\n");
goto end;

View File

@ -26,18 +26,6 @@
extern "C" {
#endif
/*---------------------------------------------------------------------------*
Name: FS_SetDigestKey
Description: set specified key or default key for HMAC-SHA-1
Arguments: digestKey pointer to key
if NULL, use default key
Returns: TRUE if success
*---------------------------------------------------------------------------*/
void FS_SetDigestKey( const u8* digestKey );
/*---------------------------------------------------------------------------*
Name: FS_LoadBuffer
@ -75,11 +63,13 @@ BOOL FS_LoadModule( u8* dest, u32 offset, u32 size, const u8 digest[SVC_SHA1_BLO
and verify signature
Arguments: pool heap context to call SVC_DecryptSign
rsa_key public key to verify the signature
rsa_key1 public key to verify the signature
rsa_key2 public key to verify the signature
for system applications
Returns: TRUE if success
*---------------------------------------------------------------------------*/
BOOL FS_LoadHeader( SVCSignHeapContext* pool, const void* rsa_key );
BOOL FS_LoadHeader( SVCSignHeapContext* pool, const void* rsa_key1, const void* rsa_key2 );
/*---------------------------------------------------------------------------*
Name: FS_LoadStatic
@ -87,11 +77,12 @@ BOOL FS_LoadHeader( SVCSignHeapContext* pool, const void* rsa_key );
Description: receive static regions from ARM6 via WRAM-B and store them
specified by ROM header at HW_TWL_ROM_HEADER_BUF
Arguments: None
Arguments: digestKey pointer to key for HMAC-SHA1
if NULL, use default key
Returns: TRUE if success
*---------------------------------------------------------------------------*/
BOOL FS_LoadStatic( void );
BOOL FS_LoadStatic( const u8* digestKey );
#ifdef __cplusplus

View File

@ -26,18 +26,6 @@
extern "C" {
#endif
/*---------------------------------------------------------------------------*
Name: FS2_SetDigestKey
Description: set specified key or default key for HMAC-SHA-1
Arguments: digestKey pointer to key
if NULL, use default key
Returns: TRUE if success
*---------------------------------------------------------------------------*/
void FS2_SetDigestKey( const u8* digestKey );
/*---------------------------------------------------------------------------*
Name: FS2_LoadModule
@ -74,11 +62,13 @@ BOOL FS2_OpenSrl( FSFile *pFile );
Arguments: pFile pointer to FSFile streucture
pool heap context to call SVC_DecryptSign
rsa_key public key to verify the signature
rsa_key1 public key to verify the signature
rsa_key2 public key to verify the signature
for system applications
Returns: TRUE if success
*---------------------------------------------------------------------------*/
BOOL FS2_LoadHeader( FSFile *pFile, SVCSignHeapContext* pool, const void* rsa_key );
BOOL FS2_LoadHeader( FSFile *pFile, SVCSignHeapContext* pool, const void* rsa_key1, const void* rsa_key2 );
/*---------------------------------------------------------------------------*
Name: FS2_LoadStatic
@ -87,10 +77,12 @@ BOOL FS2_LoadHeader( FSFile *pFile, SVCSignHeapContext* pool, const void* rsa_ke
specified by ROM header at HW_TWL_ROM_HEADER_BUF
Arguments: pFile pointer to FSFile streucture
digestKey pointer to key for HMAC-SHA1
if NULL, use default key
Returns: TRUE if success
*---------------------------------------------------------------------------*/
BOOL FS2_LoadStatic( FSFile *pFile );
BOOL FS2_LoadStatic( FSFile *pFile, const u8* digestKey );
#ifdef __cplusplus