mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
マスタエディタ:SRLを読み込んだ状態で別のSRLを再度読み込んで署名エラーとなったときに前のエラー情報が消えるバグを修正。
git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@2550 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
091bcc55de
commit
b697873d14
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -77,6 +77,16 @@ ECSrlResult RCSrl::readFromFile( System::String ^filename )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef METWL_WHETHER_SIGN_DECRYPT
|
||||||
|
// まず署名チェック
|
||||||
|
r = this->decryptRomHeader();
|
||||||
|
if( r != ECSrlResult::NOERROR )
|
||||||
|
{
|
||||||
|
(void)fclose(fp);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
#endif //#ifdef METWL_WHETHER_SIGN_DECRYPT
|
||||||
|
|
||||||
// エラーリストをクリア
|
// エラーリストをクリア
|
||||||
this->hErrorList = gcnew System::Collections::Generic::List<RCMrcError^>;
|
this->hErrorList = gcnew System::Collections::Generic::List<RCMrcError^>;
|
||||||
this->hWarnList = gcnew System::Collections::Generic::List<RCMrcError^>;
|
this->hWarnList = gcnew System::Collections::Generic::List<RCMrcError^>;
|
||||||
@ -88,16 +98,6 @@ ECSrlResult RCSrl::readFromFile( System::String ^filename )
|
|||||||
// ROMヘッダの値をROM固有情報フィールドに反映させる
|
// ROMヘッダの値をROM固有情報フィールドに反映させる
|
||||||
(void)this->setRomInfo();
|
(void)this->setRomInfo();
|
||||||
|
|
||||||
#ifdef METWL_WHETHER_SIGN_DECRYPT
|
|
||||||
// ひととおり読んだあとに署名チェック
|
|
||||||
r = this->decryptRomHeader();
|
|
||||||
if( r != ECSrlResult::NOERROR )
|
|
||||||
{
|
|
||||||
(void)fclose(fp);
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
#endif //#ifdef METWL_WHETHER_SIGN_DECRYPT
|
|
||||||
|
|
||||||
// すべて設定したあとにMRC
|
// すべて設定したあとにMRC
|
||||||
{
|
{
|
||||||
ECSrlResult r;
|
ECSrlResult r;
|
||||||
@ -662,23 +662,25 @@ ECSrlResult RCSrl::decryptRomHeader(void)
|
|||||||
// (1) 公開鍵で復号した結果(ブロック)をローカル変数(original)に格納
|
// (1) 公開鍵で復号した結果(ブロック)をローカル変数(original)に格納
|
||||||
// (2) ブロックから余分な部分を取り除いて引数(pDst)にコピー
|
// (2) ブロックから余分な部分を取り除いて引数(pDst)にコピー
|
||||||
|
|
||||||
|
ECAppType type = this->selectAppType();
|
||||||
|
|
||||||
// 鍵を選ぶ
|
// 鍵を選ぶ
|
||||||
#ifdef METWL_VER_APPTYPE_LAUNCHER
|
#ifdef METWL_VER_APPTYPE_LAUNCHER
|
||||||
if( *this->hIsAppLauncher )
|
if( type == ECAppType::LAUNCHER )
|
||||||
{
|
{
|
||||||
publicKey = (u8*)g_devPubKey_DER_launcher;
|
publicKey = (u8*)g_devPubKey_DER_launcher;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif //METWL_VER_APPTYPE_LAUNCHER
|
#endif //METWL_VER_APPTYPE_LAUNCHER
|
||||||
#ifdef METWL_VER_APPTYPE_SECURE
|
#ifdef METWL_VER_APPTYPE_SECURE
|
||||||
if( *this->hIsAppSecure )
|
if( type == ECAppType::SECURE )
|
||||||
{
|
{
|
||||||
publicKey = (u8*)g_devPubKey_DER_secure;
|
publicKey = (u8*)g_devPubKey_DER_secure;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif //METWL_VER_APPTYPE_SECURE
|
#endif //METWL_VER_APPTYPE_SECURE
|
||||||
#ifdef METWL_VER_APPTYPE_SYSTEM
|
#ifdef METWL_VER_APPTYPE_SYSTEM
|
||||||
if( *this->hIsAppSystem )
|
if( type == ECAppType::SYSTEM )
|
||||||
{
|
{
|
||||||
publicKey = (u8*)g_devPubKey_DER_system;
|
publicKey = (u8*)g_devPubKey_DER_system;
|
||||||
}
|
}
|
||||||
@ -715,6 +717,35 @@ ECSrlResult RCSrl::decryptRomHeader(void)
|
|||||||
return (ECSrlResult::NOERROR);
|
return (ECSrlResult::NOERROR);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// アプリ種別の判定
|
||||||
|
//
|
||||||
|
ECAppType RCSrl::selectAppType(void)
|
||||||
|
{
|
||||||
|
ECAppType type = ECAppType::ILLEGAL;
|
||||||
|
|
||||||
|
u8 *idL = this->pRomHeader->s.titleID_Lo;
|
||||||
|
u32 idH = this->pRomHeader->s.titleID_Hi;
|
||||||
|
|
||||||
|
if( (idL[3]=='H') && (idL[2]=='N') && (idL[1]=='A') ) // ランチャアプリかどうかはTitleID_Loの値で決定
|
||||||
|
{
|
||||||
|
type = ECAppType::LAUNCHER;
|
||||||
|
}
|
||||||
|
else if( idH & TITLE_ID_HI_SECURE_FLAG_MASK ) // 各ビットは排他的とは限らないのでelse ifにはならない
|
||||||
|
{
|
||||||
|
type = ECAppType::SECURE;
|
||||||
|
}
|
||||||
|
else if( (idH & TITLE_ID_HI_APP_TYPE_MASK) == 1 )
|
||||||
|
{
|
||||||
|
type = ECAppType::SYSTEM;
|
||||||
|
}
|
||||||
|
else if( (idH & TITLE_ID_HI_APP_TYPE_MASK) == 0 )
|
||||||
|
{
|
||||||
|
type = ECAppType::USER;
|
||||||
|
}
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// DSダウンロード署名がSRLに格納されているか調べる
|
// DSダウンロード署名がSRLに格納されているか調べる
|
||||||
//
|
//
|
||||||
|
|||||||
@ -38,6 +38,21 @@ namespace MasterEditorTWL
|
|||||||
ERROR_PLATFORM,
|
ERROR_PLATFORM,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------
|
||||||
|
// Type : enum class
|
||||||
|
// Name : ECAppType
|
||||||
|
//
|
||||||
|
// Description : RCSrlクラスのアプリ種別を宣言
|
||||||
|
// -------------------------------------------------------------------
|
||||||
|
enum class ECAppType
|
||||||
|
{
|
||||||
|
USER = 0,
|
||||||
|
SYSTEM,
|
||||||
|
SECURE,
|
||||||
|
LAUNCHER,
|
||||||
|
ILLEGAL, // 不定
|
||||||
|
};
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
// Type : ref class
|
// Type : ref class
|
||||||
// Name : RCSDKVersion
|
// Name : RCSDKVersion
|
||||||
@ -362,6 +377,7 @@ namespace MasterEditorTWL
|
|||||||
// @arg [in] 入力ファイルのFP (->SRL読み込み時に実行されるべき)]
|
// @arg [in] 入力ファイルのFP (->SRL読み込み時に実行されるべき)]
|
||||||
ECSrlResult searchSDKVersion( FILE *fp ); // SDKバージョンを取得する
|
ECSrlResult searchSDKVersion( FILE *fp ); // SDKバージョンを取得する
|
||||||
ECSrlResult searchLicenses( FILE *fp ); // 使用ライセンスを取得する
|
ECSrlResult searchLicenses( FILE *fp ); // 使用ライセンスを取得する
|
||||||
|
ECAppType selectAppType(void);
|
||||||
|
|
||||||
// MRC(Master ROM Checker)機能
|
// MRC(Master ROM Checker)機能
|
||||||
ECSrlResult mrc( FILE *fp );
|
ECSrlResult mrc( FILE *fp );
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user