| 21 |
#include <sys/timeb.h> |
#include <sys/timeb.h> |
| 22 |
#include <sys/types.h> |
#include <sys/types.h> |
| 23 |
|
|
| 24 |
|
/* MAKAI start */ |
| 25 |
|
#include <unistd.h> |
| 26 |
|
#include <libgen.h> |
| 27 |
|
/* MAKAI end */ |
| 28 |
|
|
| 29 |
#if defined(WIN32) |
#if defined(WIN32) |
| 30 |
|
|
| 31 |
#include <windows.h> |
#include <windows.h> |
| 53 |
#include "dt4.h" |
#include "dt4.h" |
| 54 |
#endif |
#endif |
| 55 |
|
|
| 56 |
|
/* MAKAI start */ |
| 57 |
|
#define MIN_THREAD 1 |
| 58 |
|
#define MAX_THREAD 32 |
| 59 |
|
int nThread = 0; |
| 60 |
|
|
| 61 |
|
#define MIN_UME 3 |
| 62 |
|
#define MAX_UME 6 |
| 63 |
|
unsigned char umeStr[10]; |
| 64 |
|
int umeLen; |
| 65 |
|
/* MAKAI end */ |
| 66 |
|
|
| 67 |
/* CRYPT64 記述子 */ |
/* CRYPT64 記述子 */ |
| 68 |
static |
static |
| 69 |
struct CRYPT64_DESC const *const crypt64_descs[] = |
struct CRYPT64_DESC const *const crypt64_descs[] = |
| 394 |
int |
int |
| 395 |
key_reset(uint8_t *key, int n) |
key_reset(uint8_t *key, int n) |
| 396 |
{ |
{ |
| 397 |
|
/* MAKAI start */ |
| 398 |
|
static char firstCall = 1; |
| 399 |
|
|
| 400 |
|
if ( firstCall ) { |
| 401 |
|
firstCall = 0; |
| 402 |
|
} else { |
| 403 |
|
if ( umeStr[0] != '\0' && n == 0 ) { |
| 404 |
|
exit( 0 ); |
| 405 |
|
} |
| 406 |
|
} |
| 407 |
|
/* MAKAI end */ |
| 408 |
|
|
| 409 |
if (n >= 8) |
if (n >= 8) |
| 410 |
return 1; |
return 1; |
| 411 |
if (n == 7) |
if (n == 7) |
| 414 |
return 1; |
return 1; |
| 415 |
} |
} |
| 416 |
|
|
| 417 |
/* 0-2 文字目はランダムに決める |
/* MAKAI start */ |
| 418 |
3 文字目以降は初期値に */ |
if (n >= umeLen) |
|
if (n >= KEY_SHUFFLE_POS) |
|
| 419 |
key[n] = key_set(n, 0); |
key[n] = key_set(n, 0); |
| 420 |
else |
else { |
| 421 |
key[n] = key_set(n, rand()); |
if ( umeStr[0] == '\0' ) { |
| 422 |
|
key[n] = key_set(n, rand()); |
| 423 |
|
} else { |
| 424 |
|
key[n] = umeStr[n]; |
| 425 |
|
} |
| 426 |
|
} |
| 427 |
|
/* MAKAI end */ |
| 428 |
|
|
| 429 |
#if DEBUG>=3 |
#if DEBUG>=3 |
| 430 |
printf("key[%d]=%02X ncls=%04X\n", n, key[n], kcls[n].map[key[n]]); |
printf("key[%d]=%02X ncls=%04X\n", n, key[n], kcls[n].map[key[n]]); |
| 1298 |
} |
} |
| 1299 |
} |
} |
| 1300 |
|
|
| 1301 |
|
/* MAKAI start */ |
| 1302 |
|
void |
| 1303 |
|
usage( path ) |
| 1304 |
|
char *path; |
| 1305 |
|
{ |
| 1306 |
|
char *myName, *chPtr; |
| 1307 |
|
|
| 1308 |
|
myName = basename( path ); |
| 1309 |
|
for ( chPtr = myName; *chPtr != '\0'; chPtr++ ) { |
| 1310 |
|
if ( *chPtr == '.' ) { |
| 1311 |
|
*chPtr = '\0'; |
| 1312 |
|
break; |
| 1313 |
|
} |
| 1314 |
|
} |
| 1315 |
|
printf( "%s [-t num] [\"str\"]\n", myName ); |
| 1316 |
|
printf( " -t num : 検索スレッド数 ( %d ≦ num ≦ %d )\n", |
| 1317 |
|
MIN_THREAD, MAX_THREAD ); |
| 1318 |
|
printf( " str : 先頭に埋め込む文字列 ( %d ≦ str のバイト数 ≦ %d )\n", |
| 1319 |
|
MIN_UME, MAX_UME ); |
| 1320 |
|
} |
| 1321 |
|
/* MAKAI end */ |
| 1322 |
|
|
| 1323 |
/*************************************************************** |
/*************************************************************** |
| 1324 |
* |
* |
| 1325 |
* メインループとか |
* メインループとか |
| 1364 |
} status; |
} status; |
| 1365 |
uint64_t curTime; |
uint64_t curTime; |
| 1366 |
uint32_t upd_int = 0; |
uint32_t upd_int = 0; |
|
/* |
|
|
平均速度 (trips/s) * UPDATE_INTERVAL が UINT32_MAX を超えると発狂する。 |
|
|
UINT32_MAX = 4294967295, 平均速度 = 100Mtrips/s なら、 |
|
|
4294967295 / (100 * 1000 * 1000) = 42.949 秒まで。(和良 |
|
|
LOOP_FACTOR が平均速度より十分小さければ、ほぼ指定間隔になる。 |
|
|
LOOP_FACTOR * UINT32_MAX + LOOP_FACOTR 個検索するとオーバーフローする。w |
|
|
*/ |
|
| 1367 |
|
|
| 1368 |
/* MAKAI start */ |
/* MAKAI start */ |
| 1369 |
|
/* 実際の処理とあっていないコメントを削除 */ |
| 1370 |
|
|
| 1371 |
#if defined(WIN32) |
#if defined(WIN32) |
| 1372 |
SetPriorityClass( GetCurrentProcess(), IDLE_PRIORITY_CLASS ); |
SetPriorityClass( GetCurrentProcess(), IDLE_PRIORITY_CLASS ); |
| 1373 |
#endif |
#endif |
| 1374 |
|
|
| 1375 |
|
{ |
| 1376 |
|
int optChar; |
| 1377 |
|
extern char *optarg; |
| 1378 |
|
extern int optind; |
| 1379 |
|
|
| 1380 |
|
nThread = 0; |
| 1381 |
|
while ( (optChar = getopt(argc, argv, "t:h")) != EOF ) { |
| 1382 |
|
switch ( optChar ) { |
| 1383 |
|
case 't': |
| 1384 |
|
nThread = atoi( optarg ); |
| 1385 |
|
if ( nThread < MIN_THREAD || nThread > MAX_THREAD ) { |
| 1386 |
|
usage( argv[0] ); |
| 1387 |
|
exit( 1 ); |
| 1388 |
|
} |
| 1389 |
|
break; |
| 1390 |
|
case 'h': |
| 1391 |
|
usage( argv[0] ); |
| 1392 |
|
exit( 0 ); |
| 1393 |
|
break; |
| 1394 |
|
} |
| 1395 |
|
} |
| 1396 |
|
|
| 1397 |
|
switch ( argc - optind ) { |
| 1398 |
|
case 0: |
| 1399 |
|
umeStr[0] = '\0'; |
| 1400 |
|
umeLen = KEY_SHUFFLE_POS; |
| 1401 |
|
break; |
| 1402 |
|
case 1: |
| 1403 |
|
strcpy( umeStr, argv[optind] ); |
| 1404 |
|
umeLen = strlen( umeStr ); |
| 1405 |
|
if ( umeLen < MIN_UME || umeLen > MAX_UME ) { |
| 1406 |
|
usage( argv[0] ); |
| 1407 |
|
exit( 1 ); |
| 1408 |
|
} |
| 1409 |
|
break; |
| 1410 |
|
default: |
| 1411 |
|
usage( argv[0] ); |
| 1412 |
|
exit( 1 ); |
| 1413 |
|
} |
| 1414 |
|
} |
| 1415 |
/* MAKAI end */ |
/* MAKAI end */ |
| 1416 |
|
|
| 1417 |
if (!cpuid_issupported()) |
if (!cpuid_issupported()) |
| 1430 |
生成するコードを変える */ |
生成するコードを変える */ |
| 1431 |
sfp = scoreboard_open(); |
sfp = scoreboard_open(); |
| 1432 |
fwrite(crypt64_descs[0]->pro, 1, crypt64_descs[0]->cmp_pro - crypt64_descs[0]->pro, sfp); /* prologue & コアループ */ |
fwrite(crypt64_descs[0]->pro, 1, crypt64_descs[0]->cmp_pro - crypt64_descs[0]->pro, sfp); /* prologue & コアループ */ |
| 1433 |
proc_mask = thread_avail(); |
|
| 1434 |
|
/* MAKAI start */ |
| 1435 |
|
if ( nThread == 0 ) { |
| 1436 |
|
proc_mask = thread_avail(); |
| 1437 |
|
} else { |
| 1438 |
|
int i; |
| 1439 |
|
proc_mask = 0U; |
| 1440 |
|
for ( i = 0; i < nThread; i++ ) { |
| 1441 |
|
proc_mask |= 1U; |
| 1442 |
|
proc_mask <<= 1; |
| 1443 |
|
} |
| 1444 |
|
} |
| 1445 |
|
/* MAKAI end */ |
| 1446 |
|
|
| 1447 |
if (proc_mask == 1U) |
if (proc_mask == 1U) |
| 1448 |
{ |
{ |
| 1449 |
/* single */ |
/* single */ |
| 1691 |
|
|
| 1692 |
/* 鍵増加はこんなところに移動! */ |
/* 鍵増加はこんなところに移動! */ |
| 1693 |
assert(ks_activated); |
assert(ks_activated); |
| 1694 |
if (!key_inc(key, 6) && !key_inc(key, KEY_SHUFFLE_POS)) |
/* MAKAI start */ |
| 1695 |
|
if (!key_inc(key, 6) && !key_inc(key, umeLen)) |
| 1696 |
|
/* MAKAI end */ |
| 1697 |
{ |
{ |
| 1698 |
/* 鍵のシャッフル |
/* 鍵のシャッフル |
| 1699 |
q_crypt が捌けるまで、set_salt() はできない */ |
q_crypt が捌けるまで、set_salt() はできない */ |