カードスクランブル乱数の種を固定値になりやすいVカウンタからチック&RTC初回ロード値へ変更。

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@1128 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
nakasima 2008-04-14 09:40:24 +00:00
parent 698caf92af
commit 6c8e58e242
3 changed files with 18 additions and 9 deletions

View File

@ -244,6 +244,8 @@ TwlSpMain(void)
// RTCのリセットチェック // RTCのリセットチェック
static void ResetRTC( void ) static void ResetRTC( void )
{ {
SYSM_work* sw = SYSMi_GetWork();
// ランチャーでリセットを検出するためにこの処理をしているが、RTC_Init内でも同じことをしているので、ちょっと無駄。 // ランチャーでリセットを検出するためにこの処理をしているが、RTC_Init内でも同じことをしているので、ちょっと無駄。
RTCRawStatus1 stat1; RTCRawStatus1 stat1;
RTCRawStatus2 stat2; RTCRawStatus2 stat2;
@ -261,8 +263,11 @@ static void ResetRTC( void )
fout.fout = RTC_FOUT_DUTY_32KHZ; fout.fout = RTC_FOUT_DUTY_32KHZ;
RTC_WriteFout(&fout); RTC_WriteFout(&fout);
} }
SYSMi_GetWork()->flags.common.isResetRTC = TRUE; sw->flags.common.isResetRTC = TRUE;
} }
// RTC初回データ読み込み
RTC_ReadDateTime(&sw->Rtc1stData);
} }

View File

@ -190,6 +190,8 @@ CardThreadData HotSwThreadData;
*---------------------------------------------------------------------------*/ *---------------------------------------------------------------------------*/
void HOTSW_Init(u32 threadPrio) void HOTSW_Init(u32 threadPrio)
{ {
SYSM_work* sw = SYSMi_GetWork();
OS_InitTick(); OS_InitTick();
OS_InitThread(); OS_InitThread();
@ -287,7 +289,7 @@ void HOTSW_Init(u32 threadPrio)
HotSwThreadData.idx_insert = (HotSwThreadData.idx_insert+1) % HOTSW_INSERT_MSG_NUM; HotSwThreadData.idx_insert = (HotSwThreadData.idx_insert+1) % HOTSW_INSERT_MSG_NUM;
} }
else{ else{
SYSMi_GetWork()->flags.hotsw.is1stCardChecked = TRUE; sw->flags.hotsw.is1stCardChecked = TRUE;
} }
} }
@ -1040,14 +1042,15 @@ void HOTSW_SetSecureSegmentBuffer(ModeType type ,void* buf, u32 size)
*---------------------------------------------------------------------------*/ *---------------------------------------------------------------------------*/
static void GenVA_VB_VD(void) static void GenVA_VB_VD(void)
{ {
SYSM_work* sw = SYSMi_GetWork();
u32 dummy = 0; u32 dummy = 0;
MATHRandContext32 rnd; MATHRandContext32 rnd;
// 乱数を初期化 VBlankカウンタ値を種とする。 // 乱数を初期化
// [TODO] プログラムがV周期に同期しているためVカウンタでは固定値になりやすい // チックRTC初回ロード値を種とする。
// (特にダイレクトブート) // (起動する度に変化するパラメータと組み合わせる
// 起動する度に変化するパラメータと組み合わせるべき。 // Vカウンタは2130サイクル変化しないので固定値になりやすい。
MATH_InitRand32(&rnd, (u64)OS_GetVBlankCount()); MATH_InitRand32(&rnd, OS_GetTick() ^ sw->Rtc1stData.words[0] ^ sw->Rtc1stData.words[1]);
s_cbData.vae = MATH_Rand32(&rnd, 0); s_cbData.vae = MATH_Rand32(&rnd, 0);
s_cbData.vbi = MATH_Rand32(&rnd, 0); s_cbData.vbi = MATH_Rand32(&rnd, 0);

View File

@ -119,6 +119,7 @@ typedef struct SYSM_work {
LauncherParam launcherParam; LauncherParam launcherParam;
SYSMRomEmuInfo romEmuInfo; SYSMRomEmuInfo romEmuInfo;
RTCRawData Rtc1stData; // RTC初回ロード値 8byte
BOOL isDeveloperAESMode; // 開発用セキュリティか製品版でFALSE BOOL isDeveloperAESMode; // 開発用セキュリティか製品版でFALSE
void *addr_AESregion[2]; // AES暗号化領域の格納アドレス void *addr_AESregion[2]; // AES暗号化領域の格納アドレス