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 41 by chapuni, Wed Mar 28 03:20:38 2007 UTC revision 42 by chapuni, Wed Mar 28 04:35:27 2007 UTC
# Line 43  Line 43 
43  #include "dt4.h"  #include "dt4.h"
44  #endif  #endif
45    
 #define N_I             (sizeof(WS_T) / sizeof(uint32_t))  
 #define N_ALU (sizeof(WS_T) / sizeof(ALU_T))  
 #define ALU_BITS (CHAR_BIT * sizeof(ALU_T))  
   
 /* 1ビット分 */  
 typedef union SLICE  
 {  
   uint32_t      i[N_I];         /* 32-bit initializer */  
   ALU_T         a[N_ALU];       /* C で扱いやすいサイズ */  
   WS_T          w;                      /* エンコードで扱うサイズ */  
 } SLICE;  
   
 /* crypt64() が喰うパラメータ */  
 struct PARAM  
 {  
   SLICE lr[2][32];  
   SLICE t[32];  
   SLICE hit[10][64];  
   SLICE hiti[10][26];  
 };  
   
 /* 鍵はLR と、そのコピーが必要  
    KEY::k[0]                    LR  
    KEY::k[1]                    LRのコピー(剰余を省くため)  
    KEY::k[2][0][i].a[0] 次鍵への増分 */  
 struct KEY  
 {  
   SLICE k[2][2][28];  
   SLICE ks[28];  
 };  
   
46  /* 鍵文字列 */  /* 鍵文字列 */
47  unsigned char key[8 + 8];  unsigned char key[8 + 8];
48  unsigned char okey[8 + 8];  unsigned char okey[8 + 8];
# Line 781  static SLICE const sk6[N_STRIDE] = Line 750  static SLICE const sk6[N_STRIDE] =
750  };  };
751  #endif  #endif
752    
 #ifdef WIN32  
 typedef int (__fastcall *CRYPT64_PP)(ALU_T const *k, ALU_T *lr);  
 #endif  
   
753  ALIGN_PREFIX(16) struct KEY key64 ALIGN_SUFFIX(16);  ALIGN_PREFIX(16) struct KEY key64 ALIGN_SUFFIX(16);
754  ALIGN_PREFIX(16) struct PARAM param64 ALIGN_SUFFIX(16);  ALIGN_PREFIX(16) struct PARAM param64 ALIGN_SUFFIX(16);
755    
# Line 809  main(int argc, char *argv[]) Line 774  main(int argc, char *argv[])
774    HANDLE h;    HANDLE h;
775  #endif  #endif
776    
 #ifndef __GNUC__  
   CRYPT64_PP d_crypt64;  
 #endif  
   
777  #if 0  #if 0
778    if (argc < 2)    if (argc < 2)
779          {          {
# Line 883  main(int argc, char *argv[]) Line 844  main(int argc, char *argv[])
844    
845    /* Prologue を展開 */    /* Prologue を展開 */
846    memcpy(code, crypt64_sta, crypt64_end - crypt64_sta);    memcpy(code, crypt64_sta, crypt64_end - crypt64_sta);
 #ifndef __GNUC__  
   d_crypt64 = (CRYPT64_PP)code;  
 #endif  
847    memcpy(expr_parse(code + (crypt64_end - crypt64_sta),    memcpy(expr_parse(code + (crypt64_end - crypt64_sta),
848                                          1024 * 1024 - (crypt64_ep_end - crypt64_ep),                                          1024 * 1024 - (crypt64_ep_end - crypt64_ep),
849                                          argv[1]),                                          argv[1]),
# Line 936  main(int argc, char *argv[]) Line 894  main(int argc, char *argv[])
894                   LR 初期化は、サブモジュール内で行うべし                   LR 初期化は、サブモジュール内で行うべし
895                   FASTCALL に準じた呼び出しのため、                   FASTCALL に準じた呼び出しのため、
896                   ホントはいろいろレジスタが破壊されるハズ…なんだが。 */                   ホントはいろいろレジスタが破壊されるハズ…なんだが。 */
897  #ifdef __GNUC__            cnt = CALL_CRYPT64(code, key64.k, param64.lr);
898            asm volatile("call *%3"  
                                    : "=a"(cnt)  
                                    : "c"(key64.k), "d"(param64.lr),  
                                    "m"(code)  
                                    //"m"(crypt64_sta)  
                                    : CRYPT64_CLOBBER "memory");  
 #else  
           cnt = (*d_crypt64)(key64.k[0][0][0].a, param64.lr[0][0].a);  
 #endif  
899            if (mincnt > cnt && cnt > 0)            if (mincnt > cnt && cnt > 0)
900                  {                  {
901                    mincnt = cnt;                    mincnt = cnt;

Legend:
Removed from v.41  
changed lines
  Added in v.42

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