mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
カードスクランブル乱数の種を固定値になりやすいVカウンタからチック&RTC初回ロード値へ変更。
git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@1128 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
698caf92af
commit
6c8e58e242
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -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);
|
||||||
|
|||||||
@ -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暗号化領域の格納アドレス
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user