diff --git a/trunk/MakeMasterKey/src/MakeMasterKeyForCtr.cpp b/trunk/MakeMasterKey/src/MakeMasterKeyForCtr.cpp new file mode 100644 index 0000000..6fa4fbb --- /dev/null +++ b/trunk/MakeMasterKey/src/MakeMasterKeyForCtr.cpp @@ -0,0 +1,95 @@ +#include +#include + +#define CODE_LENGTH 8 + +typedef unsigned char u8; +typedef unsigned short int u16; +typedef unsigned long u32; +typedef unsigned long long int u64; + +typedef signed char s8; +typedef signed short int s16; +typedef signed long s32; + +u32 table[0x100]; + + +//========================================================================== +// +//========================================================================== +void _Crc32Init( void ) +{ +u32 poly = 0xedba6320; // DS‚̂Ƃ« 0xedb88320; +u32 crc; + + for( u32 i = 0; i < 0x100; i++ ) + { + crc = i; + for( u32 j = 8; j > 0; j-- ) + { + if( crc & 1 ) + { + crc = (crc>>1)^poly; + } + else + { + crc >>= 1; + } + } + table[i] = crc; + } +} + +//========================================================================== +// +//========================================================================== +u32 _CalcCrc32( const u8 *src, u32 len ) +{ +u32 crc = 0xffffffff; + + while( len ) + { + crc = ((crc>>8)&0xffffffff)^table[(crc^(*src))&0xff]; + src++; + len--; + } + return crc; +} + +//========================================================================== +// +//========================================================================== +u32 _CalcMasterkey( const u8 *src ) +{ +u32 key; + + _Crc32Init(); + + //key = ((_CalcCrc32( src, CODE_LENGTH )^0xaaaa)+5313)%100000; + key = ((_CalcCrc32( src, CODE_LENGTH )^0xaaaa)+5719)%100000; + return key; +} + +//========================================================================== +// +//========================================================================== +int main( int argc, char *argv[] ) +{ +u32 masterKey; + + if ( ( argc != 2 ) || ( argv[1] == NULL ) ) + { + printf( "usage: MakeMasterKeyForCtr [date+code]\n" ); + printf( "\n" ); + printf( "example: date = Sep 8. code = 1234\n" ); + printf( " MakeMasterKeyForCtr 09081234\n" ); + return 1; + } + + masterKey = _CalcMasterkey( (const u8*)argv[1] ); + + printf( "Master Key = %05d\n", masterKey ); + + return 0; +}