Develop and Download Open Source Software

Browse Subversion Repository

Diff of /branches/mty-makai/mty.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 196 by notanpe, Thu Jun 19 03:40:40 2008 UTC revision 197 by notanpe, Thu Jun 19 09:07:06 2008 UTC
# Line 21  Line 21 
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>
# Line 48  Line 53 
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[] =
# Line 378  key_set64(struct KEY *key64, Line 394  key_set64(struct KEY *key64,
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)
# Line 386  key_reset(uint8_t *key, int n) Line 414  key_reset(uint8_t *key, int n)
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]]);
# Line 1265  thread_crypt64(void *a_param) Line 1298  thread_crypt64(void *a_param)
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   *      メインループとか   *      メインループとか
# Line 1309  main(int argc, char *argv[]) Line 1364  main(int argc, char *argv[])
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())
# Line 1339  main(int argc, char *argv[]) Line 1430  main(int argc, char *argv[])
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 */
# Line 1587  main(int argc, char *argv[]) Line 1691  main(int argc, char *argv[])
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() はできない */

Legend:
Removed from v.196  
changed lines
  Added in v.197

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26