|
|
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:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.