|
|
1.1 ! root 1: /* crypto/bf/bf_locl.org */ ! 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: /* WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING ! 60: * ! 61: * Always modify bf_locl.org since bf_locl.h is automatically generated from ! 62: * it during SSLeay configuration. ! 63: * ! 64: * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING ! 65: */ ! 66: ! 67: /* Special defines which change the way the code is built depending on the ! 68: CPU and OS. For SGI machines you can use _MIPS_SZLONG (32 or 64) to find ! 69: even newer MIPS CPU's, but at the moment one size fits all for ! 70: optimization options. Older Sparc's work better with only UNROLL, but ! 71: there's no way to tell at compile time what it is you're running on */ ! 72: ! 73: #if defined( sun ) /* Newer Sparc's */ ! 74: # define BF_PTR ! 75: #elif defined( __ultrix ) /* Older MIPS */ ! 76: # define BF_PTR ! 77: #elif defined( __osf1__ ) /* Alpha */ ! 78: /* None */ ! 79: #elif defined ( _AIX ) /* RS6000 */ ! 80: /* Unknown */ ! 81: #elif defined( __hpux ) /* HP-PA */ ! 82: /* None */ ! 83: #elif defined( __aux ) /* 68K */ ! 84: /* Unknown */ ! 85: #elif defined( __dgux ) /* 88K (but P6 in latest boxes) */ ! 86: /* Unknown */ ! 87: #elif defined( __sgi ) /* Newer MIPS */ ! 88: # define BF_PTR ! 89: #elif defined( i386 ) /* x86 boxes, should be gcc */ ! 90: # define BF_PTR2 ! 91: #elif defined( _MSC_VER ) /* x86 boxes, Visual C */ ! 92: # define BF_PTR2 ! 93: #endif /* Systems-specific speed defines */ ! 94: ! 95: #undef c2l ! 96: #define c2l(c,l) (l =((unsigned long)(*((c)++))) , \ ! 97: l|=((unsigned long)(*((c)++)))<< 8L, \ ! 98: l|=((unsigned long)(*((c)++)))<<16L, \ ! 99: l|=((unsigned long)(*((c)++)))<<24L) ! 100: ! 101: /* NOTE - c is not incremented as per c2l */ ! 102: #undef c2ln ! 103: #define c2ln(c,l1,l2,n) { \ ! 104: c+=n; \ ! 105: l1=l2=0; \ ! 106: switch (n) { \ ! 107: case 8: l2 =((unsigned long)(*(--(c))))<<24L; \ ! 108: case 7: l2|=((unsigned long)(*(--(c))))<<16L; \ ! 109: case 6: l2|=((unsigned long)(*(--(c))))<< 8L; \ ! 110: case 5: l2|=((unsigned long)(*(--(c)))); \ ! 111: case 4: l1 =((unsigned long)(*(--(c))))<<24L; \ ! 112: case 3: l1|=((unsigned long)(*(--(c))))<<16L; \ ! 113: case 2: l1|=((unsigned long)(*(--(c))))<< 8L; \ ! 114: case 1: l1|=((unsigned long)(*(--(c)))); \ ! 115: } \ ! 116: } ! 117: ! 118: #undef l2c ! 119: #define l2c(l,c) (*((c)++)=(unsigned char)(((l) )&0xff), \ ! 120: *((c)++)=(unsigned char)(((l)>> 8L)&0xff), \ ! 121: *((c)++)=(unsigned char)(((l)>>16L)&0xff), \ ! 122: *((c)++)=(unsigned char)(((l)>>24L)&0xff)) ! 123: ! 124: /* NOTE - c is not incremented as per l2c */ ! 125: #undef l2cn ! 126: #define l2cn(l1,l2,c,n) { \ ! 127: c+=n; \ ! 128: switch (n) { \ ! 129: case 8: *(--(c))=(unsigned char)(((l2)>>24L)&0xff); \ ! 130: case 7: *(--(c))=(unsigned char)(((l2)>>16L)&0xff); \ ! 131: case 6: *(--(c))=(unsigned char)(((l2)>> 8L)&0xff); \ ! 132: case 5: *(--(c))=(unsigned char)(((l2) )&0xff); \ ! 133: case 4: *(--(c))=(unsigned char)(((l1)>>24L)&0xff); \ ! 134: case 3: *(--(c))=(unsigned char)(((l1)>>16L)&0xff); \ ! 135: case 2: *(--(c))=(unsigned char)(((l1)>> 8L)&0xff); \ ! 136: case 1: *(--(c))=(unsigned char)(((l1) )&0xff); \ ! 137: } \ ! 138: } ! 139: ! 140: /* NOTE - c is not incremented as per n2l */ ! 141: #define n2ln(c,l1,l2,n) { \ ! 142: c+=n; \ ! 143: l1=l2=0; \ ! 144: switch (n) { \ ! 145: case 8: l2 =((unsigned long)(*(--(c)))) ; \ ! 146: case 7: l2|=((unsigned long)(*(--(c))))<< 8; \ ! 147: case 6: l2|=((unsigned long)(*(--(c))))<<16; \ ! 148: case 5: l2|=((unsigned long)(*(--(c))))<<24; \ ! 149: case 4: l1 =((unsigned long)(*(--(c)))) ; \ ! 150: case 3: l1|=((unsigned long)(*(--(c))))<< 8; \ ! 151: case 2: l1|=((unsigned long)(*(--(c))))<<16; \ ! 152: case 1: l1|=((unsigned long)(*(--(c))))<<24; \ ! 153: } \ ! 154: } ! 155: ! 156: /* NOTE - c is not incremented as per l2n */ ! 157: #define l2nn(l1,l2,c,n) { \ ! 158: c+=n; \ ! 159: switch (n) { \ ! 160: case 8: *(--(c))=(unsigned char)(((l2) )&0xff); \ ! 161: case 7: *(--(c))=(unsigned char)(((l2)>> 8)&0xff); \ ! 162: case 6: *(--(c))=(unsigned char)(((l2)>>16)&0xff); \ ! 163: case 5: *(--(c))=(unsigned char)(((l2)>>24)&0xff); \ ! 164: case 4: *(--(c))=(unsigned char)(((l1) )&0xff); \ ! 165: case 3: *(--(c))=(unsigned char)(((l1)>> 8)&0xff); \ ! 166: case 2: *(--(c))=(unsigned char)(((l1)>>16)&0xff); \ ! 167: case 1: *(--(c))=(unsigned char)(((l1)>>24)&0xff); \ ! 168: } \ ! 169: } ! 170: ! 171: #undef n2l ! 172: #define n2l(c,l) (l =((unsigned long)(*((c)++)))<<24L, \ ! 173: l|=((unsigned long)(*((c)++)))<<16L, \ ! 174: l|=((unsigned long)(*((c)++)))<< 8L, \ ! 175: l|=((unsigned long)(*((c)++)))) ! 176: ! 177: #undef l2n ! 178: #define l2n(l,c) (*((c)++)=(unsigned char)(((l)>>24L)&0xff), \ ! 179: *((c)++)=(unsigned char)(((l)>>16L)&0xff), \ ! 180: *((c)++)=(unsigned char)(((l)>> 8L)&0xff), \ ! 181: *((c)++)=(unsigned char)(((l) )&0xff)) ! 182: ! 183: /* This is actually a big endian algorithm, the most significate byte ! 184: * is used to lookup array 0 */ ! 185: ! 186: /* use BF_PTR2 for intel boxes, ! 187: * BF_PTR for sparc and MIPS/SGI ! 188: * use nothing for Alpha and HP. ! 189: */ ! 190: #if !defined(BF_PTR) && !defined(BF_PTR2) ! 191: #define BF_PTR2 ! 192: #endif ! 193: ! 194: #define BF_M 0x3fc ! 195: #define BF_0 22L ! 196: #define BF_1 14L ! 197: #define BF_2 6L ! 198: #define BF_3 2L /* left shift */ ! 199: ! 200: #if defined(BF_PTR2) ! 201: ! 202: /* This is basically a special pentium verson */ ! 203: #define BF_ENC(LL,R,S,P) \ ! 204: { \ ! 205: BF_LONG t,u,v; \ ! 206: u=R>>BF_0; \ ! 207: v=R>>BF_1; \ ! 208: u&=BF_M; \ ! 209: v&=BF_M; \ ! 210: t= *(BF_LONG *)((unsigned char *)&(S[ 0])+u); \ ! 211: u=R>>BF_2; \ ! 212: t+= *(BF_LONG *)((unsigned char *)&(S[256])+v); \ ! 213: v=R<<BF_3; \ ! 214: u&=BF_M; \ ! 215: v&=BF_M; \ ! 216: t^= *(BF_LONG *)((unsigned char *)&(S[512])+u); \ ! 217: LL^=P; \ ! 218: t+= *(BF_LONG *)((unsigned char *)&(S[768])+v); \ ! 219: LL^=t; \ ! 220: } ! 221: ! 222: #elif defined(BF_PTR) ! 223: ! 224: /* This is normally very good */ ! 225: ! 226: #define BF_ENC(LL,R,S,P) \ ! 227: LL^=P; \ ! 228: LL^= (((*(BF_LONG *)((unsigned char *)&(S[ 0])+((R>>BF_0)&BF_M))+ \ ! 229: *(BF_LONG *)((unsigned char *)&(S[256])+((R>>BF_1)&BF_M)))^ \ ! 230: *(BF_LONG *)((unsigned char *)&(S[512])+((R>>BF_2)&BF_M)))+ \ ! 231: *(BF_LONG *)((unsigned char *)&(S[768])+((R<<BF_3)&BF_M))); ! 232: #else ! 233: ! 234: /* This will always work, even on 64 bit machines and strangly enough, ! 235: * on the Alpha it is faster than the pointer versions (both 32 and 64 ! 236: * versions of BF_LONG) */ ! 237: ! 238: #define BF_ENC(LL,R,S,P) \ ! 239: LL^=P; \ ! 240: LL^=((( S[ (int)(R>>24L) ] + \ ! 241: S[0x0100+((int)(R>>16L)&0xff)])^ \ ! 242: S[0x0200+((int)(R>> 8L)&0xff)])+ \ ! 243: S[0x0300+((int)(R )&0xff)])&0xffffffffL; ! 244: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.