mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
AES鍵の位置変更、
AES領域二つ目対応、 バッテリ切れ時に電源OFFするように修正(FINALROM時のみ)、 セキュリティOFF設定の追加(デフォルト無効)、 SDドライバのDMAを0、1に変更 git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@696 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
45ec74a6c4
commit
ef7303caaa
@ -62,8 +62,8 @@ static char* debugPtr = (char*)PRINT_MEMORY_ADDR;
|
||||
#endif
|
||||
|
||||
#define THREAD_PRIO_FATFS 8
|
||||
#define DMA_FATFS_1 3
|
||||
#define DMA_FATFS_2 2
|
||||
#define DMA_FATFS_1 0
|
||||
#define DMA_FATFS_2 1
|
||||
|
||||
extern void* SDNandContext; /* NAND初期化パラメータ */
|
||||
|
||||
@ -99,8 +99,11 @@ static void PreInit(void)
|
||||
*/
|
||||
if ( (MCUi_ReadRegister( MCU_REG_POWER_INFO_ADDR ) & MCU_REG_POWER_INFO_LEVEL_MASK) == 0 )
|
||||
{
|
||||
OS_TPrintf("Battery is empty.\n");
|
||||
OS_Terminate();
|
||||
#ifndef SDK_FINALROM
|
||||
OS_TPanic("Battery is empty.\n");
|
||||
#else
|
||||
PM_Shutdown();
|
||||
#endif
|
||||
}
|
||||
/*
|
||||
FromBrom関連
|
||||
@ -134,8 +137,11 @@ static void PostInit(void)
|
||||
*/
|
||||
if ( (MCUi_ReadRegister( MCU_REG_POWER_INFO_ADDR ) & MCU_REG_POWER_INFO_LEVEL_MASK) == 0 )
|
||||
{
|
||||
OS_TPrintf("Battery is empty.\n");
|
||||
OS_Terminate();
|
||||
#ifndef SDK_FINALROM
|
||||
OS_TPanic("Battery is empty.\n");
|
||||
#else
|
||||
PM_Shutdown();
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
@ -232,8 +238,8 @@ void TwlSpMain( void )
|
||||
SetDebugLED(++step); // 0x89
|
||||
|
||||
AESi_InitKeysFIRM();
|
||||
AESi_RecvSeed( rh->s.developer_encrypt );
|
||||
// 9: after AESi_RecvSeed
|
||||
AESi_InitSeed();
|
||||
// 9: after AESi_InitSeed
|
||||
PUSH_PROFILE();
|
||||
SetDebugLED(++step); // 0x8a
|
||||
|
||||
|
||||
@ -271,21 +271,16 @@ void TwlMain( void )
|
||||
// 7: after PXI
|
||||
PUSH_PROFILE();
|
||||
|
||||
AESi_SendSeed( FS_GetAesKeySeed() );
|
||||
FS_DeleteAesKeySeed();
|
||||
// 8: after AESi_SendSeed
|
||||
PUSH_PROFILE();
|
||||
|
||||
if ( !FS_LoadStatic() )
|
||||
{
|
||||
OS_TPrintf("Failed to call FS_LoadStatic().\n");
|
||||
goto end;
|
||||
}
|
||||
// 9: after FS_LoadStatic
|
||||
// 8: after FS_LoadStatic
|
||||
PUSH_PROFILE();
|
||||
|
||||
PXI_NotifyID( FIRM_PXI_ID_DONE_STATIC );
|
||||
// 10: after PXI
|
||||
// 9: after PXI
|
||||
PUSH_PROFILE();
|
||||
|
||||
#ifdef PROFILE_ENABLE
|
||||
|
||||
@ -110,28 +110,29 @@ void AESi_ResetAesKey( void )
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: AESi_RecvSeed
|
||||
Name: AESi_InitSeedWithRomHeader
|
||||
|
||||
Description: set SEED/KEY from ARM9 via PXI.
|
||||
Description: set SEED/KEY from ROM header
|
||||
|
||||
Arguments: None
|
||||
Arguments: rom_header ROM header
|
||||
|
||||
Returns: None
|
||||
*---------------------------------------------------------------------------*/
|
||||
void AESi_RecvSeed( BOOL developer_encrypt )
|
||||
void AESi_InitSeedWithRomHeader( ROM_Header* rom_header )
|
||||
{
|
||||
AESKey seed;
|
||||
// PXI_RecvDataByFifo( PXI_FIFO_TAG_DATA, &seed, AES_BLOCK_SIZE );
|
||||
PXI_RecvStream( &seed, AES_BLOCK_SIZE );
|
||||
AES_Lock();
|
||||
AES_WaitKey();
|
||||
if ( developer_encrypt )
|
||||
if ( !rom_header )
|
||||
{
|
||||
AES_SetKeyA(&seed); // Direct
|
||||
return;
|
||||
}
|
||||
if ( rom_header->s.developer_encrypt )
|
||||
{
|
||||
AES_SetKeyA( (AESKey*)rom_header->s.title_name );
|
||||
}
|
||||
else
|
||||
{
|
||||
AES_SetKeySeedA((AESKeySeed*)&seed); // APP
|
||||
AES_SetKeySeedA( (AESKeySeed*)rom_header->s.main_ltd_static_digest );
|
||||
}
|
||||
AES_Unlock();
|
||||
}
|
||||
|
||||
@ -58,6 +58,12 @@ static void EnableAes( u32 offset )
|
||||
MI_CpuCopy8( rh->s.main_static_digest, &aesCounter, AES_BLOCK_SIZE );
|
||||
AES_AddToCounter( &aesCounter, (offset - rh->s.aes_target_rom_offset) / AES_BLOCK_SIZE );
|
||||
}
|
||||
static void EnableAes2( u32 offset )
|
||||
{
|
||||
aesFlag = TRUE;
|
||||
MI_CpuCopy8( rh->s.sub_static_digest, &aesCounter, AES_BLOCK_SIZE );
|
||||
AES_AddToCounter( &aesCounter, (offset - rh->s.aes_target2_rom_offset) / AES_BLOCK_SIZE );
|
||||
}
|
||||
static void DisableAes( void )
|
||||
{
|
||||
aesFlag = FALSE;
|
||||
@ -65,11 +71,14 @@ static void DisableAes( void )
|
||||
|
||||
static u32 GetTransferSize( u32 offset, u32 size )
|
||||
{
|
||||
u32 aes_offset = rh->s.aes_target_rom_offset;
|
||||
u32 aes_end = aes_offset + RoundUpModuleSize(rh->s.aes_target_size);
|
||||
u32 end = offset + RoundUpModuleSize(size);
|
||||
if ( rh->s.enable_aes )
|
||||
{
|
||||
u32 end = offset + RoundUpModuleSize(size);
|
||||
u32 aes_offset = rh->s.aes_target_rom_offset;
|
||||
u32 aes_end = aes_offset + RoundUpModuleSize(rh->s.aes_target_size);
|
||||
u32 aes_offset2 = rh->s.aes_target2_rom_offset;
|
||||
u32 aes_end2 = aes_offset2 + RoundUpModuleSize(rh->s.aes_target2_size);
|
||||
|
||||
if ( offset >= aes_offset && offset < aes_end )
|
||||
{
|
||||
if ( end > aes_end )
|
||||
@ -78,6 +87,14 @@ static u32 GetTransferSize( u32 offset, u32 size )
|
||||
}
|
||||
EnableAes( offset );
|
||||
}
|
||||
else if ( offset >= aes_offset2 && offset < aes_end2 )
|
||||
{
|
||||
if ( end > aes_end2 )
|
||||
{
|
||||
size = aes_end2 - offset;
|
||||
}
|
||||
EnableAes2( offset );
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( offset < aes_offset && offset + size > aes_offset )
|
||||
|
||||
@ -54,35 +54,6 @@ static const u8 defaultKey[ SVC_SHA1_BLOCK_SIZE ] =
|
||||
0x87, 0x46, 0x58, 0x24,
|
||||
};
|
||||
|
||||
static AESKey FSiAesKeySeed;
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: FS_GetAesKeySeed
|
||||
|
||||
Description: retreive aes key seed in the signature
|
||||
|
||||
Arguments: None
|
||||
|
||||
Returns: pointer to seed
|
||||
*---------------------------------------------------------------------------*/
|
||||
AESKey* const FS_GetAesKeySeed( void )
|
||||
{
|
||||
return &FSiAesKeySeed;
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: FS_DeleteAesKeySeed
|
||||
|
||||
Description: delete aes key seed in the signature
|
||||
|
||||
Arguments: None
|
||||
|
||||
Returns: None
|
||||
*---------------------------------------------------------------------------*/
|
||||
void FS_DeleteAesKeySeed( void )
|
||||
{
|
||||
MI_CpuClear8( &FSiAesKeySeed, sizeof(FSiAesKeySeed) );
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: FS_SetDigestKey
|
||||
@ -197,7 +168,7 @@ BOOL FS_LoadBuffer( u8* dest, u32 size, SVCSHA1Context *ctx )
|
||||
{
|
||||
MI_CpuCopyFast( src, dest, unit );
|
||||
}
|
||||
DC_FlushRange( src, unit );
|
||||
DC_InvalidateRange( src, unit );
|
||||
size -= unit;
|
||||
dest += unit;
|
||||
MIi_SetWramBankMaster_B( count, MI_WRAM_ARM7 );
|
||||
@ -225,11 +196,14 @@ BOOL FS_LoadBuffer( u8* dest, u32 size, SVCSHA1Context *ctx )
|
||||
*---------------------------------------------------------------------------*/
|
||||
static u32 GetTransferSize( u32 offset, u32 size )
|
||||
{
|
||||
u32 aes_offset = rh->s.aes_target_rom_offset;
|
||||
u32 aes_end = aes_offset + rh->s.aes_target_size;
|
||||
u32 end = offset + size;
|
||||
if ( rh->s.enable_aes )
|
||||
{
|
||||
u32 end = offset + RoundUpModuleSize(size);
|
||||
u32 aes_offset = rh->s.aes_target_rom_offset;
|
||||
u32 aes_end = aes_offset + RoundUpModuleSize(rh->s.aes_target_size);
|
||||
u32 aes_offset2 = rh->s.aes_target2_rom_offset;
|
||||
u32 aes_end2 = aes_offset2 + RoundUpModuleSize(rh->s.aes_target2_size);
|
||||
|
||||
if ( offset >= aes_offset && offset < aes_end )
|
||||
{
|
||||
if ( end > aes_end )
|
||||
@ -237,6 +211,13 @@ static u32 GetTransferSize( u32 offset, u32 size )
|
||||
size = aes_end - offset;
|
||||
}
|
||||
}
|
||||
else if ( offset >= aes_offset2 && offset < aes_end2 )
|
||||
{
|
||||
if ( end > aes_end2 )
|
||||
{
|
||||
size = aes_end2 - offset;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( offset < aes_offset && offset + size > aes_offset )
|
||||
@ -264,6 +245,7 @@ static u32 GetTransferSize( u32 offset, u32 size )
|
||||
*---------------------------------------------------------------------------*/
|
||||
BOOL FS_LoadModule( u8* dest, u32 offset, u32 size, const u8 digest[SVC_SHA1_DIGEST_SIZE] )
|
||||
{
|
||||
#ifndef NO_SECURITY_CHECK
|
||||
SVCHMACSHA1Context ctx;
|
||||
u8 md[SVC_SHA1_DIGEST_SIZE];
|
||||
|
||||
@ -281,6 +263,21 @@ BOOL FS_LoadModule( u8* dest, u32 offset, u32 size, const u8 digest[SVC_SHA1_DIG
|
||||
}
|
||||
SVC_HMACSHA1GetHash(&ctx, md);
|
||||
return CheckDigest(md, (u8*)digest, TRUE, FALSE);
|
||||
#else
|
||||
(void)digest;
|
||||
while ( size > 0 )
|
||||
{
|
||||
u32 unit = GetTransferSize( offset, size );
|
||||
if ( !FS_LoadBuffer( dest, unit, NULL ) )
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
dest += unit;
|
||||
offset += unit;
|
||||
size -= unit;
|
||||
}
|
||||
return TRUE;
|
||||
#endif
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
@ -296,6 +293,7 @@ BOOL FS_LoadModule( u8* dest, u32 offset, u32 size, const u8 digest[SVC_SHA1_DIG
|
||||
*---------------------------------------------------------------------------*/
|
||||
BOOL FS_LoadHeader( SVCSignHeapContext* pool, const void* rsa_key )
|
||||
{
|
||||
#ifndef NO_SECURITY_CHECK
|
||||
SVCSHA1Context ctx;
|
||||
u8 md[SVC_SHA1_DIGEST_SIZE];
|
||||
SignatureData sd;
|
||||
@ -332,11 +330,13 @@ BOOL FS_LoadHeader( SVCSignHeapContext* pool, const void* rsa_key )
|
||||
|
||||
// ダイジェスト以外のデータのチェックが必要!!
|
||||
|
||||
// Œ®‚̕ۑ¶
|
||||
MI_CpuCopy8( (AESKey*)sd.aes_key_seed, &FSiAesKeySeed, sizeof(FSiAesKeySeed) );
|
||||
|
||||
MI_CpuClear8( &sd, sizeof(sd) ); // 残り削除 (他に必要なものはない?)
|
||||
|
||||
#else
|
||||
(void)pool;
|
||||
(void)rsa_key;
|
||||
FS_LoadBuffer( (u8*)rh, FS_HEADER_AUTH_SIZE, NULL );
|
||||
FS_LoadBuffer( (u8*)rh + FS_HEADER_AUTH_SIZE, HW_TWL_ROM_HEADER_BUF_SIZE - FS_HEADER_AUTH_SIZE, NULL );
|
||||
#endif
|
||||
// ROMヘッダのコピー
|
||||
MI_CpuCopyFast( rh, (void*)HW_ROM_HEADER_BUF, HW_ROM_HEADER_BUF_END-HW_ROM_HEADER_BUF );
|
||||
return TRUE;
|
||||
|
||||
@ -56,41 +56,11 @@ static const u8 defaultKey[ SVC_SHA1_BLOCK_SIZE ] =
|
||||
0x87, 0x46, 0x58, 0x24,
|
||||
};
|
||||
|
||||
static AESKey FSiAesKeySeed;
|
||||
|
||||
static BOOL aesFlag;
|
||||
static AESCounter aesCounter;
|
||||
static u8* const aesBuffer = (u8*)HW_FIRM_FS_AES_BUFFER; // 0x2ff3800
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: FS2_GetAesKeySeed
|
||||
|
||||
Description: retreive aes key seed in the signature
|
||||
|
||||
Arguments: None
|
||||
|
||||
Returns: pointer to seed
|
||||
*---------------------------------------------------------------------------*/
|
||||
AESKey* const FS2_GetAesKeySeed( void )
|
||||
{
|
||||
return &FSiAesKeySeed;
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: FS2_DeleteAesKeySeed
|
||||
|
||||
Description: delete aes key seed in the signature
|
||||
|
||||
Arguments: None
|
||||
|
||||
Returns: None
|
||||
*---------------------------------------------------------------------------*/
|
||||
void FS2_DeleteAesKeySeed( void )
|
||||
{
|
||||
MI_CpuClear8( &FSiAesKeySeed, sizeof(FSiAesKeySeed) );
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: FS2_SetDigestKey
|
||||
|
||||
@ -220,11 +190,13 @@ static void DisableAes( void )
|
||||
*---------------------------------------------------------------------------*/
|
||||
static u32 GetTransferSize( u32 offset, u32 size )
|
||||
{
|
||||
u32 aes_offset = rh->s.aes_target_rom_offset;
|
||||
u32 aes_end = aes_offset + RoundUpModuleSize(rh->s.aes_target_size);
|
||||
u32 end = offset + RoundUpModuleSize(size);
|
||||
if ( rh->s.enable_aes )
|
||||
{
|
||||
u32 end = offset + RoundUpModuleSize(size);
|
||||
u32 aes_offset = rh->s.aes_target_rom_offset;
|
||||
u32 aes_end = aes_offset + RoundUpModuleSize(rh->s.aes_target_size);
|
||||
u32 aes_offset2 = rh->s.aes_target2_rom_offset;
|
||||
u32 aes_end2 = aes_offset2 + RoundUpModuleSize(rh->s.aes_target2_size);
|
||||
if ( offset >= aes_offset && offset < aes_end )
|
||||
{
|
||||
if ( end > aes_end )
|
||||
@ -237,6 +209,18 @@ static u32 GetTransferSize( u32 offset, u32 size )
|
||||
}
|
||||
EnableAes( offset );
|
||||
}
|
||||
else if ( offset >= aes_offset2 && offset < aes_end2 )
|
||||
{
|
||||
if ( end > aes_end2 )
|
||||
{
|
||||
size = aes_end2 - offset;
|
||||
}
|
||||
if ( size > HW_FIRM_FS_AES_BUFFER_SIZE )
|
||||
{
|
||||
size = HW_FIRM_FS_AES_BUFFER_SIZE;
|
||||
}
|
||||
EnableAes( offset );
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( offset < aes_offset && offset + size > aes_offset )
|
||||
@ -368,9 +352,6 @@ BOOL FS2_LoadHeader( FSFile *pFile, SVCSignHeapContext* pool, const void* rsa_ke
|
||||
|
||||
// ダイジェスト以外のデータのチェックが必要!!
|
||||
|
||||
// Œ®‚̕ۑ¶
|
||||
MI_CpuCopy8( (AESKey*)sd.aes_key_seed, &FSiAesKeySeed, sizeof(FSiAesKeySeed) );
|
||||
|
||||
MI_CpuClear8( &sd, sizeof(sd) ); // 残り削除 (他に必要なものはない?)
|
||||
|
||||
// ROMヘッダのコピー
|
||||
|
||||
@ -89,3 +89,17 @@ void PM_BackLightOn( BOOL force )
|
||||
doneBackLight = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: PM_Shutdown
|
||||
|
||||
Description: shutdown
|
||||
|
||||
Arguments: None
|
||||
|
||||
Returns: None
|
||||
*---------------------------------------------------------------------------*/
|
||||
void PM_Shutdown( void )
|
||||
{
|
||||
PMi_SetFlags( REG_PMIC_CTL_ADDR, PMIC_CTL_PWR_OFF );
|
||||
}
|
||||
|
||||
@ -62,8 +62,8 @@ static char* debugPtr = (char*)PRINT_MEMORY_ADDR;
|
||||
#endif
|
||||
|
||||
#define THREAD_PRIO_FATFS 8
|
||||
#define DMA_FATFS_1 3
|
||||
#define DMA_FATFS_2 2
|
||||
#define DMA_FATFS_1 0
|
||||
#define DMA_FATFS_2 1
|
||||
|
||||
extern void* SDNandContext; /* NAND初期化パラメータ */
|
||||
|
||||
@ -100,8 +100,11 @@ static void PreInit(void)
|
||||
if ( MCUi_ReadRegister( MCU_REG_VER_INFO_ADDR ) >= 0x20 ) // MCU旧バージョン対策
|
||||
if ( (MCUi_ReadRegister( MCU_REG_POWER_INFO_ADDR ) & MCU_REG_POWER_INFO_LEVEL_MASK) == 0 )
|
||||
{
|
||||
OS_TPrintf("Battery is empty.\n");
|
||||
OS_Terminate();
|
||||
#ifndef SDK_FINALROM
|
||||
OS_TPanic("Battery is empty.\n");
|
||||
#else
|
||||
PM_Shutdown();
|
||||
#endif
|
||||
}
|
||||
/*
|
||||
FromBrom関連
|
||||
@ -136,8 +139,11 @@ static void PostInit(void)
|
||||
if ( MCUi_ReadRegister( MCU_REG_VER_INFO_ADDR ) >= 0x20 ) // MCU旧バージョン対策
|
||||
if ( (MCUi_ReadRegister( MCU_REG_POWER_INFO_ADDR ) & MCU_REG_POWER_INFO_LEVEL_MASK) == 0 )
|
||||
{
|
||||
OS_TPrintf("Battery is empty.\n");
|
||||
OS_Terminate();
|
||||
#ifndef SDK_FINALROM
|
||||
OS_TPanic("Battery is empty.\n");
|
||||
#else
|
||||
PM_Shutdown();
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
@ -246,8 +252,8 @@ void TwlSpMain( void )
|
||||
// PM_BackLightOn( FALSE );
|
||||
|
||||
AESi_InitKeysFIRM();
|
||||
AESi_RecvSeed( rh->s.developer_encrypt );
|
||||
// 9: after AESi_RecvSeed
|
||||
AESi_InitSeed();
|
||||
// 9: after AESi_InitSeed
|
||||
PUSH_PROFILE();
|
||||
SetDebugLED(++step); // 0x8a
|
||||
|
||||
|
||||
@ -23,14 +23,14 @@
|
||||
#define RSA_KEY_ADDR rsa_key
|
||||
static const u8 rsa_key[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,
|
||||
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
|
||||
|
||||
@ -293,21 +293,16 @@ void TwlMain( void )
|
||||
// 8: after PXI
|
||||
PUSH_PROFILE();
|
||||
|
||||
AESi_SendSeed( FS_GetAesKeySeed() );
|
||||
FS_DeleteAesKeySeed();
|
||||
// 9: after AESi_SendSeed
|
||||
PUSH_PROFILE();
|
||||
|
||||
if ( !FS_LoadStatic() )
|
||||
{
|
||||
OS_TPrintf("Failed to call FS_LoadStatic().\n");
|
||||
goto end;
|
||||
}
|
||||
// 10: after FS_LoadStatic
|
||||
// 9: after FS_LoadStatic
|
||||
PUSH_PROFILE();
|
||||
|
||||
PXI_NotifyID( FIRM_PXI_ID_DONE_STATIC );
|
||||
// 11: after PXI
|
||||
// 10: after PXI
|
||||
PUSH_PROFILE();
|
||||
|
||||
#ifdef PROFILE_ENABLE
|
||||
|
||||
@ -63,8 +63,8 @@ static char* debugPtr = (char*)PRINT_MEMORY_ADDR;
|
||||
#endif
|
||||
|
||||
#define THREAD_PRIO_FATFS 8
|
||||
#define DMA_FATFS_1 3
|
||||
#define DMA_FATFS_2 2
|
||||
#define DMA_FATFS_1 0
|
||||
#define DMA_FATFS_2 1
|
||||
|
||||
extern void* SDNandContext; /* NAND初期化パラメータ */
|
||||
|
||||
@ -101,8 +101,11 @@ static void PreInit(void)
|
||||
if ( MCUi_ReadRegister( MCU_REG_VER_INFO_ADDR ) >= 0x20 ) // MCU旧バージョン対策
|
||||
if ( (MCUi_ReadRegister( MCU_REG_POWER_INFO_ADDR ) & MCU_REG_POWER_INFO_LEVEL_MASK) == 0 )
|
||||
{
|
||||
OS_TPrintf("Battery is empty.\n");
|
||||
OS_Terminate();
|
||||
#ifndef SDK_FINALROM
|
||||
OS_TPanic("Battery is empty.\n");
|
||||
#else
|
||||
PM_Shutdown();
|
||||
#endif
|
||||
}
|
||||
/*
|
||||
FromBrom関連
|
||||
@ -137,8 +140,11 @@ static void PostInit(void)
|
||||
if ( MCUi_ReadRegister( MCU_REG_VER_INFO_ADDR ) >= 0x20 ) // MCU旧バージョン対策
|
||||
if ( (MCUi_ReadRegister( MCU_REG_POWER_INFO_ADDR ) & MCU_REG_POWER_INFO_LEVEL_MASK) == 0 )
|
||||
{
|
||||
OS_TPrintf("Battery is empty.\n");
|
||||
OS_Terminate();
|
||||
#ifndef SDK_FINALROM
|
||||
OS_TPanic("Battery is empty.\n");
|
||||
#else
|
||||
PM_Shutdown();
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
@ -227,8 +233,8 @@ void TwlSpMain( void )
|
||||
// PM_BackLightOn( FALSE );
|
||||
|
||||
AESi_InitKeysFIRM();
|
||||
AESi_RecvSeed( rh->s.developer_encrypt );
|
||||
// 9: after AESi_RecvSeed
|
||||
AESi_InitSeed();
|
||||
// 9: after AESi_InitSeed
|
||||
PUSH_PROFILE();
|
||||
SetDebugLED(++step); // 0x8a
|
||||
|
||||
|
||||
@ -303,20 +303,16 @@ void TwlMain( void )
|
||||
// 8: after PXI
|
||||
PUSH_PROFILE();
|
||||
|
||||
AESi_SendSeed( FS2_GetAesKeySeed() );
|
||||
// 9: after AESi_SendSeed
|
||||
PUSH_PROFILE();
|
||||
|
||||
if ( !FS2_LoadStatic( &file ) )
|
||||
{
|
||||
OS_TPrintf("Failed to call FS2_LoadStatic().\n");
|
||||
goto end;
|
||||
}
|
||||
// 10: after FS2_LoadStatic
|
||||
// 9: after FS2_LoadStatic
|
||||
PUSH_PROFILE();
|
||||
|
||||
PXI_NotifyID( FIRM_PXI_ID_DONE_STATIC );
|
||||
// 11: after PXI
|
||||
// 10: after PXI
|
||||
PUSH_PROFILE();
|
||||
|
||||
#ifdef PROFILE_ENABLE
|
||||
|
||||
@ -62,8 +62,8 @@ static char* debugPtr = (char*)PRINT_MEMORY_ADDR;
|
||||
#endif
|
||||
|
||||
#define THREAD_PRIO_FATFS 8
|
||||
#define DMA_FATFS_1 3
|
||||
#define DMA_FATFS_2 2
|
||||
#define DMA_FATFS_1 0
|
||||
#define DMA_FATFS_2 1
|
||||
|
||||
extern void* SDNandContext; /* NAND初期化パラメータ */
|
||||
|
||||
@ -99,8 +99,11 @@ static void PreInit(void)
|
||||
*/
|
||||
if ( (MCUi_ReadRegister( MCU_REG_POWER_INFO_ADDR ) & MCU_REG_POWER_INFO_LEVEL_MASK) == 0 )
|
||||
{
|
||||
OS_TPrintf("Battery is empty.\n");
|
||||
OS_Terminate();
|
||||
#ifndef SDK_FINALROM
|
||||
OS_TPanic("Battery is empty.\n");
|
||||
#else
|
||||
PM_Shutdown();
|
||||
#endif
|
||||
}
|
||||
/*
|
||||
FromBrom関連
|
||||
@ -134,8 +137,11 @@ static void PostInit(void)
|
||||
*/
|
||||
if ( (MCUi_ReadRegister( MCU_REG_POWER_INFO_ADDR ) & MCU_REG_POWER_INFO_LEVEL_MASK) == 0 )
|
||||
{
|
||||
OS_TPrintf("Battery is empty.\n");
|
||||
OS_Terminate();
|
||||
#ifndef SDK_FINALROM
|
||||
OS_TPanic("Battery is empty.\n");
|
||||
#else
|
||||
PM_Shutdown();
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
@ -232,8 +238,8 @@ void TwlSpMain( void )
|
||||
SetDebugLED(++step); // 0x89
|
||||
|
||||
AESi_InitKeysFIRM();
|
||||
AESi_RecvSeed( rh->s.developer_encrypt );
|
||||
// 9: after AESi_RecvSeed
|
||||
AESi_InitSeed();
|
||||
// 9: after AESi_InitSeed
|
||||
PUSH_PROFILE();
|
||||
SetDebugLED(++step); // 0x8a
|
||||
|
||||
|
||||
@ -295,21 +295,16 @@ void TwlMain( void )
|
||||
// 7: after PXI
|
||||
PUSH_PROFILE();
|
||||
|
||||
AESi_SendSeed( FS_GetAesKeySeed() );
|
||||
FS_DeleteAesKeySeed();
|
||||
// 8: after AESi_SendSeed
|
||||
PUSH_PROFILE();
|
||||
|
||||
if ( !FS_LoadStatic() )
|
||||
{
|
||||
OS_TPrintf("Failed to call FS_LoadStatic().\n");
|
||||
goto end;
|
||||
}
|
||||
// 9: after FS_LoadStatic
|
||||
// 8: after FS_LoadStatic
|
||||
PUSH_PROFILE();
|
||||
|
||||
PXI_NotifyID( FIRM_PXI_ID_DONE_STATIC );
|
||||
// 10: after PXI
|
||||
// 9: after PXI
|
||||
PUSH_PROFILE();
|
||||
|
||||
#ifdef PROFILE_ENABLE
|
||||
|
||||
@ -26,8 +26,6 @@
|
||||
#include <twl/aes/ARM7/lo.h>
|
||||
#include <firm/aes/ARM7/aes_init.h>
|
||||
#include <firm/aes/ARM7/aes_ids.h>
|
||||
#else // !SDK_ARM7
|
||||
#include <firm/aes/ARM9/aes_init.h>
|
||||
#endif // !SDK_ARM7
|
||||
|
||||
/* FIRM_AES_H_ */
|
||||
|
||||
@ -79,15 +79,28 @@ static inline void AESi_InitKeysFIRM( void )
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: AESi_RecvSeed
|
||||
Name: AESi_InitSeedWithRomHeader
|
||||
|
||||
Description: set SEED/KEY from ARM9 via PXI.
|
||||
Description: set SEED/KEY from ROM header
|
||||
|
||||
Arguments: developer_encrypt set TRUE if received key is using as direct key
|
||||
Arguments: rom_header ROM header
|
||||
|
||||
Returns: None
|
||||
*---------------------------------------------------------------------------*/
|
||||
void AESi_RecvSeed( BOOL developer_encrypt );
|
||||
void AESi_InitSeedWithRomHeader( ROM_Header* rom_header );
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: AESi_InitSeedWithRomHeader
|
||||
|
||||
Description: set SEED/KEY from ROM header in HW_TWL_ROM_HEADER_BUF
|
||||
|
||||
Arguments: None
|
||||
|
||||
Returns: None
|
||||
*---------------------------------------------------------------------------*/
|
||||
static inline void AESi_InitSeed( void )
|
||||
{
|
||||
}
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
|
||||
@ -1,50 +0,0 @@
|
||||
/*---------------------------------------------------------------------------*
|
||||
Project: TwlIPL - AES - include
|
||||
File: aes_init.h
|
||||
|
||||
Copyright 2007 Nintendo. All rights reserved.
|
||||
|
||||
These coded instructions, statements, and computer programs contain
|
||||
proprietary information of Nintendo of America Inc. and/or Nintendo
|
||||
Company Ltd., and are protected by Federal copyright law. They may
|
||||
not be disclosed to third parties or copied or duplicated in any form,
|
||||
in whole or in part, without the prior written consent of Nintendo.
|
||||
|
||||
$Date:: 2007-09-06$
|
||||
$Rev$
|
||||
$Author$
|
||||
*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef TWL_AES_AES_INIT_H_
|
||||
#define TWL_AES_AES_INIT_H_
|
||||
|
||||
#include <firm/pxi.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
ŠÖ<EFBFBD>”’è‹`
|
||||
*---------------------------------------------------------------------------*/
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: AESi_SendSeed
|
||||
|
||||
Description: send SEED/KEY to ARM7 via PXI.
|
||||
|
||||
Arguments: pSeed pointer to seed
|
||||
|
||||
Returns: None
|
||||
*---------------------------------------------------------------------------*/
|
||||
static inline void AESi_SendSeed( const AESKey *pSeed )
|
||||
{
|
||||
PXI_SendStream( pSeed, AES_BLOCK_SIZE );
|
||||
}
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
#endif
|
||||
|
||||
/* TWL_AES_AES_INIT_H_ */
|
||||
#endif
|
||||
@ -26,28 +26,6 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: FS_GetAesKeySeed
|
||||
|
||||
Description: retreive aes key seed in the signature
|
||||
|
||||
Arguments: None
|
||||
|
||||
Returns: pointer to seed
|
||||
*---------------------------------------------------------------------------*/
|
||||
AESKey* const FS_GetAesKeySeed( void );
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: FS_DeleteAesKeySeed
|
||||
|
||||
Description: delete aes key seed in the signature
|
||||
|
||||
Arguments: None
|
||||
|
||||
Returns: None
|
||||
*---------------------------------------------------------------------------*/
|
||||
void FS_DeleteAesKeySeed( void );
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: FS_SetDigestKey
|
||||
|
||||
|
||||
@ -26,28 +26,6 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: FS2_GetAesKeySeed
|
||||
|
||||
Description: retreive aes key seed in the signature
|
||||
|
||||
Arguments: None
|
||||
|
||||
Returns: pointer to seed
|
||||
*---------------------------------------------------------------------------*/
|
||||
AESKey* const FS2_GetAesKeySeed( void );
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: FS2_DeleteAesKeySeed
|
||||
|
||||
Description: delete aes key seed in the signature
|
||||
|
||||
Arguments: None
|
||||
|
||||
Returns: None
|
||||
*---------------------------------------------------------------------------*/
|
||||
void FS2_DeleteAesKeySeed( void );
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: FS2_SetDigestKey
|
||||
|
||||
|
||||
@ -38,7 +38,7 @@ extern "C" {
|
||||
void OS_BootWithRomHeaderFromFIRM( ROM_Header* rom_header );
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: OS_BootDefault
|
||||
Name: OS_BootFromFIRM
|
||||
|
||||
Description: boot system menu using ROM_Header in HW_TWL_ROM_HEADER_BUF
|
||||
|
||||
|
||||
@ -33,17 +33,6 @@ extern "C" {
|
||||
*---------------------------------------------------------------------------*/
|
||||
void PM_InitFIRM( void );
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: PM_CheckINIFlag
|
||||
|
||||
Description: Check INI in GX_DISPSTAT (able to call before PM_InitFIRM)
|
||||
|
||||
Arguments: None
|
||||
|
||||
Returns: None
|
||||
*---------------------------------------------------------------------------*/
|
||||
void PM_CheckINIFlag(void);
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: PM_BackLightOn
|
||||
|
||||
@ -56,6 +45,17 @@ void PM_CheckINIFlag(void);
|
||||
*---------------------------------------------------------------------------*/
|
||||
void PM_BackLightOn( BOOL force );
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: PM_Shutdown
|
||||
|
||||
Description: shutdown
|
||||
|
||||
Arguments: None
|
||||
|
||||
Returns: None
|
||||
*---------------------------------------------------------------------------*/
|
||||
void PM_Shutdown( void );
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
#endif
|
||||
|
||||
Loading…
Reference in New Issue
Block a user