From e38e7a9d7f5441111f9dc8446f08d2bd64da2ebb Mon Sep 17 00:00:00 2001 From: yutaka Date: Wed, 3 Oct 2007 10:20:03 +0000 Subject: [PATCH] =?UTF-8?q?=E8=A8=BC=E6=98=8E=E6=9B=B8=E3=81=A8ROM?= =?UTF-8?q?=E3=83=98=E3=83=83=E3=83=80=E3=81=AE=E7=BD=B2=E5=90=8D=E7=A2=BA?= =?UTF-8?q?=E8=AA=8D=E3=80=81Static=E9=A0=98=E5=9F=9F=E3=81=AE=E3=83=8F?= =?UTF-8?q?=E3=83=83=E3=82=B7=E3=83=A5=E7=A2=BA=E8=AA=8D=E3=81=AE=E5=AE=9F?= =?UTF-8?q?=E8=A3=85=20=E3=83=A1=E3=82=A4=E3=83=B3=E3=83=A1=E3=83=A2?= =?UTF-8?q?=E3=83=AA=E3=81=AE=E3=82=B5=E3=82=A4=E3=82=BA=E5=88=A4=E5=AE=9A?= =?UTF-8?q?=E3=82=92=E3=82=B3=E3=83=A1=E3=83=B3=E3=83=88=E3=82=A2=E3=82=A6?= =?UTF-8?q?=E3=83=88=20(=E4=BD=BF=E3=81=86=E3=81=AA=E3=82=89=E6=88=BB?= =?UTF-8?q?=E3=81=99)=20=E6=96=B0=E3=81=97=E3=81=84=E3=83=98=E3=83=83?= =?UTF-8?q?=E3=83=80=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E3=81=AB=E5=AF=BE?= =?UTF-8?q?=E5=BF=9C=20(=E5=A6=A5=E5=BD=93=E3=81=8B=E3=81=A9=E3=81=86?= =?UTF-8?q?=E3=81=8B=E3=81=AE=E3=83=81=E3=82=A7=E3=83=83=E3=82=AF=E3=81=AF?= =?UTF-8?q?=E3=81=97=E3=81=A6=E3=81=84=E3=81=AA=E3=81=84)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@38 b08762b0-b915-fc4b-9d8c-17b2551a87ff --- build/libraries/fatfs/ARM7/src/fatfs_loader.c | 60 +++++++++++-------- build/libraries/init/ARM7/crt0_firm.c | 2 +- build/libraries/mi/ARM9/mi_loader.c | 14 ++--- build/nandfirm/nandfirm-loader/ARM7/main.c | 2 +- build/nandfirm/nandfirm-loader/ARM9/main.c | 15 ++--- 5 files changed, 48 insertions(+), 45 deletions(-) diff --git a/build/libraries/fatfs/ARM7/src/fatfs_loader.c b/build/libraries/fatfs/ARM7/src/fatfs_loader.c index d2a94106..1ac66c37 100644 --- a/build/libraries/fatfs/ARM7/src/fatfs_loader.c +++ b/build/libraries/fatfs/ARM7/src/fatfs_loader.c @@ -43,7 +43,7 @@ BOOL FATFS_OpenRecentMenu( int driveno ) { return FALSE; } - menufile[0] = (char)('A' + driveno); + menufile[0] += (char)driveno; menu_fd = po_open((u8*)menufile, PO_BINARY, 0); if (menu_fd < 0) { @@ -72,7 +72,7 @@ BOOL FATFS_OpenSpecifiedMenu( const char* menufile ) } #define HEADER_SIZE 0x1000 -#define AUTH_SIZE 0xe00 +#define AUTH_SIZE ROM_HEADER_SIGN_TARGET_SIZE #define SLOT_SIZE 0x8000 @@ -198,12 +198,38 @@ BOOL FATFS_LoadHeader( void ) static AESCounter* FATFSi_GetCounter( u32 offset ) { static AESCounter counter; - MI_CpuCopy8(rh->s.main_static_digest, &counter, 12); + MI_CpuCopy8( rh->s.main_static_digest, &counter, 12 ); counter.words[3] = 0; - AESi_AddCounter(&counter, offset - offsetof(ROM_Header, s.main_ltd_rom_offset)); + AESi_AddCounter( &counter, offset - offsetof(ROM_Header, s.aes_target_rom_offset) ); return &counter; } +/*---------------------------------------------------------------------------* + Name: FATFSi_SetupAES + + Description: setup whiere to use AES + + Arguments: offset offset of region from head of ROM_Header + size size of region + + Returns: counter + *---------------------------------------------------------------------------*/ +static void FATFSi_SetupAES( u32 offset, u32 size ) +{ + if ( !rh->s.enable_aes ) + { + FATFS_DisableAES(); + } + else if ( offset >= rh->s.aes_target_rom_offset && + offset + size <= rh->s.aes_target_rom_offset + rh->s.aes_target_size ) + { + AESi_WaitKey(); + //AESi_LoadKey( AES_KEY_SLOT_A ); + AESi_LoadKey( AES_KEY_SLOT_C ); + FATFS_EnableAES( FATFSi_GetCounter( rh->s.main_ltd_rom_offset ) ); + } +} + /*---------------------------------------------------------------------------* Name: FATFS_LoadMenu @@ -226,7 +252,7 @@ BOOL FATFS_LoadMenu( void ) profile[pf_cnt++] = (u32)PROFILE_PXI_SEND | FIRM_PXI_ID_LOAD_ARM9_STATIC; // checkpoint #endif PXI_NotifyID( FIRM_PXI_ID_LOAD_ARM9_STATIC ); - FATFS_DisableAES(); + FATFSi_SetupAES( rh->s.main_rom_offset, rh->s.main_size ); if ( !FATFS_LoadBuffer( rh->s.main_rom_offset, rh->s.main_size ) || PXI_RecvID() != FIRM_PXI_ID_AUTH_ARM9_STATIC ) { @@ -248,7 +274,7 @@ BOOL FATFS_LoadMenu( void ) profile[pf_cnt++] = (u32)PROFILE_PXI_SEND | FIRM_PXI_ID_LOAD_ARM7_STATIC; // checkpoint #endif PXI_NotifyID( FIRM_PXI_ID_LOAD_ARM7_STATIC ); - FATFS_DisableAES(); + FATFSi_SetupAES( rh->s.sub_rom_offset, rh->s.sub_size ); if ( !FATFS_LoadBuffer( rh->s.sub_rom_offset, rh->s.sub_size ) || PXI_RecvID() != FIRM_PXI_ID_AUTH_ARM7_STATIC ) { @@ -270,16 +296,7 @@ BOOL FATFS_LoadMenu( void ) profile[pf_cnt++] = (u32)PROFILE_PXI_SEND | FIRM_PXI_ID_LOAD_ARM9_LTD_STATIC; // checkpoint #endif PXI_NotifyID( FIRM_PXI_ID_LOAD_ARM9_LTD_STATIC ); - if ( !rh->s.enable_aes ) - { - FATFS_DisableAES(); - } - else - { - AESi_WaitKey(); - AESi_LoadKey( AES_KEY_SLOT_A ); - FATFS_EnableAES( FATFSi_GetCounter( rh->s.main_ltd_rom_offset ) ); - } + FATFSi_SetupAES( rh->s.main_ltd_rom_offset, rh->s.main_ltd_size ); if ( !FATFS_LoadBuffer( rh->s.main_ltd_rom_offset, rh->s.main_ltd_size ) || PXI_RecvID() != FIRM_PXI_ID_AUTH_ARM9_LTD_STATIC ) { @@ -301,16 +318,7 @@ BOOL FATFS_LoadMenu( void ) profile[pf_cnt++] = (u32)PROFILE_PXI_SEND | FIRM_PXI_ID_LOAD_ARM7_LTD_STATIC; // checkpoint #endif PXI_NotifyID( FIRM_PXI_ID_LOAD_ARM7_LTD_STATIC ); - if ( !rh->s.enable_aes ) - { - FATFS_DisableAES(); - } - else - { - AESi_WaitKey(); - AESi_LoadKey( AES_KEY_SLOT_A ); - FATFS_EnableAES( FATFSi_GetCounter( rh->s.sub_ltd_rom_offset ) ); - } + FATFSi_SetupAES( rh->s.sub_ltd_rom_offset, rh->s.sub_ltd_size ); if ( !FATFS_LoadBuffer( rh->s.sub_ltd_rom_offset, rh->s.sub_ltd_size ) || PXI_RecvID() != FIRM_PXI_ID_AUTH_ARM7_LTD_STATIC ) { diff --git a/build/libraries/init/ARM7/crt0_firm.c b/build/libraries/init/ARM7/crt0_firm.c index f3efb359..97b8e0af 100644 --- a/build/libraries/init/ARM7/crt0_firm.c +++ b/build/libraries/init/ARM7/crt0_firm.c @@ -127,7 +127,7 @@ SDK_WEAK_SYMBOL asm void _start( void ) bcc @2 //---- detect main memory size - bl detect_main_memory_size +// bl detect_main_memory_size // shared memory will be cleared //---- set interrupt vector ldr r1, =HW_INTR_VECTOR_BUF diff --git a/build/libraries/mi/ARM9/mi_loader.c b/build/libraries/mi/ARM9/mi_loader.c index 044f7996..1aff69e9 100644 --- a/build/libraries/mi/ARM9/mi_loader.c +++ b/build/libraries/mi/ARM9/mi_loader.c @@ -191,7 +191,7 @@ static const u8 s_digestDefaultKey[ DIGEST_HASH_BLOCK_SIZE_SHA1 ] = { static BOOL CheckRomCertificate( int* pool, const RomCertificate *pCert, const void* pCAPubKey, u32 gameCode ) { - SignatureData sd; + u8 digest[DIGEST_SIZE_SHA1]; u8 md[DIGEST_SIZE_SHA1]; int i; BOOL result = TRUE; @@ -204,7 +204,7 @@ static BOOL CheckRomCertificate( int* pool, const RomCertificate *pCert, const v result = FALSE; } // 証明書署名チェック - SVC_DecryptoSign( pool, &sd, pCert->sign, pCAPubKey ); + SVC_DecryptoSign( pool, &digest, pCert->sign, pCAPubKey ); // ダイジェストの計算 SHA1_Calc( md, pCert, ROM_CERT_SIGN_OFFSET ); @@ -212,7 +212,7 @@ static BOOL CheckRomCertificate( int* pool, const RomCertificate *pCert, const v // 比較 for (i = 0; i < DIGEST_SIZE_SHA1; i++) { - if ( md[i] != sd.digest[i] ) + if ( md[i] != digest[i] ) { result = FALSE; } @@ -295,9 +295,7 @@ static /*inline*/ BOOL MI_LoadModule(void* dest, u32 size, const u8 digest[DIGES { if ( md[i] != digest[i] ) { -#if 0 /* Footerもダイジェストに入れる必要がある (いらなくしてもらう) */ result = FALSE; -#endif } } @@ -319,9 +317,7 @@ BOOL MI_LoadHeader( int* pool, const void* rsa_key ) SHA1_CTX ctx; u8 md[DIGEST_SIZE_SHA1]; SignatureData sd; -#if 0 int i; -#endif BOOL result = TRUE; SHA1_Init(&ctx); @@ -355,8 +351,7 @@ BOOL MI_LoadHeader( int* pool, const void* rsa_key ) // コンテンツ証明書 if ( CheckRomCertificate( pool, &rh->certificate, rsa_key, *(u32*)rh->s.game_code ) ) { -#if 0 /* 証明書内の公開鍵FORMATをどうするか */ - rsa_key = rh->certificate.pubKey; // ヘッダ用の鍵の取り出し + rsa_key = rh->certificate.pubKeyMod; // ヘッダ用の鍵の取り出し } else { @@ -371,7 +366,6 @@ BOOL MI_LoadHeader( int* pool, const void* rsa_key ) { result = FALSE; } -#endif } #ifndef SDK_FINALROM // 1x: after RSA, before PXI diff --git a/build/nandfirm/nandfirm-loader/ARM7/main.c b/build/nandfirm/nandfirm-loader/ARM7/main.c index c9376a2f..23749d6d 100644 --- a/build/nandfirm/nandfirm-loader/ARM7/main.c +++ b/build/nandfirm/nandfirm-loader/ARM7/main.c @@ -214,7 +214,7 @@ void TwlSpMain( void ) // failed PXI_NotifyID( FIRM_PXI_ID_NULL ); - OS_SetDebugLED( (u8)(0xF0 | ++step)); + OS_SetDebugLED( (u8)(0xF0 | step)); OS_Terminate(); } diff --git a/build/nandfirm/nandfirm-loader/ARM9/main.c b/build/nandfirm/nandfirm-loader/ARM9/main.c index 95b4a169..ee3614c4 100644 --- a/build/nandfirm/nandfirm-loader/ARM9/main.c +++ b/build/nandfirm/nandfirm-loader/ARM9/main.c @@ -60,6 +60,14 @@ u32 pf_cnt = 0; static void PreInit(void) { + /* + メインメモリ関連 + */ + + // SHARED領域クリア (IS-TWL-DEBUGGERの更新待ち) +#ifdef SDK_FINALROM + MIi_CpuClearFast( 0, (void*)HW_MAIN_MEM_SHARED, HW_MAIN_MEM_SHARED_END-HW_MAIN_MEM_SHARED ); +#endif /* FromBrom関連 @@ -70,13 +78,6 @@ static void PreInit(void) #endif MIi_CpuClearFast( 0, (void*)OSi_GetFromBromAddr(), sizeof(OSFromBromBuf) ); - - // メインメモリ関連 - - // SHARED領域クリア (IS-TWL-DEBUGGERの更新待ち) -#ifdef SDK_FINALROM - MIi_CpuClearFast( 0, (void*)HW_MAIN_MEM_SHARED, HW_MAIN_MEM_SHARED_END-HW_MAIN_MEM_SHARED ); -#endif } void TwlMain( void )