source: other-projects/trunk/gs3-release-maker/tasks/sshtaskdef/src/mindbright/security/DES.java@ 14627

Last change on this file since 14627 was 14627, checked in by oranfry, 17 years ago

initial import of the gs3-release-maker

File size: 25.6 KB
Line 
1/******************************************************************************
2 *
3 * Copyright (c) 1998,99 by Mindbright Technology AB, Stockholm, Sweden.
4 * www.mindbright.se, [email protected]
5 *
6 *****************************************************************************
7 * $Author: mats $
8 * $Date: 1999/07/19 17:13:49 $
9 * $Name: rel1-2-1 $
10 *****************************************************************************/
11/*
12 * !!! Author's comment: The contents of this file is heavily based
13 * upon Tatu Ylonen's c-code (from the ssh1.2.26 package). That code
14 * in its turn (as stated) is based upon Eric Young's libdes-3.06. The
15 * original code is hence nowadays under a stricter license than
16 * stated in the ssh1.2.26 package so you might want to look into Eric
17 * Young's recent copyright-notice (which is enclosed below for
18 * correctness).
19 */
20/* Copyright (C) 1995-1998 Eric Young ([email protected])
21 * All rights reserved.
22 *
23 * This package is an SSL implementation written
24 * by Eric Young ([email protected]).
25 * The implementation was written so as to conform with Netscapes SSL.
26 *
27 * This library is free for commercial and non-commercial use as long as
28 * the following conditions are aheared to. The following conditions
29 * apply to all code found in this distribution, be it the RC4, RSA,
30 * lhash, DES, etc., code; not just the SSL code. The SSL documentation
31 * included with this distribution is covered by the same copyright terms
32 * except that the holder is Tim Hudson ([email protected]).
33 *
34 * Copyright remains Eric Young's, and as such any Copyright notices in
35 * the code are not to be removed.
36 * If this package is used in a product, Eric Young should be given attribution
37 * as the author of the parts of the library used.
38 * This can be in the form of a textual message at program startup or
39 * in documentation (online or textual) provided with the package.
40 *
41 * Redistribution and use in source and binary forms, with or without
42 * modification, are permitted provided that the following conditions
43 * are met:
44 * 1. Redistributions of source code must retain the copyright
45 * notice, this list of conditions and the following disclaimer.
46 * 2. Redistributions in binary form must reproduce the above copyright
47 * notice, this list of conditions and the following disclaimer in the
48 * documentation and/or other materials provided with the distribution.
49 * 3. All advertising materials mentioning features or use of this software
50 * must display the following acknowledgement:
51 * "This product includes cryptographic software written by
52 * Eric Young ([email protected])"
53 * The word 'cryptographic' can be left out if the rouines from the library
54 * being used are not cryptographic related :-).
55 * 4. If you include any Windows specific code (or a derivative thereof) from
56 * the apps directory (application code) you must include an acknowledgement:
57 * "This product includes software written by Tim Hudson ([email protected])"
58 *
59 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
60 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
61 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
62 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
63 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
64 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
65 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
66 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
67 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
68 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
69 * SUCH DAMAGE.
70 *
71 * The licence and distribution terms for any publically available version or
72 * derivative of this code cannot be changed. i.e. this code cannot simply be
73 * copied and put under another distribution licence
74 * [including the GNU Public Licence.]
75 */
76package mindbright.security;
77
78public final class DES extends Cipher {
79
80 protected int[] key_schedule = new int[32];
81 protected int IV0 = 0;
82 protected int IV1 = 0;
83
84 public synchronized void encrypt(byte[] src, int srcOff, byte[] dest, int destOff, int len) {
85 int[] out = new int[2];
86 int iv0 = IV0;
87 int iv1 = IV1;
88 int end = srcOff + len;
89
90 for(int si = srcOff, di = destOff; si < end; si += 8, di += 8) {
91 iv0 ^= ((src[si] & 0xff) | ((src[si + 1] & 0xff) << 8) |
92 ((src[si + 2] & 0xff) << 16) | ((src[si + 3] & 0xff) << 24));
93 iv1 ^= ((src[si + 4] & 0xff) | ((src[si + 5] & 0xff) << 8) |
94 ((src[si + 6] & 0xff) << 16) | ((src[si + 7] & 0xff) << 24));
95 encrypt(iv0, iv1, out);
96 iv0 = out[0];
97 iv1 = out[1];
98 dest[di] = (byte)( iv0 & 0xff);
99 dest[di+1] = (byte)((iv0 >>> 8 ) & 0xff);
100 dest[di+2] = (byte)((iv0 >>> 16) & 0xff);
101 dest[di+3] = (byte)((iv0 >>> 24) & 0xff);
102 dest[di+4] = (byte)( iv1 & 0xff);
103 dest[di+5] = (byte)((iv1 >>> 8 ) & 0xff);
104 dest[di+6] = (byte)((iv1 >>> 16) & 0xff);
105 dest[di+7] = (byte)((iv1 >>> 24) & 0xff);
106 }
107 IV0 = iv0;
108 IV1 = iv1;
109 }
110
111 public synchronized void decrypt(byte[] src, int srcOff, byte[] dest, int destOff, int len) {
112 int[] out = new int[2];
113 int iv0 = IV0;
114 int iv1 = IV1;
115 int d0;
116 int d1;
117 int end = srcOff + len;
118
119 for(int si = srcOff, di = destOff; si < end; si += 8, di += 8) {
120 d0 = ((src[si] & 0xff) | ((src[si + 1] & 0xff) << 8) |
121 ((src[si + 2] & 0xff) << 16) | ((src[si + 3] & 0xff) << 24));
122 d1 = ((src[si + 4] & 0xff) | ((src[si + 5] & 0xff) << 8) |
123 ((src[si + 6] & 0xff) << 16) | ((src[si + 7] & 0xff) << 24));
124 decrypt(d0, d1, out);
125 iv0 ^= out[0];
126 iv1 ^= out[1];
127 dest[di] = (byte)( iv0 & 0xff);
128 dest[di+1] = (byte)((iv0 >>> 8 ) & 0xff);
129 dest[di+2] = (byte)((iv0 >>> 16) & 0xff);
130 dest[di+3] = (byte)((iv0 >>> 24) & 0xff);
131 dest[di+4] = (byte)( iv1 & 0xff);
132 dest[di+5] = (byte)((iv1 >>> 8 ) & 0xff);
133 dest[di+6] = (byte)((iv1 >>> 16) & 0xff);
134 dest[di+7] = (byte)((iv1 >>> 24) & 0xff);
135 iv0 = d0;
136 iv1 = d1;
137 }
138 IV0 = iv0;
139 IV1 = iv1;
140 }
141
142 public void setKey(byte[] key) {
143 int i, c, d, t, s, shifts;
144
145 c = ((key[0] & 0xff) | ((key[1] & 0xff) << 8) |
146 ((key[2] & 0xff) << 16) | ((key[3] & 0xff) << 24));
147 d = ((key[4] & 0xff) | ((key[5] & 0xff) << 8) |
148 ((key[6] & 0xff) << 16) | ((key[7] & 0xff) << 24));
149
150 t = ((d >>> 4) ^ c) & 0x0f0f0f0f;
151 c ^= t;
152 d ^= t << 4;
153 t = (((c << (16 - (-2))) ^ c) & 0xcccc0000);
154 c = c ^ t ^ (t >>> (16 - (-2)));
155 t = (((d << (16 - (-2))) ^ d) & 0xcccc0000);
156 d = d ^ t ^ (t >>> (16 - (-2)));
157 t = ((d >>> 1) ^ c) & 0x55555555;
158 c ^= t;
159 d ^= t << 1;
160 t = ((c >>> 8) ^ d) & 0x00ff00ff;
161 d ^= t;
162 c ^= t << 8;
163 t = ((d >>> 1) ^ c) & 0x55555555;
164 c ^= t;
165 d ^= t << 1;
166
167 d = ((d & 0xff) << 16) | (d & 0xff00) |
168 ((d >>> 16) & 0xff) | ((c >>> 4) & 0xf000000);
169 c &= 0x0fffffff;
170 shifts = 0x7efc;
171
172 for(i = 0; i < 16; i++) {
173 if((shifts & 1) != 0) {
174 c = ((c >>> 2) | (c << 26));
175 d = ((d >>> 2) | (d << 26));
176 } else {
177 c = ((c >>> 1) | (c << 27));
178 d = ((d >>> 1) | (d << 27));
179 }
180 shifts >>>= 1;
181 c &= 0x0fffffff;
182 d &= 0x0fffffff;
183
184 s = des_skb[0][ (c) & 0x3f] |
185 des_skb[1][((c >>> 6 ) & 0x03)|((c >>> 7 ) & 0x3c)] |
186 des_skb[2][((c >>> 13) & 0x0f)|((c >>> 14) & 0x30)] |
187 des_skb[3][((c >>> 20) & 0x01)|((c >>> 21) & 0x06) | ((c >>> 22) & 0x38)];
188
189 t = des_skb[4][ (d) & 0x3f] |
190 des_skb[5][((d >>> 7 ) & 0x03) | ((d >>> 8 ) & 0x3c)] |
191 des_skb[6][ (d >>> 15) & 0x3f ] |
192 des_skb[7][((d >>> 21) & 0x0f) | ((d >>> 22) & 0x30)];
193
194 key_schedule[i * 2] = ((t << 16) | (s & 0xffff));
195 s = ((s >>> 16) | (t & 0xffff0000));
196 key_schedule[(i * 2) + 1] = (s << 4) | (s >>> 28);
197 }
198 }
199
200 public void encrypt(int l, int r, int[] out) {
201 int t = 0, u = 0, i;
202
203 t = ((r >>> 4) ^ l) & 0x0f0f0f0f;
204 l ^= t;
205 r ^= t << 4;
206 t = ((l >>> 16) ^ r) & 0x0000ffff;
207 r ^= t;
208 l ^= t << 16;
209 t = ((r >>> 2) ^ l) & 0x33333333;
210 l ^= t;
211 r ^= t << 2;
212 t = ((l >>> 8) ^ r) & 0x00ff00ff;
213 r ^= t;
214 l ^= t << 8;
215 t = ((r >>> 1) ^ l) & 0x55555555;
216 l ^= t;
217 r ^= t << 1;
218
219 t = (r << 1) | (r >>> 31);
220 r = (l << 1) | (l >>> 31);
221 l = t;
222
223 for (i = 0; i < 32; i += 4) {
224 u = r ^ key_schedule[i ];
225 t = r ^ key_schedule[i + 1];
226 t = ((t >>> 4) + (t << 28));
227 l ^=
228 (des_SPtrans[1][(t ) & 0x3f] | des_SPtrans[3][(t >>> 8 ) & 0x3f] |
229 des_SPtrans[5][(t >>> 16) & 0x3f] | des_SPtrans[7][(t >>> 24) & 0x3f] |
230 des_SPtrans[0][(u ) & 0x3f] | des_SPtrans[2][(u >>> 8 ) & 0x3f] |
231 des_SPtrans[4][(u >>> 16) & 0x3f] | des_SPtrans[6][(u >>> 24) & 0x3f]);
232
233 u = l ^ key_schedule[i + 2];
234 t = l ^ key_schedule[i + 3];
235 t = ((t >>> 4) + (t << 28));
236 r ^=
237 (des_SPtrans[1][(t ) & 0x3f] | des_SPtrans[3][(t >>> 8 ) & 0x3f] |
238 des_SPtrans[5][(t >>> 16) & 0x3f] | des_SPtrans[7][(t >>> 24) & 0x3f] |
239 des_SPtrans[0][(u ) & 0x3f] | des_SPtrans[2][(u >>> 8 ) & 0x3f] |
240 des_SPtrans[4][(u >>> 16) & 0x3f] | des_SPtrans[6][(u >>> 24) & 0x3f]);
241 }
242
243 l = (l >>> 1) | (l << 31);
244 r = (r >>> 1) | (r << 31);
245
246 t = ((r >>> 1) ^ l) & 0x55555555;
247 l ^= t;
248 r ^= t << 1;
249 t = ((l >>> 8) ^ r) & 0x00ff00ff;
250 r ^= t;
251 l ^= t << 8;
252 t = ((r >>> 2) ^ l) & 0x33333333;
253 l ^= t;
254 r ^= t << 2;
255 t = ((l >>> 16) ^ r) & 0x0000ffff;
256 r ^= t;
257 l ^= t << 16;
258 t = ((r >>> 4) ^ l) & 0x0f0f0f0f;
259 l ^= t;
260 r ^= t << 4;
261
262 out[0] = l;
263 out[1] = r;
264 }
265
266 public void decrypt(int l, int r, int[] out) {
267 int t, u, i;
268
269 t = ((r >>> 4) ^ l) & 0x0f0f0f0f;
270 l ^= t;
271 r ^= t << 4;
272 t = ((l >>> 16) ^ r) & 0x0000ffff;
273 r ^= t;
274 l ^= t << 16;
275 t = ((r >>> 2) ^ l) & 0x33333333;
276 l ^= t;
277 r ^= t << 2;
278 t = ((l >>> 8) ^ r) & 0x00ff00ff;
279 r ^= t;
280 l ^= t << 8;
281 t = ((r >>> 1) ^ l) & 0x55555555;
282 l ^= t;
283 r ^= t << 1;
284
285 t = (r << 1) | (r >>> 31);
286 r = (l << 1) | (l >>> 31);
287 l = t;
288
289 for (i = 30; i > 0; i -= 4) {
290 u = r ^ key_schedule[i ];
291 t = r ^ key_schedule[i + 1];
292 t = ((t >>> 4) + (t << 28));
293 l ^=
294 (des_SPtrans[1][(t ) & 0x3f] | des_SPtrans[3][(t >>> 8 ) & 0x3f] |
295 des_SPtrans[5][(t >>> 16) & 0x3f] | des_SPtrans[7][(t >>> 24) & 0x3f] |
296 des_SPtrans[0][(u ) & 0x3f] | des_SPtrans[2][(u >>> 8 ) & 0x3f] |
297 des_SPtrans[4][(u >>> 16) & 0x3f] | des_SPtrans[6][(u >>> 24) & 0x3f]);
298
299 u = l ^ key_schedule[i - 2];
300 t = l ^ key_schedule[i - 1];
301 t = ((t >>> 4) + (t << 28));
302 r ^=
303 (des_SPtrans[1][(t ) & 0x3f] | des_SPtrans[3][(t >>> 8 ) & 0x3f] |
304 des_SPtrans[5][(t >>> 16) & 0x3f] | des_SPtrans[7][(t >>> 24) & 0x3f] |
305 des_SPtrans[0][(u ) & 0x3f] | des_SPtrans[2][(u >>> 8 ) & 0x3f] |
306 des_SPtrans[4][(u >>> 16) & 0x3f] | des_SPtrans[6][(u >>> 24) & 0x3f]);
307 }
308
309 l = (l >>> 1) | (l << 31);
310 r = (r >>> 1) | (r << 31);
311
312 t = ((r >>> 1) ^ l) & 0x55555555;
313 l ^= t;
314 r ^= t << 1;
315 t = ((l >>> 8) ^ r) & 0x00ff00ff;
316 r ^= t;
317 l ^= t << 8;
318 t = ((r >>> 2) ^ l) & 0x33333333;
319 l ^= t;
320 r ^= t << 2;
321 t = ((l >>> 16) ^ r) & 0x0000ffff;
322 r ^= t;
323 l ^= t << 16;
324 t = ((r >>> 4) ^ l) & 0x0f0f0f0f;
325 l ^= t;
326 r ^= t << 4;
327
328 out[0] = l;
329 out[1] = r;
330 }
331
332 /* Table for key generation. This used to be in sk.h.
333 * Copyright (C) 1993 Eric Young - see README for more details
334 */
335 final static int des_skb[][] = {
336 /* for C bits (numbered as per FIPS 46) 1 2 3 4 5 6 */
337 { 0x00000000,0x00000010,0x20000000,0x20000010,
338 0x00010000,0x00010010,0x20010000,0x20010010,
339 0x00000800,0x00000810,0x20000800,0x20000810,
340 0x00010800,0x00010810,0x20010800,0x20010810,
341 0x00000020,0x00000030,0x20000020,0x20000030,
342 0x00010020,0x00010030,0x20010020,0x20010030,
343 0x00000820,0x00000830,0x20000820,0x20000830,
344 0x00010820,0x00010830,0x20010820,0x20010830,
345 0x00080000,0x00080010,0x20080000,0x20080010,
346 0x00090000,0x00090010,0x20090000,0x20090010,
347 0x00080800,0x00080810,0x20080800,0x20080810,
348 0x00090800,0x00090810,0x20090800,0x20090810,
349 0x00080020,0x00080030,0x20080020,0x20080030,
350 0x00090020,0x00090030,0x20090020,0x20090030,
351 0x00080820,0x00080830,0x20080820,0x20080830,
352 0x00090820,0x00090830,0x20090820,0x20090830 },
353 /* for C bits (numbered as per FIPS 46) 7 8 10 11 12 13 */
354 { 0x00000000,0x02000000,0x00002000,0x02002000,
355 0x00200000,0x02200000,0x00202000,0x02202000,
356 0x00000004,0x02000004,0x00002004,0x02002004,
357 0x00200004,0x02200004,0x00202004,0x02202004,
358 0x00000400,0x02000400,0x00002400,0x02002400,
359 0x00200400,0x02200400,0x00202400,0x02202400,
360 0x00000404,0x02000404,0x00002404,0x02002404,
361 0x00200404,0x02200404,0x00202404,0x02202404,
362 0x10000000,0x12000000,0x10002000,0x12002000,
363 0x10200000,0x12200000,0x10202000,0x12202000,
364 0x10000004,0x12000004,0x10002004,0x12002004,
365 0x10200004,0x12200004,0x10202004,0x12202004,
366 0x10000400,0x12000400,0x10002400,0x12002400,
367 0x10200400,0x12200400,0x10202400,0x12202400,
368 0x10000404,0x12000404,0x10002404,0x12002404,
369 0x10200404,0x12200404,0x10202404,0x12202404 },
370 /* for C bits (numbered as per FIPS 46) 14 15 16 17 19 20 */
371 { 0x00000000,0x00000001,0x00040000,0x00040001,
372 0x01000000,0x01000001,0x01040000,0x01040001,
373 0x00000002,0x00000003,0x00040002,0x00040003,
374 0x01000002,0x01000003,0x01040002,0x01040003,
375 0x00000200,0x00000201,0x00040200,0x00040201,
376 0x01000200,0x01000201,0x01040200,0x01040201,
377 0x00000202,0x00000203,0x00040202,0x00040203,
378 0x01000202,0x01000203,0x01040202,0x01040203,
379 0x08000000,0x08000001,0x08040000,0x08040001,
380 0x09000000,0x09000001,0x09040000,0x09040001,
381 0x08000002,0x08000003,0x08040002,0x08040003,
382 0x09000002,0x09000003,0x09040002,0x09040003,
383 0x08000200,0x08000201,0x08040200,0x08040201,
384 0x09000200,0x09000201,0x09040200,0x09040201,
385 0x08000202,0x08000203,0x08040202,0x08040203,
386 0x09000202,0x09000203,0x09040202,0x09040203 },
387 /* for C bits (numbered as per FIPS 46) 21 23 24 26 27 28 */
388 { 0x00000000,0x00100000,0x00000100,0x00100100,
389 0x00000008,0x00100008,0x00000108,0x00100108,
390 0x00001000,0x00101000,0x00001100,0x00101100,
391 0x00001008,0x00101008,0x00001108,0x00101108,
392 0x04000000,0x04100000,0x04000100,0x04100100,
393 0x04000008,0x04100008,0x04000108,0x04100108,
394 0x04001000,0x04101000,0x04001100,0x04101100,
395 0x04001008,0x04101008,0x04001108,0x04101108,
396 0x00020000,0x00120000,0x00020100,0x00120100,
397 0x00020008,0x00120008,0x00020108,0x00120108,
398 0x00021000,0x00121000,0x00021100,0x00121100,
399 0x00021008,0x00121008,0x00021108,0x00121108,
400 0x04020000,0x04120000,0x04020100,0x04120100,
401 0x04020008,0x04120008,0x04020108,0x04120108,
402 0x04021000,0x04121000,0x04021100,0x04121100,
403 0x04021008,0x04121008,0x04021108,0x04121108 },
404 /* for D bits (numbered as per FIPS 46) 1 2 3 4 5 6 */
405 { 0x00000000,0x10000000,0x00010000,0x10010000,
406 0x00000004,0x10000004,0x00010004,0x10010004,
407 0x20000000,0x30000000,0x20010000,0x30010000,
408 0x20000004,0x30000004,0x20010004,0x30010004,
409 0x00100000,0x10100000,0x00110000,0x10110000,
410 0x00100004,0x10100004,0x00110004,0x10110004,
411 0x20100000,0x30100000,0x20110000,0x30110000,
412 0x20100004,0x30100004,0x20110004,0x30110004,
413 0x00001000,0x10001000,0x00011000,0x10011000,
414 0x00001004,0x10001004,0x00011004,0x10011004,
415 0x20001000,0x30001000,0x20011000,0x30011000,
416 0x20001004,0x30001004,0x20011004,0x30011004,
417 0x00101000,0x10101000,0x00111000,0x10111000,
418 0x00101004,0x10101004,0x00111004,0x10111004,
419 0x20101000,0x30101000,0x20111000,0x30111000,
420 0x20101004,0x30101004,0x20111004,0x30111004 },
421 /* for D bits (numbered as per FIPS 46) 8 9 11 12 13 14 */
422 { 0x00000000,0x08000000,0x00000008,0x08000008,
423 0x00000400,0x08000400,0x00000408,0x08000408,
424 0x00020000,0x08020000,0x00020008,0x08020008,
425 0x00020400,0x08020400,0x00020408,0x08020408,
426 0x00000001,0x08000001,0x00000009,0x08000009,
427 0x00000401,0x08000401,0x00000409,0x08000409,
428 0x00020001,0x08020001,0x00020009,0x08020009,
429 0x00020401,0x08020401,0x00020409,0x08020409,
430 0x02000000,0x0A000000,0x02000008,0x0A000008,
431 0x02000400,0x0A000400,0x02000408,0x0A000408,
432 0x02020000,0x0A020000,0x02020008,0x0A020008,
433 0x02020400,0x0A020400,0x02020408,0x0A020408,
434 0x02000001,0x0A000001,0x02000009,0x0A000009,
435 0x02000401,0x0A000401,0x02000409,0x0A000409,
436 0x02020001,0x0A020001,0x02020009,0x0A020009,
437 0x02020401,0x0A020401,0x02020409,0x0A020409 },
438 /* for D bits (numbered as per FIPS 46) 16 17 18 19 20 21 */
439 { 0x00000000,0x00000100,0x00080000,0x00080100,
440 0x01000000,0x01000100,0x01080000,0x01080100,
441 0x00000010,0x00000110,0x00080010,0x00080110,
442 0x01000010,0x01000110,0x01080010,0x01080110,
443 0x00200000,0x00200100,0x00280000,0x00280100,
444 0x01200000,0x01200100,0x01280000,0x01280100,
445 0x00200010,0x00200110,0x00280010,0x00280110,
446 0x01200010,0x01200110,0x01280010,0x01280110,
447 0x00000200,0x00000300,0x00080200,0x00080300,
448 0x01000200,0x01000300,0x01080200,0x01080300,
449 0x00000210,0x00000310,0x00080210,0x00080310,
450 0x01000210,0x01000310,0x01080210,0x01080310,
451 0x00200200,0x00200300,0x00280200,0x00280300,
452 0x01200200,0x01200300,0x01280200,0x01280300,
453 0x00200210,0x00200310,0x00280210,0x00280310,
454 0x01200210,0x01200310,0x01280210,0x01280310 },
455 /* for D bits (numbered as per FIPS 46) 22 23 24 25 27 28 */
456 { 0x00000000,0x04000000,0x00040000,0x04040000,
457 0x00000002,0x04000002,0x00040002,0x04040002,
458 0x00002000,0x04002000,0x00042000,0x04042000,
459 0x00002002,0x04002002,0x00042002,0x04042002,
460 0x00000020,0x04000020,0x00040020,0x04040020,
461 0x00000022,0x04000022,0x00040022,0x04040022,
462 0x00002020,0x04002020,0x00042020,0x04042020,
463 0x00002022,0x04002022,0x00042022,0x04042022,
464 0x00000800,0x04000800,0x00040800,0x04040800,
465 0x00000802,0x04000802,0x00040802,0x04040802,
466 0x00002800,0x04002800,0x00042800,0x04042800,
467 0x00002802,0x04002802,0x00042802,0x04042802,
468 0x00000820,0x04000820,0x00040820,0x04040820,
469 0x00000822,0x04000822,0x00040822,0x04040822,
470 0x00002820,0x04002820,0x00042820,0x04042820,
471 0x00002822,0x04002822,0x00042822,0x04042822 }
472 };
473
474 /* Tables used for executing des. This used to be in spr.h.
475 * Copyright (C) 1993 Eric Young - see README for more details
476 */
477 final static int des_SPtrans[][] = {
478 /* nibble 0 */
479 { 0x00820200, 0x00020000, 0x80800000, 0x80820200,
480 0x00800000, 0x80020200, 0x80020000, 0x80800000,
481 0x80020200, 0x00820200, 0x00820000, 0x80000200,
482 0x80800200, 0x00800000, 0x00000000, 0x80020000,
483 0x00020000, 0x80000000, 0x00800200, 0x00020200,
484 0x80820200, 0x00820000, 0x80000200, 0x00800200,
485 0x80000000, 0x00000200, 0x00020200, 0x80820000,
486 0x00000200, 0x80800200, 0x80820000, 0x00000000,
487 0x00000000, 0x80820200, 0x00800200, 0x80020000,
488 0x00820200, 0x00020000, 0x80000200, 0x00800200,
489 0x80820000, 0x00000200, 0x00020200, 0x80800000,
490 0x80020200, 0x80000000, 0x80800000, 0x00820000,
491 0x80820200, 0x00020200, 0x00820000, 0x80800200,
492 0x00800000, 0x80000200, 0x80020000, 0x00000000,
493 0x00020000, 0x00800000, 0x80800200, 0x00820200,
494 0x80000000, 0x80820000, 0x00000200, 0x80020200 },
495
496 /* nibble 1 */
497 { 0x10042004, 0x00000000, 0x00042000, 0x10040000,
498 0x10000004, 0x00002004, 0x10002000, 0x00042000,
499 0x00002000, 0x10040004, 0x00000004, 0x10002000,
500 0x00040004, 0x10042000, 0x10040000, 0x00000004,
501 0x00040000, 0x10002004, 0x10040004, 0x00002000,
502 0x00042004, 0x10000000, 0x00000000, 0x00040004,
503 0x10002004, 0x00042004, 0x10042000, 0x10000004,
504 0x10000000, 0x00040000, 0x00002004, 0x10042004,
505 0x00040004, 0x10042000, 0x10002000, 0x00042004,
506 0x10042004, 0x00040004, 0x10000004, 0x00000000,
507 0x10000000, 0x00002004, 0x00040000, 0x10040004,
508 0x00002000, 0x10000000, 0x00042004, 0x10002004,
509 0x10042000, 0x00002000, 0x00000000, 0x10000004,
510 0x00000004, 0x10042004, 0x00042000, 0x10040000,
511 0x10040004, 0x00040000, 0x00002004, 0x10002000,
512 0x10002004, 0x00000004, 0x10040000, 0x00042000 },
513
514 /* nibble 2 */
515 { 0x41000000, 0x01010040, 0x00000040, 0x41000040,
516 0x40010000, 0x01000000, 0x41000040, 0x00010040,
517 0x01000040, 0x00010000, 0x01010000, 0x40000000,
518 0x41010040, 0x40000040, 0x40000000, 0x41010000,
519 0x00000000, 0x40010000, 0x01010040, 0x00000040,
520 0x40000040, 0x41010040, 0x00010000, 0x41000000,
521 0x41010000, 0x01000040, 0x40010040, 0x01010000,
522 0x00010040, 0x00000000, 0x01000000, 0x40010040,
523 0x01010040, 0x00000040, 0x40000000, 0x00010000,
524 0x40000040, 0x40010000, 0x01010000, 0x41000040,
525 0x00000000, 0x01010040, 0x00010040, 0x41010000,
526 0x40010000, 0x01000000, 0x41010040, 0x40000000,
527 0x40010040, 0x41000000, 0x01000000, 0x41010040,
528 0x00010000, 0x01000040, 0x41000040, 0x00010040,
529 0x01000040, 0x00000000, 0x41010000, 0x40000040,
530 0x41000000, 0x40010040, 0x00000040, 0x01010000 },
531
532 /* nibble 3 */
533 { 0x00100402, 0x04000400, 0x00000002, 0x04100402,
534 0x00000000, 0x04100000, 0x04000402, 0x00100002,
535 0x04100400, 0x04000002, 0x04000000, 0x00000402,
536 0x04000002, 0x00100402, 0x00100000, 0x04000000,
537 0x04100002, 0x00100400, 0x00000400, 0x00000002,
538 0x00100400, 0x04000402, 0x04100000, 0x00000400,
539 0x00000402, 0x00000000, 0x00100002, 0x04100400,
540 0x04000400, 0x04100002, 0x04100402, 0x00100000,
541 0x04100002, 0x00000402, 0x00100000, 0x04000002,
542 0x00100400, 0x04000400, 0x00000002, 0x04100000,
543 0x04000402, 0x00000000, 0x00000400, 0x00100002,
544 0x00000000, 0x04100002, 0x04100400, 0x00000400,
545 0x04000000, 0x04100402, 0x00100402, 0x00100000,
546 0x04100402, 0x00000002, 0x04000400, 0x00100402,
547 0x00100002, 0x00100400, 0x04100000, 0x04000402,
548 0x00000402, 0x04000000, 0x04000002, 0x04100400 },
549
550 /* nibble 4 */
551 { 0x02000000, 0x00004000, 0x00000100, 0x02004108,
552 0x02004008, 0x02000100, 0x00004108, 0x02004000,
553 0x00004000, 0x00000008, 0x02000008, 0x00004100,
554 0x02000108, 0x02004008, 0x02004100, 0x00000000,
555 0x00004100, 0x02000000, 0x00004008, 0x00000108,
556 0x02000100, 0x00004108, 0x00000000, 0x02000008,
557 0x00000008, 0x02000108, 0x02004108, 0x00004008,
558 0x02004000, 0x00000100, 0x00000108, 0x02004100,
559 0x02004100, 0x02000108, 0x00004008, 0x02004000,
560 0x00004000, 0x00000008, 0x02000008, 0x02000100,
561 0x02000000, 0x00004100, 0x02004108, 0x00000000,
562 0x00004108, 0x02000000, 0x00000100, 0x00004008,
563 0x02000108, 0x00000100, 0x00000000, 0x02004108,
564 0x02004008, 0x02004100, 0x00000108, 0x00004000,
565 0x00004100, 0x02004008, 0x02000100, 0x00000108,
566 0x00000008, 0x00004108, 0x02004000, 0x02000008 },
567
568 /* nibble 5 */
569 { 0x20000010, 0x00080010, 0x00000000, 0x20080800,
570 0x00080010, 0x00000800, 0x20000810, 0x00080000,
571 0x00000810, 0x20080810, 0x00080800, 0x20000000,
572 0x20000800, 0x20000010, 0x20080000, 0x00080810,
573 0x00080000, 0x20000810, 0x20080010, 0x00000000,
574 0x00000800, 0x00000010, 0x20080800, 0x20080010,
575 0x20080810, 0x20080000, 0x20000000, 0x00000810,
576 0x00000010, 0x00080800, 0x00080810, 0x20000800,
577 0x00000810, 0x20000000, 0x20000800, 0x00080810,
578 0x20080800, 0x00080010, 0x00000000, 0x20000800,
579 0x20000000, 0x00000800, 0x20080010, 0x00080000,
580 0x00080010, 0x20080810, 0x00080800, 0x00000010,
581 0x20080810, 0x00080800, 0x00080000, 0x20000810,
582 0x20000010, 0x20080000, 0x00080810, 0x00000000,
583 0x00000800, 0x20000010, 0x20000810, 0x20080800,
584 0x20080000, 0x00000810, 0x00000010, 0x20080010 },
585
586 /* nibble 6 */
587 { 0x00001000, 0x00000080, 0x00400080, 0x00400001,
588 0x00401081, 0x00001001, 0x00001080, 0x00000000,
589 0x00400000, 0x00400081, 0x00000081, 0x00401000,
590 0x00000001, 0x00401080, 0x00401000, 0x00000081,
591 0x00400081, 0x00001000, 0x00001001, 0x00401081,
592 0x00000000, 0x00400080, 0x00400001, 0x00001080,
593 0x00401001, 0x00001081, 0x00401080, 0x00000001,
594 0x00001081, 0x00401001, 0x00000080, 0x00400000,
595 0x00001081, 0x00401000, 0x00401001, 0x00000081,
596 0x00001000, 0x00000080, 0x00400000, 0x00401001,
597 0x00400081, 0x00001081, 0x00001080, 0x00000000,
598 0x00000080, 0x00400001, 0x00000001, 0x00400080,
599 0x00000000, 0x00400081, 0x00400080, 0x00001080,
600 0x00000081, 0x00001000, 0x00401081, 0x00400000,
601 0x00401080, 0x00000001, 0x00001001, 0x00401081,
602 0x00400001, 0x00401080, 0x00401000, 0x00001001 },
603
604 /* nibble 7 */
605 { 0x08200020, 0x08208000, 0x00008020, 0x00000000,
606 0x08008000, 0x00200020, 0x08200000, 0x08208020,
607 0x00000020, 0x08000000, 0x00208000, 0x00008020,
608 0x00208020, 0x08008020, 0x08000020, 0x08200000,
609 0x00008000, 0x00208020, 0x00200020, 0x08008000,
610 0x08208020, 0x08000020, 0x00000000, 0x00208000,
611 0x08000000, 0x00200000, 0x08008020, 0x08200020,
612 0x00200000, 0x00008000, 0x08208000, 0x00000020,
613 0x00200000, 0x00008000, 0x08000020, 0x08208020,
614 0x00008020, 0x08000000, 0x00000000, 0x00208000,
615 0x08200020, 0x08008020, 0x08008000, 0x00200020,
616 0x08208000, 0x00000020, 0x00200020, 0x08008000,
617 0x08208020, 0x00200000, 0x08200000, 0x08000020,
618 0x00208000, 0x00008020, 0x08008020, 0x08200000,
619 0x00000020, 0x08208000, 0x00208020, 0x00000000,
620 0x08000000, 0x08200020, 0x00008000, 0x00208020 }
621 };
622
623}
Note: See TracBrowser for help on using the repository browser.