|
|
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.