|
|
1.1 root 1: /***********************************************************************
2: * idea_386.c - intel i386 assembler code for IDEA block cipher *
3: * *
4: * IDEA(International Data Encryption Algorithm) is a secret-key block *
5: * cipher algorithm which encrypt/decrypt 64-bit data size, using 128- *
6: * bit key size. The patent of IDEA is held by Ascom Systec Ltd. *
7: * *
8: * This program is written by Masayasu Kumagai.*
9: * (E-Mail: [email protected])*
10: ***********************************************************************/
11:
12: #include "idea.h"
13:
14: void
15: ideaCrypt( unsigned char const *input, unsigned char *output, word16 const *key )
16: {
17: _asm {
18: //%%%% PUSH EBP
19: PUSH EAX
20: PUSH EBX
21: PUSH ECX
22: PUSH EDX
23: PUSH ESI
24: PUSH EDI
25: MOV ESI, input
26: #if 0
27: MOV AX, word ptr [ESI + 0]
28: MOV EBX, dword ptr [ESI + 2]
29: ROL EAX, 16
30: MOV AX, word ptr [ESI + 6]
31: #else
32: mov ax, word ptr [esi + 6]
33: mov ebx, dword ptr [esi + 2]
34: shl eax, 16
35: bswap ebx
36: mov ax, word ptr [esi + 0]
37: bswap eax
38: rol ebx, 16
39: #endif
40: MOV DX, 8
41: MOV ESI, key
42: _LOOP:
43: ROL EDX, 16
44: ADD BX, word ptr [ESI + 2]
45: ROL EBX, 16
46: ADD BX, word ptr [ESI + 4]
47: MOV DI, AX
48: MUL word ptr [ESI + 6]
49: SUB AX, DX
50: JZ _PROD_0_1
51: ADC AX, 0
52: _RET_1:
53: ROL EAX, 16
54: MOV DI, AX
55: MUL word ptr [ESI + 0]
56: SUB AX, DX
57: JZ _PROD_0_2
58: ADC AX, 0
59: _RET_2:
60: MOV ECX, EAX
61: XOR EAX, EBX
62: MOV DI, AX
63: MUL word ptr [ESI + 8]
64: SUB AX, DX
65: JZ _PROD_0_3
66: ADC AX, 0
67: _RET_3:
68: MOV DX, AX
69: ROL EAX, 16
70: ADD AX, DX
71: MOV DI, AX
72: MUL word ptr [ESI + 10]
73: SUB AX, DX
74: JZ _PROD_0_4
75: ADC AX, 0
76: _RET_4:
77: MOV DX, AX
78: ROL EAX, 16
79: ADD AX, DX
80: ROL EAX, 16
81: XOR EBX, EAX
82: XOR EAX, ECX
83: ROL EAX, 16
84: ADD ESI, 12
85: ROL EDX, 16
86: DEC DX
87: JNZ _LOOP
88: ADD BX, word ptr [ESI + 4]
89: ROL EBX, 16
90: ADD BX, word ptr [ESI + 2]
91: MOV DI, AX
92: MUL word ptr [ESI + 6]
93: SUB AX, DX
94: JZ _PROD_0_5
95: ADC AX, 0
96: _RET_5:
97: ROL EAX, 16
98: MOV DI, AX
99: MUL word ptr [ESI + 0]
100: SUB AX, DX
101: JZ _PROD_0_6
102: ADC AX, 0
103: _RET_6:
104: JMP _SKIP
105: _PROD_0_1:
106: INC AX
107: SUB AX, word ptr [ESI + 6]
108: SUB AX, DI
109: JMP _RET_1
110: _PROD_0_2:
111: INC AX
112: SUB AX, word ptr [ESI + 0]
113: SUB AX, DI
114: JMP _RET_2
115: _PROD_0_3:
116: INC AX
117: SUB AX, word ptr [ESI + 8]
118: SUB AX, DI
119: JMP _RET_3
120: _PROD_0_4:
121: INC AX
122: SUB AX, word ptr [ESI + 10]
123: SUB AX, DI
124: JMP _RET_4
125: _PROD_0_5:
126: INC AX
127: SUB AX, word ptr [ESI + 6]
128: SUB AX, DI
129: JMP _RET_5
130: _PROD_0_6:
131: INC AX
132: SUB AX, word ptr [ESI + 0]
133: SUB AX, DI
134: JMP _RET_6
135: _SKIP:
136: MOV EDI, output
137: #if 0
138: MOV word ptr [EDI + 0], AX
139: MOV dword ptr [EDI + 2], EBX
140: ROL EAX, 16
141: MOV word ptr [EDI + 6], AX
142: #else
143: bswap eax
144: bswap ebx
145: mov word ptr [edi + 6 ], ax
146: rol ebx, 16
147: shr eax, 16
148: mov dword ptr [edi + 2], ebx
149: mov word ptr [edi + 0], ax
150: #endif
151: POP EDI
152: POP ESI
153: POP EDX
154: POP ECX
155: POP EBX
156: POP EAX
157: //%%%%% POP EBP
158: }
159: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.