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