| 59 |
#define YOUSUMI 6 /* STS_PAN * YOUSUMI 秒様子見 */ |
#define YOUSUMI 6 /* STS_PAN * YOUSUMI 秒様子見 */ |
| 60 |
int lCntMax; |
int lCntMax; |
| 61 |
|
|
| 62 |
|
/* 塩固定 */ |
| 63 |
|
char fixedSalt[3]; /* log_print で使うので大域変数 */ |
| 64 |
|
#define NUMSC 64 /* 塩の文字種数 */ |
| 65 |
|
static char saltChar[NUMSC] = "abcdefghijklmnopqrstuvwxyz" |
| 66 |
|
"ABCDEFGHIJKLMNOPQRSTUVWXYZ" |
| 67 |
|
"0123456789./"; |
| 68 |
|
|
| 69 |
static HANDLE mutex_key; |
static HANDLE mutex_key; |
| 70 |
|
|
| 71 |
/* CRYPT64 記述子 */ |
/* CRYPT64 記述子 */ |
| 415 |
|
|
| 416 |
OLDPRINT( "n_cpus %d\n", n_cpus ); |
OLDPRINT( "n_cpus %d\n", n_cpus ); |
| 417 |
ploop = &loop_cpu[n_cpus++]; |
ploop = &loop_cpu[n_cpus++]; |
| 418 |
|
lc = 0; |
| 419 |
|
|
| 420 |
|
OLDPRINT( "(unsigned)th %u\n", (unsigned)th ); |
| 421 |
|
OLDPRINT( "param->seed %u\n", param->seed ); |
| 422 |
|
/* th はスレッドが違っても同じ値になってる */ |
| 423 |
srand(usec() ^ param->seed ^ (unsigned)th); |
srand(usec() ^ param->seed ^ (unsigned)th); |
| 424 |
key_init(&key); |
key_init(&key); |
| 425 |
|
|
| 426 |
ReleaseMutex(mutex_key); |
ReleaseMutex(mutex_key); |
| 427 |
|
|
| 428 |
#ifdef thread_set_priority |
#ifdef thread_set_priority |
| 429 |
thread_set_priority(th, param->pri); |
thread_set_priority(th, param->pri); |
| 430 |
#endif |
#endif |
| 431 |
|
|
| 432 |
lc = 0; |
if ( fixedSalt[0] != '\0' ) { |
| 433 |
|
int ki; |
| 434 |
|
|
| 435 |
|
key.key[1] = fixedSalt[0]; |
| 436 |
|
key.key[2] = fixedSalt[1]; |
| 437 |
|
set_salt(code, crypt64_descs[0], key.key); |
| 438 |
|
key.key[7] = '\0'; |
| 439 |
|
key.key[8] = '\0'; |
| 440 |
|
for ( ;; ) { |
| 441 |
|
for ( ki = 0; ki < 4; ki++ ) { |
| 442 |
|
key.key[ki] = rand() % 0x7f + 1; |
| 443 |
|
key_set64(&pkt->key64, ki, key.key[ki], key.key[ki] ^ pkt->uk.key[ki], 0); |
| 444 |
|
pkt->uk.key[ki] = key.key[ki]; |
| 445 |
|
} |
| 446 |
|
for ( key.key[4] = 0x01; key.key[4] <= 0x7f; key.key[4]++ ) { |
| 447 |
|
key_set64(&pkt->key64, 4, key.key[4], key.key[4] ^ pkt->uk.key[4], 0); |
| 448 |
|
pkt->uk.key[4] = key.key[4]; |
| 449 |
|
for ( key.key[5] = 0x01; key.key[5] <= 0x7f; key.key[5]++ ) { |
| 450 |
|
key_set64(&pkt->key64, 5, key.key[5], key.key[5] ^ pkt->uk.key[5], 0); |
| 451 |
|
pkt->uk.key[5] = key.key[5]; |
| 452 |
|
for ( key.key[6] = 0x01; key.key[6] <= 0x7f; key.key[6]++ ) { |
| 453 |
|
key_set64(&pkt->key64, 6, key.key[6], key.key[6] ^ pkt->uk.key[6], 0); |
| 454 |
|
pkt->uk.key[6] = key.key[6]; |
| 455 |
|
CALL_CRYPT64(code, &pkt->key64, &pkt->param64); |
| 456 |
|
CALL_CMP64(cmp, pkt->param64.hit, pkt->param64.lr); |
| 457 |
|
check_hit(pkt, pkt->param64.hit); |
| 458 |
|
(*ploop)++; |
| 459 |
|
#ifdef ENABLE_GEAR |
| 460 |
|
lc++; |
| 461 |
|
if ( lCntMax != 0 ) { |
| 462 |
|
if ( lc > lCntMax ) { |
| 463 |
|
OLDPRINT( "before %I64u\n", usec() ); |
| 464 |
|
Sleep( (DWORD)GEAR_SLEEP ); |
| 465 |
|
OLDPRINT( "after %I64u\n", usec() ); |
| 466 |
|
lc = 0; |
| 467 |
|
} |
| 468 |
|
} |
| 469 |
|
#endif /* ENABLE_GEAR */ |
| 470 |
|
} |
| 471 |
|
} |
| 472 |
|
} |
| 473 |
|
} |
| 474 |
|
} |
| 475 |
|
|
| 476 |
for (;;) |
for (;;) |
| 477 |
{ |
{ |
| 478 |
do |
do |
| 546 |
|
|
| 547 |
myName = bname( path ); |
myName = bname( path ); |
| 548 |
printf( "まあ、待て屋。魔改造版 (%s)\n", KIND ); |
printf( "まあ、待て屋。魔改造版 (%s)\n", KIND ); |
| 549 |
printf( "%s [-h] [-v] [-p num] [-t num|-m mask] [-g num]\n", myName ); |
printf( "%s [-h] [-v] [-p num] [-t num|-m mask] [-g num] [-z]\n", myName ); |
| 550 |
printf( " -h : これを表示\n" ); |
printf( " -h : これを表示\n" ); |
| 551 |
printf( " -v : 冗長メッセージ\n" ); |
printf( " -v : 冗長メッセージ\n" ); |
| 552 |
printf( " -p num : 優先度の設定 ( %d ≦ num ≦ %d, デフォルトは %d )\n", |
printf( " -p num : 優先度の設定 ( %d ≦ num ≦ %d, デフォルトは %d )\n", |
| 561 |
printf( " -m mask : 実行する CPU を指定するマスク ( 1 ビット ≦ mask のビット数 ≦ %d ビット )\n", |
printf( " -m mask : 実行する CPU を指定するマスク ( 1 ビット ≦ mask のビット数 ≦ %d ビット )\n", |
| 562 |
THREAD_MAX ); |
THREAD_MAX ); |
| 563 |
printf( " -g num : がんばりぐあい ( %d (やる気なし) ≦ num ≦ %d (フルパワー), デフォルトは、%d )\n", GEAR_MIN, GEAR_MAX, GEAR_DEF ); |
printf( " -g num : がんばりぐあい ( %d (やる気なし) ≦ num ≦ %d (フルパワー), デフォルトは、%d )\n", GEAR_MIN, GEAR_MAX, GEAR_DEF ); |
| 564 |
|
printf( " -z : 全空間モード\n" ); |
| 565 |
} |
} |
| 566 |
|
|
| 567 |
/*************************************************************** |
/*************************************************************** |
| 601 |
} status; |
} status; |
| 602 |
uint64_t curTime; |
uint64_t curTime; |
| 603 |
|
|
| 604 |
|
#ifdef USECTEST |
| 605 |
|
{ |
| 606 |
|
int i; |
| 607 |
|
for ( i = 0; i < USECTEST; i++ ) { |
| 608 |
|
printf( "%I64u\n", usec() ); |
| 609 |
|
} |
| 610 |
|
} |
| 611 |
|
#endif /* USECTEST */ |
| 612 |
|
|
| 613 |
if (!cpuid_issupported()) |
if (!cpuid_issupported()) |
| 614 |
{ |
{ |
| 615 |
fprintf(stderr, "この環境で走らせることが想定されていません。\n"); |
fprintf(stderr, "この環境で走らせることが想定されていません。\n"); |
| 634 |
pmask = 0; |
pmask = 0; |
| 635 |
verbose = 0; |
verbose = 0; |
| 636 |
gear = GEAR_DEF; |
gear = GEAR_DEF; |
| 637 |
|
fixedSalt[0] = fixedSalt[1] = fixedSalt[2] = '\0'; |
| 638 |
|
|
| 639 |
/* abcdef ijkl no qrs u wxyz 未使用 */ |
/* abcdef ijkl no qrs u wxy 未使用 */ |
| 640 |
/* gh m p t v 使用済み */ |
/* gh m p t v z 使用済み */ |
| 641 |
while ( (optChar = getopt(argc, argv, "g:hm:p:t:v")) != EOF ) { |
while ( (optChar = getopt(argc, argv, "g:hm:p:t:vz")) != EOF ) { |
| 642 |
switch ( optChar ) { |
switch ( optChar ) { |
| 643 |
case 'g': |
case 'g': |
| 644 |
#ifdef ENABLE_GEAR |
#ifdef ENABLE_GEAR |
| 695 |
case 'v': |
case 'v': |
| 696 |
verbose = 1; |
verbose = 1; |
| 697 |
break; |
break; |
| 698 |
|
case 'z': |
| 699 |
|
srand( usec() ); |
| 700 |
|
fixedSalt[0] = saltChar[rand() % NUMSC]; |
| 701 |
|
fixedSalt[1] = saltChar[rand() % NUMSC]; |
| 702 |
|
break; |
| 703 |
default: |
default: |
| 704 |
usage( argv[0] ); |
usage( argv[0] ); |
| 705 |
exit( 1 ); |
exit( 1 ); |
| 734 |
} |
} |
| 735 |
|
|
| 736 |
if ( gear != GEAR_MAX ) { |
if ( gear != GEAR_MAX ) { |
| 737 |
|
/* CPU 使用率が正しく見えるように、秘孔をついてみる */ |
| 738 |
TIMECAPS tc; |
TIMECAPS tc; |
| 739 |
if ( timeGetDevCaps( &tc, sizeof( TIMECAPS ) ) == MMSYSERR_NOERROR ) { |
if ( timeGetDevCaps( &tc, sizeof( TIMECAPS ) ) == MMSYSERR_NOERROR ) { |
| 740 |
timeBeginPeriod( tc.wPeriodMin ); |
timeBeginPeriod( tc.wPeriodMin ); |
| 765 |
} else { |
} else { |
| 766 |
printf( "CPU を %d 割ぐらい使用\n", gear ); |
printf( "CPU を %d 割ぐらい使用\n", gear ); |
| 767 |
} |
} |
| 768 |
|
if ( fixedSalt[0] != '\0' ) { |
| 769 |
|
printf( "全空間モード (salt:%c%c)\n", fixedSalt[0], fixedSalt[1] ); |
| 770 |
|
} |
| 771 |
} |
} |
| 772 |
|
|
| 773 |
#ifdef WIN32 |
#ifdef WIN32 |
| 913 |
maxSrchCnt = 0; |
maxSrchCnt = 0; |
| 914 |
for ( ;; ) { |
for ( ;; ) { |
| 915 |
uint64_t diffTime; |
uint64_t diffTime; |
| 916 |
uint64_t spanLoop; |
uint64_t spanLoop; |
| 917 |
|
|
| 918 |
Sleep(STS_SPAN); |
Sleep(STS_SPAN); |
| 919 |
|
|
| 946 |
if ( spanSpeed > bestSpeed ) { |
if ( spanSpeed > bestSpeed ) { |
| 947 |
bestSpeed = spanSpeed; |
bestSpeed = spanSpeed; |
| 948 |
if ( gear != GEAR_MAX ) { |
if ( gear != GEAR_MAX ) { |
| 949 |
tmplCntMax = ((maxSrchCnt / (N_ALU * ALU_BITS)) * gear / 10) / ((STS_SPAN - (STS_SPAN * gear / 10)) / GEAR_SLEEP) / nThread; |
tmplCntMax = ((maxSrchCnt / (N_ALU * ALU_BITS)) * gear / 10) / ((STS_SPAN - (STS_SPAN * gear / 10)) / GEAR_SLEEP) / nThread; |
| 950 |
} |
} |
| 951 |
} |
} |
| 952 |
|
|