From c590753fab34406ad9b890780cb17672f6091663 Mon Sep 17 00:00:00 2001 From: yosiokat Date: Fri, 23 May 2008 05:04:48 +0000 Subject: [PATCH] =?UTF-8?q?JPEG=E7=BD=B2=E5=90=8D=E7=94=A8=E3=81=AEAES?= =?UTF-8?q?=E9=8D=B5=E3=82=BB=E3=83=83=E3=83=88=E3=82=92=E8=A1=8C=E3=81=86?= =?UTF-8?q?=E3=82=88=E3=81=86=E5=A4=89=E6=9B=B4=E3=80=82=20makerom.TWL.lau?= =?UTF-8?q?ncher=E3=81=AE=E6=9B=B4=E6=96=B0=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@1489 b08762b0-b915-fc4b-9d8c-17b2551a87ff --- build/components/hyena.TWL/src/main.c | 10 ++- .../libraries_sysmenu/boot/ARM7/src/bootAPI.c | 3 + .../sysmenu/ARM7/src/setAESKey.c | 58 +++++++++++++++++- .../sysmenu/ARM9/src/sysmenu_lib.c | 4 +- .../sysmenu/common/include/internal_api.h | 7 ++- .../sysmenu/common/src/mountInfo.c | 4 +- docs/éµç®¡ç†.xls | Bin 35328 -> 35840 bytes .../sysmenu/sysmenu_lib/common/sysmenu_work.h | 14 +++++ tools/bin/makerom.TWL.launcher.exe | Bin 275787 -> 275285 bytes 9 files changed, 89 insertions(+), 11 deletions(-) diff --git a/build/components/hyena.TWL/src/main.c b/build/components/hyena.TWL/src/main.c index ef7b8f59..f1076f96 100644 --- a/build/components/hyena.TWL/src/main.c +++ b/build/components/hyena.TWL/src/main.c @@ -189,9 +189,13 @@ TwlSpMain(void) InitializeNwm(mainHeapHandle, mainHeapHandle); // NWM ‰Šú‰» #ifndef SDK_NOCRYPTO AES_Init(); // AES ‰Šú‰» - - // NANDƒtƒ@[ƒ€‚ªHW_LAUNCHER_DELIVER_PARAM_BUF‚Ö‚ÌAES_SEEDƒZƒbƒg‚ðs‚Á‚Ä‚­‚ê‚é‚Ì‚ÅAISƒfƒoƒbƒKÚ‘±‚ÉŠÖŒW‚È‚­SDK_SEA_KEY_STORE‚ւ̃Rƒs[‚ðs‚¦‚΂悢 - MI_CpuCopyFast( (void *)HW_LAUNCHER_DELIVER_PARAM_BUF, (void *)SDK_SEA_KEY_STORE, HW_LAUNCHER_DELIVER_PARAM_BUF_SIZE ); + + { + // JPEGƒGƒ“ƒR[ƒh—p‚ÌŒ®ƒZƒbƒg + SYSMi_SetAESKeysForSignJPEG( (ROM_Header *)HW_TWL_ROM_HEADER_BUF, NULL, NULL ); + // NANDƒtƒ@[ƒ€‚ªHW_LAUNCHER_DELIVER_PARAM_BUF‚Ö‚ÌAES_SEEDƒZƒbƒg‚ðs‚Á‚Ä‚­‚ê‚é‚Ì‚ÅAISƒfƒoƒbƒKÚ‘±‚ÉŠÖŒW‚È‚­SDK_SEA_KEY_STORE‚ւ̃Rƒs[‚ðs‚¦‚΂悢 + MI_CpuCopyFast( (void *)HW_LAUNCHER_DELIVER_PARAM_BUF, (void *)SDK_SEA_KEY_STORE, HW_LAUNCHER_DELIVER_PARAM_BUF_SIZE ); + } #ifdef SDK_SEA SEA_Init(); diff --git a/build/libraries_sysmenu/boot/ARM7/src/bootAPI.c b/build/libraries_sysmenu/boot/ARM7/src/bootAPI.c index de131645..3beaa7d5 100644 --- a/build/libraries_sysmenu/boot/ARM7/src/bootAPI.c +++ b/build/libraries_sysmenu/boot/ARM7/src/bootAPI.c @@ -159,6 +159,9 @@ BOOL BOOT_WaitStart( void ) int list_count = PRE_CLEAR_NUM_MAX + 1; int l; u32 *post_clear_list; + + // [TODO] WRAM_0_1‚Í‚¿‚á‚ñ‚ÆÁ‚¦‚Ä‚éHblowfish‚âaesŒ®‚ðˆø‚«“n‚µ‚Ä‚¢‚é‚Ì‚ÅS”z + // ƒƒ‚ƒŠƒŠƒXƒg‚ÌÝ’è // [TODO:] ƒVƒ‡ƒbƒvƒAƒvƒŠ‚ÅŒ®‚ðŽc‚·ê‡ANANDƒtƒ@[ƒ€ˆø”‚̗̈æiWRAM‚É‚ ‚éj‚ðÁ‚³‚È‚¢‚悤‚É’ˆÓB // WRAMƒŠƒ}ƒbƒvŒã‚ÌÁ‚µ˜R‚ê‚âƒoƒbƒtƒ@ƒI[ƒoƒ‰ƒ“‚ÌŒœ”O‰ñ”ð‚Ì‚½‚ß•s—v‚ÈŒ®‚Ípre clear‚ÅÁ‚·B diff --git a/build/libraries_sysmenu/sysmenu/ARM7/src/setAESKey.c b/build/libraries_sysmenu/sysmenu/ARM7/src/setAESKey.c index 365c0772..215a7fba 100644 --- a/build/libraries_sysmenu/sysmenu/ARM7/src/setAESKey.c +++ b/build/libraries_sysmenu/sysmenu/ARM7/src/setAESKey.c @@ -27,6 +27,8 @@ // define data----------------------------------------------------------------- // extern data----------------------------------------------------------------- // function's prototype------------------------------------------------------- +void SYSMi_SetAESKeysForAccessControlCore( ROM_Header *pROMH, u8 *pDst, BOOL *pIsClearSlotB, BOOL *pIsClearSlotC ); + // global variable------------------------------------------------------------- // static variable------------------------------------------------------------- // const data------------------------------------------------------------------ @@ -52,6 +54,16 @@ static const u8 dev_seedSlotC[] = { 0x49, 0x04, 0x6B, 0x33, 0x12, 0x02, 0xAC, 0xF3, }; +static const u8 dev_jpegEncodeKeyForLauncher[] = { + 0xEF, 0x9A, 0xB3, 0x39, 0x48, 0x3C, 0x2B, 0x13, + 0x39, 0x31, 0xA5, 0x3F, 0x86, 0x25, 0x9B, 0xB3, +}; + +static const u8 dev_jpegEncodeKeyForNormal[] = { + 0x79, 0xAF, 0xFE, 0xA7, 0xF3, 0x6A, 0xB7, 0xBE, + 0x83, 0xB6, 0x41, 0xFD, 0xFC, 0x42, 0xD7, 0x3B, +}; + // ============================================================================ // @@ -66,8 +78,8 @@ void SYSMi_SetAESKeysForAccessControl( BOOL isNtrMode, ROM_Header *pROMH ) // Œ®‚̃Zƒbƒg MI_CpuClearFast( (void *)HW_LAUNCHER_DELIVER_PARAM_BUF, HW_LAUNCHER_DELIVER_PARAM_BUF_SIZE ); - if( !isNtrMode && - ( pROMH->s.titleID_Hi & TITLE_ID_HI_SECURE_FLAG_MASK ) ) { + if( !isNtrMode ) { + SYSMi_SetAESKeysForSignJPEG( pROMH, &isClearSlotB, &isClearSlotC ); SYSMi_SetAESKeysForAccessControlCore( pROMH, (u8 *)HW_LAUNCHER_DELIVER_PARAM_BUF, &isClearSlotB, &isClearSlotC ); } @@ -88,9 +100,51 @@ void SYSMi_SetAESKeysForAccessControl( BOOL isNtrMode, ROM_Header *pROMH ) } } +void SYSMi_SetAESKeysForSignJPEG( ROM_Header *pROMH, BOOL *pIsClearSlotB, BOOL *pIsClearSlotC ) +{ + void *pAESKey; + if( ( pROMH->s.titleID_Hi & TITLE_ID_HI_SECURE_FLAG_MASK ) && + ( 0 == STD_CompareNString( (const char *)&pROMH->s.titleID_Lo[ 1 ], "ANH", 3 ) ) ) { + // for Launcher + pAESKey = ( SCFG_GetBondingOption() == SCFG_OP_PRODUCT ) ? + &( OSi_GetFromFirmAddr()->rsa_pubkey[ 3 ][ 0x30 ] ) : (void *)dev_jpegEncodeKeyForLauncher; + if( pIsClearSlotC ) { + *pIsClearSlotC = FALSE; + } + // AESƒXƒƒbƒg‚̃fƒtƒHƒ‹ƒg’lƒZƒbƒg + AES_Lock(); + AES_SetKeyC( pAESKey ); + AES_Unlock(); + + }else { + // SignJPEG—pAESƒL[ + if ( pROMH->s.access_control.hw_aes_slot_B_SignJPEGForLauncher == TRUE) { + // for Launcher + pAESKey = ( SCFG_GetBondingOption() == SCFG_OP_PRODUCT ) ? + &( OSi_GetFromFirmAddr()->rsa_pubkey[ 3 ][ 0x30 ] ) : (void *)dev_jpegEncodeKeyForLauncher; + }else { + // for ƒm[ƒ}ƒ‹ƒAƒvƒŠ + pAESKey = ( SCFG_GetBondingOption() == SCFG_OP_PRODUCT ) ? + &( OSi_GetFromFirmAddr()->rsa_pubkey[ 3 ][ 0x40 ] ) : (void *)dev_jpegEncodeKeyForNormal; + } + if( pIsClearSlotB ) { + *pIsClearSlotB = FALSE; + } + // AESƒXƒƒbƒg‚̃fƒtƒHƒ‹ƒg’lƒZƒbƒg + AES_Lock(); + AES_SetKeyB( pAESKey ); + AES_Unlock(); + } +} + void SYSMi_SetAESKeysForAccessControlCore( ROM_Header *pROMH, u8 *pDst, BOOL *pIsClearSlotB, BOOL *pIsClearSlotC ) { + // ƒZƒLƒ…ƒAƒAƒvƒŠˆÈŠO‚̓Zƒbƒg‚È‚µ + if ( !( pROMH->s.titleID_Hi & TITLE_ID_HI_SECURE_FLAG_MASK ) ) { + return; + } + // commonClientKey if( pROMH->s.access_control.common_client_key ) { void *pCommonKey = ( SCFG_GetBondingOption() == SCFG_OP_PRODUCT ) ? diff --git a/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c b/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c index 26640e4a..f0eb3551 100644 --- a/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c +++ b/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c @@ -123,8 +123,8 @@ void SYSMi_SendKeysToARM7( void ) { MI_SetWramBank(MI_WRAM_ARM9_ALL); // DSŒÝŠ·Blowfishƒe[ƒuƒ‹‚ðARM7‚Ö“n‚· - MI_CpuCopyFast( &((OSFromFirm9Buf *)HW_FIRM_FROM_FIRM_BUF)->ds_blowfish, (void *)HW_WRAM_0, sizeof(BLOWFISH_CTX) ); - DC_FlushRange( (void *)HW_WRAM_0, sizeof(BLOWFISH_CTX) ); + MI_CpuCopyFast( &((OSFromFirm9Buf *)HW_FIRM_FROM_FIRM_BUF)->ds_blowfish, (void *)&GetDeliverBROM9KeyAddr()->ds_blowfish, sizeof(BLOWFISH_CTX) ); + 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 801dd4f1..c1972796 100644 --- a/build/libraries_sysmenu/sysmenu/common/include/internal_api.h +++ b/build/libraries_sysmenu/sysmenu/common/include/internal_api.h @@ -72,12 +72,13 @@ void SYSMi_CheckRTC( void ); //------------------------------------------------------- // AESŒ®Ý’è //------------------------------------------------------- + +// JPEG–¼—piƒ‰ƒ“ƒ`ƒƒ[AƒAƒvƒŠƒu[ƒg‹¤—pj +void SYSMi_SetAESKeysForSignJPEG( ROM_Header *pROMH, BOOL *pIsClearSlotB, BOOL *pIsClearSlotC ); + // ƒAƒvƒŠƒu[ƒg—p void SYSMi_SetAESKeysForAccessControl( BOOL isNtrMode, ROM_Header *pROMH ); -// ƒ‰ƒ“ƒ`ƒƒ[Ž©g—p -void SYSMi_SetAESKeysForAccessControlCore( ROM_Header *pROMH, u8 *pDst, BOOL *pIsClearSlotB, BOOL *pIsClearSlotC ); - #endif // SDK_ARM7 diff --git a/build/libraries_sysmenu/sysmenu/common/src/mountInfo.c b/build/libraries_sysmenu/sysmenu/common/src/mountInfo.c index 36f402ed..45d2cb4f 100644 --- a/build/libraries_sysmenu/sysmenu/common/src/mountInfo.c +++ b/build/libraries_sysmenu/sysmenu/common/src/mountInfo.c @@ -182,7 +182,9 @@ static void SYSMi_SetMountInfoCore( LauncherBootType bootType, NAMTitleId titleI int i; char contentpath[ FS_ENTRY_LONGNAME_MAX ]; - + + // [TODO]TMPƒWƒƒƒ“ƒvŽž‚ÌcontentƒpƒXŽw’肪‚¤‚Ü‚­‚¢‚Á‚Ä‚¢‚È‚¢Bƒ}ƒEƒ“ƒg‚µ‚È‚¢‚悤‚É‚µ‚½‚ç—Ç‚¢B + // ƒ^ƒCƒgƒ‹ID‚©‚çcontent‚̃tƒ@ƒCƒ‹ƒpƒX‚ðƒZƒbƒg STD_TSNPrintf( contentpath, FS_ENTRY_LONGNAME_MAX, "nand:/title/%08x/%08x/content", (u32)( titleID >> 32 ), titleID ); diff --git a/docs/éµç®¡ç†.xls b/docs/éµç®¡ç†.xls index e7a7f1f903156adb8093fa167ddaac92cc6982df..8c2b53bdca3e4d788285c343720da35073188ba2 100644 GIT binary patch literal 35840 zcmeHQ4RjsFb)J2CPkMT?Wm&dt`A=F&mi#Qq^2-0l2Fo@W2ir3KNo;C^kR|yCWXVWY zFeDU#L&J|D28WVzl2f3ZG=zjeNkS-;;F5p|O>oojm(T?0aYBB2piO$xoRFyBH?zAl zvwE_hQ_?i#t$8J$ ziNO7#Ar^!0mAD2dcl;4apfHJ!%uk4M?l%jbeG->>LcA_w;=%Y)dBJ z^WEEBvFow}7rDRxV}<0Q-60Q8Lh;UY;?Tu}_$1)PVv^*oRDO<=pI?wQAD5qJic&E( z_LMlV=D^ZLf?Df{t+5ta?`HW~EkBF#>4-<7Z`)~lzWRS_>oUyc)^dV6(E zV@-{>1Q*+9$;*oPH1u@2ac|qkuFeb13KgONDiA*0jQJT(UjwUvHmT5wC>2C!2Sru&gRB zBt9jqLOKQx6p5x5NZd#r8aSknf425kSHvfahsb92=DvY0-0{Cw zwRiV-;qG|xcVZ0guJ6G;^|5m&;1`OAAzNpgm@Yo&&O(n~2%qJO8USnX=ZPkqo@hgd zEfL$qM$siYWt}uiCx2!;o_S4-ht3P}Uqj$IJf3t3r<;)QUj#Q!4yXBLsy`B(STogs zFT)+`MtCTBCPblEjBrwO#8{zOQgju(bQruq)(8Jd*5DDT zzi;f=7PrL}@p`F0tl`l1GQxr1^Xpr9z)wav@MMI;S!RR-|2`W(*_QIp$iKm-#gC-x zpj~)6(q3LW;lyF}UO}f+**5zT= zH`{CKt%R%owe;EGb2xk?eX!a^4y0XV)E}vDnd|TK^=%kk8Zjg>3|=x;WVXi)e9Hc^ z=%yr}Xzu}A&keX$U$qPR29;39lkSmNT$BtZhWI^pFkgO`4(7@4af1c&d;DNrev3gd zbg_(BuS0?2AIjf6w*QW;_?fTbS4~e+gfWHS2VIv-nPlW4o_z;exP7)_Z+$S9Ij;M718P~S~?ua<~ zf5{P}M825MsyN01o*?|WTKmRG4+xM>AWReY++K6|<<<=zdz|=y2Y>f_Klgry^XpP4 z^T3^?`o6QH*ntH-BOXJ1e$1PGz9T01Sn@E7y~q2icP}vHk!z8dU{x&jD>}G&G^`}a ztlpB55W3DMlo)gn04R22VD1s`-+T;Uz68~N4Bn3d_zv1-%4rliVTD;X{4--R!=;$& zQ2*DhW7>OU1FI$77(VmGb0Bjsx>Yq(fD<;`!FPgjOL|~DCNm}S0ZJiHya_!x<|P%A ztx%a(OzU6p?gpc;MOYP>Y$Zr~qgXH2iI*YaC%wL_M{mAvLyxx!aTFsd2YN;^D0Uw4 ze&oFlhQ1-Co)2hTYE+>}PIc^BmX6;v!3x@@b2?|Dtk7C`1f4VF7|@% zO3@42U8orCM9fvGKcqHrB!$-XA^^1e>VEG5^cD58P<6$*?R&dYD|@K05CZ?id zAf{)%AERBzJy)!P;5OrPlelB&FE=@epp`1b(cXK|C0~S;DZZFUiNtiE*ete)wGk6_ zP*$Q-3jcsdrT+;YEC6pY2#(_On{x7opu4HtO;^@#3`9c3i9;_>c&~V0^MEIf3QKp7 zzG~jqmK_cvUq!kA#O}w;_FLfiIA*y&lAUAeeNFv4_Vf%_7OPf!PiMwz#TK%~ZC+DnS6>vDU1?!&-*lxmYX^JH#HbU#$0T@Xq#b z^YR8)dpmJ;lUF%p59;)ipF>ZK14_69I=<*Qu^R4{Jrg)X4)JP`=lC#9F`gDn+-6Mi zZSNK|qStf0-5Yj#J>I~P+q~=dKDKF#&rb~Fi9ZC}QzbWivF8NM=&fdjf9iu64EIEU{{z3yOW&xbTP;BeR(M&uFiQSWIC z@$WJbrUa(Bzq$VC=99Ig#n)oCaB7&_{9DW{fivpLYbEJv)2Z9zQ(OmK7j1 z`Dt+wTQEG^0c+}op= zz=;csuKb8cI~d%t>H0ShU$dQA#z1ptD+P z(wCq~52Iz2YG5M|cwa%(^EI%{c0Ys~>@kMDU%=G~sd>k6MGaIz8m3_Ai6lHq3|(G^ z&k`(|a_OfWpX0Fh8N-!} mr6P2P?){)YSHZCyW?(x7%KAO9{#}s_rT1Paht$J)t8^9p+H>Swo6k z<)RK#lMzcX$Q?Lx`R&7l+M|9j$bg$U7YAXXX!hpJ+p%XqMg&Ic0Y8nnVu0A_bCL=} z#lR~EK0A{K=7Mb5=^`8n5#j+eZda4);f)I-c7}xqfJ*-B%684*A)nfEI z1$8!N9QR|Wc-Bh~*qke6rd9fpjGA$rtTH1Ruuu)Wc4gsR-}+bQJ6K~-a|A{z#Q&!E zFEAKBMq}ZOPfjY-lEP&hCLgA@niGr9%dY<#9#x))(|FEx98N4aAK4+gp?a5#of!K2 z#cq)e5>ifpamM9R&o@HY>qM&c83^X9UP^GRrnde7mj57phN;CWc2fR;+^MC3JlUK) z6-(6bqO%Di2Q`iQf$uJ$UM|@FDJUKDR)X&5anbacwdWvVYkPQJeZ zIlKXyB~pZ?_{0p`4hFQ(5B!LO#1Z=;5ADr15a9GCCBp#_u*c|31b)}?S(BL(&T7mt zy1S<%9BHG$W6f4kn=E%0v~eCn3WW!!Reh_w49v@7vSWza7!?_Kx1YdwYAfclNjK z=i)~Sht)-_k!9UEO&!@+p4-$h&BWZ>AMo4T--cnl zzo}!Y@;3Wnncc{o(K`FE?s7ST_CBn-Y!5>Y2J(Alc>r~~5z?P%Eo!wr69;C2wY?ao zFfv|I{-O=2+7bVEinUiY5A5=SC^#7D&1I#BV9h@aM{GI(8Ute|10mODUc?H`PrTs> z?Qm!$bXX)Qfl3CP*cv;&s7UGf#^qbw<>zd2q3CuE=_-g|Q&(4~ed|Xa<{WAz#a_UA z^Kkyg$wS&EQ{qDJkawbW!UdCuRzSEauA`8HFhYf7FQTbj`D19tk(k43Ac7WcLBJ3UY)9FF?yP>FHM0mOX|d*6XKeGKP|p7Q1Dq4aFzj-7#+I1<5DY*LV|i3GU#5;sJPfrC`UV=1gCD+st4yfJ+glbF%y~ShhHj=dJ9pGIe-Nn!@=w=oIis{pzvaHpo(Lz!k$m#Gl|HW zGaRmn7h}~W4+GjfT$f>M1m`(Y9Gt^pg6;P9x!vspJsrD8T%J_J+~z&|ySp+t!zt0o zBl8kON>p9;-K&PLhK> zVoHT|l!pBTD<6L|!er2e7%J2}Yh(hG4==h%*~7@F%_$uxb7~T$G>A)B39P6(a8hzg z7er69u}-Fz9A{%;;F=p&bYJ3afrqp$!=5j4mPoWTQ+5|8c}zmZ5Nsz_Ko9JPcS*;b z9@vCVW1zG`to2Cf{cxvk-n^~J&0J_=NYxJayVk4UuzG_d&XR654hL8qx>ZH+I6MOb z%};|#s<JdLa6}+?O=Hf^ z+$c0AD3ti-y=#=d1%Lg0WF3|5owlybWuMO-*5{|x&3Sxo-mvF}#GMEZ7K~!xfHd-G zgl3KqmlO-p62o!__FW#u-tarQ)SD3EAF<`-6L>jb8MYXdVXxTzm@{0HLR^L=s+Wqe z9R}<1t#~#MuKN`{y9V1ls_@J{SBO=3W=S>ni{P0HYlN6PQHbMMY5O#uJ#U5(E>`-l z#VmO%=BRhh!j=K>(UB~}3C8>bn?&Vt5oijviM>Rao7jtDTr5)u6LrsEm&!uK0>3;D z+hJhB6n6|hopVU8@}iBHvn0hk_x;DW*X=leS(}8{OL&9)yjDU6Q71TRV{u#-JJ;aO zQS45IC~zK>wLc<1>ri`L-H~TI=e)9PMtJ?~vUGU;%Cecp^*VuNK1`;!!=0&_@pjCN zdg1#Akbm!j!tR&TZx^Nc_@i37NOK9KDp;!>&!H3IE$6=~yu`SnYYI3gyt8Otaur%R zMl?EXZKK27%5psY?jPtY;8tfQ>@DZ_R;?0S!F6`+%7mjedDpm>JxRC7=>#qAln4$i zD~qHq2H*_e$t1Ee#wj3^7=(lKJ#Yjfh{aY%S|eWoh`|0AMYsYUddrw9XY)xOaR#hr z^9Y|P`b&Hs6OM6k6Qp_gZ5-sRSG~Rwyu4x7I=ySP_JN4kiBdZ~Jh|HMJqdU0b=KyU{5hm4EQ)#jh<3z8&#?XnImyC5LVy+!#l-m@M-- zQJ~9&zgEmpR^4Y#;_zOyLT(cjEg%jRMSk?_nd|{1?6zX09 zO6Q{V=dl!UI7krj;5}wPo3NA-l=5&75w3qPj#6t_N}yC9mh#1H@nJiv2#^gV`m#{kQq?i=3BfYL1FMte>58}b1B~Q zL+p$SiM>Q(=YE$OY;srl3M|PWkAZue!+R$70*U=1A3J@Wk~`xaVjnNDGaIF`CoSwr z3p?@-s2Rwe8~Inl^c_ zme@Ii)7VE@*hg8|u}9Fr&fPRxGR)JcULEaYpDwX;mZ-6hwy=-3uw(huz|P&48vE!F zJ9h_?_d1E4DP@hl*usuIgt!-IB(gLH_F@Zrafp44k3B81b9~m=$4Kmftzu^=NLrZ>m_z3!Zr313wsH$H;HR}?AU{7VCPE+S~4Xec8+Gm-YBti zF0QeUwXlzsykF~MNA4GUH_r=8Cibx*c8-h0-XyW}rE!hD)WTkB$sJ49$e0AS%9ji@ z@1-Gjj7MBu@aQ~ILSL_?yAJ>% zDKtw8+OFft*9 zd6L3Ji^4>U!bDJL5`XSv!IHJn%M&F9u8WY~MA^$hKQPWAh53>~xkaJeqEIf|aJ7$x zuexhJVp1ZF1cahcZc$*=L<$Qe1^&o^meM4P!X!yyp^pVy=nM*zB!$}Wo+%~9V5G26 zQs9ORO<}S{VX~wU_@K!a1-_(}#-1wGhRIeN7}1f!B1wU}CN+gA76t4V!o7e3QiVnv zrbr4idqz)uJ%fqA=B>fZUlufqSyj_)~3|YEfXcNeX933ezM7EFB8! z#59Y-G>ZZ@co-D;GX`ncNAR544~$(&VTq(rVYQ(`QfTs@tFR~_mt#=i=Df6U!t0l~y8`WfhF{vM&k1+ooh1F$%&By>#S#z82Oj)l!kL(RP zv*et%Uc&78O+yA)V+Po)3@~QsqjH&@0X7%?mx#0_^z*cXSjOx|gafe#Ll%X>dXuaJADLsSJ=}MdoW_8E$nGvZxk2!*zuBtFB!f^Sua=4 zh&^p#r?(;RD<$tUE$lOay-}?4xtb|?U+H6?8DgI)u`ds61#*7^(Ix%XbnFnS!#N#) zY#Ccl-&G^q%KX5)$3FOEcKyhBAE`3^qtlKE-w)h-0%DQY(BRHGDAFuIiC6Ft7 ze^{#kR9R~lo-Tvcs#;C5w8F17Tb9TfJsxxsSM+o0ir!6K(Wj{^dNOrI|D~?zwQ9vn z_>q_cSRnk0!%-l z8V3c(?x9ff#9QbD?&9XIf|DmL9o(nke;6x8Z*zU1^ADf2d_^WL|9*SZ9nYP3}it@6Ep~la_IvROB;H;xz=F zq)dvtN_3fTQQlR-g({WABMPW>eMPW>hMPXbTjPl3CSd>35L`M1J(qR-I z7yF_x7cf&U3>?`xm2&$P!$S7#L>W+0@XgpXr2LCHZh#u|Kv$+P+L879sc zP6qIJ2v6XuGlVmiBW)(k&cx=cpnekjOBK8jQy{F8Nc_~8g%X|sw_NyBTrjOR2~lHE zV$zXyiGgXgax4M_r36aUGIfthM}3b;M}05p-($=8+j)vI?=QkTatZ?zaMidDN->lu zM`C9Jt_s`Yf>Io%uCSC4uK0_vl#deiS3OsN64ThK#5eKuy+SOX_2VA7V*3}%T1?ex zKA5WGq+4NNs;)|07M93|E|CviA|JGOQf8_Szj6_lOg;+0(KKwMQ#C2U3cS}Al(=Eq z2}?1Q0$!Ndb1`uUYQ|CeNLWgs=BTigkJ7%dRDe>z8Gj7GERmNzeoacM0=rEW1*QQt zb*2H$k|`Ia0kvG11~g0gR*7;s98yT)-bcd{dAZ&%(fd^3odLxQEsTrDK`AER<_k)B zNPY)$p*?81P=_lpX$)#oF5LLQK4LFvNu;D)NLAe{#4GpoSS(QwoAKhmD$#zm6*Ik~ zt(fyJWtB|rXe(xFCxDw)tbRL+G?>!SR$K~hlogjkTeKC^PL(Y&@uRJni63pnO#Emo z=G;(QDic52Qpds4%zLI4j{^_t9_?iu_)wH76)&`6riZk>Fg;|J@(c+xJyd~~Dk(BO zq@~aFka>?<5@_>y*)x}h&rwS*_DdW;mWS5EMA9N~peS&BHcNR}-UzI<47`}7gjLG7 zN~Xq^ffuc@Wzv!ZjV(jlR*IWIoy!^=#a6(>EXIPG`pcKPG(mcXTYVlUSokJLd^h;_ zIOb_lvdy}yo5m2C<+x-&9+6r-H zSTe1VsVL10Q&HL)nTpcZNS)NyNG;UXNL|)^QtvdM<&cZEMvn2#*pRIFM)k|n!I(M?Jec=PYn%o?6lF#&+8Q}_X#1nTHcO_KFtMX0%*2kCJ`+3U zJ<}R1WY2W_(&y-^t&!1^9?O^l(qkD@KzjUO3P_J-OaW;vVG76dzhd!WjNpeb<{grMLHSO24nlO9bBHRm!Hhczn=WB?JYFkd zc067uVRk$|BLlv42H4CDu=)(Jh6s#yM4q+ZVDdzd;!K`sxifj9{RWdKS|gY|(SC!; z6YV#cJkfnpB{d=#W2zu`?KdbZzBr`(2BoC^1{P-xzroak@()ZaXurXjAdc0$7IGbyzruMGMSu`Q+;_W-0I+OfOK| zIchH!E%=MeF`J1D7xt*=Fqu(-*Ij~=iJ33cXv{NZD=+bD(q{B{&a{Wte!l2qmMHOE z;d7Mu?yy8&ZVpT2<-=i#KBy-w(FX<)MG#N{{lm@`MsgWp`f;XUpQg!6fp z$uHA0YGNwnbL5wJc(6VX*5g5X zkdr`80yzofB#@IpP6B_@5;)oXKlZ{mU-)Fxl#(NNVE*6uEBPODegSDQOU?N|=l#s| zZ^g-6**=_{_jCTwx%wbZ&iAj!$wiaHIJpk+37nksKabN~2jDXwUwPyMM;^TK;<&Y&*F7;5i3Z z9bAq(x9qxO-|fFXe2Ez4KgJ~ovUc!esMmV%1Nhv9WgCSPU%4YEft&<#639s)CxM&< zauUc%ASZ#G1acC{NgyYIKWYhZ9?y9*=eo@0bCX6sPHyaAPM>pq?i%5|o^y6ilDWf# z^K8!7xigzNf6nu{FPZy+IoIcU04Lu3xf}i<4fl+4rzkg3aI(#viZ0G7oYgpMa8Ad` zU18jv#obY9oZJn>eLD>}8*$FU*@Sa8P7h}@PVPMa?a;?}HT75APGgpZ@3nQ5gBa?l{N6ZQ4(^^yd;CjR!{}{265aPiywT>G6Y|d8gg} JB_!s#r%ggozi(z|XJ>U~ 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 #include +#include #ifdef __cplusplus extern "C" { @@ -183,6 +184,12 @@ typedef struct SDKBootCheckInfo{ }SDKBootCheckInfo; +// ARM9‚©‚çARM7‚ÉWRAMŒo—R‚ňø‚«“n‚·Œ®î•ñƒ[ƒN +typedef struct DeliverBROM9Key { + BLOWFISH_CTX ds_blowfish; +}DeliverBROM9Key; + + //---------------------------------------------------------------------- //@SYSM‹¤—Lƒ[ƒN—̈æ‚̃AƒhƒŒƒXŠl“¾ //---------------------------------------------------------------------- @@ -204,6 +211,13 @@ typedef struct SDKBootCheckInfo{ #define SYSM_GetAppRomHeader() ( (ROM_Header_Short *)SYSM_APP_ROM_HEADER_BUF ) #define SYSM_GetCardRomHeader() SYSM_GetAppRomHeader() +// ARM9‚©‚çˆø‚«“n‚·Œ®î•ñƒ[ƒN‚̎擾 +#ifdef SDK_ARM9 +#define GetDeliverBROM9KeyAddr() ( (DeliverBROM9Key *)HW_WRAM_0 ) +#else +#define GetDeliverBROM9KeyAddr() ( (DeliverBROM9Key *)HW_WRAM_0_LTD ) +#endif + #ifdef __cplusplus } #endif diff --git a/tools/bin/makerom.TWL.launcher.exe b/tools/bin/makerom.TWL.launcher.exe index 428038dd5eebd4305f1039d70be5a1b753cf4ec9..5051b0ba6c021afd9294fc912027ad1aa61fd113 100644 GIT binary patch delta 40146 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 Dp%ihu delta 40200 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