Annotation of truecrypt/crypto/idea_386.c, revision 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.