| 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]; |
| 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 |
|
|
| 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 |
{ |
{ |
| 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]), |
| 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; |