|
|
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.