mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
ペアレンタルコントロール関連の下記APIを追加。
問い合わせコード算出: SYSM_CalcPCTLInquiryCode マスターキー算出 : SYSM_CalcPCTLMasterKey git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@1317 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
c7e8f8228b
commit
c7ad147378
@ -39,6 +39,7 @@ SRCS = sysmenu_lib.c \
|
|||||||
../common/src/pxi.c \
|
../common/src/pxi.c \
|
||||||
../common/src/mountInfo.c \
|
../common/src/mountInfo.c \
|
||||||
../common/src/decodeAES.c \
|
../common/src/decodeAES.c \
|
||||||
|
../common/src/masterkey.c \
|
||||||
$(REVISION_SRC)
|
$(REVISION_SRC)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
110
build/libraries_sysmenu/sysmenu/common/src/masterkey.c
Normal file
110
build/libraries_sysmenu/sysmenu/common/src/masterkey.c
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Project: Sample Test
|
||||||
|
File: test.c
|
||||||
|
|
||||||
|
Copyright 2005 Nintendo. All rights reserved.
|
||||||
|
|
||||||
|
These coded instructions, statements, and computer programs contain
|
||||||
|
proprietary information of Nintendo of America Inc. and/or Nintendo
|
||||||
|
Company Ltd., and are protected by Federal copyright law. They may
|
||||||
|
not be disclosed to third parties or copied or duplicated in any form,
|
||||||
|
in whole or in part, without the prior written consent of Nintendo.
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include <twl.h>
|
||||||
|
#include <sysmenu.h>
|
||||||
|
|
||||||
|
#define CODE_LENGTH 8
|
||||||
|
|
||||||
|
static u32 Crc32Table[0x100];
|
||||||
|
|
||||||
|
// Forward references
|
||||||
|
u32 CalcMasterkey(const u8 *src);
|
||||||
|
|
||||||
|
static void Crc32Init(void)
|
||||||
|
{
|
||||||
|
u32 i, j;
|
||||||
|
u32 poly = 0xedb88320;
|
||||||
|
u32 crc;
|
||||||
|
|
||||||
|
for (i = 0; i < 0x100; i++) {
|
||||||
|
crc = i;
|
||||||
|
for (j = 8; j > 0; j--) {
|
||||||
|
if (crc & 1) {
|
||||||
|
crc = (crc >> 1) ^ poly;
|
||||||
|
} else {
|
||||||
|
crc >>= 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Crc32Table[i] = crc;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static u32 CalcCrc32(const u8 *src, u32 len)
|
||||||
|
{
|
||||||
|
u32 crc = 0xffffffff;
|
||||||
|
|
||||||
|
while (len) {
|
||||||
|
crc = ((crc >> 8) & 0xffffffff) ^ Crc32Table[(crc ^ *src) & 0xff];
|
||||||
|
src++;
|
||||||
|
len--;
|
||||||
|
}
|
||||||
|
return crc;
|
||||||
|
}
|
||||||
|
|
||||||
|
u32 CalcMasterkey(const u8 *src)
|
||||||
|
{
|
||||||
|
static u8 initFlag = 0;
|
||||||
|
u32 key;
|
||||||
|
|
||||||
|
if (initFlag == 0) {
|
||||||
|
Crc32Init();
|
||||||
|
initFlag = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
key = ((CalcCrc32(src, CODE_LENGTH) ^ 0xaaaa) + 5313) % 100000;
|
||||||
|
|
||||||
|
return key;
|
||||||
|
}
|
||||||
|
|
||||||
|
//======================================================================
|
||||||
|
//
|
||||||
|
// マスターキー算出
|
||||||
|
//
|
||||||
|
//======================================================================
|
||||||
|
u32 SYSM_CalcPCTLMasterKey( void )
|
||||||
|
{
|
||||||
|
u32 masterKey;
|
||||||
|
u32 inquiryCode = SYSM_CalcPCTLInquiryCode();
|
||||||
|
u8 arg[ 9 ];
|
||||||
|
RTCDate date;
|
||||||
|
RTC_Init();
|
||||||
|
RTC_GetDate( &date );
|
||||||
|
STD_TSPrintf( (char *)arg, "%02d%02d%04d", date.month, date.day, inquiryCode % 10000 );
|
||||||
|
masterKey = CalcMasterkey( arg );
|
||||||
|
OS_TPrintf( "MasterKey : %05d\n", masterKey );
|
||||||
|
return masterKey;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//======================================================================
|
||||||
|
//
|
||||||
|
// ペアレンタルコントロール問い合わせ番号算出
|
||||||
|
//
|
||||||
|
//======================================================================
|
||||||
|
u32 SYSM_CalcPCTLInquiryCode( void )
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
u64 num = 0;
|
||||||
|
u8 *p = (u8 *)#
|
||||||
|
u8 macAddr[ 6 ];
|
||||||
|
u32 inquiryCode;
|
||||||
|
OS_GetMacAddress( macAddr );
|
||||||
|
for( i = 5; i >= 0; i-- ) {
|
||||||
|
*p++ = macAddr[ i ];
|
||||||
|
}
|
||||||
|
inquiryCode = (u32)( num % 100000000UL );
|
||||||
|
OS_TPrintf( "InquiryCode : %08d\n", inquiryCode );
|
||||||
|
return inquiryCode;
|
||||||
|
}
|
||||||
|
|
||||||
@ -129,6 +129,10 @@ extern BOOL SYSM_IsLeapYear100( u32 year ); //
|
|||||||
// スリープモード
|
// スリープモード
|
||||||
extern void SYSM_GoSleepMode( void ); // スリープモードへの遷移
|
extern void SYSM_GoSleepMode( void ); // スリープモードへの遷移
|
||||||
|
|
||||||
|
// ペアレンタルコントロール問い合わせ
|
||||||
|
u32 SYSM_CalcPCTLInquiryCode( void ); // 問い合わせコード(10進8桁)算出
|
||||||
|
u32 SYSM_CalcPCTLMasterKey( void ); // マスターキー (10進5桁)算出
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// 状態チェック
|
// 状態チェック
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user