mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
(更新:Akabane Jumpei)
任意の領域2KB分をBlowfishで復号化する関数を追加。 git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@1358 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
6e64dd7bf2
commit
0172c329f0
@ -285,8 +285,10 @@ void HOTSW_Init(u32 threadPrio)
|
|||||||
|
|
||||||
// バッファの設定
|
// バッファの設定
|
||||||
HOTSW_SetBootSegmentBuffer((void *)SYSM_CARD_ROM_HEADER_BAK, SYSM_CARD_ROM_HEADER_SIZE );
|
HOTSW_SetBootSegmentBuffer((void *)SYSM_CARD_ROM_HEADER_BAK, SYSM_CARD_ROM_HEADER_SIZE );
|
||||||
// HOTSW_SetSecureSegmentBuffer(HOTSW_MODE1, (void *)SYSM_CARD_NTR_SECURE_BUF, SECURE_AREA_SIZE );
|
#ifndef USE_WRAM_LOAD
|
||||||
// HOTSW_SetSecureSegmentBuffer(HOTSW_MODE2, (void *)SYSM_CARD_TWL_SECURE_BUF, SECURE_AREA_SIZE );
|
HOTSW_SetSecureSegmentBuffer(HOTSW_MODE1, (void *)SYSM_CARD_NTR_SECURE_BUF, SECURE_AREA_SIZE );
|
||||||
|
HOTSW_SetSecureSegmentBuffer(HOTSW_MODE2, (void *)SYSM_CARD_TWL_SECURE_BUF, SECURE_AREA_SIZE );
|
||||||
|
#endif
|
||||||
|
|
||||||
// カードが挿さってあったらスレッドを起動する
|
// カードが挿さってあったらスレッドを起動する
|
||||||
if(HOTSW_IsCardExist()){
|
if(HOTSW_IsCardExist()){
|
||||||
@ -337,9 +339,11 @@ static HotSwState LoadCardData(void)
|
|||||||
|
|
||||||
// バッファを設定
|
// バッファを設定
|
||||||
s_cbData.pBootSegBuf = s_pBootSegBuffer;
|
s_cbData.pBootSegBuf = s_pBootSegBuffer;
|
||||||
// s_cbData.pSecureSegBuf = s_pSecureSegBuffer;
|
#ifndef USE_WRAM_LOAD
|
||||||
// s_cbData.pSecure2SegBuf= s_pSecure2SegBuffer;
|
s_cbData.pSecureSegBuf = s_pSecureSegBuffer;
|
||||||
|
s_cbData.pSecure2SegBuf= s_pSecure2SegBuffer;
|
||||||
|
#endif
|
||||||
|
|
||||||
// ロード処理開始
|
// ロード処理開始
|
||||||
if(HOTSW_IsCardAccessible()){
|
if(HOTSW_IsCardAccessible()){
|
||||||
s_cbData.modeType = HOTSW_MODE1;
|
s_cbData.modeType = HOTSW_MODE1;
|
||||||
@ -463,8 +467,9 @@ static HotSwState LoadCardData(void)
|
|||||||
romMode = HOTSW_ROM_MODE_SECURE;
|
romMode = HOTSW_ROM_MODE_SECURE;
|
||||||
|
|
||||||
// Secure Segment の バッファ設定
|
// Secure Segment の バッファ設定
|
||||||
|
#ifndef USE_WRAM_LOAD
|
||||||
HOTSW_SetSecureSegmentBuffer(HOTSW_MODE1, (void *)s_cbData.pBootSegBuf->rh.s.main_ram_address, SECURE_AREA_SIZE );
|
HOTSW_SetSecureSegmentBuffer(HOTSW_MODE1, (void *)s_cbData.pBootSegBuf->rh.s.main_ram_address, SECURE_AREA_SIZE );
|
||||||
|
#endif
|
||||||
// SecureモードのIDとSecureSegmentを読み込む
|
// SecureモードのIDとSecureSegmentを読み込む
|
||||||
state = ReadSecureModeCardData();
|
state = ReadSecureModeCardData();
|
||||||
retval = (retval == HOTSW_SUCCESS) ? state : retval;
|
retval = (retval == HOTSW_SUCCESS) ? state : retval;
|
||||||
@ -498,8 +503,9 @@ static HotSwState LoadCardData(void)
|
|||||||
|
|
||||||
// ---------------------- Secure2 Mode ----------------------
|
// ---------------------- Secure2 Mode ----------------------
|
||||||
// Secure Segment の バッファ設定
|
// Secure Segment の バッファ設定
|
||||||
|
#ifndef USE_WRAM_LOAD
|
||||||
HOTSW_SetSecureSegmentBuffer(HOTSW_MODE2, (void *)s_cbData.pBootSegBuf->rh.s.main_ltd_ram_address, SECURE_AREA_SIZE );
|
HOTSW_SetSecureSegmentBuffer(HOTSW_MODE2, (void *)s_cbData.pBootSegBuf->rh.s.main_ltd_ram_address, SECURE_AREA_SIZE );
|
||||||
|
#endif
|
||||||
// Secure2モードのIDとSecureSegmentを読み込む
|
// Secure2モードのIDとSecureSegmentを読み込む
|
||||||
state = ReadSecureModeCardData();
|
state = ReadSecureModeCardData();
|
||||||
retval = (retval == HOTSW_SUCCESS) ? state : retval;
|
retval = (retval == HOTSW_SUCCESS) ? state : retval;
|
||||||
@ -1347,22 +1353,31 @@ static void GenVA_VB_VD(void)
|
|||||||
Name: DecryptObjectFile
|
Name: DecryptObjectFile
|
||||||
|
|
||||||
Description: セキュア領域先頭2KBの暗号化領域を復号化
|
Description: セキュア領域先頭2KBの暗号化領域を復号化
|
||||||
|
|
||||||
注:セキュア領域を読み込んでからこの関数を呼び出してください
|
|
||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
#ifndef USE_WRAM_LOAD
|
|
||||||
static u32 encDestBuf[ENCRYPT_DEF_SIZE/sizeof(u32)];
|
static u32 encDestBuf[ENCRYPT_DEF_SIZE/sizeof(u32)];
|
||||||
|
|
||||||
|
#ifndef USE_WRAM_LOAD
|
||||||
static HotSwState DecryptObjectFile(void)
|
static HotSwState DecryptObjectFile(void)
|
||||||
|
#else
|
||||||
|
BOOL HOTSW_DecryptObjectFile(void* dest)
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
u8 i;
|
u8 i;
|
||||||
s32 restSize;
|
s32 restSize;
|
||||||
s32 size = (s32)s_cbData.pBootSegBuf->rh.s.main_size;
|
s32 size = (s32)s_cbData.pBootSegBuf->rh.s.main_size;
|
||||||
u32 *pEncBuf = encDestBuf;
|
u32 *pEncBuf = encDestBuf;
|
||||||
|
#ifndef USE_WRAM_LOAD
|
||||||
u32 *pEncDes = s_cbData.pSecureSegBuf;
|
u32 *pEncDes = s_cbData.pSecureSegBuf;
|
||||||
|
#else
|
||||||
|
u32 *pEncDes = (u32 *)dest;
|
||||||
|
#endif
|
||||||
BLOWFISH_CTX *tableBufp = &s_cbData.keyTable;
|
BLOWFISH_CTX *tableBufp = &s_cbData.keyTable;
|
||||||
BOOL exist = TRUE;
|
BOOL exist = TRUE;
|
||||||
|
#ifndef USE_WRAM_LOAD
|
||||||
HotSwState retval = HOTSW_SUCCESS;
|
HotSwState retval = HOTSW_SUCCESS;
|
||||||
|
#else
|
||||||
|
BOOL retval = TRUE;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (size > ENCRYPT_DEF_SIZE) {
|
if (size > ENCRYPT_DEF_SIZE) {
|
||||||
size = ENCRYPT_DEF_SIZE;
|
size = ENCRYPT_DEF_SIZE;
|
||||||
@ -1370,7 +1385,7 @@ static HotSwState DecryptObjectFile(void)
|
|||||||
restSize = size;
|
restSize = size;
|
||||||
|
|
||||||
// 読み込んだセキュア領域をバッファから一時バッファにコピー
|
// 読み込んだセキュア領域をバッファから一時バッファにコピー
|
||||||
MI_CpuCopy32(s_cbData.pSecureSegBuf, pEncBuf, (u32)size);
|
MI_CpuCopy32(pEncDes, pEncBuf, (u32)size);
|
||||||
|
|
||||||
// セキュア領域先頭8バイトをBlowfishで複合化
|
// セキュア領域先頭8バイトをBlowfishで複合化
|
||||||
DecryptByBlowfish(&s_cbData.keyTable, &(pEncBuf)[1], &(pEncBuf)[0]);
|
DecryptByBlowfish(&s_cbData.keyTable, &(pEncBuf)[1], &(pEncBuf)[0]);
|
||||||
@ -1402,15 +1417,17 @@ static HotSwState DecryptObjectFile(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
|
#ifndef USE_WRAM_LOAD
|
||||||
retval = HOTSW_DATA_DECRYPT_ERROR;
|
retval = HOTSW_DATA_DECRYPT_ERROR;
|
||||||
|
#else
|
||||||
|
retval = FALSE;
|
||||||
|
#endif
|
||||||
MI_NDmaFill( HOTSW_NDMA_NO, pEncBuf, UNDEF_CODE, (u32)size ); // 未定義コードでクリア
|
MI_NDmaFill( HOTSW_NDMA_NO, pEncBuf, UNDEF_CODE, (u32)size ); // 未定義コードでクリア
|
||||||
}
|
}
|
||||||
MI_CpuCopy32(pEncBuf, pEncDes, (u32)size);
|
MI_CpuCopy32(pEncBuf, pEncDes, (u32)size);
|
||||||
|
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*
|
/*---------------------------------------------------------------------------*
|
||||||
|
|||||||
@ -145,6 +145,11 @@ BOOL HOTSWi_IsRomEmulation(void);
|
|||||||
|
|
||||||
// デバッガ通信用にカードスロットの電源をONにする。
|
// デバッガ通信用にカードスロットの電源をONにする。
|
||||||
void HOTSWi_TurnCardPowerOn(u32 slot);
|
void HOTSWi_TurnCardPowerOn(u32 slot);
|
||||||
|
|
||||||
|
#ifdef USE_WRAM_LOAD
|
||||||
|
// 引数で与えられたバッファから2KB分の領域をBlowfishで復号化する
|
||||||
|
BOOL HOTSW_DecryptObjectFile(void* dest);
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Romエミュレーション情報を格納しているバッファのポインタを返す
|
// Romエミュレーション情報を格納しているバッファのポインタを返す
|
||||||
|
|||||||
@ -57,7 +57,6 @@ typedef struct CardReadParam {
|
|||||||
u32 src;
|
u32 src;
|
||||||
u32 dest;
|
u32 dest;
|
||||||
u32 size;
|
u32 size;
|
||||||
CardDataReadState result;
|
|
||||||
}CardReadParam;
|
}CardReadParam;
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user