mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
VCK および VCW タイトルのバックアップデータ検証における初回リード時のエラーでFATALになるように変更
(接触不良時、初回リード時のWIPポーリングでタイムアウトになる) git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@3046 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
5094584a2f
commit
d36d59ffa3
@ -76,7 +76,13 @@ BOOL checkVCK( TitleProperty* tp)
|
||||
OS_TPrintf("verifyBuffer:0x%x\n", verify_data);
|
||||
|
||||
InitializeBackup();
|
||||
readEEPROM( 0, (u32*)data, VCK_BACKUP_READ_SIZE);//sizeof(VCK_SlotHeader) + sizeof(VCK_ProfileSlotBody)が32Bytesの倍数でないため
|
||||
if( !readEEPROM( 0, (u32*)data, VCK_BACKUP_READ_SIZE))//sizeof(VCK_SlotHeader) + sizeof(VCK_ProfileSlotBody)‚ª32Bytes‚Ì”{<7B>”‚łȂ¢‚½‚ß
|
||||
{
|
||||
OS_TPrintf("launch NG.\n");
|
||||
FinalizeBackup();
|
||||
MI_FreeWramSlot( MI_WRAM_C, WRAM_SLOT_FOR_FS, WRAM_SIZE_FOR_FS, MI_WRAM_ARM9);
|
||||
return FALSE;
|
||||
}
|
||||
header = (VCK_SlotHeader*)data;
|
||||
body = (VCK_ProfileSlotBody*)((u8*)data + sizeof(VCK_SlotHeader));
|
||||
body_u8 = (u8*)body;
|
||||
@ -102,14 +108,16 @@ BOOL checkVCK( TitleProperty* tp)
|
||||
|
||||
// checksumがBになるようにランダムな1箇所へ書き込み
|
||||
{
|
||||
MATH_CalcSHA1( calculatedSha1, (const void*)data, sizeof(VCK_ProfileSlotBody));
|
||||
}
|
||||
rseed = (u32)(OS_GetTick()) + *(u32*)(calculatedSha1);
|
||||
MATH_InitRand16( &rc16, rseed);
|
||||
for( i=0; i<sizeof(VCK_ProfileSlotBody); i++)
|
||||
{
|
||||
body_u8[i] = (u8)(MATH_Rand16( &rc16, 0xFF));
|
||||
MATH_CalcSHA1( calculatedSha1, (const void*)data, sizeof(VCK_ProfileSlotBody));
|
||||
|
||||
rseed = (u32)(OS_GetTick()) + *(u32*)(calculatedSha1);
|
||||
MATH_InitRand16( &rc16, rseed);
|
||||
for( i=0; i<sizeof(VCK_ProfileSlotBody); i++)
|
||||
{
|
||||
body_u8[i] = (u8)(MATH_Rand16( &rc16, 0xFF));
|
||||
}
|
||||
}
|
||||
|
||||
B_checksum = getChecksum( body);
|
||||
// 書き込んだ後の checksum が、S_checksum でも マジコンヘッダのchecksum にもならないようにする
|
||||
while( (B_checksum == S_checksum) ||
|
||||
|
||||
@ -66,8 +66,13 @@ BOOL checkVCW( TitleProperty* tp, u32 ggid)
|
||||
OS_TPrintf("verifyBuffer:0x%x\n", verify_data);
|
||||
|
||||
InitializeBackup();
|
||||
readEEPROM( 0, (u32*)data, VCW_BACKUP_READ_SIZE);
|
||||
|
||||
if( !readEEPROM( 0, (u32*)data, VCW_BACKUP_READ_SIZE))
|
||||
{
|
||||
OS_TPrintf("launch NG!\n");
|
||||
FinalizeBackup();
|
||||
MI_FreeWramSlot( MI_WRAM_C, WRAM_SLOT_FOR_FS, WRAM_SIZE_FOR_FS, MI_WRAM_ARM9);
|
||||
return FALSE;
|
||||
}
|
||||
buf = (u8*)data;
|
||||
VCW_Initialize( &vcw[0], buf, ggid);
|
||||
buf = (u8*)data + (sizeof(VCW_SavegameHeader) + sizeof(VCW_BodyForCheck));
|
||||
@ -195,14 +200,16 @@ static u16 VCW_Modify( VCW* vcw)
|
||||
|
||||
// checksumがBになるようにランダムな1箇所へ書き込み
|
||||
{
|
||||
MATH_CalcSHA1( calculatedSha1, (const void*)vcw->body, sizeof(VCW_BodyForCheck));
|
||||
}
|
||||
rseed = (u32)(OS_GetTick()) + *(u32*)(calculatedSha1);
|
||||
MATH_InitRand16( &rc16, rseed);
|
||||
for( i=0; i<sizeof(VCW_BodyForCheck); i++)
|
||||
{
|
||||
body_u8[i] = (u8)(MATH_Rand16( &rc16, 0xFF));
|
||||
MATH_CalcSHA1( calculatedSha1, (const void*)vcw->body, sizeof(VCW_BodyForCheck));
|
||||
|
||||
rseed = (u32)(OS_GetTick()) + *(u32*)(calculatedSha1);
|
||||
MATH_InitRand16( &rc16, rseed);
|
||||
for( i=0; i<sizeof(VCW_BodyForCheck); i++)
|
||||
{
|
||||
body_u8[i] = (u8)(MATH_Rand16( &rc16, 0xFF));
|
||||
}
|
||||
}
|
||||
|
||||
VCW_UpdateChecksum( vcw);
|
||||
vcw->B_checksum = VCW_GetChecksum( vcw);
|
||||
// 書き込んだ後の checksum が、S_checksum でも マジコンヘッダのchecksum にもならないようにする
|
||||
|
||||
Loading…
Reference in New Issue
Block a user