KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > caucho > quercus > lib > string > Crypt


1 /*
2  * This implementation of the unix crypt function is based on
3  * Eric Young's DES implementation from OpenSSL.
4  */

5
6 package com.caucho.quercus.lib.string;
7
8 /**
9  * Crypt.
10  */

11 public class Crypt {
12   public static String JavaDoc crypt(String JavaDoc keyString, String JavaDoc salt)
13   {
14     int len = keyString.length();
15
16     if (8 < len)
17       len = 8;
18
19     int swap0 = toSalt(salt.charAt(0)) << 2;
20     int swap1 = toSalt(salt.charAt(1)) << 6;
21
22     char result[] = new char[12];
23     byte key[] = new byte[8];
24
25     int i;
26     for (i = 0; i < len; i++) {
27       char ch = keyString.charAt(i);
28
29       key[i] = (byte) (ch << 1);
30     }
31
32     for (; i < 8; i++) {
33       key[i] = 0;
34     }
35
36     int []keySchedule = new int[32];
37
38     setKeySchedule(key, keySchedule);
39
40     long value = encrypt(keySchedule, swap0, swap1);
41
42     return resultToString(salt, value);
43   }
44
45   private static int toSalt(char ch)
46   {
47     if (ch < 0x3a)
48       return ch - 0x2e;
49     else if (ch < 0x5b)
50       return ch - 0x3a + 0x05;
51     else
52       return ch - 0x5b + 0x20;
53   }
54
55   private static void setKeySchedule(byte []key, int []schedule)
56   {
57     int c = ((key[0] & 0xff) |
58          ((key[1] & 0xff) << 8) |
59          ((key[2] & 0xff) << 16) |
60          ((key[3] & 0xff) << 24));
61
62     int d = ((key[4] & 0xff) |
63          ((key[5] & 0xff) << 8) |
64          ((key[6] & 0xff) << 16) |
65          ((key[7] & 0xff) << 24));
66
67
68     // PERM_OP (d,c,t,4,0x0f0f0f0fL);
69
int temp = ((d >>> 4) ^ c) & 0x0f0f0f0f;
70     c ^= temp;
71     d ^= temp << 4;
72
73     // HPERM_OP(c,t,-2,0xcccc0000L);
74
temp = ((c << 18) ^ c) & 0xcccc0000;
75     c ^= temp ^ (temp >>> 18);
76
77     // HPERM_OP(d,t,-2,0xcccc0000L);
78
temp = ((d << 18) ^ d) & 0xcccc0000;
79     d ^= temp ^ (temp >>> 18);
80
81     // PERM_OP (d,c,t,1,0x55555555L);
82
temp = ((d >>> 1) ^ c) & 0x55555555;
83     c ^= temp;
84     d ^= temp << 1;
85
86     // PERM_OP (c,d,t,8,0x00ff00ffL);
87
temp = ((c >>> 8) ^ d) & 0x00ff00ff;
88     d ^= temp;
89     c ^= temp << 8;
90
91     // PERM_OP (d,c,t,1,0x55555555L);
92
temp = ((d >>> 1) ^ c) & 0x55555555;
93     c ^= temp;
94     d ^= temp << 1;
95
96     d = (((d & 0x000000ff) << 16) |
97      (d & 0x0000ff00) |
98      ((d & 0x00ff0000) >>> 16) |
99      ((c & 0xf0000000) >>> 4));
100
101     c &= 0x0fffffffL;
102
103     int k = 0;
104     for (int i = 0; i < 16; i++) {
105       if (KEY_SHIFTS[i]) {
106     c = (c >> 2) | (c << 26);
107     d = (d >> 2) | (d << 26);
108       }
109       else {
110     c = (c >> 1) | (c << 27);
111     d = (d >> 1) | (d << 27);
112       }
113
114       c &= 0x0fffffff;
115       d &= 0x0fffffff;
116
117       int s = (skb_0[ (c ) & 0x3f] |
118            skb_1[((c >> 6) & 0x03) |
119              ((c >> 7) & 0x3c)] |
120            skb_2[((c >> 13) & 0x0f) |
121              ((c >> 14) & 0x30)] |
122            skb_3[((c >> 20) & 0x01) |
123              ((c >> 21) & 0x06) |
124              ((c >> 22) & 0x38)]);
125
126       int t = (skb_4[ (d ) & 0x3f] |
127            skb_5[((d >> 7) & 0x03) |
128              ((d >> 8) & 0x3c)] |
129            skb_6[ (d >> 15) & 0x3f] |
130            skb_7[((d >> 21) & 0x0f) |
131              ((d >> 22) & 0x30)]);
132
133       int t2 = (t << 16) | (s & 0x0000ffff);
134
135       schedule[k++] = rotate(t2, 30);
136
137       t2 = (s >>> 16) | (t & 0xffff0000);
138
139       schedule[k++] = rotate(t2, 26);
140     }
141   }
142
143   private static long encrypt(int []key, int swap0, int swap1)
144   {
145     int l = 0;
146     int r = 0;
147     int temp;
148
149     for (int j = 0; j < 25; j++) {
150       for (int i = 0; i < 32; i += 8) {
151     l = encrypt(l, r, key[i + 0], key[i + 1], swap0, swap1);
152     r = encrypt(r, l, key[i + 2], key[i + 3], swap0, swap1);
153     l = encrypt(l, r, key[i + 4], key[i + 5], swap0, swap1);
154     r = encrypt(r, l, key[i + 6], key[i + 7], swap0, swap1);
155       }
156
157       temp = l;
158       l = r;
159       r = temp;
160     }
161
162     // l=ROTATE(l,3)&0xffffffffL;
163
l = rotate(l, 3);
164     // r=ROTATE(r,3)&0xffffffffL;
165
r = rotate(r, 3);
166
167     // PERM_OP(l,r,t, 1,0x55555555L);
168
temp = ((l >>> 1) ^ r) & 0x55555555;
169     r ^= temp;
170     l ^= temp << 1;
171
172     // PERM_OP(r,l,t, 8,0x00ff00ffL);
173
temp = ((r >>> 8) ^ l) & 0x00ff00ff;
174     l ^= temp;
175     r ^= temp << 8;
176
177     // PERM_OP(l,r,t, 2,0x33333333L);
178
temp = ((l >>> 2) ^ r) & 0x33333333;
179     r ^= temp;
180     l ^= temp << 2;
181
182     // PERM_OP(r,l,t,16,0x0000ffffL);
183
temp = ((r >>> 16) ^ l) & 0x0000ffff;
184     l ^= temp;
185     r ^= temp << 16;
186
187     // PERM_OP(l,r,t, 4,0x0f0f0f0fL);
188
temp = ((l >>> 4) ^ r) & 0x0f0f0f0f;
189     r ^= temp;
190     l ^= temp << 4;
191
192     return ((long) l << 32L) + ((long) r & 0xffffffffL);
193   }
194
195   private static int encrypt(int l, int r,
196                  int key0, int key1,
197                  int swap0, int swap1)
198   {
199     int t = r ^ (r >>> 16);
200     int x = t & swap0;
201     int y = t & swap1;
202
203     x ^= r ^ key0 ^ (x << 16);
204     y ^= r ^ key1 ^ (y << 16);
205
206     y = rotate(y, 4);
207
208     l ^= (des_0[(x >> 2) & 0x3f] ^
209       des_2[(x >> 10) & 0x3f] ^
210       des_4[(x >> 18) & 0x3f] ^
211       des_6[(x >> 26) & 0x3f] ^
212       des_1[(y >> 2) & 0x3f] ^
213       des_3[(y >> 10) & 0x3f] ^
214       des_5[(y >> 18) & 0x3f] ^
215       des_7[(y >> 26) & 0x3f]);
216
217     return l;
218   }
219
220   private static int rotate(int v, int n)
221   {
222     return (v >>> n) + (v << (32 - n));
223   }
224
225   private static String JavaDoc resultToString(String JavaDoc salt, long v)
226   {
227     StringBuilder JavaDoc sb = new StringBuilder JavaDoc();
228
229     if (salt.length() > 2)
230       sb.append(salt.substring(0, 2));
231     else
232       sb.append(salt);
233
234     v = (((v & 0x00000000000000ffL) << 56) |
235      ((v & 0x000000000000ff00L) << 40) |
236      ((v & 0x0000000000ff0000L) << 24) |
237      ((v & 0x00000000ff000000L) << 8) |
238      ((v & 0x000000ff00000000L) >>> 8) |
239      ((v & 0x0000ff0000000000L) >>> 24) |
240      ((v & 0x00ff000000000000L) >>> 40) |
241      ((v & 0xff00000000000000L) >>> 56));
242
243     sb.append(resultToChar(v >> 58));
244     sb.append(resultToChar(v >> 52));
245     sb.append(resultToChar(v >> 46));
246     sb.append(resultToChar(v >> 40));
247     sb.append(resultToChar(v >> 34));
248     sb.append(resultToChar(v >> 28));
249     sb.append(resultToChar(v >> 22));
250     sb.append(resultToChar(v >> 16));
251     sb.append(resultToChar(v >> 10));
252     sb.append(resultToChar(v >> 4));
253     sb.append(resultToChar(v << 2));
254
255     return sb.toString();
256   }
257
258   static char resultToChar(long result)
259   {
260     int v = (int) (result & 0x3f);
261
262     if (v < 0x0c)
263       return (char) (v + 0x2e);
264     else if (v < 0x26)
265       return (char) (v + 0x41 - 0x0c);
266     else
267       return (char) (v + 0x61 - 0x26);
268   }
269
270   private final static boolean []KEY_SHIFTS = new boolean[] {
271     false, false, true, true, true, true, true, true,
272     false, true, true, true, true, true, true, false
273   };
274
275   private final static int []REVERSE_BITS = new int[] {
276     0x00, 0x20, 0x10, 0x30, 0x08, 0x28, 0x18, 0x38,
277     0x04, 0x24, 0x14, 0x34, 0x0c, 0x2c, 0x1c, 0x3c,
278     0x02, 0x22, 0x12, 0x32, 0x0a, 0x2a, 0x1a, 0x3a,
279     0x06, 0x26, 0x16, 0x36, 0x0e, 0x2e, 0x1e, 0x3e,
280
281     0x01, 0x21, 0x11, 0x31, 0x09, 0x29, 0x19, 0x39,
282     0x05, 0x25, 0x15, 0x35, 0x0d, 0x2d, 0x1d, 0x3d,
283     0x03, 0x23, 0x13, 0x33, 0x0b, 0x2b, 0x1b, 0x3b,
284     0x07, 0x27, 0x17, 0x37, 0x0f, 0x2f, 0x1f, 0x3f,
285   };
286
287   private static final int []des_0 = new int[] {
288     0x02080800, 0x00080000, 0x02000002, 0x02080802,
289     0x02000000, 0x00080802, 0x00080002, 0x02000002,
290     0x00080802, 0x02080800, 0x02080000, 0x00000802,
291     0x02000802, 0x02000000, 0x00000000, 0x00080002,
292     0x00080000, 0x00000002, 0x02000800, 0x00080800,
293     0x02080802, 0x02080000, 0x00000802, 0x02000800,
294     0x00000002, 0x00000800, 0x00080800, 0x02080002,
295     0x00000800, 0x02000802, 0x02080002, 0x00000000,
296     0x00000000, 0x02080802, 0x02000800, 0x00080002,
297     0x02080800, 0x00080000, 0x00000802, 0x02000800,
298     0x02080002, 0x00000800, 0x00080800, 0x02000002,
299     0x00080802, 0x00000002, 0x02000002, 0x02080000,
300     0x02080802, 0x00080800, 0x02080000, 0x02000802,
301     0x02000000, 0x00000802, 0x00080002, 0x00000000,
302     0x00080000, 0x02000000, 0x02000802, 0x02080800,
303     0x00000002, 0x02080002, 0x00000800, 0x00080802
304   };
305
306   private static final int []des_1 = new int[] {
307     0x40108010, 0x00000000, 0x00108000, 0x40100000,
308     0x40000010, 0x00008010, 0x40008000, 0x00108000,
309     0x00008000, 0x40100010, 0x00000010, 0x40008000,
310     0x00100010, 0x40108000, 0x40100000, 0x00000010,
311     0x00100000, 0x40008010, 0x40100010, 0x00008000,
312     0x00108010, 0x40000000, 0x00000000, 0x00100010,
313     0x40008010, 0x00108010, 0x40108000, 0x40000010,
314     0x40000000, 0x00100000, 0x00008010, 0x40108010,
315     0x00100010, 0x40108000, 0x40008000, 0x00108010,
316     0x40108010, 0x00100010, 0x40000010, 0x00000000,
317     0x40000000, 0x00008010, 0x00100000, 0x40100010,
318     0x00008000, 0x40000000, 0x00108010, 0x40008010,
319     0x40108000, 0x00008000, 0x00000000, 0x40000010,
320     0x00000010, 0x40108010, 0x00108000, 0x40100000,
321     0x40100010, 0x00100000, 0x00008010, 0x40008000,
322     0x40008010, 0x00000010, 0x40100000, 0x00108000,
323   };
324
325   private static final int []des_2 = new int[] {
326     0x04000001, 0x04040100, 0x00000100, 0x04000101,
327     0x00040001, 0x04000000, 0x04000101, 0x00040100,
328     0x04000100, 0x00040000, 0x04040000, 0x00000001,
329     0x04040101, 0x00000101, 0x00000001, 0x04040001,
330     0x00000000, 0x00040001, 0x04040100, 0x00000100,
331     0x00000101, 0x04040101, 0x00040000, 0x04000001,
332     0x04040001, 0x04000100, 0x00040101, 0x04040000,
333     0x00040100, 0x00000000, 0x04000000, 0x00040101,
334     0x04040100, 0x00000100, 0x00000001, 0x00040000,
335     0x00000101, 0x00040001, 0x04040000, 0x04000101,
336     0x00000000, 0x04040100, 0x00040100, 0x04040001,
337     0x00040001, 0x04000000, 0x04040101, 0x00000001,
338     0x00040101, 0x04000001, 0x04000000, 0x04040101,
339     0x00040000, 0x04000100, 0x04000101, 0x00040100,
340     0x04000100, 0x00000000, 0x04040001, 0x00000101,
341     0x04000001, 0x00040101, 0x00000100, 0x04040000,
342   };
343
344   private static final int []des_3 = new int[] {
345     0x00401008, 0x10001000, 0x00000008, 0x10401008,
346     0x00000000, 0x10400000, 0x10001008, 0x00400008,
347     0x10401000, 0x10000008, 0x10000000, 0x00001008,
348     0x10000008, 0x00401008, 0x00400000, 0x10000000,
349     0x10400008, 0x00401000, 0x00001000, 0x00000008,
350     0x00401000, 0x10001008, 0x10400000, 0x00001000,
351     0x00001008, 0x00000000, 0x00400008, 0x10401000,
352     0x10001000, 0x10400008, 0x10401008, 0x00400000,
353     0x10400008, 0x00001008, 0x00400000, 0x10000008,
354     0x00401000, 0x10001000, 0x00000008, 0x10400000,
355     0x10001008, 0x00000000, 0x00001000, 0x00400008,
356     0x00000000, 0x10400008, 0x10401000, 0x00001000,
357     0x10000000, 0x10401008, 0x00401008, 0x00400000,
358     0x10401008, 0x00000008, 0x10001000, 0x00401008,
359     0x00400008, 0x00401000, 0x10400000, 0x10001008,
360     0x00001008, 0x10000000, 0x10000008, 0x10401000,
361   };
362
363   private static final int []des_4 = new int[] {
364     0x08000000, 0x00010000, 0x00000400, 0x08010420,
365     0x08010020, 0x08000400, 0x00010420, 0x08010000,
366     0x00010000, 0x00000020, 0x08000020, 0x00010400,
367     0x08000420, 0x08010020, 0x08010400, 0x00000000,
368     0x00010400, 0x08000000, 0x00010020, 0x00000420,
369     0x08000400, 0x00010420, 0x00000000, 0x08000020,
370     0x00000020, 0x08000420, 0x08010420, 0x00010020,
371     0x08010000, 0x00000400, 0x00000420, 0x08010400,
372     0x08010400, 0x08000420, 0x00010020, 0x08010000,
373     0x00010000, 0x00000020, 0x08000020, 0x08000400,
374     0x08000000, 0x00010400, 0x08010420, 0x00000000,
375     0x00010420, 0x08000000, 0x00000400, 0x00010020,
376     0x08000420, 0x00000400, 0x00000000, 0x08010420,
377     0x08010020, 0x08010400, 0x00000420, 0x00010000,
378     0x00010400, 0x08010020, 0x08000400, 0x00000420,
379     0x00000020, 0x00010420, 0x08010000, 0x08000020,
380   };
381
382   private static final int []des_5 = new int[] {
383     0x80000040, 0x00200040, 0x00000000, 0x80202000,
384     0x00200040, 0x00002000, 0x80002040, 0x00200000,
385     0x00002040, 0x80202040, 0x00202000, 0x80000000,
386     0x80002000, 0x80000040, 0x80200000, 0x00202040,
387     0x00200000, 0x80002040, 0x80200040, 0x00000000,
388     0x00002000, 0x00000040, 0x80202000, 0x80200040,
389     0x80202040, 0x80200000, 0x80000000, 0x00002040,
390     0x00000040, 0x00202000, 0x00202040, 0x80002000,
391     0x00002040, 0x80000000, 0x80002000, 0x00202040,
392     0x80202000, 0x00200040, 0x00000000, 0x80002000,
393     0x80000000, 0x00002000, 0x80200040, 0x00200000,
394     0x00200040, 0x80202040, 0x00202000, 0x00000040,
395     0x80202040, 0x00202000, 0x00200000, 0x80002040,
396     0x80000040, 0x80200000, 0x00202040, 0x00000000,
397     0x00002000, 0x80000040, 0x80002040, 0x80202000,
398     0x80200000, 0x00002040, 0x00000040, 0x80200040,
399   };
400
401   private static final int []des_6 = new int[] {
402     0x00004000, 0x00000200, 0x01000200, 0x01000004,
403     0x01004204, 0x00004004, 0x00004200, 0x00000000,
404     0x01000000, 0x01000204, 0x00000204, 0x01004000,
405     0x00000004, 0x01004200, 0x01004000, 0x00000204,
406     0x01000204, 0x00004000, 0x00004004, 0x01004204,
407     0x00000000, 0x01000200, 0x01000004, 0x00004200,
408     0x01004004, 0x00004204, 0x01004200, 0x00000004,
409     0x00004204, 0x01004004, 0x00000200, 0x01000000,
410     0x00004204, 0x01004000, 0x01004004, 0x00000204,
411     0x00004000, 0x00000200, 0x01000000, 0x01004004,
412     0x01000204, 0x00004204, 0x00004200, 0x00000000,
413     0x00000200, 0x01000004, 0x00000004, 0x01000200,
414     0x00000000, 0x01000204, 0x01000200, 0x00004200,
415     0x00000204, 0x00004000, 0x01004204, 0x01000000,
416     0x01004200, 0x00000004, 0x00004004, 0x01004204,
417     0x01000004, 0x01004200, 0x01004000, 0x00004004,
418   };
419
420   private static final int []des_7 = new int[] {
421     0x20800080, 0x20820000, 0x00020080, 0x00000000,
422     0x20020000, 0x00800080, 0x20800000, 0x20820080,
423     0x00000080, 0x20000000, 0x00820000, 0x00020080,
424     0x00820080, 0x20020080, 0x20000080, 0x20800000,
425     0x00020000, 0x00820080, 0x00800080, 0x20020000,
426     0x20820080, 0x20000080, 0x00000000, 0x00820000,
427     0x20000000, 0x00800000, 0x20020080, 0x20800080,
428     0x00800000, 0x00020000, 0x20820000, 0x00000080,
429     0x00800000, 0x00020000, 0x20000080, 0x20820080,
430     0x00020080, 0x20000000, 0x00000000, 0x00820000,
431     0x20800080, 0x20020080, 0x20020000, 0x00800080,
432     0x20820000, 0x00000080, 0x00800080, 0x20020000,
433     0x20820080, 0x00800000, 0x20800000, 0x20000080,
434     0x00820000, 0x00020080, 0x20020080, 0x20800000,
435     0x00000080, 0x20820000, 0x00820080, 0x00000000,
436     0x20000000, 0x20800080, 0x00020000, 0x00820080,
437   };
438
439   private static final int []skb_0 = new int[] {
440     0x00000000,0x00000010,0x20000000,0x20000010,
441     0x00010000,0x00010010,0x20010000,0x20010010,
442     0x00000800,0x00000810,0x20000800,0x20000810,
443     0x00010800,0x00010810,0x20010800,0x20010810,
444     0x00000020,0x00000030,0x20000020,0x20000030,
445     0x00010020,0x00010030,0x20010020,0x20010030,
446     0x00000820,0x00000830,0x20000820,0x20000830,
447     0x00010820,0x00010830,0x20010820,0x20010830,
448     0x00080000,0x00080010,0x20080000,0x20080010,
449     0x00090000,0x00090010,0x20090000,0x20090010,
450     0x00080800,0x00080810,0x20080800,0x20080810,
451     0x00090800,0x00090810,0x20090800,0x20090810,
452     0x00080020,0x00080030,0x20080020,0x20080030,
453     0x00090020,0x00090030,0x20090020,0x20090030,
454     0x00080820,0x00080830,0x20080820,0x20080830,
455     0x00090820,0x00090830,0x20090820,0x20090830,
456   };
457
458   private static final int []skb_1 = new int[] {
459     0x00000000,0x02000000,0x00002000,0x02002000,
460     0x00200000,0x02200000,0x00202000,0x02202000,
461     0x00000004,0x02000004,0x00002004,0x02002004,
462     0x00200004,0x02200004,0x00202004,0x02202004,
463     0x00000400,0x02000400,0x00002400,0x02002400,
464     0x00200400,0x02200400,0x00202400,0x02202400,
465     0x00000404,0x02000404,0x00002404,0x02002404,
466     0x00200404,0x02200404,0x00202404,0x02202404,
467     0x10000000,0x12000000,0x10002000,0x12002000,
468     0x10200000,0x12200000,0x10202000,0x12202000,
469     0x10000004,0x12000004,0x10002004,0x12002004,
470     0x10200004,0x12200004,0x10202004,0x12202004,
471     0x10000400,0x12000400,0x10002400,0x12002400,
472     0x10200400,0x12200400,0x10202400,0x12202400,
473     0x10000404,0x12000404,0x10002404,0x12002404,
474     0x10200404,0x12200404,0x10202404,0x12202404,
475   };
476
477   private static final int []skb_2 = new int[] {
478     0x00000000,0x00000001,0x00040000,0x00040001,
479     0x01000000,0x01000001,0x01040000,0x01040001,
480     0x00000002,0x00000003,0x00040002,0x00040003,
481     0x01000002,0x01000003,0x01040002,0x01040003,
482     0x00000200,0x00000201,0x00040200,0x00040201,
483     0x01000200,0x01000201,0x01040200,0x01040201,
484     0x00000202,0x00000203,0x00040202,0x00040203,
485     0x01000202,0x01000203,0x01040202,0x01040203,
486     0x08000000,0x08000001,0x08040000,0x08040001,
487     0x09000000,0x09000001,0x09040000,0x09040001,
488     0x08000002,0x08000003,0x08040002,0x08040003,
489     0x09000002,0x09000003,0x09040002,0x09040003,
490     0x08000200,0x08000201,0x08040200,0x08040201,
491     0x09000200,0x09000201,0x09040200,0x09040201,
492     0x08000202,0x08000203,0x08040202,0x08040203,
493     0x09000202,0x09000203,0x09040202,0x09040203,
494   };
495
496   private static final int []skb_3 = new int[] {
497     0x00000000,0x00100000,0x00000100,0x00100100,
498     0x00000008,0x00100008,0x00000108,0x00100108,
499     0x00001000,0x00101000,0x00001100,0x00101100,
500     0x00001008,0x00101008,0x00001108,0x00101108,
501     0x04000000,0x04100000,0x04000100,0x04100100,
502     0x04000008,0x04100008,0x04000108,0x04100108,
503     0x04001000,0x04101000,0x04001100,0x04101100,
504     0x04001008,0x04101008,0x04001108,0x04101108,
505     0x00020000,0x00120000,0x00020100,0x00120100,
506     0x00020008,0x00120008,0x00020108,0x00120108,
507     0x00021000,0x00121000,0x00021100,0x00121100,
508     0x00021008,0x00121008,0x00021108,0x00121108,
509     0x04020000,0x04120000,0x04020100,0x04120100,
510     0x04020008,0x04120008,0x04020108,0x04120108,
511     0x04021000,0x04121000,0x04021100,0x04121100,
512     0x04021008,0x04121008,0x04021108,0x04121108,
513   };
514
515   private static final int []skb_4 = new int[] {
516     0x00000000,0x10000000,0x00010000,0x10010000,
517     0x00000004,0x10000004,0x00010004,0x10010004,
518     0x20000000,0x30000000,0x20010000,0x30010000,
519     0x20000004,0x30000004,0x20010004,0x30010004,
520     0x00100000,0x10100000,0x00110000,0x10110000,
521     0x00100004,0x10100004,0x00110004,0x10110004,
522     0x20100000,0x30100000,0x20110000,0x30110000,
523     0x20100004,0x30100004,0x20110004,0x30110004,
524     0x00001000,0x10001000,0x00011000,0x10011000,
525     0x00001004,0x10001004,0x00011004,0x10011004,
526     0x20001000,0x30001000,0x20011000,0x30011000,
527     0x20001004,0x30001004,0x20011004,0x30011004,
528     0x00101000,0x10101000,0x00111000,0x10111000,
529     0x00101004,0x10101004,0x00111004,0x10111004,
530     0x20101000,0x30101000,0x20111000,0x30111000,
531     0x20101004,0x30101004,0x20111004,0x30111004,
532   };
533
534   private static final int []skb_5 = new int[] {
535     0x00000000,0x08000000,0x00000008,0x08000008,
536     0x00000400,0x08000400,0x00000408,0x08000408,
537     0x00020000,0x08020000,0x00020008,0x08020008,
538     0x00020400,0x08020400,0x00020408,0x08020408,
539     0x00000001,0x08000001,0x00000009,0x08000009,
540     0x00000401,0x08000401,0x00000409,0x08000409,
541     0x00020001,0x08020001,0x00020009,0x08020009,
542     0x00020401,0x08020401,0x00020409,0x08020409,
543     0x02000000,0x0A000000,0x02000008,0x0A000008,
544     0x02000400,0x0A000400,0x02000408,0x0A000408,
545     0x02020000,0x0A020000,0x02020008,0x0A020008,
546     0x02020400,0x0A020400,0x02020408,0x0A020408,
547     0x02000001,0x0A000001,0x02000009,0x0A000009,
548     0x02000401,0x0A000401,0x02000409,0x0A000409,
549     0x02020001,0x0A020001,0x02020009,0x0A020009,
550     0x02020401,0x0A020401,0x02020409,0x0A020409,
551   };
552
553   private static final int []skb_6 = new int[] {
554     0x00000000,0x00000100,0x00080000,0x00080100,
555     0x01000000,0x01000100,0x01080000,0x01080100,
556     0x00000010,0x00000110,0x00080010,0x00080110,
557     0x01000010,0x01000110,0x01080010,0x01080110,
558     0x00200000,0x00200100,0x00280000,0x00280100,
559     0x01200000,0x01200100,0x01280000,0x01280100,
560     0x00200010,0x00200110,0x00280010,0x00280110,
561     0x01200010,0x01200110,0x01280010,0x01280110,
562     0x00000200,0x00000300,0x00080200,0x00080300,
563     0x01000200,0x01000300,0x01080200,0x01080300,
564     0x00000210,0x00000310,0x00080210,0x00080310,
565     0x01000210,0x01000310,0x01080210,0x01080310,
566     0x00200200,0x00200300,0x00280200,0x00280300,
567     0x01200200,0x01200300,0x01280200,0x01280300,
568     0x00200210,0x00200310,0x00280210,0x00280310,
569     0x01200210,0x01200310,0x01280210,0x01280310,
570   };
571
572   private static final int []skb_7 = new int[] {
573     0x00000000,0x04000000,0x00040000,0x04040000,
574     0x00000002,0x04000002,0x00040002,0x04040002,
575     0x00002000,0x04002000,0x00042000,0x04042000,
576     0x00002002,0x04002002,0x00042002,0x04042002,
577     0x00000020,0x04000020,0x00040020,0x04040020,
578     0x00000022,0x04000022,0x00040022,0x04040022,
579     0x00002020,0x04002020,0x00042020,0x04042020,
580     0x00002022,0x04002022,0x00042022,0x04042022,
581     0x00000800,0x04000800,0x00040800,0x04040800,
582     0x00000802,0x04000802,0x00040802,0x04040802,
583     0x00002800,0x04002800,0x00042800,0x04042800,
584     0x00002802,0x04002802,0x00042802,0x04042802,
585     0x00000820,0x04000820,0x00040820,0x04040820,
586     0x00000822,0x04000822,0x00040822,0x04040822,
587     0x00002820,0x04002820,0x00042820,0x04042820,
588     0x00002822,0x04002822,0x00042822,0x04042822,
589   };
590 }
591
592
Popular Tags