Annotation of truecrypt/crypto/idea_386.c, revision 1.1.1.1

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: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.