5776628 [rkeene@sledge /home/rkeene/archive/floydssh/ssh]$ cat -n Blowfish.java
  1 /*
  2  * This file is part of "The Java Telnet Application".
  3  *
  4  * (c) Matthias L. Jugel, Marcus Meißner 1996-2002. All Rights Reserved.
  5  * The file was changed by Radek Polak to work as midlet in MIDP 1.0
  6  *
  7  * Please visit http://javatelnet.org/ for updates and contact.
  8  *
  9  * --LICENSE NOTICE--
 10  * This program is free software; you can redistribute it and/or
 11  * modify it under the terms of the GNU General Public License
 12  * as published by the Free Software Foundation; either version 2
 13  * of the License, or (at your option) any later version.
 14  *
 15  * This program is distributed in the hope that it will be useful,
 16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 18  * GNU General Public License for more details.
 19  *
 20  * You should have received a copy of the GNU General Public License
 21  * along with this program; if not, write to the Free Software
 22  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 23  * --LICENSE NOTICE--
 24  *
 25  *
 26  * This code is based on Bruce Schneiders code:
 27  * Bruce Schneier: Applied Cryptography 2nd ed., John Wiley & Sons, 1996
 28  */
 29 
 30 package ssh;
 31 
 32 
 33 /**
 34  * @author Marcus Meissner
 35  * @version $Id: Blowfish.java,v 1.2 2002/10/26 07:15:59 leo Exp $
 36  */
 37 public final class Blowfish extends Cipher {
 38 
 39   protected int[] S0 = new int[256];
 40   protected int[] S1 = new int[256];
 41   protected int[] S2 = new int[256];
 42   protected int[] S3 = new int[256];
 43   protected int[] P = new int[18];
 44 
 45   private int IV0;
 46   private int IV1;
 47 
 48   public Blowfish() {
 49   }
 50 
 51   // Set key of this Blowfish from a String
 52 
 53   public void setKey(String skey) {
 54     byte[] key = skey.getBytes();
 55     setKey(key);
 56   }
 57 
 58   // Set key of this Blowfish from a bytearray
 59 
 60   public void setKey(byte[] key) {
 61 
 62     int i, j, k, len = key.length;
 63     int temp;
 64     int L, R;
 65     int[] output = new int[2];
 66 
 67     System.arraycopy(blowfish_pbox, 0, P, 0, 18);
 68     System.arraycopy(blowfish_sbox, 0, S0, 0, 256);
 69     System.arraycopy(blowfish_sbox, 256, S1, 0, 256);
 70     System.arraycopy(blowfish_sbox, 512, S2, 0, 256);
 71     System.arraycopy(blowfish_sbox, 768, S3, 0, 256);
 72 
 73     // Actual subkey generation
 74     //
 75     for (j = 0, i = 0; i < 16 + 2; i++) {
 76       temp = (((key[j] & 0xff) << 24) |
 77         ((key[(j + 1) % len] & 0xff) << 16) |
 78         ((key[(j + 2) % len] & 0xff) << 8) |
 79         ((key[(j + 3) % len] & 0xff)));
 80       P[i] = P[i] ^ temp;
 81       j = (j + 4) % len;
 82     }
 83 
 84     L = 0;
 85     R = 0;
 86 
 87     for (i = 0; i < 16 + 2; i += 2) {
 88       encrypt(L, R, output);
 89       L = output[0];
 90       R = output[1];
 91       P[i] = L;
 92       P[i + 1] = R;
 93     }
 94 
 95     for (j = 0; j < 256; j += 2) {
 96       encrypt(L, R, output);
 97       L = output[0];
 98       R = output[1];
 99       S0[j] = L;
100       S0[j + 1] = R;
101     }
102     for (j = 0; j < 256; j += 2) {
103       encrypt(L, R, output);
104       L = output[0];
105       R = output[1];
106       S1[j] = L;
107       S1[j + 1] = R;
108     }
109     for (j = 0; j < 256; j += 2) {
110       encrypt(L, R, output);
111       L = output[0];
112       R = output[1];
113       S2[j] = L;
114       S2[j + 1] = R;
115     }
116     for (j = 0; j < 256; j += 2) {
117       encrypt(L, R, output);
118       L = output[0];
119       R = output[1];
120       S3[j] = L;
121       S3[j + 1] = R;
122     }
123 
124     IV0 = 0;
125     IV1 = 0;
126 
127   }
128 
129   public synchronized void encrypt(byte[] src, int srcOff, byte[] dest, int destOff, int len) {
130     int[] out = new int[2];
131     int iv0 = IV0;
132     int iv1 = IV1;
133     int end = srcOff + len;
134 
135     for (int si = srcOff, di = destOff; si < end; si += 8, di += 8) {
136       iv0 ^= ((src[si] & 0xff) | ((src[si + 1] & 0xff) << 8) |
137         ((src[si + 2] & 0xff) << 16) | ((src[si + 3] & 0xff) << 24));
138       iv1 ^= ((src[si + 4] & 0xff) | ((src[si + 5] & 0xff) << 8) |
139         ((src[si + 6] & 0xff) << 16) | ((src[si + 7] & 0xff) << 24));
140       encrypt(iv0, iv1, out);
141       iv0 = out[0];
142       iv1 = out[1];
143       dest[di] = (byte) (iv0 & 0xff);
144       dest[di + 1] = (byte) ((iv0 >>> 8) & 0xff);
145       dest[di + 2] = (byte) ((iv0 >>> 16) & 0xff);
146       dest[di + 3] = (byte) ((iv0 >>> 24) & 0xff);
147       dest[di + 4] = (byte) (iv1 & 0xff);
148       dest[di + 5] = (byte) ((iv1 >>> 8) & 0xff);
149       dest[di + 6] = (byte) ((iv1 >>> 16) & 0xff);
150       dest[di + 7] = (byte) ((iv1 >>> 24) & 0xff);
151     }
152     IV0 = iv0;
153     IV1 = iv1;
154   }
155 
156   public void encrypt(int xL, int xR, int[] out) {
157     int L, R;
158 
159     L = xL;
160     R = xR;
161 
162     L ^= P[0];
163     R ^= ((((S0[(int) ((L >>> 24) & 0xff)] + S1[(int) ((L >>> 16) & 0xff)]) ^
164       S2[(int) ((L >>> 8) & 0xff)]) + S3[(int) (L & 0xff)]) ^ P[1]);
165     L ^= ((((S0[(int) ((R >>> 24) & 0xff)] + S1[(int) ((R >>> 16) & 0xff)]) ^
166       S2[(int) ((R >>> 8) & 0xff)]) + S3[(int) (R & 0xff)]) ^ P[2]);
167     R ^= ((((S0[(int) ((L >>> 24) & 0xff)] + S1[(int) ((L >>> 16) & 0xff)]) ^
168       S2[(int) ((L >>> 8) & 0xff)]) + S3[(int) (L & 0xff)]) ^ P[3]);
169     L ^= ((((S0[(int) ((R >>> 24) & 0xff)] + S1[(int) ((R >>> 16) & 0xff)]) ^
170       S2[(int) ((R >>> 8) & 0xff)]) + S3[(int) (R & 0xff)]) ^ P[4]);
171     R ^= ((((S0[(int) ((L >>> 24) & 0xff)] + S1[(int) ((L >>> 16) & 0xff)]) ^
172       S2[(int) ((L >>> 8) & 0xff)]) + S3[(int) (L & 0xff)]) ^ P[5]);
173     L ^= ((((S0[(int) ((R >>> 24) & 0xff)] + S1[(int) ((R >>> 16) & 0xff)]) ^
174       S2[(int) ((R >>> 8) & 0xff)]) + S3[(int) (R & 0xff)]) ^ P[6]);
175     R ^= ((((S0[(int) ((L >>> 24) & 0xff)] + S1[(int) ((L >>> 16) & 0xff)]) ^
176       S2[(int) ((L >>> 8) & 0xff)]) + S3[(int) (L & 0xff)]) ^ P[7]);
177     L ^= ((((S0[(int) ((R >>> 24) & 0xff)] + S1[(int) ((R >>> 16) & 0xff)]) ^
178       S2[(int) ((R >>> 8) & 0xff)]) + S3[(int) (R & 0xff)]) ^ P[8]);
179     R ^= ((((S0[(int) ((L >>> 24) & 0xff)] + S1[(int) ((L >>> 16) & 0xff)]) ^
180       S2[(int) ((L >>> 8) & 0xff)]) + S3[(int) (L & 0xff)]) ^ P[9]);
181     L ^= ((((S0[(int) ((R >>> 24) & 0xff)] + S1[(int) ((R >>> 16) & 0xff)]) ^
182       S2[(int) ((R >>> 8) & 0xff)]) + S3[(int) (R & 0xff)]) ^ P[10]);
183     R ^= ((((S0[(int) ((L >>> 24) & 0xff)] + S1[(int) ((L >>> 16) & 0xff)]) ^
184       S2[(int) ((L >>> 8) & 0xff)]) + S3[(int) (L & 0xff)]) ^ P[11]);
185     L ^= ((((S0[(int) ((R >>> 24) & 0xff)] + S1[(int) ((R >>> 16) & 0xff)]) ^
186       S2[(int) ((R >>> 8) & 0xff)]) + S3[(int) (R & 0xff)]) ^ P[12]);
187     R ^= ((((S0[(int) ((L >>> 24) & 0xff)] + S1[(int) ((L >>> 16) & 0xff)]) ^
188       S2[(int) ((L >>> 8) & 0xff)]) + S3[(int) (L & 0xff)]) ^ P[13]);
189     L ^= ((((S0[(int) ((R >>> 24) & 0xff)] + S1[(int) ((R >>> 16) & 0xff)]) ^
190       S2[(int) ((R >>> 8) & 0xff)]) + S3[(int) (R & 0xff)]) ^ P[14]);
191     R ^= ((((S0[(int) ((L >>> 24) & 0xff)] + S1[(int) ((L >>> 16) & 0xff)]) ^
192       S2[(int) ((L >>> 8) & 0xff)]) + S3[(int) (L & 0xff)]) ^ P[15]);
193     L ^= ((((S0[(int) ((R >>> 24) & 0xff)] + S1[(int) ((R >>> 16) & 0xff)]) ^
194       S2[(int) ((R >>> 8) & 0xff)]) + S3[(int) (R & 0xff)]) ^ P[16]);
195     R ^= P[17];
196 
197     out[0] = R;
198     out[1] = L;
199   }
200 
201   public synchronized void decrypt(byte[] src, int srcOff, byte[] dest, int destOff, int len) {
202     int[] out = new int[2];
203     int iv0 = IV0;
204     int iv1 = IV1;
205     int d0;
206     int d1;
207     int end = srcOff + len;
208 
209     for (int si = srcOff, di = destOff; si < end; si += 8, di += 8) {
210       d0 = ((src[si] & 0xff) | ((src[si + 1] & 0xff) << 8) |
211         ((src[si + 2] & 0xff) << 16) | ((src[si + 3] & 0xff) << 24));
212       d1 = ((src[si + 4] & 0xff) | ((src[si + 5] & 0xff) << 8) |
213         ((src[si + 6] & 0xff) << 16) | ((src[si + 7] & 0xff) << 24));
214       decrypt(d0, d1, out);
215       iv0 ^= out[0];
216       iv1 ^= out[1];
217       dest[di] = (byte) (iv0 & 0xff);
218       dest[di + 1] = (byte) ((iv0 >>> 8) & 0xff);
219       dest[di + 2] = (byte) ((iv0 >>> 16) & 0xff);
220       dest[di + 3] = (byte) ((iv0 >>> 24) & 0xff);
221       dest[di + 4] = (byte) (iv1 & 0xff);
222       dest[di + 5] = (byte) ((iv1 >>> 8) & 0xff);
223       dest[di + 6] = (byte) ((iv1 >>> 16) & 0xff);
224       dest[di + 7] = (byte) ((iv1 >>> 24) & 0xff);
225       iv0 = d0;
226       iv1 = d1;
227     }
228     IV0 = iv0;
229     IV1 = iv1;
230   }
231 
232   public int[] decrypt(int xL, int xR, int[] out) {
233     int L, R;
234 
235     L = xL;
236     R = xR;
237 
238     L ^= P[17];
239     R ^= ((((S0[(int) ((L >>> 24) & 0xff)] + S1[(int) ((L >>> 16) & 0xff)]) ^
240       S2[(int) ((L >>> 8) & 0xff)]) + S3[(int) (L & 0xff)]) ^ P[16]);
241     L ^= ((((S0[(int) ((R >>> 24) & 0xff)] + S1[(int) ((R >>> 16) & 0xff)]) ^
242       S2[(int) ((R >>> 8) & 0xff)]) + S3[(int) (R & 0xff)]) ^ P[15]);
243     R ^= ((((S0[(int) ((L >>> 24) & 0xff)] + S1[(int) ((L >>> 16) & 0xff)]) ^
244       S2[(int) ((L >>> 8) & 0xff)]) + S3[(int) (L & 0xff)]) ^ P[14]);
245     L ^= ((((S0[(int) ((R >>> 24) & 0xff)] + S1[(int) ((R >>> 16) & 0xff)]) ^
246       S2[(int) ((R >>> 8) & 0xff)]) + S3[(int) (R & 0xff)]) ^ P[13]);
247     R ^= ((((S0[(int) ((L >>> 24) & 0xff)] + S1[(int) ((L >>> 16) & 0xff)]) ^
248       S2[(int) ((L >>> 8) & 0xff)]) + S3[(int) (L & 0xff)]) ^ P[12]);
249     L ^= ((((S0[(int) ((R >>> 24) & 0xff)] + S1[(int) ((R >>> 16) & 0xff)]) ^
250       S2[(int) ((R >>> 8) & 0xff)]) + S3[(int) (R & 0xff)]) ^ P[11]);
251     R ^= ((((S0[(int) ((L >>> 24) & 0xff)] + S1[(int) ((L >>> 16) & 0xff)]) ^
252       S2[(int) ((L >>> 8) & 0xff)]) + S3[(int) (L & 0xff)]) ^ P[10]);
253     L ^= ((((S0[(int) ((R >>> 24) & 0xff)] + S1[(int) ((R >>> 16) & 0xff)]) ^
254       S2[(int) ((R >>> 8) & 0xff)]) + S3[(int) (R & 0xff)]) ^ P[9]);
255     R ^= ((((S0[(int) ((L >>> 24) & 0xff)] + S1[(int) ((L >>> 16) & 0xff)]) ^
256       S2[(int) ((L >>> 8) & 0xff)]) + S3[(int) (L & 0xff)]) ^ P[8]);
257     L ^= ((((S0[(int) ((R >>> 24) & 0xff)] + S1[(int) ((R >>> 16) & 0xff)]) ^
258       S2[(int) ((R >>> 8) & 0xff)]) + S3[(int) (R & 0xff)]) ^ P[7]);
259     R ^= ((((S0[(int) ((L >>> 24) & 0xff)] + S1[(int) ((L >>> 16) & 0xff)]) ^
260       S2[(int) ((L >>> 8) & 0xff)]) + S3[(int) (L & 0xff)]) ^ P[6]);
261     L ^= ((((S0[(int) ((R >>> 24) & 0xff)] + S1[(int) ((R >>> 16) & 0xff)]) ^
262       S2[(int) ((R >>> 8) & 0xff)]) + S3[(int) (R & 0xff)]) ^ P[5]);
263     R ^= ((((S0[(int) ((L >>> 24) & 0xff)] + S1[(int) ((L >>> 16) & 0xff)]) ^
264       S2[(int) ((L >>> 8) & 0xff)]) + S3[(int) (L & 0xff)]) ^ P[4]);
265     L ^= ((((S0[(int) ((R >>> 24) & 0xff)] + S1[(int) ((R >>> 16) & 0xff)]) ^
266       S2[(int) ((R >>> 8) & 0xff)]) + S3[(int) (R & 0xff)]) ^ P[3]);
267     R ^= ((((S0[(int) ((L >>> 24) & 0xff)] + S1[(int) ((L >>> 16) & 0xff)]) ^
268       S2[(int) ((L >>> 8) & 0xff)]) + S3[(int) (L & 0xff)]) ^ P[2]);
269     L ^= ((((S0[(int) ((R >>> 24) & 0xff)] + S1[(int) ((R >>> 16) & 0xff)]) ^
270       S2[(int) ((R >>> 8) & 0xff)]) + S3[(int) (R & 0xff)]) ^ P[1]);
271     R ^= P[0];
272 
273     out[0] = R;
274     out[1] = L;
275 
276     return out;
277   }
278 
279 /* Blowfish's P and S -boxes, respectively. These were taken
280    from Bruce Schneier's public-domain implementation. */
281 
282   final static int[] blowfish_pbox =
283     {
284       0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344,
285       0xa4093822, 0x299f31d0, 0x082efa98, 0xec4e6c89,
286       0x452821e6, 0x38d01377, 0xbe5466cf, 0x34e90c6c,
287       0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5, 0xb5470917,
288       0x9216d5d9, 0x8979fb1b
289     };
290 
291   final static int[] blowfish_sbox =
292     {
293       0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7,
294       0xb8e1afed, 0x6a267e96, 0xba7c9045, 0xf12c7f99,
295       0x24a19947, 0xb3916cf7, 0x0801f2e2, 0x858efc16,
296       0x636920d8, 0x71574e69, 0xa458fea3, 0xf4933d7e,
297       0x0d95748f, 0x728eb658, 0x718bcd58, 0x82154aee,
298       0x7b54a41d, 0xc25a59b5, 0x9c30d539, 0x2af26013,
299       0xc5d1b023, 0x286085f0, 0xca417918, 0xb8db38ef,
300       0x8e79dcb0, 0x603a180e, 0x6c9e0e8b, 0xb01e8a3e,
301       0xd71577c1, 0xbd314b27, 0x78af2fda, 0x55605c60,
302       0xe65525f3, 0xaa55ab94, 0x57489862, 0x63e81440,
303       0x55ca396a, 0x2aab10b6, 0xb4cc5c34, 0x1141e8ce,
304       0xa15486af, 0x7c72e993, 0xb3ee1411, 0x636fbc2a,
305       0x2ba9c55d, 0x741831f6, 0xce5c3e16, 0x9b87931e,
306       0xafd6ba33, 0x6c24cf5c, 0x7a325381, 0x28958677,
307       0x3b8f4898, 0x6b4bb9af, 0xc4bfe81b, 0x66282193,
308       0x61d809cc, 0xfb21a991, 0x487cac60, 0x5dec8032,
309       0xef845d5d, 0xe98575b1, 0xdc262302, 0xeb651b88,
310       0x23893e81, 0xd396acc5, 0x0f6d6ff3, 0x83f44239,
311       0x2e0b4482, 0xa4842004, 0x69c8f04a, 0x9e1f9b5e,
312       0x21c66842, 0xf6e96c9a, 0x670c9c61, 0xabd388f0,
313       0x6a51a0d2, 0xd8542f68, 0x960fa728, 0xab5133a3,
314       0x6eef0b6c, 0x137a3be4, 0xba3bf050, 0x7efb2a98,
315       0xa1f1651d, 0x39af0176, 0x66ca593e, 0x82430e88,
316       0x8cee8619, 0x456f9fb4, 0x7d84a5c3, 0x3b8b5ebe,
317       0xe06f75d8, 0x85c12073, 0x401a449f, 0x56c16aa6,
318       0x4ed3aa62, 0x363f7706, 0x1bfedf72, 0x429b023d,
319       0x37d0d724, 0xd00a1248, 0xdb0fead3, 0x49f1c09b,
320       0x075372c9, 0x80991b7b, 0x25d479d8, 0xf6e8def7,
321       0xe3fe501a, 0xb6794c3b, 0x976ce0bd, 0x04c006ba,
322       0xc1a94fb6, 0x409f60c4, 0x5e5c9ec2, 0x196a2463,
323       0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, 0x3b52ec6f,
324       0x6dfc511f, 0x9b30952c, 0xcc814544, 0xaf5ebd09,
325       0xbee3d004, 0xde334afd, 0x660f2807, 0x192e4bb3,
326       0xc0cba857, 0x45c8740f, 0xd20b5f39, 0xb9d3fbdb,
327       0x5579c0bd, 0x1a60320a, 0xd6a100c6, 0x402c7279,
328       0x679f25fe, 0xfb1fa3cc, 0x8ea5e9f8, 0xdb3222f8,
329       0x3c7516df, 0xfd616b15, 0x2f501ec8, 0xad0552ab,
330       0x323db5fa, 0xfd238760, 0x53317b48, 0x3e00df82,
331       0x9e5c57bb, 0xca6f8ca0, 0x1a87562e, 0xdf1769db,
332       0xd542a8f6, 0x287effc3, 0xac6732c6, 0x8c4f5573,
333       0x695b27b0, 0xbbca58c8, 0xe1ffa35d, 0xb8f011a0,
334       0x10fa3d98, 0xfd2183b8, 0x4afcb56c, 0x2dd1d35b,
335       0x9a53e479, 0xb6f84565, 0xd28e49bc, 0x4bfb9790,
336       0xe1ddf2da, 0xa4cb7e33, 0x62fb1341, 0xcee4c6e8,
337       0xef20cada, 0x36774c01, 0xd07e9efe, 0x2bf11fb4,
338       0x95dbda4d, 0xae909198, 0xeaad8e71, 0x6b93d5a0,
339       0xd08ed1d0, 0xafc725e0, 0x8e3c5b2f, 0x8e7594b7,
340       0x8ff6e2fb, 0xf2122b64, 0x8888b812, 0x900df01c,
341       0x4fad5ea0, 0x688fc31c, 0xd1cff191, 0xb3a8c1ad,
342       0x2f2f2218, 0xbe0e1777, 0xea752dfe, 0x8b021fa1,
343       0xe5a0cc0f, 0xb56f74e8, 0x18acf3d6, 0xce89e299,
344       0xb4a84fe0, 0xfd13e0b7, 0x7cc43b81, 0xd2ada8d9,
345       0x165fa266, 0x80957705, 0x93cc7314, 0x211a1477,
346       0xe6ad2065, 0x77b5fa86, 0xc75442f5, 0xfb9d35cf,
347       0xebcdaf0c, 0x7b3e89a0, 0xd6411bd3, 0xae1e7e49,
348       0x00250e2d, 0x2071b35e, 0x226800bb, 0x57b8e0af,
349       0x2464369b, 0xf009b91e, 0x5563911d, 0x59dfa6aa,
350       0x78c14389, 0xd95a537f, 0x207d5ba2, 0x02e5b9c5,
351       0x83260376, 0x6295cfa9, 0x11c81968, 0x4e734a41,
352       0xb3472dca, 0x7b14a94a, 0x1b510052, 0x9a532915,
353       0xd60f573f, 0xbc9bc6e4, 0x2b60a476, 0x81e67400,
354       0x08ba6fb5, 0x571be91f, 0xf296ec6b, 0x2a0dd915,
355       0xb6636521, 0xe7b9f9b6, 0xff34052e, 0xc5855664,
356       0x53b02d5d, 0xa99f8fa1, 0x08ba4799, 0x6e85076a,
357       0x4b7a70e9, 0xb5b32944, 0xdb75092e, 0xc4192623,
358       0xad6ea6b0, 0x49a7df7d, 0x9cee60b8, 0x8fedb266,
359       0xecaa8c71, 0x699a17ff, 0x5664526c, 0xc2b19ee1,
360       0x193602a5, 0x75094c29, 0xa0591340, 0xe4183a3e,
361       0x3f54989a, 0x5b429d65, 0x6b8fe4d6, 0x99f73fd6,
362       0xa1d29c07, 0xefe830f5, 0x4d2d38e6, 0xf0255dc1,
363       0x4cdd2086, 0x8470eb26, 0x6382e9c6, 0x021ecc5e,
364       0x09686b3f, 0x3ebaefc9, 0x3c971814, 0x6b6a70a1,
365       0x687f3584, 0x52a0e286, 0xb79c5305, 0xaa500737,
366       0x3e07841c, 0x7fdeae5c, 0x8e7d44ec, 0x5716f2b8,
367       0xb03ada37, 0xf0500c0d, 0xf01c1f04, 0x0200b3ff,
368       0xae0cf51a, 0x3cb574b2, 0x25837a58, 0xdc0921bd,
369       0xd19113f9, 0x7ca92ff6, 0x94324773, 0x22f54701,
370       0x3ae5e581, 0x37c2dadc, 0xc8b57634, 0x9af3dda7,
371       0xa9446146, 0x0fd0030e, 0xecc8c73e, 0xa4751e41,
372       0xe238cd99, 0x3bea0e2f, 0x3280bba1, 0x183eb331,
373       0x4e548b38, 0x4f6db908, 0x6f420d03, 0xf60a04bf,
374       0x2cb81290, 0x24977c79, 0x5679b072, 0xbcaf89af,
375       0xde9a771f, 0xd9930810, 0xb38bae12, 0xdccf3f2e,
376       0x5512721f, 0x2e6b7124, 0x501adde6, 0x9f84cd87,
377       0x7a584718, 0x7408da17, 0xbc9f9abc, 0xe94b7d8c,
378       0xec7aec3a, 0xdb851dfa, 0x63094366, 0xc464c3d2,
379       0xef1c1847, 0x3215d908, 0xdd433b37, 0x24c2ba16,
380       0x12a14d43, 0x2a65c451, 0x50940002, 0x133ae4dd,
381       0x71dff89e, 0x10314e55, 0x81ac77d6, 0x5f11199b,
382       0x043556f1, 0xd7a3c76b, 0x3c11183b, 0x5924a509,
383       0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c, 0x1e153c6e,
384       0x86e34570, 0xeae96fb1, 0x860e5e0a, 0x5a3e2ab3,
385       0x771fe71c, 0x4e3d06fa, 0x2965dcb9, 0x99e71d0f,
386       0x803e89d6, 0x5266c825, 0x2e4cc978, 0x9c10b36a,
387       0xc6150eba, 0x94e2ea78, 0xa5fc3c53, 0x1e0a2df4,
388       0xf2f74ea7, 0x361d2b3d, 0x1939260f, 0x19c27960,
389       0x5223a708, 0xf71312b6, 0xebadfe6e, 0xeac31f66,
390       0xe3bc4595, 0xa67bc883, 0xb17f37d1, 0x018cff28,
391       0xc332ddef, 0xbe6c5aa5, 0x65582185, 0x68ab9802,
392       0xeecea50f, 0xdb2f953b, 0x2aef7dad, 0x5b6e2f84,
393       0x1521b628, 0x29076170, 0xecdd4775, 0x619f1510,
394       0x13cca830, 0xeb61bd96, 0x0334fe1e, 0xaa0363cf,
395       0xb5735c90, 0x4c70a239, 0xd59e9e0b, 0xcbaade14,
396       0xeecc86bc, 0x60622ca7, 0x9cab5cab, 0xb2f3846e,
397       0x648b1eaf, 0x19bdf0ca, 0xa02369b9, 0x655abb50,
398       0x40685a32, 0x3c2ab4b3, 0x319ee9d5, 0xc021b8f7,
399       0x9b540b19, 0x875fa099, 0x95f7997e, 0x623d7da8,
400       0xf837889a, 0x97e32d77, 0x11ed935f, 0x16681281,
401       0x0e358829, 0xc7e61fd6, 0x96dedfa1, 0x7858ba99,
402       0x57f584a5, 0x1b227263, 0x9b83c3ff, 0x1ac24696,
403       0xcdb30aeb, 0x532e3054, 0x8fd948e4, 0x6dbc3128,
404       0x58ebf2ef, 0x34c6ffea, 0xfe28ed61, 0xee7c3c73,
405       0x5d4a14d9, 0xe864b7e3, 0x42105d14, 0x203e13e0,
406       0x45eee2b6, 0xa3aaabea, 0xdb6c4f15, 0xfacb4fd0,
407       0xc742f442, 0xef6abbb5, 0x654f3b1d, 0x41cd2105,
408       0xd81e799e, 0x86854dc7, 0xe44b476a, 0x3d816250,
409       0xcf62a1f2, 0x5b8d2646, 0xfc8883a0, 0xc1c7b6a3,
410       0x7f1524c3, 0x69cb7492, 0x47848a0b, 0x5692b285,
411       0x095bbf00, 0xad19489d, 0x1462b174, 0x23820e00,
412       0x58428d2a, 0x0c55f5ea, 0x1dadf43e, 0x233f7061,
413       0x3372f092, 0x8d937e41, 0xd65fecf1, 0x6c223bdb,
414       0x7cde3759, 0xcbee7460, 0x4085f2a7, 0xce77326e,
415       0xa6078084, 0x19f8509e, 0xe8efd855, 0x61d99735,
416       0xa969a7aa, 0xc50c06c2, 0x5a04abfc, 0x800bcadc,
417       0x9e447a2e, 0xc3453484, 0xfdd56705, 0x0e1e9ec9,
418       0xdb73dbd3, 0x105588cd, 0x675fda79, 0xe3674340,
419       0xc5c43465, 0x713e38d8, 0x3d28f89e, 0xf16dff20,
420       0x153e21e7, 0x8fb03d4a, 0xe6e39f2b, 0xdb83adf7,
421       0xe93d5a68, 0x948140f7, 0xf64c261c, 0x94692934,
422       0x411520f7, 0x7602d4f7, 0xbcf46b2e, 0xd4a20068,
423       0xd4082471, 0x3320f46a, 0x43b7d4b7, 0x500061af,
424       0x1e39f62e, 0x97244546, 0x14214f74, 0xbf8b8840,
425       0x4d95fc1d, 0x96b591af, 0x70f4ddd3, 0x66a02f45,
426       0xbfbc09ec, 0x03bd9785, 0x7fac6dd0, 0x31cb8504,
427       0x96eb27b3, 0x55fd3941, 0xda2547e6, 0xabca0a9a,
428       0x28507825, 0x530429f4, 0x0a2c86da, 0xe9b66dfb,
429       0x68dc1462, 0xd7486900, 0x680ec0a4, 0x27a18dee,
430       0x4f3ffea2, 0xe887ad8c, 0xb58ce006, 0x7af4d6b6,
431       0xaace1e7c, 0xd3375fec, 0xce78a399, 0x406b2a42,
432       0x20fe9e35, 0xd9f385b9, 0xee39d7ab, 0x3b124e8b,
433       0x1dc9faf7, 0x4b6d1856, 0x26a36631, 0xeae397b2,
434       0x3a6efa74, 0xdd5b4332, 0x6841e7f7, 0xca7820fb,
435       0xfb0af54e, 0xd8feb397, 0x454056ac, 0xba489527,
436       0x55533a3a, 0x20838d87, 0xfe6ba9b7, 0xd096954b,
437       0x55a867bc, 0xa1159a58, 0xcca92963, 0x99e1db33,
438       0xa62a4a56, 0x3f3125f9, 0x5ef47e1c, 0x9029317c,
439       0xfdf8e802, 0x04272f70, 0x80bb155c, 0x05282ce3,
440       0x95c11548, 0xe4c66d22, 0x48c1133f, 0xc70f86dc,
441       0x07f9c9ee, 0x41041f0f, 0x404779a4, 0x5d886e17,
442       0x325f51eb, 0xd59bc0d1, 0xf2bcc18f, 0x41113564,
443       0x257b7834, 0x602a9c60, 0xdff8e8a3, 0x1f636c1b,
444       0x0e12b4c2, 0x02e1329e, 0xaf664fd1, 0xcad18115,
445       0x6b2395e0, 0x333e92e1, 0x3b240b62, 0xeebeb922,
446       0x85b2a20e, 0xe6ba0d99, 0xde720c8c, 0x2da2f728,
447       0xd0127845, 0x95b794fd, 0x647d0862, 0xe7ccf5f0,
448       0x5449a36f, 0x877d48fa, 0xc39dfd27, 0xf33e8d1e,
449       0x0a476341, 0x992eff74, 0x3a6f6eab, 0xf4f8fd37,
450       0xa812dc60, 0xa1ebddf8, 0x991be14c, 0xdb6e6b0d,
451       0xc67b5510, 0x6d672c37, 0x2765d43b, 0xdcd0e804,
452       0xf1290dc7, 0xcc00ffa3, 0xb5390f92, 0x690fed0b,
453       0x667b9ffb, 0xcedb7d9c, 0xa091cf0b, 0xd9155ea3,
454       0xbb132f88, 0x515bad24, 0x7b9479bf, 0x763bd6eb,
455       0x37392eb3, 0xcc115979, 0x8026e297, 0xf42e312d,
456       0x6842ada7, 0xc66a2b3b, 0x12754ccc, 0x782ef11c,
457       0x6a124237, 0xb79251e7, 0x06a1bbe6, 0x4bfb6350,
458       0x1a6b1018, 0x11caedfa, 0x3d25bdd8, 0xe2e1c3c9,
459       0x44421659, 0x0a121386, 0xd90cec6e, 0xd5abea2a,
460       0x64af674e, 0xda86a85f, 0xbebfe988, 0x64e4c3fe,
461       0x9dbc8057, 0xf0f7c086, 0x60787bf8, 0x6003604d,
462       0xd1fd8346, 0xf6381fb0, 0x7745ae04, 0xd736fccc,
463       0x83426b33, 0xf01eab71, 0xb0804187, 0x3c005e5f,
464       0x77a057be, 0xbde8ae24, 0x55464299, 0xbf582e61,
465       0x4e58f48f, 0xf2ddfda2, 0xf474ef38, 0x8789bdc2,
466       0x5366f9c3, 0xc8b38e74, 0xb475f255, 0x46fcd9b9,
467       0x7aeb2661, 0x8b1ddf84, 0x846a0e79, 0x915f95e2,
468       0x466e598e, 0x20b45770, 0x8cd55591, 0xc902de4c,
469       0xb90bace1, 0xbb8205d0, 0x11a86248, 0x7574a99e,
470       0xb77f19b6, 0xe0a9dc09, 0x662d09a1, 0xc4324633,
471       0xe85a1f02, 0x09f0be8c, 0x4a99a025, 0x1d6efe10,
472       0x1ab93d1d, 0x0ba5a4df, 0xa186f20f, 0x2868f169,
473       0xdcb7da83, 0x573906fe, 0xa1e2ce9b, 0x4fcd7f52,
474       0x50115e01, 0xa70683fa, 0xa002b5c4, 0x0de6d027,
475       0x9af88c27, 0x773f8641, 0xc3604c06, 0x61a806b5,
476       0xf0177a28, 0xc0f586e0, 0x006058aa, 0x30dc7d62,
477       0x11e69ed7, 0x2338ea63, 0x53c2dd94, 0xc2c21634,
478       0xbbcbee56, 0x90bcb6de, 0xebfc7da1, 0xce591d76,
479       0x6f05e409, 0x4b7c0188, 0x39720a3d, 0x7c927c24,
480       0x86e3725f, 0x724d9db9, 0x1ac15bb4, 0xd39eb8fc,
481       0xed545578, 0x08fca5b5, 0xd83d7cd3, 0x4dad0fc4,
482       0x1e50ef5e, 0xb161e6f8, 0xa28514d9, 0x6c51133c,
483       0x6fd5c7e7, 0x56e14ec4, 0x362abfce, 0xddc6c837,
484       0xd79a3234, 0x92638212, 0x670efa8e, 0x406000e0,
485       0x3a39ce37, 0xd3faf5cf, 0xabc27737, 0x5ac52d1b,
486       0x5cb0679e, 0x4fa33742, 0xd3822740, 0x99bc9bbe,
487       0xd5118e9d, 0xbf0f7315, 0xd62d1c7e, 0xc700c47b,
488       0xb78c1b6b, 0x21a19045, 0xb26eb1be, 0x6a366eb4,
489       0x5748ab2f, 0xbc946e79, 0xc6a376d2, 0x6549c2c8,
490       0x530ff8ee, 0x468dde7d, 0xd5730a1d, 0x4cd04dc6,
491       0x2939bbdb, 0xa9ba4650, 0xac9526e8, 0xbe5ee304,
492       0xa1fad5f0, 0x6a2d519a, 0x63ef8ce2, 0x9a86ee22,
493       0xc089c2b8, 0x43242ef6, 0xa51e03aa, 0x9cf2d0a4,
494       0x83c061ba, 0x9be96a4d, 0x8fe51550, 0xba645bd6,
495       0x2826a2f9, 0xa73a3ae1, 0x4ba99586, 0xef5562e9,
496       0xc72fefd3, 0xf752f7da, 0x3f046f69, 0x77fa0a59,
497       0x80e4a915, 0x87b08601, 0x9b09e6ad, 0x3b3ee593,
498       0xe990fd5a, 0x9e34d797, 0x2cf0b7d9, 0x022b8b51,
499       0x96d5ac3a, 0x017da67d, 0xd1cf3ed6, 0x7c7d2d28,
500       0x1f9f25cf, 0xadf2b89b, 0x5ad6b472, 0x5a88f54c,
501       0xe029ac71, 0xe019a5e6, 0x47b0acfd, 0xed93fa9b,
502       0xe8d3c48d, 0x283b57cc, 0xf8d56629, 0x79132e28,
503       0x785f0191, 0xed756055, 0xf7960e44, 0xe3d35e8c,
504       0x15056dd4, 0x88f46dba, 0x03a16125, 0x0564f0bd,
505       0xc3eb9e15, 0x3c9057a2, 0x97271aec, 0xa93a072a,
506       0x1b3f6d9b, 0x1e6321f5, 0xf59c66fb, 0x26dcf319,
507       0x7533d928, 0xb155fdf5, 0x03563482, 0x8aba3cbb,
508       0x28517711, 0xc20ad9f8, 0xabcc5167, 0xccad925f,
509       0x4de81751, 0x3830dc8e, 0x379d5862, 0x9320f991,
510       0xea7a90c2, 0xfb3e7bce, 0x5121ce64, 0x774fbe32,
511       0xa8b6e37e, 0xc3293d46, 0x48de5369, 0x6413e680,
512       0xa2ae0810, 0xdd6db224, 0x69852dfd, 0x09072166,
513       0xb39a460a, 0x6445c0dd, 0x586cdecf, 0x1c20c8ae,
514       0x5bbef7dd, 0x1b588d40, 0xccd2017f, 0x6bb4e3bb,
515       0xdda26a7e, 0x3a59ff45, 0x3e350a44, 0xbcb4cdd5,
516       0x72eacea8, 0xfa6484bb, 0x8d6612ae, 0xbf3c6f47,
517       0xd29be463, 0x542f5d9e, 0xaec2771b, 0xf64e6370,
518       0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d,
519       0x4040cb08, 0x4eb4e2cc, 0x34d2466a, 0x0115af84,
520       0xe1b00428, 0x95983a1d, 0x06b89fb4, 0xce6ea048,
521       0x6f3f3b82, 0x3520ab82, 0x011a1d4b, 0x277227f8,
522       0x611560b1, 0xe7933fdc, 0xbb3a792b, 0x344525bd,
523       0xa08839e1, 0x51ce794b, 0x2f32c9b7, 0xa01fbac9,
524       0xe01cc87e, 0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7,
525       0x1a908749, 0xd44fbd9a, 0xd0dadecb, 0xd50ada38,
526       0x0339c32a, 0xc6913667, 0x8df9317c, 0xe0b12b4f,
527       0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c,
528       0xbf97222c, 0x15e6fc2a, 0x0f91fc71, 0x9b941525,
529       0xfae59361, 0xceb69ceb, 0xc2a86459, 0x12baa8d1,
530       0xb6c1075e, 0xe3056a0c, 0x10d25065, 0xcb03a442,
531       0xe0ec6e0e, 0x1698db3b, 0x4c98a0be, 0x3278e964,
532       0x9f1f9532, 0xe0d392df, 0xd3a0342b, 0x8971f21e,
533       0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8,
534       0xdf359f8d, 0x9b992f2e, 0xe60b6f47, 0x0fe3f11d,
535       0xe54cda54, 0x1edad891, 0xce6279cf, 0xcd3e7e6f,
536       0x1618b166, 0xfd2c1d05, 0x848fd2c5, 0xf6fb2299,
537       0xf523f357, 0xa6327623, 0x93a83531, 0x56cccd02,
538       0xacf08162, 0x5a75ebb5, 0x6e163697, 0x88d273cc,
539       0xde966292, 0x81b949d0, 0x4c50901b, 0x71c65614,
540       0xe6c6c7bd, 0x327a140a, 0x45e1d006, 0xc3f27b9a,
541       0xc9aa53fd, 0x62a80f00, 0xbb25bfe2, 0x35bdd2f6,
542       0x71126905, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b,
543       0x53113ec0, 0x1640e3d3, 0x38abbd60, 0x2547adf0,
544       0xba38209c, 0xf746ce76, 0x77afa1c5, 0x20756060,
545       0x85cbfe4e, 0x8ae88dd8, 0x7aaaf9b0, 0x4cf9aa7e,
546       0x1948c25c, 0x02fb8a8c, 0x01c36ae4, 0xd6ebe1f9,
547       0x90d4f869, 0xa65cdea0, 0x3f09252d, 0xc208e69f,
548       0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6
549     };
550 
551   /* !!! DEBUG
552   public static void main(String[] argv) {
553     byte[] key = {
554       (byte)0xd3, (byte)0x96, (byte)0xcf, (byte)0x07, (byte)0xfa, (byte)0xa2, (byte)0x64,
555       (byte)0xfe, (byte)0xf3, (byte)0xa2, (byte)0x06, (byte)0x07, (byte)0x1a, (byte)0xb6,
556       (byte)0x13, (byte)0xf6, (byte)0x06, (byte)0x18, (byte)0xf6, (byte)0xcc, (byte)0x32,
557       (byte)0xd9, (byte)0xbb, (byte)0x56, (byte)0x5b, (byte)0xa6, (byte)0xa1, (byte)0x72,
558       (byte)0x28, (byte)0xb3, (byte)0xec, (byte)0x64 };
559 
560     byte[] txt = {
561       (byte)0x2e, (byte)0xbe, (byte)0xc5, (byte)0xac, (byte)0x02, (byte)0xa1, (byte)0xd5,
562       (byte)0x7f, (byte)0x01, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x1f, (byte)0x43,
563       (byte)0x6f, (byte)0x72, (byte)0x72, (byte)0x75, (byte)0x70, (byte)0x74, (byte)0x65,
564       (byte)0x64, (byte)0x20, (byte)0x63, (byte)0x68, (byte)0x65, (byte)0x63, (byte)0x6b,
565       (byte)0x20, (byte)0x62, (byte)0x79, (byte)0x74, (byte)0x65, (byte)0x73, (byte)0x20,
566       (byte)0x6f, (byte)0x6e, (byte)0x20, (byte)0x69, (byte)0x6e, (byte)0x70, (byte)0x75,
567       (byte)0x74, (byte)0x2e, (byte)0x91, (byte)0x9a, (byte)0x57, (byte)0xdd
568     };
569      ENC: b5 44 c6 69 9b e7 d7 3d 45 25 0d 8b b3 5a 28 f5 98 eb 3e ea a3 27 e3 ac 64 de fc b7 f5 49 c6 3f 31 5c ce 99 79
	b5 3b a9 cc 44 67 f0 46 a3 7e ed
570 
571     byte[] txt = {
572       (byte)0x00, (byte)0x11, (byte)0x22, (byte)0x33, (byte)0x44, (byte)0x55, (byte)0x66,
573       (byte)0x77 };
574 
575     byte[] enc;
576     byte[] dec;
577 
578     System.out.println("key: " + printHex(key));
579     System.out.println("txt: " + printHex(txt));
580 
581     Blowfish cipher = new Blowfish();
582     cipher.setKey(key);
583 
584     enc = cipher.encrypt(txt);
585     System.out.println("enc: " + printHex(enc));
586 
587     cipher = new Blowfish();
588     cipher.setKey(key);
589     dec = cipher.decrypt(enc);
590 
591     System.out.println("dec: " + printHex(dec));
592   }
593 
594   static String printHex(byte[] buf) {
595     byte[] out = new byte[buf.length + 1];
596     out[0] = 0;
597     System.arraycopy(buf, 0, out, 1, buf.length);
598     BigInteger big = new BigInteger(out);
599     return big.toString(16);
600   }
601 
602   */
603 
604 }
5776629 [rkeene@sledge /home/rkeene/archive/floydssh/ssh]$

Click here to go back to the directory listing.
Click here to download this file.
last modified: 2004-03-06 22:44:06