diff --git a/build/gcdfirm/sdmc-launcher/ARM9/main.c b/build/gcdfirm/sdmc-launcher/ARM9/main.c index caa187a9..7e709671 100644 --- a/build/gcdfirm/sdmc-launcher/ARM9/main.c +++ b/build/gcdfirm/sdmc-launcher/ARM9/main.c @@ -16,10 +16,12 @@ *---------------------------------------------------------------------------*/ #include -#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用鍵準備 - 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; diff --git a/build/libraries/fs/ARM9/src/fs_loader.c b/build/libraries/fs/ARM9/src/fs_loader.c index 0debdd8a..d0f474d9 100644 --- a/build/libraries/fs/ARM9/src/fs_loader.c +++ b/build/libraries/fs/ARM9/src/fs_loader.c @@ -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; } + // 鍵の確定 + rsa_key = (rh->s.titleID_Hi & 0x1) ? rsa_key2 : rsa_key1; + // コンテンツ証明書 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 ) ) diff --git a/build/libraries/fs/ARM9/src/fs_loader2.c b/build/libraries/fs/ARM9/src/fs_loader2.c index b7fba0cf..e5799568 100644 --- a/build/libraries/fs/ARM9/src/fs_loader2.c +++ b/build/libraries/fs/ARM9/src/fs_loader2.c @@ -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 ); + // 鍵の確定 + rsa_key = (rh->s.titleID_Hi & 0x1) ? rsa_key2 : rsa_key1; + // コンテンツ証明書 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 ) ) diff --git a/build/nandfirm/menu-launcher/ARM9/main.c b/build/nandfirm/menu-launcher/ARM9/main.c index 0e6a7add..4700b4ea 100644 --- a/build/nandfirm/menu-launcher/ARM9/main.c +++ b/build/nandfirm/menu-launcher/ARM9/main.c @@ -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用鍵準備 - 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; diff --git a/build/nandfirm/menu-launcher2/ARM9/main.c b/build/nandfirm/menu-launcher2/ARM9/main.c index 12b6b601..4521d28c 100644 --- a/build/nandfirm/menu-launcher2/ARM9/main.c +++ b/build/nandfirm/menu-launcher2/ARM9/main.c @@ -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; diff --git a/build/nandfirm/sdmc-launcher/ARM9/main.c b/build/nandfirm/sdmc-launcher/ARM9/main.c index 5e6960f8..077fd8e7 100644 --- a/build/nandfirm/sdmc-launcher/ARM9/main.c +++ b/build/nandfirm/sdmc-launcher/ARM9/main.c @@ -16,10 +16,12 @@ *---------------------------------------------------------------------------*/ #include -#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用鍵準備 - 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; diff --git a/include/firm/fs/ARM9/fs_loader.h b/include/firm/fs/ARM9/fs_loader.h index 4d2608e8..fa54f468 100644 --- a/include/firm/fs/ARM9/fs_loader.h +++ b/include/firm/fs/ARM9/fs_loader.h @@ -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 diff --git a/include/firm/fs/ARM9/fs_loader2.h b/include/firm/fs/ARM9/fs_loader2.h index 0d9aefd4..9a9ca9d4 100644 --- a/include/firm/fs/ARM9/fs_loader2.h +++ b/include/firm/fs/ARM9/fs_loader2.h @@ -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