Annotation of truecrypt/crypto/cast_lcl.h, revision 1.1.1.1

1.1       root        1: /* crypto/rc2/rc2_locl.h */
                      2: /* Copyright (C) 1995-1997 Eric Young ([email protected])
                      3:  * All rights reserved.
                      4:  *
                      5:  * This package is an SSL implementation written
                      6:  * by Eric Young ([email protected]).
                      7:  * The implementation was written so as to conform with Netscapes SSL.
                      8:  * 
                      9:  * This library is free for commercial and non-commercial use as long as
                     10:  * the following conditions are aheared to.  The following conditions
                     11:  * apply to all code found in this distribution, be it the RC4, RSA,
                     12:  * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
                     13:  * included with this distribution is covered by the same copyright terms
                     14:  * except that the holder is Tim Hudson ([email protected]).
                     15:  * 
                     16:  * Copyright remains Eric Young's, and as such any Copyright notices in
                     17:  * the code are not to be removed.
                     18:  * If this package is used in a product, Eric Young should be given attribution
                     19:  * as the author of the parts of the library used.
                     20:  * This can be in the form of a textual message at program startup or
                     21:  * in documentation (online or textual) provided with the package.
                     22:  * 
                     23:  * Redistribution and use in source and binary forms, with or without
                     24:  * modification, are permitted provided that the following conditions
                     25:  * are met:
                     26:  * 1. Redistributions of source code must retain the copyright
                     27:  *    notice, this list of conditions and the following disclaimer.
                     28:  * 2. Redistributions in binary form must reproduce the above copyright
                     29:  *    notice, this list of conditions and the following disclaimer in the
                     30:  *    documentation and/or other materials provided with the distribution.
                     31:  * 3. All advertising materials mentioning features or use of this software
                     32:  *    must display the following acknowledgement:
                     33:  *    "This product includes cryptographic software written by
                     34:  *     Eric Young ([email protected])"
                     35:  *    The word 'cryptographic' can be left out if the rouines from the library
                     36:  *    being used are not cryptographic related :-).
                     37:  * 4. If you include any Windows specific code (or a derivative thereof) from 
                     38:  *    the apps directory (application code) you must include an acknowledgement:
                     39:  *    "This product includes software written by Tim Hudson ([email protected])"
                     40:  * 
                     41:  * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
                     42:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
                     43:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
                     44:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
                     45:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
                     46:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
                     47:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
                     48:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
                     49:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
                     50:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
                     51:  * SUCH DAMAGE.
                     52:  * 
                     53:  * The licence and distribution terms for any publically available version or
                     54:  * derivative of this code cannot be changed.  i.e. this code cannot simply be
                     55:  * copied and put under another distribution licence
                     56:  * [including the GNU Public Licence.]
                     57:  */
                     58: 
                     59: #ifdef WIN32
                     60: #include <stdlib.h>
                     61: #endif
                     62: 
                     63: #undef c2l
                     64: #define c2l(c,l)       (l =((unsigned long)(*((c)++)))    , \
                     65:                         l|=((unsigned long)(*((c)++)))<< 8L, \
                     66:                         l|=((unsigned long)(*((c)++)))<<16L, \
                     67:                         l|=((unsigned long)(*((c)++)))<<24L)
                     68: 
                     69: /* NOTE - c is not incremented as per c2l */
                     70: #undef c2ln
                     71: #define c2ln(c,l1,l2,n)        { \
                     72:                        c+=n; \
                     73:                        l1=l2=0; \
                     74:                        switch (n) { \
                     75:                        case 8: l2 =((unsigned long)(*(--(c))))<<24L; \
                     76:                        case 7: l2|=((unsigned long)(*(--(c))))<<16L; \
                     77:                        case 6: l2|=((unsigned long)(*(--(c))))<< 8L; \
                     78:                        case 5: l2|=((unsigned long)(*(--(c))));     \
                     79:                        case 4: l1 =((unsigned long)(*(--(c))))<<24L; \
                     80:                        case 3: l1|=((unsigned long)(*(--(c))))<<16L; \
                     81:                        case 2: l1|=((unsigned long)(*(--(c))))<< 8L; \
                     82:                        case 1: l1|=((unsigned long)(*(--(c))));     \
                     83:                                } \
                     84:                        }
                     85: 
                     86: #undef l2c
                     87: #define l2c(l,c)       (*((c)++)=(unsigned char)(((l)     )&0xff), \
                     88:                         *((c)++)=(unsigned char)(((l)>> 8L)&0xff), \
                     89:                         *((c)++)=(unsigned char)(((l)>>16L)&0xff), \
                     90:                         *((c)++)=(unsigned char)(((l)>>24L)&0xff))
                     91: 
                     92: /* NOTE - c is not incremented as per l2c */
                     93: #undef l2cn
                     94: #define l2cn(l1,l2,c,n)        { \
                     95:                        c+=n; \
                     96:                        switch (n) { \
                     97:                        case 8: *(--(c))=(unsigned char)(((l2)>>24L)&0xff); \
                     98:                        case 7: *(--(c))=(unsigned char)(((l2)>>16L)&0xff); \
                     99:                        case 6: *(--(c))=(unsigned char)(((l2)>> 8L)&0xff); \
                    100:                        case 5: *(--(c))=(unsigned char)(((l2)     )&0xff); \
                    101:                        case 4: *(--(c))=(unsigned char)(((l1)>>24L)&0xff); \
                    102:                        case 3: *(--(c))=(unsigned char)(((l1)>>16L)&0xff); \
                    103:                        case 2: *(--(c))=(unsigned char)(((l1)>> 8L)&0xff); \
                    104:                        case 1: *(--(c))=(unsigned char)(((l1)     )&0xff); \
                    105:                                } \
                    106:                        }
                    107: 
                    108: /* NOTE - c is not incremented as per n2l */
                    109: #define n2ln(c,l1,l2,n)        { \
                    110:                        c+=n; \
                    111:                        l1=l2=0; \
                    112:                        switch (n) { \
                    113:                        case 8: l2 =((unsigned long)(*(--(c))))    ; \
                    114:                        case 7: l2|=((unsigned long)(*(--(c))))<< 8; \
                    115:                        case 6: l2|=((unsigned long)(*(--(c))))<<16; \
                    116:                        case 5: l2|=((unsigned long)(*(--(c))))<<24; \
                    117:                        case 4: l1 =((unsigned long)(*(--(c))))    ; \
                    118:                        case 3: l1|=((unsigned long)(*(--(c))))<< 8; \
                    119:                        case 2: l1|=((unsigned long)(*(--(c))))<<16; \
                    120:                        case 1: l1|=((unsigned long)(*(--(c))))<<24; \
                    121:                                } \
                    122:                        }
                    123: 
                    124: /* NOTE - c is not incremented as per l2n */
                    125: #define l2nn(l1,l2,c,n)        { \
                    126:                        c+=n; \
                    127:                        switch (n) { \
                    128:                        case 8: *(--(c))=(unsigned char)(((l2)    )&0xff); \
                    129:                        case 7: *(--(c))=(unsigned char)(((l2)>> 8)&0xff); \
                    130:                        case 6: *(--(c))=(unsigned char)(((l2)>>16)&0xff); \
                    131:                        case 5: *(--(c))=(unsigned char)(((l2)>>24)&0xff); \
                    132:                        case 4: *(--(c))=(unsigned char)(((l1)    )&0xff); \
                    133:                        case 3: *(--(c))=(unsigned char)(((l1)>> 8)&0xff); \
                    134:                        case 2: *(--(c))=(unsigned char)(((l1)>>16)&0xff); \
                    135:                        case 1: *(--(c))=(unsigned char)(((l1)>>24)&0xff); \
                    136:                                } \
                    137:                        }
                    138: 
                    139: #undef n2l
                    140: #define n2l(c,l)        (l =((unsigned long)(*((c)++)))<<24L, \
                    141:                          l|=((unsigned long)(*((c)++)))<<16L, \
                    142:                          l|=((unsigned long)(*((c)++)))<< 8L, \
                    143:                          l|=((unsigned long)(*((c)++))))
                    144: 
                    145: #undef l2n
                    146: #define l2n(l,c)        (*((c)++)=(unsigned char)(((l)>>24L)&0xff), \
                    147:                          *((c)++)=(unsigned char)(((l)>>16L)&0xff), \
                    148:                          *((c)++)=(unsigned char)(((l)>> 8L)&0xff), \
                    149:                          *((c)++)=(unsigned char)(((l)     )&0xff))
                    150: 
                    151: //#if defined(WIN32)
                    152: //#define ROTL(a,n)     (_lrotl(a,n))
                    153: //#else
                    154: #define ROTL(a,n)     (((a)<<(n))|((a)>>(32-(n))))
                    155: //#endif
                    156: 
                    157: #define C_M    0x3fc
                    158: #define C_0    22L
                    159: #define C_1    14L
                    160: #define C_2     6L
                    161: #define C_3     2L /* left shift */
                    162: 
                    163: /* The rotate has an extra 16 added to it to help the x86 asm */
                    164: #if defined(CAST_PTR)
                    165: #define E_CAST(n,key,L,R,OP1,OP2,OP3) \
                    166:        { \
                    167:        int i; \
                    168:        t=key[n*2] OP1 R; \
                    169:        i=key[n*2+1]; \
                    170:        t=ROTL(t,i); \
                    171:        L^= ((( *(CAST_LONG *)((unsigned char *) \
                    172:                        CAST_S_table0+((t>>C_2)&C_M)) OP2 \
                    173:                *(CAST_LONG *)((unsigned char *) \
                    174:                        CAST_S_table1+((t<<C_3)&C_M))) OP3 \
                    175:                *(CAST_LONG *)((unsigned char *) \
                    176:                        CAST_S_table2+((t>>C_0)&C_M))) OP1 \
                    177:                *(CAST_LONG *)((unsigned char *) \
                    178:                        CAST_S_table3+((t>>C_1)&C_M))); \
                    179:        }
                    180: #elif defined(CAST_PTR2)
                    181: #define E_CAST(n,key,L,R,OP1,OP2,OP3) \
                    182:        { \
                    183:        int i; \
                    184:        CAST_LONG u,v,w; \
                    185:        w=key[n*2] OP1 R; \
                    186:        i=key[n*2+1]; \
                    187:        w=ROTL(w,i); \
                    188:        u=w>>C_2; \
                    189:        v=w<<C_3; \
                    190:        u&=C_M; \
                    191:        v&=C_M; \
                    192:        t= *(CAST_LONG *)((unsigned char *)CAST_S_table0+u); \
                    193:        u=w>>C_0; \
                    194:        t=t OP2 *(CAST_LONG *)((unsigned char *)CAST_S_table1+v); \
                    195:        v=w>>C_1; \
                    196:        u&=C_M; \
                    197:        v&=C_M; \
                    198:        t=t OP3 *(CAST_LONG *)((unsigned char *)CAST_S_table2+u); \
                    199:        t=t OP1 *(CAST_LONG *)((unsigned char *)CAST_S_table3+v); \
                    200:        L^=t; \
                    201:        }
                    202: #else
                    203: #define E_CAST(n,key,L,R,OP1,OP2,OP3) \
                    204:        { \
                    205:        CAST_LONG a,b,c,d; \
                    206:        t=key[n*2] OP1 R; \
                    207:        t=ROTL(t,(key[n*2+1])); \
                    208:        a=CAST_S_table0[(t>> 8)&0xff]; \
                    209:        b=CAST_S_table1[(t    )&0xff]; \
                    210:        c=CAST_S_table2[(t>>24)&0xff]; \
                    211:        d=CAST_S_table3[(t>>16)&0xff]; \
                    212:        L^=(((a OP2 b) OP3 c) OP1 d); \
                    213:        }
                    214: #endif
                    215: 
                    216: extern CAST_LONG CAST_S_table0[256];
                    217: extern CAST_LONG CAST_S_table1[256];
                    218: extern CAST_LONG CAST_S_table2[256];
                    219: extern CAST_LONG CAST_S_table3[256];
                    220: extern CAST_LONG CAST_S_table4[256];
                    221: extern CAST_LONG CAST_S_table5[256];
                    222: extern CAST_LONG CAST_S_table6[256];
                    223: extern CAST_LONG CAST_S_table7[256];
                    224: 

unix.superglobalmegacorp.com

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