カードスクランブル乱数の種を固定値になりやすい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のリセットチェック
static void ResetRTC( void )
{
SYSM_work* sw = SYSMi_GetWork();
// ランチャーでリセットを検出するためにこの処理をしているが、RTC_Init内でも同じことをしているので、ちょっと無駄。
RTCRawStatus1 stat1;
RTCRawStatus2 stat2;
@ -261,8 +263,11 @@ static void ResetRTC( void )
fout.fout = RTC_FOUT_DUTY_32KHZ;
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)
{
SYSM_work* sw = SYSMi_GetWork();
OS_InitTick();
OS_InitThread();
@ -287,7 +289,7 @@ void HOTSW_Init(u32 threadPrio)
HotSwThreadData.idx_insert = (HotSwThreadData.idx_insert+1) % HOTSW_INSERT_MSG_NUM;
}
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)
{
SYSM_work* sw = SYSMi_GetWork();
u32 dummy = 0;
MATHRandContext32 rnd;
// 乱数を初期化 VBlankカウンタ値を種とする。
// [TODO] プログラムがV周期に同期しているためVカウンタでは固定値になりやすい
// (特にダイレクトブート)
// 起動する度に変化するパラメータと組み合わせるべき。
MATH_InitRand32(&rnd, (u64)OS_GetVBlankCount());
MATHRandContext32 rnd;
// 乱数を初期化
// チックRTC初回ロード値を種とする。
// (起動する度に変化するパラメータと組み合わせる
// Vカウンタは2130サイクル変化しないので固定値になりやすい。
MATH_InitRand32(&rnd, OS_GetTick() ^ sw->Rtc1stData.words[0] ^ sw->Rtc1stData.words[1]);
s_cbData.vae = MATH_Rand32(&rnd, 0);
s_cbData.vbi = MATH_Rand32(&rnd, 0);

View File

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