mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
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:
parent
b4ca66d9b1
commit
06b38f1271
@ -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;
|
||||
|
||||
@ -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 ) )
|
||||
|
||||
@ -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 ) )
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
Reference in New Issue
Block a user