ペアレンタルコントロール関連の下記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:
yosiokat 2008-05-12 11:16:27 +00:00
parent c7e8f8228b
commit c7ad147378
3 changed files with 115 additions and 0 deletions

View File

@ -39,6 +39,7 @@ SRCS = sysmenu_lib.c \
../common/src/pxi.c \
../common/src/mountInfo.c \
../common/src/decodeAES.c \
../common/src/masterkey.c \
$(REVISION_SRC)

View 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 *)&num;
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;
}

View File

@ -129,6 +129,10 @@ extern BOOL SYSM_IsLeapYear100( u32 year ); //
// スリープモード
extern void SYSM_GoSleepMode( void ); // スリープモードへの遷移
// ペアレンタルコントロール問い合わせ
u32 SYSM_CalcPCTLInquiryCode( void ); // 問い合わせコード(10進8桁)算出
u32 SYSM_CalcPCTLMasterKey( void ); // マスターキー  (10進5桁)算出
#endif
// 状態チェック