mirror of
https://github.com/rvtr/twl_wrapsdk.git
synced 2025-10-31 06:11:10 -04:00
change general key 0 to 2.
git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/twl_wrapsdk/trunk@108 4ee2a332-4b2b-5046-8439-1ba90f034370
This commit is contained in:
parent
1c59b893bf
commit
289131f6ee
@ -1,6 +1,6 @@
|
|||||||
/*---------------------------------------------------------------------------*
|
/*---------------------------------------------------------------------------*
|
||||||
Project: TwlSDK - library - aes
|
Project: TwlSDK - library - aes
|
||||||
File: aes_sp.c
|
File: aes_control.c
|
||||||
|
|
||||||
Copyright 2007 Nintendo. All rights reserved.
|
Copyright 2007 Nintendo. All rights reserved.
|
||||||
|
|
||||||
@ -19,7 +19,7 @@
|
|||||||
’è<EFBFBD>”’è‹`
|
’è<EFBFBD>”’è‹`
|
||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
#define AES_PXI_SIZE_CHECK(nums) \
|
#define AES_PXI_SIZE_CHECK(nums) \
|
||||||
if (aesWork.total < (nums) && aesWork.total > (nums) + 2) { \
|
if (aesWork.total != (nums)) { \
|
||||||
aesWork.locked = AES_UNLOCKED; \
|
aesWork.locked = AES_UNLOCKED; \
|
||||||
AesReturnResult(aesWork.command, AES_PXI_RESULT_INVALID_PARAMETER); \
|
AesReturnResult(aesWork.command, AES_PXI_RESULT_INVALID_PARAMETER); \
|
||||||
break; \
|
break; \
|
||||||
|
|||||||
@ -79,7 +79,7 @@ typedef enum
|
|||||||
|
|
||||||
AES_KEYSEL_IPL = AES_KEYSEL_ALTERNATIVE,
|
AES_KEYSEL_IPL = AES_KEYSEL_ALTERNATIVE,
|
||||||
|
|
||||||
AES_KEYSEL_GENERAL = 0 // for key register
|
AES_KEYSEL_GENERAL = 2 // for key register
|
||||||
}
|
}
|
||||||
AESKeySel;
|
AESKeySel;
|
||||||
|
|
||||||
|
|||||||
@ -18,7 +18,11 @@ AES
|
|||||||
○(予習)鍵の基本事項
|
○(予習)鍵の基本事項
|
||||||
|
|
||||||
それぞれが独立したレジスタであるが、SEEDを設定したときに、
|
それぞれが独立したレジスタであるが、SEEDを設定したときに、
|
||||||
SEED + ID => KEY という計算処理がおこなれる(計算式は秘密)。
|
|
||||||
|
SEED + ID => KEY
|
||||||
|
|
||||||
|
という計算処理がおこなれる(計算式は秘密)。
|
||||||
|
|
||||||
また、任意のタイミングでKEYのひとつをAESコアに送ることができる。
|
また、任意のタイミングでKEYのひとつをAESコアに送ることができる。
|
||||||
このAESコアに送る作業を行わない限りAESで使用される鍵は
|
このAESコアに送る作業を行わない限りAESで使用される鍵は
|
||||||
変更されない。
|
変更されない。
|
||||||
@ -36,6 +40,7 @@ ID
|
|||||||
●それぞれの鍵の意味合い
|
●それぞれの鍵の意味合い
|
||||||
|
|
||||||
デバイス依存 アプリケーション依存
|
デバイス依存 アプリケーション依存
|
||||||
|
(ユニークID) (イニシャルコード)
|
||||||
0: × ○
|
0: × ○
|
||||||
1: ○ ○
|
1: ○ ○
|
||||||
2: × ×
|
2: × ×
|
||||||
@ -45,15 +50,16 @@ ID
|
|||||||
また、アプリケーション依存とは、ROMヘッダ辺りを反映するということ。
|
また、アプリケーション依存とは、ROMヘッダ辺りを反映するということ。
|
||||||
|
|
||||||
上記の内容を反映するように、IDを設定することになる。
|
上記の内容を反映するように、IDを設定することになる。
|
||||||
|
ただし、KEYを直接設定する場合は、この意味合いは関係ない。
|
||||||
|
|
||||||
|
|
||||||
●アプリケーションが触ることのできる部分
|
●アプリケーションが触ることのできる部分
|
||||||
|
|
||||||
アプリケーションには、KEY[0]、SEED[0]~SEED[3]を使えるようにする。
|
アプリケーションには、KEY[2]、SEED[0]~SEED[3]を使えるようにする。
|
||||||
場合によっては、SEED[2]とSEED[3]は解放させない(2つしかない)
|
とりあえずは、SEED[2]は解放しない。
|
||||||
|
|
||||||
|
|
||||||
●ARM7側初期化
|
●ARM7側初期化コード
|
||||||
|
|
||||||
ROMコードで全レジスタの初期値を設定している。
|
ROMコードで全レジスタの初期値を設定している。
|
||||||
大半はダミーだが、ID関係の固定値はここでのみの設定となる。
|
大半はダミーだが、ID関係の固定値はここでのみの設定となる。
|
||||||
@ -66,22 +72,26 @@ ROM
|
|||||||
|
|
||||||
●ARM9側API
|
●ARM9側API
|
||||||
|
|
||||||
次のような個別のAPIを用意して見た。
|
次のような個別のAPIを用意してみた。
|
||||||
|
|
||||||
AES_SetGeneralKey() KEY[0]に鍵を設定する
|
AES_SetGeneralKey() KEY[2]に鍵を設定する
|
||||||
AES_SetSystemKey() SEED[3]に鍵を設定する
|
AES_SetSystemKey() SEED[3]に鍵を設定する
|
||||||
AES_SetGameKey() SEED[0]に鍵を設定する
|
AES_SetGameKey() SEED[0]に鍵を設定する
|
||||||
AES_SetSpecialKey() SEED[1]に鍵を設定する
|
AES_SetSpecialKey() SEED[1]に鍵を設定する
|
||||||
//AESi_SetAlternativeKey() SEED[2]に鍵を設定する (非公開)
|
//AESi_SetAlternativeKey() SEED[2]に鍵を設定する (非公開)
|
||||||
|
|
||||||
それぞれ引数をすぐに有効にするもので、「以前の鍵」という使い方は
|
それぞれ引数をすぐに有効にするもので、「以前の鍵」という使い方は
|
||||||
できないようにしている。
|
(とりあえず)できないようにしている。
|
||||||
|
|
||||||
|
課題: Static領域の読み直しはさせないのか?
|
||||||
|
読み直しを許可するなら、SetGameKeyの引数をなくす
|
||||||
|
(設定させない)ようにする。
|
||||||
|
|
||||||
●ARM7側API
|
●ARM7側API
|
||||||
|
|
||||||
個別に指定することも上記APIを使用することもできる。
|
個別に指定することも上記APIを使用することもできる。
|
||||||
個別設定用に、次のenumを用意している。
|
個別設定用に、次のenumを用意している。
|
||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
AES_KEYSEL_GAME = 0,
|
AES_KEYSEL_GAME = 0,
|
||||||
@ -91,6 +101,6 @@ typedef enum
|
|||||||
|
|
||||||
AES_KEYSEL_IPL = AES_KEYSEL_ALTERNATIVE,
|
AES_KEYSEL_IPL = AES_KEYSEL_ALTERNATIVE,
|
||||||
|
|
||||||
AES_KEYSEL_GENERAL = 0 // for key register
|
AES_KEYSEL_GENERAL = 2 // for key register
|
||||||
}
|
}
|
||||||
AESKeySel;
|
AESKeySel;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user