From 0f2949733227964a3a8a0ddc0e2d644a559d8f88 Mon Sep 17 00:00:00 2001 From: yosiokat Date: Tue, 8 Jul 2008 12:19:13 +0000 Subject: [PATCH] =?UTF-8?q?ROM=E3=83=98=E3=83=83=E3=83=80=E3=81=AE?= =?UTF-8?q?=E3=83=95=E3=83=A9=E3=82=B0=E3=81=AB=E5=BF=9C=E3=81=98=E3=81=A6?= =?UTF-8?q?SSL=E3=82=AF=E3=83=A9=E3=82=A4=E3=82=A2=E3=83=B3=E3=83=88?= =?UTF-8?q?=E8=A8=BC=E6=98=8E=E6=9B=B8=E7=94=A8=E3=81=AEAES=E9=8D=B5?= =?UTF-8?q?=E3=82=92=E3=82=B9=E3=83=AD=E3=83=83=E3=83=88A=E3=81=AB?= =?UTF-8?q?=E3=82=BB=E3=83=83=E3=83=88=E3=81=99=E3=82=8B=E3=82=88=E3=81=86?= =?UTF-8?q?=E5=A4=89=E6=9B=B4=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@1821 b08762b0-b915-fc4b-9d8c-17b2551a87ff --- .../sysmenu/ARM7/src/setAESKey.c | 27 ++++++++++++++++++- .../sysmenu/ARM9/src/sysmenu_lib.c | 2 ++ .../sysmenu/common/include/internal_api.h | 3 +++ 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/build/libraries_sysmenu/sysmenu/ARM7/src/setAESKey.c b/build/libraries_sysmenu/sysmenu/ARM7/src/setAESKey.c index cb232a67..739fea12 100644 --- a/build/libraries_sysmenu/sysmenu/ARM7/src/setAESKey.c +++ b/build/libraries_sysmenu/sysmenu/ARM7/src/setAESKey.c @@ -33,6 +33,11 @@ void SYSMi_SetAESKeysForAccessControlCore( ROM_Header *pROMH, u8 *pDst, BOOL *pI // static variable------------------------------------------------------------- // const data------------------------------------------------------------------ +static const u8 dev_sslClientCert[] = { + 0x79, 0xf9, 0x51, 0xbc, 0x3b, 0xb7, 0xe4, 0xca, + 0x18, 0x8f, 0xaf, 0x91, 0x8d, 0x89, 0xd3, 0x46, +}; + // dev_commonKeyはベタで持っていい。 static const u8 dev_commonKey[] = { 0xA1, 0x60, 0x4A, 0x6A, 0x71, 0x23, 0xB5, 0x29, @@ -73,19 +78,21 @@ static const u8 dev_jpegEncodeKeyForNormal[] = { void SYSMi_SetAESKeysForAccessControl( BOOL isNtrMode, ROM_Header *pROMH ) { + BOOL isClearSlotA = TRUE; BOOL isClearSlotB = TRUE; BOOL isClearSlotC = TRUE; // 鍵のセット MI_CpuClearFast( (void *)HW_LAUNCHER_DELIVER_PARAM_BUF, HW_LAUNCHER_DELIVER_PARAM_BUF_SIZE ); if( !isNtrMode ) { + SYSMi_SetAESKeysForSSLClientCert( pROMH, &isClearSlotA ); SYSMi_SetAESKeysForSignJPEG( pROMH, &isClearSlotB, &isClearSlotC ); SYSMi_SetAESKeysForAccessControlCore( pROMH, (u8 *)HW_LAUNCHER_DELIVER_PARAM_BUF, &isClearSlotB, &isClearSlotC ); } // ブートするアプリに応じて、AESキースロットのクリアを行う。 { - AESi_ResetAesKeyA(); + if( isClearSlotA ) AESi_ResetAesKeyA(); if( isClearSlotB ) AESi_ResetAesKeyB(); if( isClearSlotC ) AESi_ResetAesKeyC(); @@ -100,6 +107,24 @@ void SYSMi_SetAESKeysForAccessControl( BOOL isNtrMode, ROM_Header *pROMH ) } } + +void SYSMi_SetAESKeysForSSLClientCert( ROM_Header *pROMH, BOOL *pIsClearSlotA ) +{ + if ( pROMH->s.access_control.hw_aes_slot_A_SSLClientCert == TRUE ) { + void *pAESKey = ( SCFG_GetBondingOption() == SCFG_OP_PRODUCT ) ? + &( OSi_GetFromFirmAddr()->aes_key[ 3 ] ) : (void *)dev_sslClientCert; + + if( pIsClearSlotA ) { + *pIsClearSlotA = FALSE; + } + // AESスロットのデフォルト値セット + AES_Lock(); + AES_SetKeyA( pAESKey ); + AES_Unlock(); + } +} + + void SYSMi_SetAESKeysForSignJPEG( ROM_Header *pROMH, BOOL *pIsClearSlotB, BOOL *pIsClearSlotC ) { void *pAESKey; diff --git a/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c b/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c index c8073738..3e59fe3c 100644 --- a/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c +++ b/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c @@ -137,6 +137,8 @@ void SYSMi_SendKeysToARM7( void ) MI_SetWramBank(MI_WRAM_ARM9_ALL); // DS互換BlowfishテーブルをARM7へ渡す MI_CpuCopyFast( &((OSFromFirm9Buf *)HW_FIRM_FROM_FIRM_BUF)->ds_blowfish, (void *)&GetDeliverBROM9KeyAddr()->ds_blowfish, sizeof(BLOWFISH_CTX) ); + // AES鍵0をARM7へ渡す +// MI_CpuCopyFast( &((OSFromFirm9Buf *)HW_FIRM_FROM_FIRM_BUF)->aes_key[ 0 ], (void *)&GetDeliverBROM9KeyAddr()->aes_key[ 0 ], AES_KEY_SIZE ); DC_FlushRange( (void *)HW_WRAM_0, sizeof(DeliverBROM9Key) ); MI_SetWramBank(MI_WRAM_ARM7_ALL); } diff --git a/build/libraries_sysmenu/sysmenu/common/include/internal_api.h b/build/libraries_sysmenu/sysmenu/common/include/internal_api.h index e7fa2cdd..3117f348 100644 --- a/build/libraries_sysmenu/sysmenu/common/include/internal_api.h +++ b/build/libraries_sysmenu/sysmenu/common/include/internal_api.h @@ -76,6 +76,9 @@ void SYSMi_CheckRTC( void ); // AES鍵設定 //------------------------------------------------------- +// SSLクライアント証明書用 +void SYSMi_SetAESKeysForSSLClientCert( ROM_Header *pROMH, BOOL *pIsClearSlotA ); + // JPEG署名用(ランチャー、アプリブート共用) void SYSMi_SetAESKeysForSignJPEG( ROM_Header *pROMH, BOOL *pIsClearSlotB, BOOL *pIsClearSlotC );